当前位置:   article > 正文

【深度学习 pytorch yolov 单机多卡的训练命令方式和注意事项_单机多卡yolov5训练

单机多卡yolov5训练
python -m torch.distributed.launch --nproc_per_node=3  train.py --weights yolov5m.pt --img 640 --epoch 150  --data jm_fire_16.yaml --batch-size 36 --workers 16 --save-period 20
  • 1

–save-period 20 有的版本是 --save_period 20
此时的batch-size 要能被3整除,否则会报错。
–nproc_per_node = 3 启动三张卡,还能设置具体用那一张卡,若单单使用这个参数,需要机器有几张卡,用几张卡,控制需要几张用几张的话,要用下面的设置方式

此时有一个问题, 若机器只有三张卡,那么一次性分配三张作为训练不会有问题。但是若有多于三张,只想用三张训练,其它卡用作他用,那么,分配的这三张是那三张呢,或者通过怎样的参数来指定的?

看参考这样可以:

  1. 改变系统变量使得仅目标显卡可见
    export CUDA_VISIBLE_DEVICES=0 #这里是要使用的GPU编号,正常的话是从0开始
    在程序开头设置os.environ[“CUDA_VISIBLE_DEVICES”] = ‘0,1,2,3’
    CUDA_VISIBLE_DEVICES=0,1,2,3 python xxx.py来设置该程序可见的gpu
  2. 使用torch.cuda接口
    在生成网络对象之前执行:torch.cuda.set_device(0)
  3. 使用pytorch的并行GPU接口
    net = torch.nn.DataParallel(model, device_ids=[0])
    具体说来就是定义cuda的可见设备,然后将用于并行训练的传递进去。
    修改yolov的 train方法

178
179     # DP mode
180     if cuda and rank == -1 and torch.cuda.device_count() > 1:
181         model = torch.nn.DataParallel(model)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

把device_count 传递进去即可

model = torch.nn.DataParallel(model,device_ids=[0,1,2])
  • 1

这样只用前三张,也可以用 1,2,3 把第一张流出来供其它程序使用

docker服务遇到的问题,发现docker的推理服务起不来了,报错
docker: Error response from daemon: OCI runtime create failed: container_li
重启容器服务,起不来
重启docker 服务,启动容易仍然报错

nividia-smi -l 少了一张卡, 之前在其它服务器上遇到过这个问题,都是通过重启服服务器解决的。
重启服务器后好使了。

参考指引:
https://pytorch.org/docs/stable/distributed.html?highlight=torch+distributed+launch#module-torch.distributed.launch

https://blog.csdn.net/qq_27009517/article/details/111624855?utm_medium=distribute.pc_relevant.none-task-blog-2defaultbaidujs_baidulandingword~default-0-111624855-blog-124482896.pc_relevant_multi_platform_whitelistv3&spm=1001.2101.3001.4242.1&utm_relevant_index=2

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/167782
推荐阅读
相关标签
  

闽ICP备14008679号