范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

Pytorch分布式训练极简体验

  1 任务介绍
  通过实现一个线性变换模型
  的单机2卡分布式训练任务,来初步体验pytorch中DistributeDataparallel的使用。本文主要参考pytorch tutorial中的介绍。
  2 整体流程
  代码编写流程如下:初始化pytorch分布式训练通信模块;创建模型(这里包括本地模型和分布式模型)创建损失函数和优化器计算(forward 和backward)和梯度更新多任务启动
  3 初始化通信模块
  pytorch中分布式通信模块为torch.distributed
  本例中初始化代码为:通过环境变量MASTER_ADDR和MASTER_PORT设置rank0的IP和PORT信息,rank0的作用相当于是协调节点,需要其他所有节点知道其访问地址;本例中后端选择的是nccl,通过设置NCCL_DEBUG环境变量为INFO,输出NCCL的调试信息;init_process_group:执行网络通信模块的初始化工作backend:设置后端网络通信的实现库,可选的为gloo、nccl和mpi;rank:为当前rank的index,用于标记当前是第几个rank,取值为0到work_size - 1之间的值;world_size: 有多少个进程参与到分布式训练中;    # set env信息     os.environ["MASTER_ADDR"] = "127.0.0.1"     os.environ["MASTER_PORT"] = "29500"     os.environ["NCCL_DEBUG"] = "INFO"          # create default process group     dist.init_process_group(backend="nccl", rank=rank, world_size=world_size)
  4 创建模型
  通过下面的代码分别创建本地模型和分布式模型:nn.Linear(10, 10).to(rank): 创建线性变换模型,input size和out put size都是10,并且将模型copy到gpu上(通过rank来标识gpu 的id)DDP(model, device_ids=[rank]): 创建分布式模型;该模型会将local model 复制到所有副本上,并对数据进行切分,然后使得每个local model都按照mini batch进行训练。    # create local model     model = nn.Linear(10, 10).to(rank)      # construct DDP model     ddp_model = DDP(model, device_ids=[rank])
  5 创建Loss和optimizer    # define loss function and optimizer     loss_fn = nn.MSELoss()     optimizer = optim.SGD(ddp_model.parameters(), lr=0.001)
  6 计算和梯度更新
  通过ddp_model执行forward和backward计算,这样才能够达到分布式计算的效果;    # forward pass     outputs = ddp_model(torch.randn(20, 10).to(rank))     labels = torch.randn(20, 10).to(rank)      # backward pass     loss_fn(outputs, labels).backward()          # update parameters     optimizer.step()
  7 任务启动
  启动一个有两个process组成的分布式任务:run_worker:子进程执行的function,会以fn(i, *args)的形式被调用,i为process的id(0,1,2...),*args为spawn的args参数args:执行进程的参数nprocs:进程的个数join:是否等待子进程执行完成def main():     worker_size = 2     mp.spawn(run_worker,         args=(worker_size,),         nprocs=worker_size,         join=True)
  8 完整代码import os import torch import torch.distributed as dist import torch.multiprocessing as mp import torch.nn as nn import torch.optim as optim from torch.nn.parallel import DistributedDataParallel as DDP   def run_worker(rank, world_size):     os.environ["MASTER_ADDR"] = "127.0.0.1"     os.environ["MASTER_PORT"] = "29500"     os.environ["NCCL_DEBUG"] = "INFO"     # create default process group     dist.init_process_group(backend="nccl", rank=rank, world_size=world_size)      # create local model     model = nn.Linear(10, 10).to(rank)      # construct DDP model     ddp_model = DDP(model, device_ids=[rank])      # define loss function and optimizer     loss_fn = nn.MSELoss()     optimizer = optim.SGD(ddp_model.parameters(), lr=0.001)      # forward pass     outputs = ddp_model(torch.randn(20, 10).to(rank))     labels = torch.randn(20, 10).to(rank)      # backward pass     loss_fn(outputs, labels).backward()      # update parameters     optimizer.step()  def main():     worker_size = 2     mp.spawn(run_worker,         args=(worker_size,),         nprocs=worker_size,         join=True)  if __name__=="__main__":     main()
  代码执行如下:root@g48r13:/workspace/DDP# python linear-ddp.py g48r13:350:350 [0] NCCL INFO Bootstrap : Using [0]bond0:11.139.84.88<0> g48r13:350:350 [0] NCCL INFO NET/Plugin : No plugin found (libnccl-net.so), using internal implementation  g48r13:350:350 [0] misc/ibvwrap.cc:63 NCCL WARN Failed to open libibverbs.so[.1] g48r13:350:350 [0] NCCL INFO NET/Socket : Using [0]bond0:11.139.84.88<0> g48r13:350:350 [0] NCCL INFO Using network Socket NCCL version 2.7.8+cuda10.2 g48r13:351:351 [1] NCCL INFO Bootstrap : Using [0]bond0:11.139.84.88<0> g48r13:351:351 [1] NCCL INFO NET/Plugin : No plugin found (libnccl-net.so), using internal implementation  g48r13:351:351 [1] misc/ibvwrap.cc:63 NCCL WARN Failed to open libibverbs.so[.1] g48r13:351:351 [1] NCCL INFO NET/Socket : Using [0]bond0:11.139.84.88<0> g48r13:351:351 [1] NCCL INFO Using network Socket g48r13:350:366 [0] NCCL INFO Channel 00/02 :    0   1 g48r13:351:367 [1] NCCL INFO threadThresholds 8/8/64 | 16/8/64 | 8/8/64 g48r13:350:366 [0] NCCL INFO Channel 01/02 :    0   1 g48r13:351:367 [1] NCCL INFO Trees [0] -1/-1/-1->1->0|0->1->-1/-1/-1 [1] -1/-1/-1->1->0|0->1->-1/-1/-1 g48r13:351:367 [1] NCCL INFO Setting affinity for GPU 1 to ffffffff,ffffffff g48r13:350:366 [0] NCCL INFO threadThresholds 8/8/64 | 16/8/64 | 8/8/64 g48r13:350:366 [0] NCCL INFO Trees [0] 1/-1/-1->0->-1|-1->0->1/-1/-1 [1] 1/-1/-1->0->-1|-1->0->1/-1/-1 g48r13:350:366 [0] NCCL INFO Setting affinity for GPU 0 to ffffffff,ffffffff g48r13:351:367 [1] NCCL INFO Channel 00 : 1[5000] -> 0[4000] via P2P/IPC g48r13:350:366 [0] NCCL INFO Channel 00 : 0[4000] -> 1[5000] via P2P/IPC g48r13:351:367 [1] NCCL INFO Channel 01 : 1[5000] -> 0[4000] via P2P/IPC g48r13:350:366 [0] NCCL INFO Channel 01 : 0[4000] -> 1[5000] via P2P/IPC g48r13:351:367 [1] NCCL INFO 2 coll channels, 2 p2p channels, 2 p2p channels per peer g48r13:351:367 [1] NCCL INFO comm 0x7fb0b4001060 rank 1 nranks 2 cudaDev 1 busId 5000 - Init COMPLETE g48r13:350:366 [0] NCCL INFO 2 coll channels, 2 p2p channels, 2 p2p channels per peer g48r13:350:366 [0] NCCL INFO comm 0x7fc7a8001060 rank 0 nranks 2 cudaDev 0 busId 4000 - Init COMPLETE g48r13:350:350 [0] NCCL INFO Launch mode Parallel

金丝路奖竞赛单元入围影片关于我家的一切关于我家的一切NoDogsorItaliansAllowed导演阿兰乌盖托编剧亚历克西斯加尔莫特安妮帕斯切塔阿兰乌盖托国家及地区法国意大利瑞士年份2022年片长70分钟视频加载中剧金丝路奖竞赛单元入围影片我是兔子王我是兔子王TheJusticeofBunnyKing导演盖索恩塔瓦编剧苏菲亨德森主演埃茜戴维斯托马辛麦肯齐国家及地区新西兰年份2021年片长101分钟视频加载中剧情简介为了保护孩子斗罗大陆比比东再次上了唐三的当,胡列娜舍生取义,再次掉眼泪在斗罗大陆动漫当中唐三孤军深入嘉陵关内部,殊不知这是比比东故意卖出来的破绽,故事利用自己身心疲惫的状态让唐三觉得能够一举击杀,果然唐三并没有放弃眼前合格绝佳的机会,竟然真的独自追杀暴雪将在中国大陆暂停多数游戏服务!网易称将为玩家服务到最后一刻,网易已备案暴雪多个游戏网站中国经济周刊经济网讯近日,暴雪娱乐发声明称由于同网易的现有授权协议在2023年1月23日到期,将暂停在中国大陆的大部分暴雪游戏服务,包括魔兽世界炉石传说守望先锋星际争霸魔兽争霸II跪舔美国的富士康终于认识到大陆市场的重要性,万元薪酬挽留员工媒体报道指郑州富士康为了确保iPhone14的产能,开出了万元薪酬,挽留曾步行逃离的员工,相比起此前它的老板郭台铭的硬气,无疑显示出如今富士康的窘境,近日富士康更表示由于郑州富士康老得慢的女人,多半有5个好习惯,每天做,比同龄人显年轻相信每位女性都想拥有青春靓丽的容颜。但随着年纪越来越大,再也不是从前肤如凝脂,手如柔夷的状态,皮肤会失去弹性,胶原蛋白也会逐渐流失,皱纹也日渐增多这使得许多女性开始陷入苦恼焦虑之中我们被病毒感染的可能加大,请提前做好家人的心理建设昨天,儿子邀请同小区的小朋友到家玩耍后,小朋友邀请我儿子今天上午去他们家玩耍,但今天早上,小朋友家的单元楼被封控了。晚上,同小区密友下班回来,刚找我聊了半个小时,低头看了一下手机,华为鸿蒙3。0正式版内测版公测版有什么区别?怎样升级鸿蒙3。0最近流行的一句问候语你的华为手机升级鸿蒙3。0了吗?哈哈,开一句玩笑。不过,在华为机友之间,还真的会经常这样问候。的确,最近一段时间,鸿蒙3。0真的非常火,一度成为各大头条的热点。观看2022卡塔尔世界杯需要熬夜吗?观看2022世界杯还要熬夜吗?卡塔尔世界观赛指南送给你,在这仅剩的3天里,四年一次的全球绿茵盛宴。二零二二年世界杯足球赛即将开赛。那么今年需要半夜起来看球吗?给你一份观看本届世界杯世界上最难打破的五项田径世界记录世界上最难打破的五项田径世界纪录,甚至有一项纪录至今已经保持了31年未被打破。男子跳远世界纪录8。95米,保持者迈克鲍威尔创造时间1991年第三届东京田径世锦赛跳远决赛,堪称史上最央视直播!丁俊晖打响争冠生死战,赛程安排引争议,利好奥沙利文北京时间2022年11月18日,斯诺克英锦赛进入第7比赛日,14决赛全面开打,焦点战无疑是丁俊晖对阵奥沙利文,这是两人第30次直接对话,胜者晋级四强,也会成为争冠大热门。不过,赛程
无意中接触了个兼职,坚持一段时间后收入比现在的工作收入还高,我该辞职专心做吗?我是一位从教23年的小学语文老师,对于这个问题,我的看法如下一用事实说话事例1十几年前,我也遇到了你这样的情况。一个兼职,一个月能挣1万多,我那时的工资才一两千。当时我特别高兴,有李靓蕾再发长篇小作文却遭到很多口诛笔伐,为什么?要反转吗?高智商低情商没智慧的女人。夫妻缘分尽了就该好聚好散,王力宏发文很平静也很友好,只是说夫妻分开生活,还是一家人。却招到李靓蕾有的没的一顿毁灭性攻击,不知道一个女人把孩子爸爸搞得身败名中年人眼里最漂亮的女星是谁?1我敢说,百分之八十以上的中年男人眼里,最漂亮的女星无非三个人老一辈的王晓棠中年一代的宋祖英青年一批的范冰冰这三大美女呢,王晓棠毕竟离六七十年代出生的人还是有距离的,王晓棠自己都是王者荣耀有射手必出的万金油装备吗?王者荣耀S9赛季已经开始一段时间了,排位赛想要赢得高段位,除了与参团gank意识操作水平以及其它因素(挂机卡顿等)有关外,正确的铭文和出装也是一大关键,今天小编整理出了当前版本射手建议模仿KPL的全局bp,排位赛连续10局内不能选择同一个英雄,这建议是否可行?模仿kpl的全局bp,排位赛连续10局内不能选择同一个英雄,开玩笑吧!这完全就是开玩笑一般的建议!这个建议完全不可行,可行率绝对为0。不单单是我不认同这种建议,99的玩家应该都不会怎样加入区块链的运作?1。自己买设备挖矿现在有人发明了专门用于挖矿的矿机,普通个人想参与挖矿也比较简单了,只要给矿机插上电源和网线就可以开机运行了。不过挖矿也有风险,比特币产量每四年减半,除了矿机,电费微信到底有多大?微信本身的程序并不大,但是天天上,时时玩,分分秒秒都在保存数据,现在的图片动辄几M到几十M,长此下去,当然就是几GB,几十GB的存储空间被占用了。怎么清楚垃圾呢,用工具软件很方便,有人说,小米和大米不能搭在一起做饭,是真的吗?小米和大米是可以放在一起煮的。小米的营养丰富,而且不像大米需要经过惊喜加工处理,因此保留了更多的膳食纤维B族维生素,矿物质,如果和大米同煮还可以增加食物多样性,补充精白大米中损失的O型血的人,吃什么食品最健康,有没有饮食食品的禁忌?跟其他血型的人有什么区别?现代医学研究表明,O型血的人每天的饮食需求,跟其他血型的人有着非常明显的区别,如果O型血的人平时不注重自己的营养膳食结构,极有可能会危及生命。我说的绝不是危言耸听,我说的是有根据的二十年不离不弃谷城好丈夫用坚守诠释最长情告白湖北日报客户端讯(通讯员琚晓青吕涛丁诗鸿陈敬师)二十年光阴,7000多个日夜,他不厌其烦,悉心照料瘫痪妻子。谷城县庙滩镇喻家湾村村民汪天福,用二十年如一日的守候诠释着陪伴是最长情的年过50,少吃花生,多吃3种碱性菜!头发黑了,口臭没了,气色好人一旦过50岁,身体各项机能开始走下坡路,各种疾病也慢慢的找上门来,头发开始变白,气色也越来越差,尤其早上刚起床,口臭非常严重,正所谓中年夫妻亲一口,噩梦能做好几宿。特别是女性朋友