tf不同的功能以job划分,例如运行整个computation graph是一个功能,作为parameter server存储更新交换参数是一个功能。job由一系列task组成,每个task是一个进程,它完成指定的工作,计算、传输、读写等等。在tf的分布式实现中,用户要实现的分布式程序主要是两个部分,分别是graph的配置和集群的配置,client需要定义computation graph的结构,节点放在哪个job/task上,并且创建session,通过session请求graph计算到什么地方,一个client对应一个computation graph,如果采用了数据并行,那么就会产生多个graph。集群配置确定了有多少台机器,哪台机器执行哪个task。 tf没有专门实现paramter server,而是实现了server,server对象负责交换数据,但不是只交换网络的参数,只要涉及到不同设备间要交换的数据都是由server管理,例如下图中machine0的device 0和device 1之间交换网络的输入输出,因此,在实现神经网络时一般需要将网络参数放在称为ps的job中,从而在网络运行时自动的更新参数。一个task会实例化一个server对象,不同机器之间交换数据的协议有多种,例如gRPC、RDMA等。然后手动在不同的机器上分别执行程序,如下图所示。
图4 TensorFlow各台机器涉及到的内容 MXNet通过kvstore实现parameter server从而实现多机运行程序,设备之间传输是通过确定数据所在的context后相互交换NDArray。从15年推出的时候就已经支持分布式了,它将网络分布式训练的过程已经封装好,用户只需要确定网络的配置,哪些操作放在哪个GPU之上,开放给用户的接口是Module类的fit函数,这个函数内部会自动创建kvstore对象,在训练的时候梯度和权重会自己push/pull。启动分布式程序也不需要自己手动在多台机器上执行命令,MXNet封装好了launch.py,传入机器个数、主机ip等就能在一台机器上启动多台机器运行程序。
图5 MXNet各台机器涉及到的内容 PaddlePaddle的分布式结构主要有两个部分,trainer和parameter server。前者是配置网络,功能层、优化算法的python接口封装在了trainer_config_helpers类中,用户可以使用这些接口配置自己的网络,后者没有将接口放出来给用户使用,而是在c++程序中实现的,再通过python来调用c++程序。pd给的例子中通过fabric库来启动分布式程序,可以做到在一台机器上启动多台机器。在parameter server的使用上,pd针对一个网络可以拥有多个参数服务器ps,每个ps负责一部分的网络参数,与所有的trainers进行交换数据,如下图所示。
图6 PaddlePaddle分布式结构 4.小结 零零碎碎聊了一些各个框架中我比较关注的内容,作为Caffe的真爱粉,这三个框架我没有什么偏好,各有各的优点各有各的缺点,都有很多值得学习的地方。写之前对PaddlePaddle 的印象还挺不错的,没想到文档资料并不多,github上面的star虽然有4400+,但是感觉用的人好少,官方的文件对这个框架本身的东西介绍也少,重心放在了怎么使用上面。就使用上来看,周围的同学反而用Keras的比较多,有条件的话其实都下载试一试才能确定哪个更适合自己。 个人理解有限,如果文章有不对的地方,欢迎批评指正。 5. 参考文献 [1] TensorFlow [2] MXNet [3] PaddlePaddle [4] Benchmarking State-of-the-Art Deep Learning Software Tools [5] Comparative Study of Deep Learning Software Frameworks [6] TensorFlow Serving [7] Learn (contrib) [8] 谷歌发布深度学习库TensorFlow Fold,支持动态计算图 [9] TensorFlow Mobile [10] 宣布 TensorFlow 1.0 [11] MXNet设计和实现简介 [12] Deep Learning in a Single File for Smart Devices [13] [RELEASE] Announcing v0.9 Release Candidate 1 [14] MXNet专栏 | 陈天奇:NNVM打造模块化深度学习系统 [15] 跑在Kubernetes上的开源深度学习,百度这次带来了哪些技术看点? [16] TensorBoard: 图表可视化 [17] Finetuning AlexNet with TensorFlow [18] Sentiment Analysis Tutorial [19] Large Scale Distributed Deep Networks [20] Scaling Distributed Machine Learning with the Parameter Server [21] 理解和实现分布式TensorFlow集群完整教程 [22] Run Deep Learning with PaddlePaddle on Kubernetes 本文获我爱计算机授权转载发布,特此感谢。 原文地址:?p=1639 新智元招聘
职位:COO 职位年薪:50万(工资+奖金)-100万元(含期权) 工作地点:北京-海淀区 所属部门:运营部 汇报对象:CEO 下属人数:10人 年龄要求:25 岁至 40 岁 语 言:英语六级以上或海外留学从业背景 职位背景:在IT领域有专业团队管理经验 学历要求:硕士及以上 职位描述: 1. 负责新智元总体市场运营,智库与人工智能百人会经营,atv直播,政府关系统筹协调 2. 擅长开拓市场,并与客户建立长期多赢关系,有建构产业生态系统能力 3. 深度了解人工智能及机器人产业及相关市场状况,善于捕捉商业机会 4. 统筹管理公司各运营部门,兼管公司HR及财务部门 5. 带领运营团队完成营业额目标,并监控协调运营部与编辑部、研究部运作 6. 负责公司平台运营总体战略计划、合作计划的制定与实施 岗位要求 1、硕士以上学历,英语六级以上,较强的英语沟通能力或外企从业经验 2、 3年以上商务拓展经验,有团队管理经验,熟悉商务部门整体管理工作 3、 IT领域商务拓展经验、强大的团队统筹管理能力 4、 有广泛的TMT领域人脉资源、 有甲方市场部工作经验优先考虑 5、 知名IT媒体商务部门管理经验,广告、公关公司市场拓展部负责人优先 应聘邮箱:[email protected] HR微信:13552313024 (责任编辑:本港台直播) |