配置CUDA用于windows下yolo训练
换了一台windows,买了3060显卡,打算用这个卡试试训练,毕竟纯cpu训练太慢了。下面记录一下步骤。
先打开nvidia控制面板,点击右下角任务栏上能看到。再点击左下角的系统信息-组件,检查下支持的cuda版本。(要注意先检查pytorch官网里提示的能支持的cuda的最大版本,我下面就装错了版本,最后发现pytorch最大支持cuda11.8,因此还得重新下载安装一次,忽略下面图里的12.0版本号)
再到cuda官网选择合适的版本下载:https://developer.nvidia.com/cuda-toolkit-archive
下载完成后先解压,然后安装。安装完成后打开命令行输入nvcc -V, 能看到信息就行。
然后再下载cudnn:https://developer.nvidia.com/zh-cn/cudnn,需要注册登录。
下载后解压,分别有bin / include / lib 3个文件夹,把3个文件夹里的文件(dll, h)等文件分别复制到cuda对应的目录里,cuda路径在环境变量里能看到,比如是C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.0
然后把lib和include都加入环境变量path中,其中bin和libnvp都已经存在了。
此时需要卸载之前装的torch和torchvision,装上支持cuda的版本,包还相当大:
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
现在开始重新运行一次train命令,比如
python train.py --img 512 --batch 16 --epochs 500 --data 'D:\training\data.yaml' --cfg ./models/custom_yolov5s.yaml --weights './runs/train/resultse14/weights/best.pt' --name resultse --cache
如果出现错误提示"OSError: [WinError 1455] 页面文件太小,无法完成操作”的问题,可以通过我的电脑-属性-高级系统设置-高级-性能-设置-高级(程序)-更改-将对应的盘的虚拟内存设置一下(原先为无),然后再次运行即可。有时候设置10240还运行不了,但是设置到102400则可以,看起来GPU训练对内存是有相当的需求的,即使换了显卡,但内存不够,也是运行不好。16G内存几乎吃光,看来至少32G才够用,毕竟还要运行其他程序。
如果还有错误提示:"RuntimeError: result type Float can't be cast to the desired output type __int64", 则需要更改一点yolov5中utils/loss.py的两个语句。
一个是将180多行的'anchors = self.anchors[i]'换成'anchors, shape = self.anchors[i], p[i].shape', 还要把200来行的'indices.append((b, a, gj.clamp_(0, gain[3] - 1), gi.clamp_(0, gain[2] - 1)))'换成'indices.append((b, a, gj.clamp_(0, shape[2] - 1), gi.clamp_(0, shape[3] - 1)))'
然后便能看到训练的日志,明显区别就是cpu训练一轮至少几分钟的,在用gpu时只需要几秒钟就完成了。