当前位置: 首页 > news >正文

PyTorch中DistributedDataParallel 使用笔记

1. 为何使用DistributedDataParallel

在PyTorch中的多GPU训练一般有2种DataParallel和DistributedDataParallel,DataParallel是最简单的的单机多卡实现,但是它使用多线程模型,并不能够在多机多卡的环境下使用,所以本文将介绍DistributedDataParallel,DDP 基于使用多进程而不是使用多线程的DP,并且存在GIL争用问题,并且可以扩充到多机多卡的环境,所以它是分布式多GPU训练的首选。

2. 基本概念

在使用DistributedDataParallel时有一些概率必须掌握

多机多卡含义
world_size代表有几台机器,可以理解为几台服务器
rank第几台机器,即第几个服务器
local_rank某台机器中的第几块GPU
单机多卡含义
world_size代表机器一共有几块GPU
rank第几块GPU
local_rank第几块GPU,与rank相同

3. 使用方法

3.1. 修改主函数

在运行的时候,DistributedDataParallel会往你的程序中加入一个参数local_rank,所以要现在你的代码中解析这个参数,如:

parser.add_argument("--local_rank", type=int, default=1, help="number of cpu threads to use during batch generation")

3.2. 初始化

torch.distributed.init_process_group(backend="nccl") os.environ["CUDA_VISIBLE_DEVICES"] = "0, 1, 2" # 有几块GPU写多少

3.3. 设定device

local_rank = torch.distributed.get_rank() torch.cuda.set_device(local_rank) global device device = torch.device("cuda", local_rank)

我没用arg.local_rank,新定义了一个local_rank变量,是因为我更信任distributed.get_rank()这个函数

这里用torch.device来写,并且加了global,是因为后面模型和数据都要用到这个device,不会出错

3.4. 模型加载到多gpu

model.to(device) # 这句不能少,最好不要用model.cuda() model = torch.nn.parallel.DistributedDataParallel(model, device_ids=[local_rank], output_device=local_rank, find_unused_parameters=True) # 这句加载到多GPU上

3.5. 数据加载到gpu

数据.to(device)

3.6. 启动

torchrun --nproc_per_node=4 --rdzv_endpoint=localhost:12345 train_cylinder_asym.py

参考文献

Pytorch并行计算(二): DistributedDataParallel介绍_dist.barrier_harry_tea的博客-CSDN博客

DistributedDataParallel多GPU分布式训练全过程总结 跟着做90%成功_BRiAq的博客-CSDN博客

百度安全验证

http://www.jsqmd.com/news/651236/

相关文章:

  • 如何批量下载微博相册图片:高效保存公开照片的实用方法
  • 别再死记公式了!用Python+SymPy从零推导两连杆机械臂动力学方程(保姆级教程)
  • 来京就医别盲目!这份就诊准备指南帮你少走冤枉路 - 品牌排行榜单
  • 告别捆绑软件!用官方原版镜像重装Windows 11/10的完整避坑指南
  • 超维USV-M1000无人船测绘实战:手把手搞定元生RTK、元厚测深仪与QGC地面站联调
  • 远程写代码看似轻松自由,颈椎病腰间盘突出却趁虚而入,程序员专属防护攻略请收好。
  • 解决Buildroot系统中qmake编译QT时Unknown module(s) in QT: charts的两种实用方法
  • Beyond Compare 5激活密钥生成器:三步获取永久授权
  • 芋道yudao-cloud里的那些‘黑科技’:从数据权限到分布式锁,一次讲透它的核心实现
  • Qt/C++国标GB28181组件全栈解析:从设备接入到视频分发的实战指南
  • 深入Linux UIO:从设备树节点到read/write,图解用户空间中断响应机制
  • 用iPhone远程控制Android手机:Scrcpy-iOS无线投屏完全指南
  • 通宵上线别只拼项目进度,颈椎病腰间盘突出正在拖垮你!成因症状与科学诊疗指南。
  • 显卡驱动彻底清理指南:DDU工具完全解析与使用教程
  • LabVIEW波形图表清屏实现
  • 技术解析-深入理解mount命令:挂载磁盘的原理与实践
  • 深入解析Chip Thermal Model(CTM)在3DIC设计中的关键作用
  • Flowable7.x实战指南:Vue3集成bpmn-js属性面板与Camunda扩展
  • 解决Windows DLL缺失难题:Visual C++运行库AIO一站式解决方案
  • 如何用MagicOnion构建企业级聊天室系统:完整架构与实现指南
  • 路由器双频合一怎么选?手把手教你根据户型(大平层/多隔断)设置2.4G和5G WiFi
  • Verilog基础:$fopen和$fclose系统函数、任务的使用
  • 鸿蒙游戏 UI 怎么设计才不乱?
  • RepDistiller核心原理深度解析:对比表示蒸馏(CRD)如何超越传统方法
  • 从天气预报接口到RESTful API测试:手把手用C# HttpClient造一个‘万能’HTTP调试工具
  • 7.【UPF】UPF Power Shutoff(UPF电源关断)
  • 别再死记硬背公式了!用Python的PuLP库手把手教你推导线性规划对偶问题
  • 去标签化无感定位技术突破,黎阳之光重构空间定位技术路径
  • 从构建到编译:CMake、Make、MinGW、Clang、LLVM、GCC、MSVC的生态位与协作全景
  • Tmux:终端复用器的基本使用(三)