【code】多GPU多卡并行如何操作

本文详细解析了PyTorch中实现多GPU并行训练的正确方法,包括如何初始化模型和优化器,以及在多GPU环境下进行参数更新的具体步骤。同时,介绍了主GPU的设定方式和torch.cuda模块的高级用法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最初以为多卡并行仅仅只是一句把模型model以及optimize放在nn.DataParallel上就可以完成:

import torch.nn as nn

【1.返回模型】

self.bert_model = nn.DataParallel(self.bert_model, device_ids=args.gpu_ids, output_device=torch.cuda.current_device())

或【2.返回计算结果】

nn.parallel.data_parallel(module, inputs, device_ids=args.gpu_ids, output_device=torch.cuda.current_device(), dim=0, module_kwargs=None)

但并非是这样。如果单单使用这行命令会发现原本正确的程序开始报错。

正确的使用方法为:

model:

model = nn.DataParallel(model, device_ids=args.bert_gpu_ids) #, output_device=torch.cuda.current_device())

optimizer:

optimizer = torch.optim.Adam([param for _, param in param_optimizer],lr=args.lr)

optimizer = nn.DataParallel(optimizer, device_ids=args.bert_gpu_ids) #, output_device=torch.cuda.current_device())

for param_group in optimizer.module.param_groups:
    param_group['lr'] = cur_lr 

optimizer.module.step() 

 

 

NOTE :

  1. 主 GPU 默认情况下是 0 号 GPU,也可以通过 torch.cuda.set_device(id) 来手动更改默认 GPU。
  2. 提供的多 GPU 并行列表中需要包含有主 GPU。
  3. torch.cuda.set_device(args.device):设置当前设备。官网不鼓励使用此函数来设置。在大多数情况下,最好使用CUDA_VISIBLE_DEVICES环境变量。
     

 

https://pytorch-cn.readthedocs.io/zh/latest/package_references/torch-cuda/

eg:
os.environ['CUDA_VISIBLE_DEVICES'] = "5,6,7"

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

 

参考博客:https://blog.youkuaiyun.com/qq_19598705/article/details/80396325

 

### 服务器 PCI 报错解决方案 当服务器在训练过程中发生显现象,并伴随 `Unable to determine the device handle for GPU` 的错误提示时,可能涉及硬件、驱动以及软件配置等个层面的问题。以下是针对该问题的具体分析与解决方法: #### 1. **检查 NVIDIA 驱动日志** 通过运行 `sudo nvidia-bug-report.sh` 命令收集详细的日志文件[^1]。此工具会生成一份全面的日志报告,其中包含了驱动版本、GPU状态以及其他潜在的异常信息。重点检查以下内容: - 是否存在未安装或不兼容的驱动版本。 - 日志中是否有其他硬件相关的警告。 如果发现驱动版本过旧或者不匹配当前操作系统环境,则需更新至最新稳定版NVIDIA驱动程序。 #### 2. **验证 PCIe 总线健康状况** PCIe链路不稳定可能是导致此类问题的主要原因之一。可以通过以下方式诊断: - 使用 `lspci -v` 查看所有设备及其连接情况,确认每张显对应的PCI插槽编号及带宽支持能力。 - 如果怀疑某条通道存在问题,尝试重新分配资源或将某些高负载任务转移到不同的物理路径上去执行。 此外,在大规模并行计算场景下(如深度学习框架中的节点协同工作),还需要特别关注互连网络的质量——尤其是对于依赖于InfiniBand技术构建起来的高性能计算(HPC)集群而言更是如此[^3]。例如,按照特定流程定位到那些频繁触发告警信号的交换机端口之后再进一步深入调查其背后隐藏的原因所在。 #### 3. **优化 Caffe 并行策略** 考虑到实际应用环境中所使用的具体深度学习框架特性也会影响整体稳定性表现。比如提到过的Caffe虽然具备基本形式上的GPU支持功能但是效率低下而且缺乏足够的灵活性来应对复杂现实需求;因此建议考虑替换更为现代化替代品的同时也要注意调整相应的超参设置以适应新的架构特点[^2]。 最后附上一段简单的Python脚本用于监控整个过程期间各组件的工作状态以便及时发现问题苗头: ```python import os import time def monitor_gpu(): while True: result = os.popen('nvidia-smi').read() print(result) time.sleep(5) if __name__ == "__main__": try: monitor_gpu() except KeyboardInterrupt: pass ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值