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


    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

  • 相关阅读:
    #include<>和#include“”的区别
    Matlab论文插图绘制模板第61期—横向多组堆叠图
    小白学Java
    《CUDA编程:基础与实践》读书笔记(1):CUDA编程基础
    致编辑,将语雀文档迁移到csdn
    curl命令的那些事
    C++之va_start、vasprintf、va_end应用总结(二百二十六)
    在线手写汉字
    什么是原生IP?原生IP与住宅IP有何区别?
    sourTree提交代码遇到问题解决办法
  • 原文地址:https://blog.csdn.net/weixin_40293999/article/details/127782051