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

YOLOv7训练时CUDA unknown error问题求助(WSL环境)

解决WSL Ubuntu中YOLOv7训练时的CUDA unknown error问题

问题概述

在Windows 10 WSL的Ubuntu系统中,按NVIDIA WSL CUDA指南配置环境后,训练YOLOv7自定义模型时出现RuntimeError: CUDA error: unknown error。

环境信息

  • 硬件:16GB内存、RTX 3070
  • Python版本:3.8.10
  • 驱动版本:517.48
  • PyTorch版本:1.10.0a0+3fd9dcf,torchvision版本:0.11.0a0
  • CUDA版本:11.4
  • Docker启动命令:
    sudo docker run --name yolov7 --gpus all -it -v "/mnt/c/coco/":"/coco/" -v "/mnt/c/yolov7/":"/yolov7/" --shm-size=16gb nvcr.io/nvidia/pytorch:21.08-py3
    

已尝试方案

  • 重启电脑
  • 安装nvidia-modprobe

检测情况

Torch检测CUDA正常:

>>> import torch
>>> print(torch.cuda.current_device())
0
>>> torch.rand(1)
tensor([0.3052])

nvidia-smi显示GPU状态正常,但执行以下训练命令时报错:

python train.py --workers 1 --device 0 --batch-size 2 --data data/coco.yaml --img-size 1920 --cfg cfg/training/yolov7.yaml --weights 'yolov7_training.pt' --name yolov7 --hyp data/hyp.scratch.custom.yaml

报错堆栈

Traceback (most recent call last):
  File "train.py", line 616, in <module>
    train(hyp, opt, device, tb_writer)
  File "train.py", line 361, in train
    pred = model(imgs)  # forward
  File "/opt/conda/lib/python3.8/site-packages/torch/nn/modules/module.py", line 1056, in _call_impl
    return forward_call(*input, **kwargs)
  File "/yolov7/models/yolo.py", line 599, in forward
    return self.forward_once(x, profile)  # single-scale inference, train
  File "/yolov7/models/yolo.py", line 625, in forward_once
    x = m(x)  # run
  File "/opt/conda/lib/python3.8/site-packages/torch/nn/modules/module.py", line 1056, in _call_impl
    return forward_call(*input, **kwargs)
  File "/yolov7/models/common.py", line 108, in forward
    return self.act(self.bn(self.conv(x)))
  File "/opt/conda/lib/python3.8/site-packages/torch/nn/modules/module.py", line 1056, in _call_impl
    return forward_call(*input, **kwargs)
  File "/opt/conda/lib/python3.8/site-packages/torch/nn/modules/activation.py", line 395, in forward
    return F.silu(input, inplace=self.inplace)
  File "/opt/conda/lib/python3.8/site-packages/torch/nn/functional.py", line 1901, in silu
    return torch._C._nn.silu(input)
RuntimeError: CUDA error: unknown error
CUDA kernel errors might be asynchronously reported at some other API call,so the stacktrace below might be incorrect.
For debugging consider passing CUDA_LAUNCH_BLOCKING=1.

解决方案

1. 启用CUDA同步调试定位真实错误

添加环境变量强制CUDA同步执行,获取精准错误堆栈:

CUDA_LAUNCH_BLOCKING=1 python train.py --workers 1 --device 0 --batch-size 2 --data data/coco.yaml --img-size 1920 --cfg cfg/training/yolov7.yaml --weights 'yolov7_training.pt' --name yolov7 --hyp data/hyp.scratch.custom.yaml

执行后会输出更准确的错误位置,便于排查核心问题。

2. 降低图像尺寸与批次大小

当前img-size=1920和batch-size=2可能导致显存/内存溢出(WSL环境下显存分配存在限制),先调整参数测试:

python train.py --workers 1 --device 0 --batch-size 1 --data data/coco.yaml --img-size 1280 --cfg cfg/training/yolov7.yaml --weights 'yolov7_training.pt' --name yolov7 --hyp data/hyp.scratch.custom.yaml

若能正常运行,再逐步调回合适的尺寸和批次。

3. 更新PyTorch至稳定版

当前使用的PyTorch预览版可能存在WSL兼容性问题,更换为与CUDA 11.4兼容的稳定版:

pip uninstall torch torchvision -y
pip install torch==1.12.1+cu113 torchvision==0.13.1+cu113 --extra-index-url https://download.pytorch.org/whl/cu113

(注:CUDA 11.4可兼容CUDA 11.3的PyTorch包,若需严格匹配CUDA11.4,可选择对应版本)

4. 配置WSL2显存分配

在Windows用户目录下创建或编辑.wslconfig文件,限制WSL显存占用:

[wsl2]
memory=12GB
gpuMemory=6GB

保存后重启WSL:wsl --shutdown,再重新启动Ubuntu。

5. 验证容器内CUDA兼容性

执行以下命令检查容器内CUDA与驱动的匹配情况:

nvidia-smi
nvcc --version

确保驱动版本(517.48)支持当前CUDA版本(11.4)。

内容的提问来源于stack exchange,提问作者Austin Ulfers

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 12:10:36