码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 【mmopenlab系列使用DP模式进行单机多卡训练】windows下命令行和linux下面的 .sh 文件使用一文解决 | 商汤科技


    目录

    前言

    DP模式的命令行命令使用以及环境变量分析

    原dist_train.sh文件的分析:

    相关环境变量分析:

    config配置文件预配置:

    Windows DP 启动命令:

    Linux DP 启动命令:(使用sh文件)

    参考

    (2条消息) PyTorch多卡/多GPU/分布式DPP的基本概念(node&rank&local_rank&nnodes&node_rank&nproc_per_node&world_size)_hxxjxw的博客-CSDN博客_nproc_per_nodehttps://blog.csdn.net/hxxjxw/article/details/119606518?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522166022262716782248521003%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=166022262716782248521003&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-1-119606518-null-null.142^v40^control,185^v2^control&utm_term=node_rank&spm=1018.2226.3001.4187训练一个模型 — MMSegmentation 0.27.0 文档https://mmsegmentation.readthedocs.io/zh_CN/latest/train.html


    前言

    普通的单机单卡训练模式难以解决模型训练速度过慢的问题,对此mmopenlab的代码文档提供了针对DP和DDP的 .sh 文件。

     其中,dist_train.sh 对应的是DP模式的单机多卡训练方式;slurm_train.sh 对应的是DDP模式的多机多卡训练方式。

    注:这里本文只看了单机多卡训练模式。 


    DP模式的命令行命令使用以及环境变量分析

    原dist_train.sh文件的分析:

    1. CONFIG=$1 # 需要传输的第一个参数,即配置文件的路径
    2. GPUS=$2 # 需要传输的第二个参数,即要使用的GPU格式个数
    3. NNODES=${NNODES:-1} # 所有的结点数(这里默认的是1,即只使用一个结点,即单机)
    4. NODE_RANK=${NODE_RANK:-0} # 结点编号(因为编号是从0开始,而且只有一个结点,所以这里是0)
    5. PORT=${PORT:-29500}
    6. MASTER_ADDR=${MASTER_ADDR:-"127.0.0.1"}
    7. PYTHONPATH="$(dirname $0)/..":$PYTHONPATH \
    8. python -m torch.distributed.launch \
    9. --nnodes=$NNODES \
    10. --node_rank=$NODE_RANK \
    11. --master_addr=$MASTER_ADDR \
    12. --nproc_per_node=$GPUS \
    13. --master_port=$PORT \
    14. $(dirname "$0")/train.py \
    15. $CONFIG \
    16. --launcher pytorch ${@:3} # 使用的环境,这里使用pytorch

    相关环境变量分析:

    RANK: 用于表示进程的序号,用于进程间通信,泛指一个进程。

    LOCAL_RANK:  在一台机器上面的进程编号。(每个机器都从0开始)

    NODE: 结点。也指一个服务器。 

    NNODES: 所有的结点总数。 

     NODE_RANK:每个结点对应的序号,例如:0或1或2。

     NPROC_PER_NODE: 每个结点开启的进程数。

    WORLD_SIZE: 全局结点数 = NPROC_PER_NODE x NNODES 

    config配置文件预配置:

    注意这两点即可,其他的均不用调整: 

    1.这里是每个gpu的,不是所有gpu的,故不需要是gpu数量的倍数。

    2.调整iters。使用多gpu之后都要减小iters(在单卡训练的基础上)。

    Windows DP 启动命令:

    这里是我的启动命令: 

    1. python3 -m torch.distributed.launch --nproc_per_node 3 --node_rank 0 --nnodes 1 tools/train.py test_120k_3gpu/deeplabv3_r50-d8_512x512_4x4_160k_coco-stuff164k.py --gpu-id 2 --launcher pyt
    2. orch

    与单卡训练的不同之处:

    需要指定--nproc_per_node --node_rank --nnodes --launcher 参数(注意他们的位置!!!位置不能随意放置)

    注:

    如果报错:subprocess.CalledProcessError: Command '[xxx,xxx,xxx]' returned non
    -zero exit status 1.

    请往前看,这个不是最终报错,具体报错原因还在前面。

    Linux DP 启动命令:(使用sh文件)

    注:

    1.使用  sh 文件之前需要编译一下,不然会报: -bash: ./tools/dist_train.sh: Permission denied

    chmod 777 ./tools/dist_train.sh

    2.如果报错: tools/dist_train.sh: line 8: python: command not found

    这是因为sh文件的启动命令默认的是python,可以改成自己的,比如python2、python3即可。

    这里是我的启动命令: 

    1. sh tools/dist_train.sh test_120k_3gpu/deeplabv3_r50-d8_512x512_4x4_160k_coco-stuff164k.py 3 --work-dir test_120k_3gpu/
    2. # 其中:只需要传config路径和gpus数量即可,其他参数可选

    参考

    (2条消息) PyTorch多卡/多GPU/分布式DPP的基本概念(node&rank&local_rank&nnodes&node_rank&nproc_per_node&world_size)_hxxjxw的博客-CSDN博客_nproc_per_nodeicon-default.png?t=M666https://blog.csdn.net/hxxjxw/article/details/119606518?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522166022262716782248521003%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=166022262716782248521003&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-1-119606518-null-null.142^v40^control,185^v2^control&utm_term=node_rank&spm=1018.2226.3001.4187
    训练一个模型 — MMSegmentation 0.27.0 文档icon-default.png?t=M666https://mmsegmentation.readthedocs.io/zh_CN/latest/train.html


    sh 基础语法_tealex的博客-CSDN博客_sh语法icon-default.png?t=M666https://blog.csdn.net/tealex/article/details/69397776?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522166022463116781818773396%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=166022463116781818773396&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-1-69397776-null-null.142^v40^control,185^v2^control&utm_term=sh%E8%AF%AD%E6%B3%95&spm=1018.2226.3001.4187

    -bash: ./tools/dist_train.sh: Permission denied_taxuewuhenxiaoer的博客-CSDN博客icon-default.png?t=M666https://blog.csdn.net/weixin_44790486/article/details/121889408 

  • 相关阅读:
    k8s-9 ingress-nginx 特性
    基于滤波反投影的图像重建算法matlab仿真,R-L滤波和S-L滤波
    UART通信
    关于CSDN编程竞赛第五期
    最近公共祖先 LCA
    JAVA calendar
    electron 左上角图标 dev(开发环境)可显示 build(打包)后无法显示
    MySQL1——喵喵期末不挂科
    LeetCode每日一题(1233. Remove Sub-Folders from the Filesystem)
    对笔记本电池的研究
  • 原文地址:https://blog.csdn.net/m0_61139217/article/details/126294575
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号