disruptor框架(如何评价字节跳动开源的高性能分布式训练框架BytePS)
本文目录
如何评价字节跳动开源的高性能分布式训练框架BytePS
BytePS就是一种新的实现allreduce的手段(增加bandwidth server,如果我们认为allreduce必须是MPI中的那种实现(多个进程,把每个进程的数据完成累加后又广播给各个进程),那么BytePS就不是allreduce。我倾向于前面那种理解。
我们知道Allreduce可以分成两步ReduceScatter和AllGather两个阶段实现,如果像MPIl的allreduce那样,不借助额外的bandwidth server,那么ReduceScatter和AllGather的通信量和ring allreduce是一样的。
当引入额外的bandwidth server后,ReduceScatter 到bandwidth server上去,再从bandwidth server上AllGather,就可以带来BytePS的好处了,可以把每个worker的数据分成很多段,每一段都经过ReduceScatter和AllGather,前一段的AllGather和后一段的ReduceScatter 恰好反方向,不抢占带宽,可以重叠起来(流水),这样从worker视角来看,需要传输的数据是ring allreduce的一半,而又能把worker的上下行带宽用满,所以理论上BytePS可以比ring allreduce快一倍。(需要注意:1,每一段在做reducescatter 或allgather 时,内部还会分段;2,这种reducescatter 和allgather 的实现会因为bandwidth contention 稍微影响性能。)
这里的关键是:1,引入额外的bandwidth server,2,把ReduceScatter和AllGather 流水起来。
因此,使用BytePS要见到效果,必须引入一些纯CPU节点扮演bandwidth server的角色。这一定程度上相当于给那些带有gpu的worker增加了网卡。但这里需要注意的是,在gpu集群里,worker和worker之间的带宽通常是比较高的,譬如100Gbps,而gpu节点和额外的cpu集群之间的带宽通常没有这么高,可能只有25Gbps,这种情况BytePS 就不是比ring allreduce快一倍,而是慢一倍了,因为在ReduceScatter和AllGather过程只能打满25Gbps的带宽,相比ring allreduce通信量减少一半,带宽减少变成1/4了,反而会慢一倍。
这项工作还是引入一些新的认识(至少对我如此):以前我也分析过有额外ps的开销,但那时没有想到可以把ReduceScatter和AllGather重叠起来,所以当时的结论是加额外ps,虽然通信量减少一半,但对带宽利用率也变成1/2了,那么和ring allreduce完成时间还是一样的,所以ps没有好处。BytePS通过把ReduceScatter和AllGather流水起来,实现了比ring allreduce快一倍的可能性,这是BytePS的新贡献。
如何构建一个基于netty的后端服务器
下面将分析手头上一个项目,运用的技术很全,值得学习,先做一个简单介绍,当然业务部分代码就不讲了。
整个工程采用maven来管理,主要的技术是spring+jedis+netty+disruptor.看这个组合,这个服务器端性能应该很不错。
这个工程又引发我对技术无限热爱 ,哈哈。
这
个工程,目前主要是针对一些基于json/xml/text格式的请求,同时也是支持标准手机请求的,当然,可以自定义一些其他格式或者pc端的请求,而
且针对不同URI,后面挂了不同的handler,这些可能都是一些web处理的基本思想,只是脱离了常规的web容器或者应用服务器。
xml工具采用xstram来处理,两个字,方便。
json工具采用jackson\不知道和业界出名的fastjson\gson\sf.json有何区别,待鉴定。
客
户端的请求,统一继承ClientRequestModel,经过编码统一转化为domainMessage,交由disruptor来处理,其实oop
里什么继承,实现,封装思想,大部分都在围绕一个东西在走,一句话,把看似各有棱角的东西如何转化为共同的东西,求同存异啊(比如,水,石头,空气等,如
果在这一层,我们没法统一用一个特征来表示,我们可以先把它转化为分子,那是不是可以用同一个东西来表示呢?如何高度抽象封装,这真是一门艺术)。
看这个工程对客户端请求,是如何一步步处理的,message-》request-》event 交由disruptor来处理,很美妙的思想。在了解这些之前,我们有必要深入学习一下disruptor,很特别的一个框架,宣言很牛逼,中文文档在这里(
本文相关文章:
java spring(Java编程中Spring是用的最多的框架么)
2024年7月24日 14:25
phpcms和帝国cms哪个好(值得推荐的开源PHP、CMS系统有哪些)
2024年7月24日 03:56
JDK9使用spring框架发现漏洞,官方对此有何回应?如何安装JDK9,如何安装JAVA9
2024年7月14日 05:18
fastjson maven(怎么利用maven快速构建SSM框架)
2024年7月9日 04:24
版本控制系统(linux、centos等开源软件在开发过程中,如果某个模块或功能同时被多个人修改,该怎么处理呢)
2024年7月8日 03:36
jpa和hibernate的区别(JAVA的SSH框架真的过时了吗现在学习怎么样)
2024年7月4日 11:26
许多js框架或js库的min版本是怎么做出来的?求助,json解析为什么解不出来
2024年7月4日 10:32
谷歌服务框架(google服务框架是什么google服务框架有什么用)
2024年7月3日 11:14
J2EE开发中的MVC框架指的是什么啊?ssm框架中spring,springMVC,mybatis分别什么作用
2024年6月28日 01:34
soa架构设计(随着架构设计的演变为什么项目中需要用到SOA框架)
2024年6月26日 20:47
laravel学院(yii2和laravel哪个是PHP Web开发框架的未来)
2024年6月26日 20:01
wordpress安卓客户端(怎么为WordPress框架网站开发安卓客户端)
2024年5月10日 19:17
更多文章:
在校园设置英雄榜是什么德育方法?一克拉梦想之校园英雄女主朱莉扮演者的详细资料
2024年5月7日 17:46
coreldraw x4简体中文正式版(排版软件coreldraw哪个好用)
2024年6月23日 04:57
起点中文网手机版(起点中文网手机版为什么显示有这么多评论但是点进去却只有那两条如何看到全部的评论)
2024年7月2日 12:01
电脑设置定时关机win7(win7怎样设置定时关机,定时开机)
2024年7月1日 14:30
win7宽带连接怎么创建(WIN7怎么创建一个新的网络连接)
2024年7月1日 08:23
win10无限重启按f2教程(win10无限重启解决办法是什么)
2024年8月16日 01:45