博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Tensorflow 深度学习分布式实现方式
阅读量:6582 次
发布时间:2019-06-24

本文共 3801 字,大约阅读时间需要 12 分钟。

hot3.png

A.Tensorflow官方方式。

 

     tensorflow 官方方式 是建立 第三方服务器 GRPC服务器 更新 权重,

    FF 前向 计算 s   BP 反馈计算梯度  然后更新权重w

     1. FF

     2.BP   RPC实时获取

     3.W更新 gRPC 实时获取 计算 更新

bazel-bin/tensorflow/core/distributed_runtime/rpc/grpc_tensorflow_server \--cluster_spec='worker|192.168.170.193:2500,prs|192.168.170.226:2500' --job_name=worker --task_id=0 &
bazel-bin/tensorflow/core/distributed_runtime/rpc/grpc_tensorflow_server \--cluster_spec='worker|192.168.170.193:2500,prs|192.168.170.226:2500' --job_name=prs --task_id=0 &

记住 分别按照 work的顺序 启动 193 机器 然后 226  机器

 设置with device

/job:worker/task:0/device:gpu:0

   详细教程 http://leotam.github.io/general/2016/03/13/DistributedTF.html

   以及 http://weibo.com/ttarticle/p/show?id=2309403987407065210809

B.个人使用过的实现的几种的方式

     1.采用spark 的RDD 结合 map 在 map里面执行每一层 每一层 FF BP 采用 broardCast传播全局变量 也就是计算的梯度 来接着 map里面进行 更新梯度操作

     此方式 主要是是 后期多层网络 这个map ,如果 你把每一层分开 这个会很长很长 stage 所以 初期 我当初采用这种方式过度下。

   2.后面 接着我使用了 spark 的mllib包 说起这种方式,以前 去面试时候,问我spark深度学习怎么做的,我说起这种方式,途牛 还有 一些其他的公司 面试官觉得我在忽悠他,有时候你不是原作者,你对spark的认识的只是 你自己的看法,也许 你工作用了很久,但是你用的都是简单的mlib graph dataframe hive sql 麒麟 presto 等等数据分析查询,但是这就是spark全部吗,spark 有很多东西,特别是有个@DevleplorApi标示这个 是交给开发者 来扩展的。

     网上很多分析spark源代码 只是其中的基本流程结构,其实 源代码很多,怎么可能分析的那么多,所以真的得想去学习,就自己去看,

   细心的同学 也许 会看到一个Layer 的类 ,在包名 ann ANN 人工神经网络,哈哈 就是他,

如果再细心看 也许 会看到 

   

      

对的 ,你没有看错 多层感知器MLP 前面已经讲了MLP 是怎么组成的了 ,所以 其实我们知道了全连接层 fc怎么写的啦 也知道 out层怎么写的,在实现Conv 卷积层 就是CNN在spark上实现了。复制下 这个代码 关键代码 修改就可以实现 分布式深度学习

  3.还有一种方式也是可以的,其实就是PipeLine管道 ,mlib机器学习的 ml管道方式,我工作时候一般都用这种方式,虽然我没有讲,因为 管道方式还是有一些bug fix ,比如 StringIndexer 在管道里面 无法反系列化  还有 有些模型也是spark没有实现系列化方式,需要自己来系列化,还有Normal 归一化  使用起来多个特征会有问题,即使你定义好了 featurecol 以及 labelcol 这里面很多东西 讲野讲不完,所以 我前面的spark 都是基础,如果你是个spark初级使用,怕错误,你就是使用mlib 的包里面的库,虽然没有管道的特性 但是不会出错,因为它里面帮你处理了这些默认参数的问题,比如决策树 随机森林 等那些参数都是例子中那样写的 摸,错了,是要根据你训练时候数据动态算的 ,等等还有很多,所以 你必须知道每一个算法的思想 不需要了解内部公式 。了解你也基本看不懂,不然 那些avier 每天国外那么多人工智能科学家 白混了吗。所以了解思想 为什么 参数需要这样 为什么? 

   

  继承 Predictor 或者 Classifier接口 实现自己的 FF BP update w

4.最后 还有一种方式 分布式数据库 分布式调度 参考 mxnet 深度学习库,python写的 虽然有scala 的api但是 运行都会报错,官方只保证python不会出错 好像保留着 希望开源开发者来开发,所以可以忽略掉,如果大家要使用建议 使用tensorflow 毕竟google全力维护的产品,而且支持越来越多,版本也更新越来越快,还有一个facebook的tourch7也可以,这些产品可以保证深度学习网络算法不会出问题,里面的公司,谁知道参数公式算法对不对,的但是google的 facebook的 肯定是对的,而且 加了很多网络上的优化特性,比较好,所以我讲 我学习 我使用都是tensorflow为主 ,  这种方式 实现是 ,使用一个kvstore内存数据库 比如memchache redis服务器 来维护 实时更新梯度,进而更新权重,实时获取w 用来FF BP

 

 

   我是使用apache ignite 

   比如分布式线程 map里面计算FF 然后 reduce计算BP同时 使用redis分布式服务器来更新这个w权重 保存梯度,然后在map  reduce 之后接入一个tasklet来更新update w计算,更新了w计算后重新又是 FF BP update   最外层有个大的线程池分布式调度这个多层网络并行问题,就是这么一个顺序, 至于中间w 梯度怎么更新 ,可以打开tensorflow的源代码 caffe的源代码 还有torch7源代码,你会发现 都是一样的,而且 后面加入卷积层 各种层,只要把tensorflow 里面的这层代码 内部公式 部分拷过来 参考写一下就可以了,这就是分布式实现,

    这就是分布式深度学习的实现,我不了解公式 怎么推导 怎么实现 科学家数学计算真是太难了,所以只能参考tensorflow里面源码的公式复制过来用,什么时候能看懂也不需要做程序员了,做码农了,去创业就能发财,科学家真是厉害,佩服的五体投地,智商上 完全看不懂啊,那些论文 http://arxiv.org/ 每天有麻省理工 斯坦福 哈佛 加州大学 google科学家  facebook科学家 机会半个月就会更新集中新的深度学习网络,人工智能 算法, 人工智能 = 深度学习+强化学习    强化学习 就是 训练最优大脑模型 实时训练 相当于人的最终大脑决策 判断, 而深度学习 相当于脑皮层 神经 对外部信息的处理。所以人工智能就是强化学习 加上深度学习 ,比如alphaGo就是强化学习来负责决策,CNN来负责处理棋子 下棋位置的范围确定,MCTS树最后结合来搜索, 说了很多题外话,这里 是tensorflow的最后一篇, 因为没有机器 来演示,我也负担不起了,实在是没钱了 ,创业一次,真的我学习了很多,但是找工作时候被当做污点 被那些面试官看不起 鄙视 ,比如途牛面试官觉得我在忽悠他,觉得我创业是个污点,可是这些知识都是创业学习的 ,为了创业而学习 而学习到的,至少 会很多很多网络 ,你会吗,我知道怎么训练, 还有一些公司面试官,也是觉得我是个骗子,觉得 我怎么可能能做分布式深度学习平台,2个多月找工作,没有找到,还有面试官说我 没什么水平,那一段时间觉得活得像狗一样,不懂人工智能 不懂深度学习 不懂机器学习的人 也 说我什么不懂,幸好现在的公司 喜马拉雅是唯一一家公司 给了我一份工作,知遇之恩 真是让人感动,我后面可能 更新其他 机器学习的使用教程,可能不更新深度学习了,因为当初面试被当做骗子 了 忽悠他了,隔行如隔山 ,我现在空余时间 在继续封装自己以前创业开发的一个分布式人工智能框架,上面四中方式都是我曾经使用过 尝试过的 都是可以的,大家猜我现在使用的那种方式,空余时间也可能没有了,我继续自己人工智能框架 希望未来人工智能 时代 来到时候能够 有机会 去创业, 其实 写了这么多博客 tensorflow 反而找工作被当做忽悠他,觉得我不可能实现人工智能 框架 ,觉得我不可能会使用深度学习,觉得我创业是个污点, 这像狗一样的几个月 我一直冥冥中记载心底,记得曾经别人对我说 你忽悠我 ,你没什么水平,至少机器学习 深度学习 大数据方面 还是可以的,闻道有先后 术业有专攻,所以 想起这样一段日子,我不服气,我不希望未来我还是会像一条狗一样,我要掌握自己的命运,我后面会一直开发研究自己的人工智能平台,希望 未来 不会 活的像条狗,一条 到处乞求一份工作 结果被当做骗子的创业狗。

 

 

 

 

  

    

转载于:https://my.oschina.net/yilian/blog/693660

你可能感兴趣的文章
手把手教你如何新建scrapy爬虫框架的第一个项目(下)
查看>>
前端基础15:JS作用域基础
查看>>
Linux系统相关命令
查看>>
BATJ面试必会之 Spring 篇(一)
查看>>
表驱动法
查看>>
什么是企业内训
查看>>
firefox无法显示java插件plugin
查看>>
H3C设备之OSPF DR选举
查看>>
List grantee right in oracle
查看>>
Activity生命周期
查看>>
通过VBS编写自动输入账号和密码、自动登录程序的脚本
查看>>
MTK APSoC SDK MT7621编译固件的快速开始
查看>>
深度解析Istio系列之安全模块篇
查看>>
Linux 系统 审计
查看>>
JS -------------------设置弹出框位置屏幕的中间
查看>>
性能测试 vbs使用(一)
查看>>
1.2 linux哲学思想
查看>>
jQuery基础
查看>>
BZOJ5312:冒险——题解
查看>>
echarts,两点连线,中间断裂
查看>>