首页>会议文档 >

陈迪豪 - 小米深度学习平台_部分2

page:
陈迪豪 - 小米深度学习平台_部分2
陈迪豪 - 小米深度学习平台_部分2
陈迪豪 - 小米深度学习平台_部分2
陈迪豪 - 小米深度学习平台_部分2
陈迪豪 - 小米深度学习平台_部分2
陈迪豪 - 小米深度学习平台_部分2
陈迪豪 - 小米深度学习平台_部分2
陈迪豪 - 小米深度学习平台_部分2
陈迪豪 - 小米深度学习平台_部分2
陈迪豪 - 小米深度学习平台_部分2
陈迪豪 - 小米深度学习平台_部分2
陈迪豪 - 小米深度学习平台_部分2
陈迪豪 - 小米深度学习平台_部分2
陈迪豪 - 小米深度学习平台_部分2
陈迪豪 - 小米深度学习平台_部分2
陈迪豪 - 小米深度学习平台_部分2
陈迪豪 - 小米深度学习平台_部分2
陈迪豪 - 小米深度学习平台_部分2
陈迪豪 - 小米深度学习平台_部分2
陈迪豪 - 小米深度学习平台_部分2
陈迪豪 - 小米深度学习平台_部分2
陈迪豪 - 小米深度学习平台_部分2
陈迪豪 - 小米深度学习平台_部分2
陈迪豪 - 小米深度学习平台_部分2
陈迪豪 - 小米深度学习平台_部分2
陈迪豪 - 小米深度学习平台_部分2
陈迪豪 - 小米深度学习平台_部分2
陈迪豪 - 小米深度学习平台_部分2
陈迪豪 - 小米深度学习平台_部分2
陈迪豪 - 小米深度学习平台_部分2
陈迪豪 - 小米深度学习平台_部分2
陈迪豪 - 小米深度学习平台_部分2

陈迪豪 - 小米深度学习平台_部分2

所属会议:2016 GIAC 全球互联网架构大会会议地点:北京


下载

手机看
活动家APP客户端

扫二维码下载
或点击下载
Android iOS

9384次
浏览次数
2016 GIAC 全球互联网架构大会所有文档 丁雪丰 - Java生态圈与微服务_部分2 百度 郑然 - 支撑百度搜索引擎可靠性99%服务发现的设计 Real world Rust 陈皓 - 代码编程中的编程范式_部分1 陈皓 - 代码编程中的编程范式_部分2 陈皓 - 代码编程中的编程范式_部分3 彭晟杰 - 知乎的微服务架构实践 朱雪寒 - ENJOY后端架构演进_部分1 朱雪寒 - ENJOY后端架构演进_部分2 贝贝网 郁佳杰 - 贝贝百亿级服务架构及可用性保障实践 李尊敬 - 全球互联网架构大会 高成 - 特卖电商供应链系统演进 李文哲 - AI and Big Data Drive Fin-tech Innovation 宜人贷 王婷 - 互联网金融风控中的数据科学 李汐 - 轻松筹众筹平台架构演进历程 宋传胜 - 91金融的后台服务架构 谢丹博 - 滴滴弹性云实践 白山云科技 陈闯 - 分布式对象存储面临的挑战 日志易 陈军 - 海量日志分析与智能运维 熊猫TV 杨武明 - 多机房弹幕系统架构 一直播 张华伟 - 高并发直播系统服务端架构设计与思考 学霸君 袁荣喜 - 高可用实时语音系统 映客直播 王振涛 - 映客直播服务端架构优化之路 360 陈宗志 - 360 redis 生态圈 阿里巴巴 王晶昱(沈询) - 阿里分布式数据库双十一实践 李大勇 - 京东青龙系统数据库架构演进 美团 翁宁龙 - 美团点评数据库运维自动化实践与发展 丁雪丰 - Java生态圈与微服务_部分1 蚂蚁金服 杨志丰 - OceanBase架构演进和双11实践 李智慧 - 互联网高可用架构漫谈 曹建栋 - 内涵段子的稳定性建设 陈迪豪 - 小米深度学习平台_部分3 周小四 Ray Zhou - 企业应用云化架构设计 Yuming - BigDataInHulu 王守崑 - Bot 的场景化应用 王栋 - 从美团外卖看移动应用的流量场景细分_部分1 王栋 - 从美团外卖看移动应用的流量场景细分_部分2 王栋 - 从美团外卖看移动应用的流量场景细分_部分3 陈迪豪 - 小米深度学习平台_部分1 范冰 - 全球互联网架构大会_部分2 王守崑 - 人工智能:趋势 机会和思考 李笑来 - 未来是谁的天下 马全一 - ContainerOps - DevOps Orchestration The Container Orchestration on Mesos - Gilbert Song 邱剑 - 公有云里的容器 童剑 - API全生命周期管理 范冰 - 全球互联网架构大会_部分1

文档介绍

陈迪豪,个人兴趣广泛,在开源社区比较活跃,维护了1400+ star的容器Web管理平台Seagull。大二加入了小米做Android移动端开发,然后有幸学习到后端基础架构技术,参与了HBase、ZooKeeper等社区开发,并且开源了NewSQL依赖的全局严格递增timestamp服务chronos,对分布式存储有一定了解。后来加入云服务创业公司,负责存储、容器、大数据业务,参与了OpenStack、Docker、Ceph等开源项目,在Austin OpenStack Summit上分享存储相关的技术,期间也获得了AWS Solution Architect认证。目前从事云深度学习方向,负责深度学习平台的架构和实现,对容器调度系统Kubernetes和深度学习框架TensorFlow有一定了解。

演讲实录

晚上好~ 感谢大家来听我的直播分享。先自我介绍一下吧,我来自小米科技,以前做过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、MXNet、Caffe还是Torch,这些都只是深度学习的library。而在腾讯、阿里、百度都拥有着自己的深度学习平台,深度学习也要经历从小数据、大数据到云计算的历史潮流。

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

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

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

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

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

正如标题所提及到,这个平台会基于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这样的优秀开源项目实现大厂才拥有的深度学习平台。

×

打开微信扫一扫,分享到朋友圈