小米陈迪豪:TensorFlow 与深度学习平台实践

orangefrog 发布于1年前 阅读1934次
0 条评论

 

以下内容精选自  Boolan C++系列直播:《TensorFlow与深度学习平台实践》 本文原创,转载请注明出处&原文链接。

小米陈迪豪:TensorFlow 与深度学习平台实践

陈迪豪 / 小米深度学习工程师

小米科技基础架构工程师,主要负责深度学习平台的开发与维护。国内TensorFlow开源框架为数不多的Contributor ,开发社区活跃贡献者。参与过HBase、OpenStack、Docker项目的开发,目前专注于TensorFlow与Kubernetes社区。对深度学习、人工智能、分布式存储等领域有丰富研究与开发经验。

      ◆     ◆

陈迪豪老师作为“2016 C++及系统软件技术大会”的讲师之一,将在10月底和C++之父Bjarne Stroustrup等40多位国内外大咖一起做出精彩分享。

【文末彩蛋】 C++大会完整PPT 、及 更多大咖直播 在本文最末领取~

- 直播内容回顾 -

晚上好~ 感谢大家来听我的直播分享。先自我介绍一下吧,我来自小米科技,以前做过Hadoop、HBase基础架构的开发,现在负责TensorFlow深度学习平台的搭建。

Part

1

大牛微访谈

问答采访,精选嘉宾主要分享内容。

1. 我们都知道TensorFlow是Google最近开源的人工智能框架,受到技术界强烈关注。与Caffe、Theano、Torch、MXNet等框架相比,TensorFlow在Github上Fork数和Star数都是最多的。tobe老师能否谈谈:TensorFlow的优势在哪里?有哪些不错的行业应用案例呢?

第一个问题是对比主流的深度学习框架,TensorFlow、MXNet、Caffe和Theano等。

我先说一下TensorFlow的优势和部分缺点吧,大家可以根据自己业务特点来选择。TensorFlow最大优势是社区活跃度高,这是我能亲身体会的,社区的issue打开后会有Google或者其他公司的人来评论和解决。例如我们在用TensorFlow serving实现的inference service时,我们很早就提出了generic service的实现,很快社区也在实现,这些就不一一赘述了。

其次TensorFlow定位是一个general purpose的深度学习library。大家比较熟悉的caffe可能专注于图像处理的学习上,TensorFlow无论是推荐、语音、图像和自然语言都有很广阔的使用场景。

尤其在工业应用上,Google连续发布了wide and deep model、youtube recommend system和show and tell模型几篇论文。详细介绍了TensorFlow在Google内部的Android Play应用推荐、YouTube视频推荐和图像处理的场景,源码和模型都是基于开源的TensorFlow实现,任何人都可以clone代码在本地复现这些功能。

就像编程语言之争,深度学习框架之争也是一个无休止的话题,我就简单介绍下TensorFlow的优势,更多信息也欢迎稍后与大家讨论下。

2.TensorFlow核心以C++写成,前端支持Python和C++。它的流行让人工智能的进入门槛变得越来越低。您能否分享一些TensorFlow的学习经验?如何才能更快更好地掌握TensorFlow的开发?

TensorFlow是C++实现的,开发者可以使用Python或者C++来编写深度学习应用。说实话,Python确实降低了学习的门槛,Python是动态的语言,语法和高级数据结构使用更简单,但使用C++其实门槛并不低。 尤其TensorFlow项目使用bazel来构建,而bazel的build文件经常修改更新。

我们在深度学习框架选型确定TensorFlow后,很快就开始拓展TensorFlow代码,使之支持内部的分布式对象存储后端。但在后续升级和维护中,编译源码还是遇到一些问题。当然作为数据工程师或者普通开发者,通过pip就可以安装TensorFlow,编写对应的Python脚本就可以训练神经网络模型。

对于学习方法我之前在某中文问答网站上总结过,不知道现在还是否使用,大家姑且也看一下:

  • 看Paper,了解TensorFlow核心概念 

  • 看官方文档,了解Usage 

  • 参照文档写Demo 

  • 使用TensorBoard加深印象 

  • 搭建分布式TensorFlow 

  • 学习深度学习算法 

  • 写更多的Demo 

  • 学更多的深度学习算法 

  • 写更多的Demo 

  • 参与TensorFlow社区讨论 

  • 看TensorFlow源码

我个人的学习路线,以前是做Infrastructure的,读过Google三驾马车的paper,现在做TensorFlow也是对paper十分重视,通过paper可以理解框架的设计模式,也是入门的必经之路。

其次是参与社区,如果你自己在学习,那只有一个人的时间,我们更推崇去leverage社区,让更多人去参与讨论。

很多人可能不知道,Google内部有个值班机制,每周会有人去搜StackOverflow中“tensorflow”的tag,负责回答有关TensorFlow的使用问题,因此Google这几位dev在社区也是非常有名的了。

3.我们知道小米也在人工智能方面有很多投入。您能否结合小米的产品,谈一谈TensorFlow及相关AI技术在小米产品中的一些实际应用案例?

大家如果想了解小米具体使用TensorFlow的业务,我可能不能直接回答业务名。但大家可以想象到的业务都已经开始尝试和使用深度学习和神经网络模型了,例如NLP、图像分类、人脸识别、推荐、广告、异常流量识别。

还有类似Prisma的neural style功能,我们也实现了对应的Android app,广告CTR预估在使用深度的预测模型,例如新闻推荐也在尝试从逻辑回归等传统模型迁移到深度神经网络,还有网络商品推荐和垃圾短信分类等。

如果大家对具体的某一个业务感兴趣我们也欢迎与大家私下交流,这里就只能介绍这么多了。

4.最后一个问题~ 刚了解到您在这次“2016 C++及系统软件技术大会”的演讲主题是:《基于TensorFlow和Kubernetes的深度学习平台实践》,能否提前给大家剧透下具体的分享内容?

其实这次微信分享我准备了一页PPT的:

小米陈迪豪:TensorFlow 与深度学习平台实践

我们一直在介绍TensorFlow,TensorFlow这么好,为什么我还需要分享“基于TensorFlow的深度学习平台”?

实际无论是Tensorflow、MXNet、Caffe还是Torch,这些都只是深度学习的library。而在腾讯、阿里、百度都拥有着自己的深度学习平台,深度学习也要经历从小数据、大数据到云计算的历史潮流。

幸运的是,Google率先基于TensorFlow推出了Cloud Machine Learning服务,这是一个按需计费、弹性拓展的云服务,开发者可以真正做到只关心业务逻辑和编写代码,由Google Cloud负责调度计算资源的服务。

我们也基于TensorFlow和Kubernetes,实现了和Google CloudML对标的深度学习平台,希望通过分享我们平台的实践,与业界更多大牛交流和学习。我们从Google CloudML alpha版开始使用,这是当时文档的截图。

小米陈迪豪:TensorFlow 与深度学习平台实践

Cloud Machine Learning Platform提供很简介的服务,你可以在本地搭建TensorFlow来训练,也可以在云端训练。

小米陈迪豪:TensorFlow 与深度学习平台实践  

但在底层,Google服务隐藏了实现的复杂度,例如训练任务的资源隔离、容器的调度、数据的持久化存储。这些都是我们做平台需要考虑了,而分析Google CloudML的工作流,也给了我们很大的启示。

小米陈迪豪:TensorFlow 与深度学习平台实践  

这是目前Google云机器学习服务的工作流,通过实现云端的训练任务、分布式存储,还有更重要的generic inference service,我们也整理出理想中的深度学习平台workflow。

小米陈迪豪:TensorFlow 与深度学习平台实践  

正如标题所提及到,这个平台会基于TensorFlow和Kubernetes搭建,使用Docker实现资源隔离,由Kubernetes进行资源调度,支持多版本的TensorFlow深度学习库。更多内容也将在后续与大家分享,如果感兴趣也欢迎大家私信交流~

Part

2

自由问答

来自直播群网友的自由互动交流

@江湖小虾米:你们基于Tensorflow主要是因为Google已经做了基于这个的云平台,如果基于它做小米的就可以有参考对象么?

我们调研过主流的深度学习框架,TensorFlow、MXNet、Caffe、Torch和Theano,其中TensorFlow是目前业界最成熟并且能够满足小米大部分业务的框架,这是选择TensorFlow的前提,而我们选择做Cloud Machine Learning Platform主要也是考虑到GPU资源利用和计算调度的问题,Google推出CloudML也是同样道理,因此基于TensorFlow和容器的解决方案也是水到渠成的。

@willz:分布式Tensorflow可以用model parallel的模式实现吗?还是只有data parallel? 

分布式TensorFlow能够支持模型并行和数据并行,需要在代码中实现,官方文档可能介绍不多,但看社区的项目代码例子可以了解到具体的用法。

@江湖小虾米:为啥选用的Tensorflow,而不是Caffe啥的? 

前面提及到,小米业务包含NLP、图像、语音、推荐、CTR等,使用Caffe无法满足大部分需求,因此我们在初期会主推TensorFlow框架。事实上小米的人脸识别和图像分类中也大量使用Caffe,不同业务会有不同需求,我们原则也是选择合适的工具解决对应的问题。

@null:我有个提问Tensorflow图模型的结构导致,sess.run后动态调试麻烦,老师有什么比较好的调教技巧?  

这是个好问题,社区为此写了专门的博客介绍调试方法。由于TensorFlow的op需要在Session中运行,单步调试会比传统应用困难,目前比较推崇的方案是在Python代码中插入pdb或者ipdb调试,在Graph定义时查看矩阵的rank信息,或者使用TensorBoard来审查每个op的定义和输入输出格式,最后才是通过Sess.run()来print具体的Variable值。

@风狼狼:上面提到的不同深度学习框架是否在不同特定领域有所擅长?比如做图像分割这家强,做语音识别那家强?

首先是的,不同框架在设计和实现上侧重点不同。图像分割我们目前主要用Caffe,效果目前在FDDB人脸检测准确率上达到了全球第一,而语音识别我们目前也在尝试使用TensorFlow。

@十一画生:tobe老师,你好!Tensorflow 显存的设计调度比较激进,我们在进行开发设计时,应该注意哪些资源调度的事项? 

这也是很好的问题,TensorFlow在op调度和GPU使用上也颇受争议,目前的调度策略是如果能够发现系统的CUDA和GPU,默认所有op调度到0号GPU上,如果在单机上启动多个分布式TensorFlow进程就会OOM,反而在CPU机器上不会有这个问题。因此在多GPU或者分布式环境下,必须注意使用tf.device()或者CUDA_VISIBLE_DEVICES环境变量来控制GPU的访问,还有把Varibles定义在同一个CPU上也有利于模型的更新和提高训练速度。

@智帅峰:  目前深度学习,为了做一些实验,训练一些模型,或者在传统的结构中加入一些自己新的想法和结构。 用TF 和CAFFE哪个更适合研究生群体呢?另外,学生群体的计算机性能都不会太好,那么以上两款框架,哪个适合我们一般的计算机设备呢? (没有牛的显卡的计算机)

对于想入门深度学习的同学,我会建议TensorFlow和Cafe都了解下,然后选择一个框架深度学习和研究,目前而言TensorFlow在学习资料、社区活跃度和项目实例上都比较有优势,当然目前caffe zoo也有很多优秀的model可以直接使用,具体还需要看你们的使用场景了。现在TensorFlow和Caffe都支持CPU版本,没有很牛显卡也可以用,对于有高性能计算的需求,云服务是最好的选择,可以考虑AWS的GPU虚拟机或者Google的CloudML服务。

@兰林:陈老师您好,问一下实现这样的云服务平台,需要修改Tensorflow的源码吗?还是只需要将Tensorflow、Docker和 Kubernentes结合起来就可以了? 

要实现简单的云服务平台,可以不修改TensorFlow源码,但平台功能受限于TensorFlow支持的特性。例如最新版本的TensorFlow支持本地存储、Google gs对象存储和HDFS,而企业内部需要对接分布式存储的话就需要修改源码。将TensorFlow于Docker、Kubernetes是社区推崇的部署方案,虽然目前没有开源的组件实现集成,但其实不难,希望通过我们的分享大家可以有所思路,例如Kubernetes、Docker这样的优秀开源项目实现大厂才拥有的深度学习平台。

2016 C++及系统软件技术大会

将于2016年10月28日-29日,在上海盛大举行。圈内元祖级大咖都来了——

C++之父 / Bjarne Stroustrup

前Facebook研究科学家 / Andrei Alexandrescu

ISO C++标准委员会资深权威 / Mike Spertus

《大话西游》《梦幻西游》主要开发者 / 云风

两岸著名C++专家 / 侯捷

 

......

C++谜弟表示要原地炸裂了!

戳 “阅读原文” 领2016 C++大会门票

小米陈迪豪:TensorFlow 与深度学习平台实践

【撒福利啦】直接回复本公众号:PPT,即可 免费领取:  C++大会完整PPT资料 +  大咖直播~

需要 登录 后回复方可回复, 如果你还没有账号你可以 注册 一个帐号。