Deep Learning分布式训练1---Horovod with Pytorch

个人学习过程记录----------

官网链接:

Horovod with PyTorch — Horovod documentation

实验背景:

数据集的大小、模型的复杂度(存储和计算量),以及当下计算设备的硬件资源的利用,都影响着模型训练时间。同时为追求模型的最佳效果,模型复杂度也相当高。

实验目的:

利用Horovod实现Pytorch算法分布式训练。

当前分布式深度学习方式:

(1) 模型并行VS 数据并行

(2)通信机制:

网络拓扑(ParameterServer 和Allreduce)

通信步调(同步更新和异步更新)

实验步骤:

step1: 下载源代码,可运行示例

​git clone ​​​​​​https://github.com/horovod/horovod.git

进入/examples/pytorch,打开pytorch_mnist.py

运行命令:

horovodrun -np 2 python pytorch_mnist.py

查看机器用卡情况:

nvidia-smi

发现当前程序使用了两张卡在运行。

更多horovodrun运行命令解释:

(1) 单机多卡实现分布式训练,可

horovodrun -np 2 -H localhost:2 python pytorch_mnist.py

若是单机,-H localhost:2也可以不写

(2)多机多卡,  运行在4台机器的4个GPUs上

horovodrun -np 16 -H server1:4,server2:4,server3:4,server4:4 python pytorch_mnist.py

参数解释:

-np                       GPU总数
-H localhost         本地服务器使用的GPU数
-H server_n:N      N表示server_n使用的GPU数量

利用Horovod with PyTorch训练自己的脚本 步骤

(同时也是pytorch_mnist.py中的示例的实现步骤)

Install:

To run on CPU:

pip install horovod

Run on GPUs with NCCL:

HOROVOD_GPU_OPERATIONs=NCCL pip install horovod

step1: Initialize Horovod:

import horovod.torch as hvd
hvd.init()

step2: Pin each GPU to a single process.

每个进程设置一个GPU,设为local rank, 服务器上的第一个进程会被分配到第一个GPU,第二个进程分配到第二个GPU, and so forth.

if torch.cuda.is_available():
    torch.cuda.set_device(hvd.local_rank())

step3: Scale the learning rate by the number of workers.

根据workers的数量调整学习率,同步分布式训练中batch_size根据workers数量而变化,,学习率的增加可以弥补batch size的增加。

step4: Wrap the optimizer in hvd.DistributedOptimizer.

优化器的实现通过hvd.DistributedOptimizer实现

step5: Broadcast the initial variable states from rank 0 to all other process:

初始变量从rank 0 广播到其他进程

hvd.broadcast_parameters(model.state_dict(), root_rank=0)
hvd.broadcast_optimizer_state(optimizer, root_rank=0)

这一步骤用来确保所有workers在以随机权值或已有的checkpoint进行训练的时候初始化是一致的。

step6: 修改你的代码以只在worker 0上保存checkpoints,而不会被其他workers影响打断。

通过命令

hvd.rank()!=0

来保护模型的checkpoint代码。

至此,简单的Horovod with Pytorch就结束了,下一篇开启Horovod in Docker.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值