4

pytorch 分布式训练

 1 year ago
source link: https://xujinzh.github.io/2023/02/01/pytorch-distributed/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

pytorch 分布式训练

2023-02-01technologypython

17 2.5k 2 分钟

如何利用多 GPU、多服务器分布式训练深度学习模型,本篇介绍 pytorch 分布式训练相关。

  • node 物理节点,即服务器、机器。注意每一个节点可以有多个 GPU,即一机多卡
  • rank 进程序号,常用于进程通信。每个进程对应一个 rank
  • local_rank 相对于 rank (整个分布式集群而言),local_rank 表示一台机器内部的相对进程序号。rank 和 locak_rank 独立,当是单机多卡时,rank 等同于 local_rank
  • nnodes 物理节点个数
  • node_rank 物理节点序号
  • nproc_per_node 每个物理节点上面运行的进程数,常对应想要运行的 GPU 个数,因此取值小于物理节点上 GPU 个数。
  • group 进程组,默认只有一个组
  • world size 全局并行数,即一个分布式任务中,全局 rank 的数量。

例子:
每个 node 包含 8 个 GPU,且 nproc_per_node=4, nnodes=5,机器的 node_rank=10,请问 world_size 是多少?
全局并行数 world size 等于真实的进程数,即 nproc_per_node x nnodes = 4 x 5 = 20,其他没有使用的 GPU 是没有参与计算,不算并行数。

pytorch 分布式特点

torch.distributed 软件包和 torch.nn.parallel.DistributedDataParallel 模块由全新的、重新设计的分布式库提供支持。新的库的主要亮点有:

  • 新的 torch.distributed 是性能驱动的,并且对所有后端 (Gloo,NCCL 和 MPI) 完全异步操作
  • 显着的分布式数据并行性能改进,尤其适用于网络较慢的主机,如基于以太网的主机
  • 为 torch.distributedpackage 中的所有分布式集合操作添加异步支持
  • 在 Gloo 后端添加以下 CPU 操作:send、recv、reduce、all_gather、gather、scatter
  • 在 NCCL 后端添加barrier操作
  • 为 NCCL 后端添加new_group支持

torch.distributed 包提供了一个启动实用程序 torch.distributed.launch,此帮助程序可用于为每个节点启动多个进程以进行分布式训练,它在每个训练节点上产生多个分布式训练进程。

单节点多 GPU

# 这里 NUM_GPUS_YOU_HAVE 为你服务器上 GPU 的个数,建议使用同型号 GPU 进行并行计算
python -m torch.distributed.launch --nproc_per_node=NUM_GPUS_YOU_HAVE YOUR_TRAINING_SCRIPT.py (--arg1 --arg2 --arg3 and all other arguments of your training script)

多节点多 GPU

以两个节点为例,更多节点可以类推。假设节点1(IP: 192.168.1.100)为主节点,节点2(IP: 192.168.1.200)为从节点。
在节点1上

# 因为是2个节点,所以 nnodes = 2
# 因为节点1是主节点,所以指定节点1 的IP
python -m torch.distributed.launch --nproc_per_node=NUM_GPUS_YOU_HAVE --nnodes=2 --node_rank=0 --master_addr="192.168.1.100" --master_port=8888 YOUR_TRAINING_SCRIPT.py (--arg1 --arg2 --arg3 and all other arguments of your training script)

在节点2上

# 在每个从节点上,指定主节点IP地址和通信端口号
python -m torch.distributed.launch --nproc_per_node=NUM_GPUS_YOU_HAVE --nnodes=2 --node_rank=1 --master_addr="192.168.1.100" --master_port=8888 YOUR_TRAINING_SCRIPT.py (--arg1 --arg2 --arg3 and all other arguments of your training script)

与单节点单GPU的区别:

  • 后端最好用 NCCL,才能获取最好的分布式性能
  • 训练代码必须从命令行解析 --local_rank=LOCAL_PROCESS_RANK
    import argparse
    parser = argparse.ArgumentParser()
    parser.add_argument("--local_rank", type=int)
    args = parser.parse_args()

    torch.cuda.set_device(arg.local_rank)
  • 分布式初始化
    torch.distributed.init_process_group(backend='nccl', init_method='env://')
  • 模型分布式
    model = torch.nn.parallel.DistributedDataParallel(model, device_ids=[arg.local_rank], output_device=arg.local_rank)

深度模型训练加速建议:

  1. 当模型不大时(可以加载到一台服务器上时),使用数据并行;
  2. 当模型较大时,可将模型分解放在多个服务器上运行,即模型并行;

Recommend

  • 38

    近期,Google AI 公开了一篇 NLP 论文,介绍了新的语言表征模型 BERT,该模型被认为是最强 NLP 预训练模型,刷新了 11 项 NLP 任务的当前最优性能记录。今日,机器之心发现 GitHub 上出现了 BERT 的 Pytorch 实现,出自 Scatter Lab 的 Ju...

  • 41

    Keras 和 PyTorch 当然是对初学者最友好的深度学习框架,它们用起来就像描述架构的简单语言一样,告诉框架哪一层该用什么。这样减少了很多抽象工作,例如设计静态计算图、分别定义各张量的维度与内容等等。 但是,到底哪一个...

  • 30

    作为「史上最强 GAN 图像生成器」,BigGAN 自去年 9 月推出以来就成为了 AI 领域最热词。其生成图像的目标和背景都高度逼真、边界自然,简直可以说是在「创造新物种」。然而 BigGAN 训练时需要的超高算力(128-512 个谷歌 TPU v3 核心)却...

  • 42

    先上开源地址: https://github.com/huggingface/pytorch-transformers#quick-tour 官网:

  • 31

    加入极市 专业CV交流群,与 6000+来自腾讯,华为,百度,北大,清华,中科院 等名企名校视觉开发者互动交流!更有机会与 李开复老师

  • 22
    • flashgene.com 3 years ago
    • Cache

    pytorch训练GAN时的detach()

    本站内容均来自兴趣收集,如不慎侵害的您的相关权益,请留言告知,我们将尽快删除.谢谢. 我最近在学使用Pytorch写GAN代码,发现有些代码在训练部分细节有略微不同,其中有的人用到了detach()函数截断梯度流,有的人没用detch(),取而...

  • 37

    使用PyTorch版的yolov5训练时,出现Error in `python': double free or corruption (!prev)错误的解决方式 ...

  • 6
    • www.blackedu.vip 3 years ago
    • Cache

    PyTorch预训练Bert模型

    PyTorch预训练Bert模型本文介绍以下内容: 1. 使用transformers框架做预训练的bert-base模型; 2. 开发平台使用Google的Colab平台,白嫖GPU加速;

  • 17

    在训练轻量化模型时,经常发生的情况就是,明明 GPU 很闲,可速度就是上不去,用了多张卡并行也没有太大改善。 如果什么优化都不做,仅仅是使用nn.DataParallel这个模块,那么实测大概只能实现一点几倍的加速(按每秒处理的总图片数计算)...

  • 6
    • www.cnblogs.com 1 year ago
    • Cache

    Pytorch分布式训练 - cwpeng

    用单机单卡训练模型的时代已经过去,单机多卡已经成为主流配置。如何最大化发挥多卡的作用呢?本文介绍Pytorch中的DistributedDataParallel方法。 1. DataParallel 其实Pytorch早就有数据并行的工具...

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK