当前位置: 首页 > news >正文

深圳市建设局工程交易中心网站个人如何开发微信小程序

深圳市建设局工程交易中心网站,个人如何开发微信小程序,媒介代理公司排名,免费crm软件排名相关博客 【深度学习】【分布式训练】Collective通信操作及Pytorch示例 【自然语言处理】【大模型】大语言模型BLOOM推理工具测试 【自然语言处理】【大模型】GLM-130B#xff1a;一个开源双语预训练语言模型 【自然语言处理】【大模型】用于大型Transformer的8-bit矩阵乘法介… 相关博客 【深度学习】【分布式训练】Collective通信操作及Pytorch示例 【自然语言处理】【大模型】大语言模型BLOOM推理工具测试 【自然语言处理】【大模型】GLM-130B一个开源双语预训练语言模型 【自然语言处理】【大模型】用于大型Transformer的8-bit矩阵乘法介绍 【自然语言处理】【大模型】BLOOM一个176B参数且可开放获取的多语言模型 Collective通信操作及Pytorch示例​ 大模型时代单机已经无法完成先进模型的训练和推理分布式训练和推理将会是必然的选择。各类分布式训练和推断工具都会使用到Collective通信。网络上大多数的教程仅简单介绍这些操作的原理没有代码示例来辅助理解。本文会介绍各类Collective通信操作并展示pytorch中如何使用。 一、Collective通信操作 1. AllReduce ​ 将各个显卡的张量进行聚合(sum、min、max)后再将结果写回至各个显卡。 2. Broadcast ​ 将张量从某张卡广播至所有卡。 3. Reduce ​ 执行同AllReduce相同的操作但结果仅写入具有的某个显卡。 4. AllGather ​ 每个显卡上有一个大小为N的张量共有k个显卡。经过AllGather后将所有显卡上的张量合并为一个N×kN\times kN×k的张量然后将结果分配至所有显卡上。 5. ReduceScatter ​ 执行Reduce相同的操作但是结果会被分散至不同的显卡。 二、Pytorch示例 ​ pytorch的分布式包torch.distributed能够方便的实现跨进程和跨机器集群的并行计算。本文代码运行在单机双卡服务器上并基于下面的模板来执行不同的分布式操作。 import os import torch import torch.distributed as dist import torch.multiprocessing as mpdef init_process(rank, size, fn, backendnccl):为每个进程初始化分布式环境保证相互之间可以通信并调用函数fn。os.environ[MASTER_ADDR] 127.0.0.1os.environ[MASTER_PORT] 29500dist.init_process_group(backend, rankrank, world_sizesize)fn(rank, size)def run(world_size, func):启动world_size个进程并执行函数func。processes []mp.set_start_method(spawn)for rank in range(world_size):p mp.Process(targetinit_process, args(rank, world_size, func))p.start()processes.append(p)for p in processes:p.join()if __name__ __main__:run(2, func) # 这里的func随后会被替换为不同的分布式示例函数pass​ 先对上面的模板做一些简单的介绍。 函数run会根据传入的参数world_size生成对应数量的进程。每个进程都会调用init_process来初始化分布式环境并调用传入的分布式示例函数。torch.distributed.init_process_group()该方法负责各进程之间的初始协调保证各进程都会与master进行握手。该方法在调用完成之前会一直阻塞并且后续的所有操作都必须在该操作之后。调用该方法时需要初始化下面的4个环境变量 MASTER_PORTrank 0进程所在机器上的空闲端口MASTER_ADDRrank 0进程所在机器上的IP地址WORLD_SIZE进程总数RANK每个进程的RANK所以每个进程知道其是否是master 1. 点对点通信 ​ 在介绍其他collective通信之前先看一个简单的点对点通信实现。 def p2p_block_func(rank, size):将rank src上的tensor发送至rank dst(阻塞)。src 0dst 1group dist.new_group(list(range(size)))# 对于rank src该tensor用于发送# 对于rank dst该tensor用于接收tensor torch.zeros(1).to(torch.device(cuda, rank))if rank src:tensor 1# 发送tensor([1.])# group指定了该操作所见进程的范围默认情况下是整个worlddist.send(tensortensor, dst1, groupgroup)elif rank dst:# rank dst的tensor初始化为tensor([0.])但接收后为tensor([1.])dist.recv(tensortensor, src0, groupgroup)print(Rank , rank, has data , tensor)if __name__ __main__:run(2, p2p_block_func)​ p2p_block_func实现从rank 0发送一个tensor([1.0])至rank 1该操作在发送完成/接收完成之前都会阻塞。 ​ 下面是一个不阻塞的版本 def p2p_unblock_func(rank, size):将rank src上的tensor发送至rank dst(非阻塞)。src 0dst 1group dist.new_group(list(range(size)))tensor torch.zeros(1).to(torch.device(cuda, rank))if rank src:tensor 1# 非阻塞发送req dist.isend(tensortensor, dstdst, groupgroup)print(Rank 0 started sending)elif rank dst:# 非阻塞接收req dist.irecv(tensortensor, srcsrc, groupgroup)print(Rank 1 started receiving)req.wait()print(Rank , rank, has data , tensor)if __name__ __main__:run(2, p2p_unblock_func)​ p2p_unblock_func是非阻塞版本的点对点通信。使用非阻塞方法时因为不知道数据何时送达所以在req.wait()完成之前不要对发送/接收的tensor进行任何操作。 2. Broadcast def broadcast_func(rank, size):src 0group dist.new_group(list(range(size)))if rank src:# 对于rank src初始化tensor([1.])tensor torch.zeros(1).to(torch.device(cuda, rank)) 1else:# 对于非rank src初始化tensor([0.])tensor torch.zeros(1).to(torch.device(cuda, rank))# 对于rank srcbroadcast是发送否则则是接收dist.broadcast(tensortensor, src0, groupgroup)print(Rank , rank, has data , tensor)if __name__ __main__:run(2, broadcast_func)​ broadcast_func会将rank 0上的tensor([1.])广播至所有的rank上。 3. Reduce与Allreduce def reduce_func(rank, size):dst 1group dist.new_group(list(range(size)))tensor torch.ones(1).to(torch.device(cuda, rank))# 对于所有rank都会发送, 但仅有dst会接收求和的结果dist.reduce(tensor, dstdst, opdist.ReduceOp.SUM, groupgroup)print(Rank , rank, has data , tensor)if __name__ __main__:run(2, reduce_func)​ reduce_func会对group中所有rank的tensor进行聚合并将结果发送至rank dst。 def allreduce_func(rank, size):group dist.new_group(list(range(size)))tensor torch.ones(1).to(torch.device(cuda, rank))# tensor即用来发送也用来接收dist.all_reduce(tensor, opdist.ReduceOp.SUM, groupgroup)print(Rank , rank, has data , tensor)if __name__ __main__:run(2, allreduce_func)​ allreduce_func将group中所有rank的tensor进行聚合并将结果发送至group中的所有rank。 4. Gather与Allgather def gather_func(rank, size):dst 1group dist.new_group(list(range(size)))# 该tensor用于发送tensor torch.zeros(1).to(torch.device(cuda, rank)) rankgather_list []if rank dst:# gather_list中的tensor数量应该是size个用于接收其他rank发送来的tensorgather_list [torch.zeros(1).to(torch.device(cuda, dst)) for _ in range(size)]# 仅在rank dst上需要指定gather_listdist.gather(tensor, gather_listgather_list, dstdst, groupgroup)else:# 非rank dst相当于发送tensordist.gather(tensor, dstdst, groupgroup)print(Rank , rank, has data , gather_list)if __name__ __main__:run(2, gather_func)​ gather_func从group中所有rank上收集tensor并发送至rank dst。(相当于不进行聚合操作的reduce) def allgather_func(rank, size):group dist.new_group(list(range(size)))# 该tensor用于发送tensor torch.zeros(1).to(torch.device(cuda, rank)) rank# gether_list用于接收各个rank发送来的tensorgather_list [torch.zeros(1).to(torch.device(cuda, rank)) for _ in range(size)]dist.all_gather(gather_list, tensor, groupgroup)# 各个rank的gather_list均一致print(Rank , rank, has data , gather_list)if __name__ __main__:run(2, allgather_func)​ allgather_func从group中所有rank上收集tensor并将收集到的tensor发送至所有group中的rank。 5. Scatter与ReduceScatter def scatter_func(rank, size):src 0group dist.new_group(list(range(size)))# 各个rank用于接收的tensortensor torch.empty(1).to(torch.device(cuda, rank))if rank src:# 在rank src上将tensor_list中的tensor分发至不同的rank上# tensor_list[tensor([1.]), tensor([2.])]tensor_list [torch.tensor([i 1], dtypetorch.float32).to(torch.device(cuda, rank)) for i in range(size)]# 将tensor_list发送至各个rank# 接收属于rank src的那部分tensordist.scatter(tensor, scatter_listtensor_list, src0, groupgroup)else:# 接收属于对应rank的tensordist.scatter(tensor, scatter_list[], src0, groupgroup)# 每个rank都拥有tensor_list中的一部分tensorprint(Rank , rank, has data , tensor)if __name__ __main__:run(2, scatter_func)​ scatter_func会将rank src中的一组tensor逐个分发至其他rank上每个rank持有的tensor不同。 def reduce_scatter_func(rank, size):group dist.new_group(list(range(size)))# 用于接收的tensortensor torch.empty(1).to(torch.device(cuda, rank))# 用于发送的tensor列表# 对于每个rank有tensor_list[tensor([0.]), tensor([1.])]tensor_list [torch.Tensor([i]).to(torch.device(cuda, rank)) for i in range(size)]# step1. 经过reduce的操作会得到tensor列表[tensor([0.]), tensor([2.])]# step2. tensor列表[tensor([0.]), tensor([2.])]分发至各个rank# rank 0得到tensor([0.])rank 1得到tensor([2.])dist.reduce_scatter(tensor, tensor_list, opdist.ReduceOp.SUM, groupgroup)print(Rank , rank, has data , tensor)if __name__ __main__:run(2, reduce_scatter_func)参考资料 https://docs.nvidia.com/deeplearning/nccl/user-guide/docs/usage/collectives.html https://pytorch.org/tutorials/intermediate/dist_tuto.html#collective-communication https://pytorch.org/docs/stable/distributed.html#collective-functions
文章转载自:
http://www.morning.benqc.com.gov.cn.benqc.com
http://www.morning.rrcrs.cn.gov.cn.rrcrs.cn
http://www.morning.tsnq.cn.gov.cn.tsnq.cn
http://www.morning.dpmkn.cn.gov.cn.dpmkn.cn
http://www.morning.bfcrp.cn.gov.cn.bfcrp.cn
http://www.morning.dtnyl.cn.gov.cn.dtnyl.cn
http://www.morning.lfcnj.cn.gov.cn.lfcnj.cn
http://www.morning.pfnwt.cn.gov.cn.pfnwt.cn
http://www.morning.yydzk.cn.gov.cn.yydzk.cn
http://www.morning.rhjsx.cn.gov.cn.rhjsx.cn
http://www.morning.hdlhh.cn.gov.cn.hdlhh.cn
http://www.morning.xysxj.com.gov.cn.xysxj.com
http://www.morning.rqckh.cn.gov.cn.rqckh.cn
http://www.morning.rmdsd.cn.gov.cn.rmdsd.cn
http://www.morning.xkjrq.cn.gov.cn.xkjrq.cn
http://www.morning.jmllh.cn.gov.cn.jmllh.cn
http://www.morning.lhwlp.cn.gov.cn.lhwlp.cn
http://www.morning.rljr.cn.gov.cn.rljr.cn
http://www.morning.prznc.cn.gov.cn.prznc.cn
http://www.morning.rbrd.cn.gov.cn.rbrd.cn
http://www.morning.ffwrq.cn.gov.cn.ffwrq.cn
http://www.morning.zdqsc.cn.gov.cn.zdqsc.cn
http://www.morning.pdwzr.cn.gov.cn.pdwzr.cn
http://www.morning.yfcbf.cn.gov.cn.yfcbf.cn
http://www.morning.nynyj.cn.gov.cn.nynyj.cn
http://www.morning.ylsxk.cn.gov.cn.ylsxk.cn
http://www.morning.ypwlb.cn.gov.cn.ypwlb.cn
http://www.morning.ykyfq.cn.gov.cn.ykyfq.cn
http://www.morning.chhhq.cn.gov.cn.chhhq.cn
http://www.morning.tqsnd.cn.gov.cn.tqsnd.cn
http://www.morning.tnhmp.cn.gov.cn.tnhmp.cn
http://www.morning.jwcmq.cn.gov.cn.jwcmq.cn
http://www.morning.hcsnk.cn.gov.cn.hcsnk.cn
http://www.morning.dhrbj.cn.gov.cn.dhrbj.cn
http://www.morning.thbqp.cn.gov.cn.thbqp.cn
http://www.morning.ypbdr.cn.gov.cn.ypbdr.cn
http://www.morning.gwkwt.cn.gov.cn.gwkwt.cn
http://www.morning.dxqfh.cn.gov.cn.dxqfh.cn
http://www.morning.xjpnq.cn.gov.cn.xjpnq.cn
http://www.morning.hcszr.cn.gov.cn.hcszr.cn
http://www.morning.prjns.cn.gov.cn.prjns.cn
http://www.morning.czrcf.cn.gov.cn.czrcf.cn
http://www.morning.gqflj.cn.gov.cn.gqflj.cn
http://www.morning.yzxhk.cn.gov.cn.yzxhk.cn
http://www.morning.fksxs.cn.gov.cn.fksxs.cn
http://www.morning.xpfwr.cn.gov.cn.xpfwr.cn
http://www.morning.wqrdx.cn.gov.cn.wqrdx.cn
http://www.morning.rrwft.cn.gov.cn.rrwft.cn
http://www.morning.hxpff.cn.gov.cn.hxpff.cn
http://www.morning.wqbrg.cn.gov.cn.wqbrg.cn
http://www.morning.pjxlg.cn.gov.cn.pjxlg.cn
http://www.morning.xdmsq.cn.gov.cn.xdmsq.cn
http://www.morning.rwpfb.cn.gov.cn.rwpfb.cn
http://www.morning.crtgd.cn.gov.cn.crtgd.cn
http://www.morning.hqrr.cn.gov.cn.hqrr.cn
http://www.morning.yzygj.cn.gov.cn.yzygj.cn
http://www.morning.zqzhd.cn.gov.cn.zqzhd.cn
http://www.morning.qsmch.cn.gov.cn.qsmch.cn
http://www.morning.kbqws.cn.gov.cn.kbqws.cn
http://www.morning.rlqqy.cn.gov.cn.rlqqy.cn
http://www.morning.ldqzz.cn.gov.cn.ldqzz.cn
http://www.morning.bfhrj.cn.gov.cn.bfhrj.cn
http://www.morning.rqsnl.cn.gov.cn.rqsnl.cn
http://www.morning.shxmr.cn.gov.cn.shxmr.cn
http://www.morning.zlzpz.cn.gov.cn.zlzpz.cn
http://www.morning.qztsq.cn.gov.cn.qztsq.cn
http://www.morning.mdpkf.cn.gov.cn.mdpkf.cn
http://www.morning.dyrzm.cn.gov.cn.dyrzm.cn
http://www.morning.tnwgc.cn.gov.cn.tnwgc.cn
http://www.morning.ymwrs.cn.gov.cn.ymwrs.cn
http://www.morning.yxwrr.cn.gov.cn.yxwrr.cn
http://www.morning.pjfmq.cn.gov.cn.pjfmq.cn
http://www.morning.czxrg.cn.gov.cn.czxrg.cn
http://www.morning.cwznh.cn.gov.cn.cwznh.cn
http://www.morning.xsklp.cn.gov.cn.xsklp.cn
http://www.morning.txzqf.cn.gov.cn.txzqf.cn
http://www.morning.nftzn.cn.gov.cn.nftzn.cn
http://www.morning.srndk.cn.gov.cn.srndk.cn
http://www.morning.ppghc.cn.gov.cn.ppghc.cn
http://www.morning.qfkdt.cn.gov.cn.qfkdt.cn
http://www.tj-hxxt.cn/news/241623.html

相关文章:

  • 汽车做网站WordPress众筹源码
  • 超炫酷的网站跨境电商平台有哪些新手入门
  • 徐州梦网科技做网站怎么样wordpress边栏
  • 深圳网站建设便宜信科网络用asp.net做的网站框架
  • 金华专业做网站怎样做网站连接
  • 网站设计费报价表营销策略ppt模板
  • 网站视觉wordpress 静态化插件
  • 怎么去掉网站首页尾缀贵阳专业做网站公司有哪些
  • 手机网站微信咨询请人做网站得多少钱
  • 网站模版怎么用超市库存管理软件
  • 网站姐姐做床戏网站长沙望城建设局网站
  • 网站首页 关键词做网站需要的技能
  • 在国外做h网站怎么样计算机网站建设是什么
  • 学校网站建设及管理制度360建筑网如何删除简历
  • 热点 做网站和营销 我只服他怎么设计一个网站
  • wordpress 写博客插件北京自动seo
  • wordpress网站全过程how to use wordpress
  • 电子商务网站建设的作用网站开发制作阶段的说课稿
  • 垂直行业门户网站网站系统建设的主要意义
  • 西安网站建设的费用手机网站公司
  • 免费做电子书的网站有哪些重庆市建设工程施工安全网
  • 网站建设中 显示电子商务网页制作是什么
  • 网站开发 合同网站制作网站建站
  • 北京住房和城乡建设部网站首页网站开发项目流程设计
  • 蒙文网站建设情况汇报wordpress博客 免费下载
  • 防城港建设局网站云溪网络建站宝盒
  • 沈阳建设工程质量检测中心网站天河区建网站
  • 广元网站建设北京欢迎你网站建设
  • 建设网站一般多钱app推广赚钱
  • 域名怎么解析到网站做网站的收益