You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WSL下VSCode中PyTorch DataLoader设置num_workers>0时的CUDA初始化错误

PyTorch DataLoader num_workers>0 触发CUDA初始化错误

问题现象

  • 设置 num_workers=0 时,DataLoader运行正常:
    test_loader = DataLoader(test_dataset, batch_size=32, shuffle=False, num_workers=0)
    
  • 设置 num_workers≥1 时,抛出错误:
    RuntimeError: CUDA error: initialization error
    

数据集为MNIST,按50%/50%划分训练集与测试集。

环境配置

硬件

  • GPU:NVIDIA GeForce RTX 3060 Ti(显存8191.50MB)
  • CPU:物理核心12,逻辑核心24
  • 内存:总15.44GB,可用12.71GB

软件

  • 操作系统:Linux(WSL环境下的VS Code,OS版本#1 SMP Fri Mar 29 23:14:13 UTC 2024)
  • Python版本:3.11.4
  • PyTorch:2.0.1+cu118(检测到1块GPU)
  • TensorFlow:2.14.0(检测到1块GPU)、Keras 2.14.0

解决建议

  1. 配置WSL环境变量
    在WSL终端添加以下环境变量,避免子进程CUDA初始化冲突:
export CUDA_VISIBLE_DEVICES=0
export PYTHONFAULTHANDLER=1

可将上述内容添加到~/.bashrc或~/.zshrc中,确保每次启动WSL自动生效。

  1. 调整DataLoader参数
  • 启用pin_memory=True,帮助子进程高效将数据传输到GPU:
    test_loader = DataLoader(test_dataset, batch_size=32, shuffle=False, num_workers=1, pin_memory=True)
    
  • 控制num_workers数量:建议设置为CPU逻辑核心数的一半以内(比如≤12),减少资源竞争。
  1. 规范CUDA上下文初始化时机
    避免在主线程创建DataLoader前提前初始化CUDA上下文(例如不要提前调用torch.cuda.device()或把张量移到GPU),让worker进程自行完成CUDA初始化。

  2. 更新WSL与显卡驱动

  • 将Windows端NVIDIA显卡驱动更新至最新版本,确保WSL2的GPU支持正常。
  • 在Windows终端运行wsl --update,更新WSL内核,修复可能的GPU交互底层问题。
  1. 隔离PyTorch与TensorFlow环境
    当前环境同时安装了PyTorch和TensorFlow,两者可能在CUDA上下文管理上存在冲突。建议创建独立虚拟环境分别运行两个框架的项目,避免资源抢占。

内容的提问来源于stack exchange,提问作者Kalin Stoyanov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 10:17:22