torch分布式数据并行:torch.nn.parallel.DistributedDataParallel(DDP),代码书写步骤

这篇具有很好参考价值的文章主要介绍了torch分布式数据并行:torch.nn.parallel.DistributedDataParallel(DDP),代码书写步骤。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

多进程做多卡训练;

目录

1 初始化进程组:

2 当前进程所能用到的GPU卡的名称

3 将数据集随机分配到不同的GPU上

4 将train_sampler传入DataLoader中

5 将数据进行拷贝

6 模型放到GPU上

7 执行命令

8 模型保存

9 加载模型

10 注意事项


代码编写流程:

1 初始化进程组:

torch.distributed.init_process_group('nccl',worldsize=n_gpus,rank=args.local_rank)

‘nccl’ 指定GPU之间的通信方式;

world_size:当前这个节点上要用多少GPU卡;(当前节点就是当前机器)

rank: 当前进程在哪个GPU卡上,通过args.local_rank来获取,local_rank变量是通过外部指令传入的;(也可以通过环境变量来接收)

2 当前进程所能用到的GPU卡的名称

torch.cuda.set_device(args.local_rank)

上述指令作用相当于设置CUDA_VISBLE_DEVICES环境变量;

设置当前进程要用第几张卡;

3 将数据集随机分配到不同的GPU上

train_sampler = DistributedSampler(train_sampler)

该函数源码位于torch/utils/data/distributed.py

(返回一堆数据的索引,拿这些数据索引去dataloader中拿数据)

默认是Shuffle;

在每个epoch开始处,调用train_sampler.set_epoch(epoch),使得数据充分打乱;

4 将train_sampler传入DataLoader中

train_dataloader = DataLoader(train_dataset,batch_size = BATCH_SIZE,collate_fn = collate_fn, sampler = train_sampler)

当DataLoader接受了一个自定义的sampler后,这就不用再传入shuffle=True了,这是互斥的。

5 将数据进行拷贝

data = data.cuda(args.local_rank)

当前节点上第几张卡

6 模型放到GPU上

model = DistributedDataParallel(model.cuda(args.local_rank),device_ids=[args.local_rank])

7 执行命令

python -m torch.distributed.launch --nproc_per_node=n_gpus train.py

-m torch.distributed.launch 这个命令会构建多个进程,构建进程的数目通过 nproc_pre_node即每个设备的GPU数量来设置

launch这个程序会向每个train.py传入local_rank(0——n_gous-1)

8 模型保存

torch.save()在local_rank=0 这个GPU上保存,调用model.module.state_dict()来保存模型参数

例如

if step % save_step_interval == 0 and local_rank == 0:
    torch.save({
        'epoch': epoch_index,
        "step": step,
        "model_state_dict": model.module.state_dict(),
        "optimizer_state_dict": opyimizer.state_dict(),
        "loss": bce_loss
        },save_file)

9 加载模型

torch.load(file, map_location),指定一下map_location(即传到哪个设备上)

10 注意事项

每个进程的batch size应该是一个GPU所需要的batch size

查看gpu数量指令:

torch.cuda.device_count()

在每个epoch前记着传入:

train_sampler.set_epoch(epoch)

为了让每张卡在每个周期中得到的数据是随机的。

参考:33、完整讲解PyTorch多GPU分布式训练代码编写_哔哩哔哩_bilibili文章来源地址https://www.toymoban.com/news/detail-614999.html

到了这里,关于torch分布式数据并行:torch.nn.parallel.DistributedDataParallel(DDP),代码书写步骤的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • torch分布式通信基础

    官网文档:WRITING DISTRIBUTED APPLICATIONS WITH PYTORCH 需要注意的一点是: 这里面的调用都是同步的,可以理解为,每个进程都调用到通信api时,真正的有效数据传输才开始,然后通信完成之后,代码继续往下跑。实际上有些通信进程并不获取数据,这些进程可能并不会被阻塞。 文

    2024年02月16日
    浏览(30)
  • Pytorch 分布式并行DDP 卡死 挂起

    1 、使用A30显卡,使用分布式并行Distributed Data Parallel,运行程序时显卡显存充满,卡在设置local_rank处,并未启动进程组 2 、如图: 0 、 最新解决方案,针对Supermicro主板:BIOS-Advanced-NB Configuration-IOMMU-Disabled ==其它型号的主板的BIOS可能还需要禁用ACS: https://zhuanlan.zhihu.com/p/60

    2023年04月15日
    浏览(51)
  • 分布式并行训练(DP、DDP、DeepSpeed)

    [pytorch distributed] 01 nn.DataParallel 数据并行初步 数据并行 vs. 模型并行 数据并行 :模型拷贝(per device),数据 split/chunk(对batch切分) 每个device上都拷贝一份完整模型,每个device分别处理1个batch的一部分(如batch_size=64, 2个device, 每device处理32个样本) 梯度反向传播时,每个设备上

    2024年02月07日
    浏览(45)
  • 用通俗易懂的方式讲解大模型分布式训练并行技术:MOE并行

    前面的文章中讲述了数据并行、流水线并行、张量并行、序列并行、自动并行等多种并行技术。但现在的模型越来越大,训练样本越来越多,每个样本都需要经过模型的全部计算,这就导致了训练成本的平方级增长。 而当我们希望在牺牲极少的计算效率的情况下,把模型规模

    2024年02月02日
    浏览(63)
  • mmdetection使用指定的显卡号并行分布式训练

    后面的不用看了,直接看最省事版本:                 直接用CUDA_VISIBLE_DEVICES=\\\"2,3\\\"指定多卡就可以,也可以给sh文件传参进去。但是,切记!切记!切记! sh文件里不能有空行,尤其是使用反斜杠 连接多行的时候 ,我一开始尝试指定多卡不起作用,就是因为图美观手

    2024年02月08日
    浏览(37)
  • Megatron-LM:Transformer模型专用分布式张量模型并行方法

    论文标题:Megatron-LM: Training Multi-Billion Parameter Language Models Using Model Parallelism 论文链接:https://arxiv.org/abs/1909.08053 论文来源:NVIDIA 随着自然语言处理领域预训练语言模型的规模变得越来越大,它们超过了现代处理器的内存限制,需要额外的内存管理技术,如激活检查点(activ

    2024年02月15日
    浏览(39)
  • pytorch 进行分布式调试debug torch.distributed.launch 三种方式

    一. pytorch 分布式调试debug torch.distributed.launch 三种方式 1. 方式1:ipdb调试(建议) 参考之前的博客:python调试器 ipdb 注意:pytorch 分布式调试只能使用侵入式调试,也即是在你需要打断点的地方(或者在主程序的第一行)添加下面的代码: 当进入pdb调试后,跟原先使用pdb调试

    2024年02月07日
    浏览(32)
  • 【金猿案例展】智谱AI——基于全闪分布式并行文件存储打造高速大模型训练平台...

    ‍ 焱融科技案例 本项目案例由焱融科技投递并参与“数据猿年度金猿策划活动——2023大数据产业年度创新服务企业榜单/奖项”评选。 大数据产业创新服务媒体 ——聚焦数据 · 改变商业 自 ChatGPT 爆火以来,中国的 AI 产业已经进入名副其实的“百模大战”。《中国人工智能

    2024年02月02日
    浏览(47)
  • 【计算系统】5分钟了解超算,高性能计算,并行计算,分布式计算,网格计算,集群计算以及云计算的区别

    超级计算机(Supercomputer)是一种计算力极强的计算机,学术界通常称这一领域为高性能计算(High-Performance Computing)。超级计算机主要为最顶尖的科学研究服务,包括核聚变模拟、石油勘探、量子力学、气候模拟、癌症研究、基因组学、分子动力学、飞机和航天器空气动力学

    2024年02月06日
    浏览(40)
  • LLM-分布式训练工具(一):DeepSpeed【微软】【大模型分布式训练工具,实现ZeRO并行训练算法】【zero3配置将模型参数切分后分配到不同的显卡中,突破单张显卡容量不足以加载模型参数的限制】

    DeepSpeed是微软推出的大规模模型分布式训练的工具,主要实现了ZeRO并行训练算法。 原始文档链接: DeepSpeed Optimizer state partitioning (ZeRO stage 1) Gradient partitioning (ZeRO stage 2) Parameter partitioning (ZeRO stage 3) Custom mixed precision training handling A range of fast CUDA-extension-based optimizers ZeRO-Offlo

    2024年02月16日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包