小米深度学习平台架构与实现

内容来源:2016年12月16日,小米云平台深度学习研发工程师陈迪豪在“GIAC 全球互联网架构大会”进行《支撑百度搜索引擎99.995%可靠名字服务架构设计》演讲分享。IT大咖说作为独家视频合作方,经主办方和讲者审阅授权发布。
阅读字数:2783 | 4分钟阅读

嘉宾演讲视频和PPT地址

http://t.cn/R9ONt8f

机器学习与深度学习应用

机器学习是通过机器进行自主学习数据而非以编码的方式;深度学习是机器学习的一个分支,主要包括四种最基本的网络结构。

CNN是卷积神经网络。通过卷积网络的模型,可以高效地处理图像分类或人脸识别等应用。

MLP是多层感知机,也就是传统的神经网络。已经被Google大量应用在Youtube视频推荐和APP推荐上。

RNN模型是在神经元里加入带记忆的神经元结构,可以处理和时间序列有关的问题。

RL是Alphago用到的增强学习,它的底层也用到一些深度学习技术。

CaseStudy:Image Classification

假如有一个应用要通过大量图片训练分辨出猫和狗的图片。如果按照传统的方法,程序员自己写应用来区别猫狗图片,可能需要很多规则和图形处理技巧,必须是一个图像专家。

但现在有了神经网络,输入只是数据,只要定义一个简单的神经网络,把应用写好后通过数据训练,就能实现一个效果不错的图像分类应用。

Google已经开源了Inception的模型,是层数比较高的一个多层神经网络。这个网络有些复杂,用GPU机器可能要训练两到三周才能实现。有了Tensorflow这样的工具后,可以在Github地址上直接下载它的模型。

CaseStudy:Game AI

GameAI是游戏人工智能,通过图像的结果用增强学习和Qlearning的算法,就可以实现它自动最大化地得到分数。

Introduce Tensorflow

Tensorflow是Google开源的一个Deep Learning Library,提供了C++和Python接口,支持使用GPU和CPU进行训练,也支持分布式大规模训练。

在使用Tensorflow的时候,只写一个静态纯文本的文件,通过Python解释器去运行,所以Tensorflow本质上只是一个Deep Learning Library。

Summary Of Tensorflow

Tensorflow这个Library需要人工安装,脚本需要手动运行,环境需要手动配置。分布式的Tensorflow要把一个脚本拷贝到多台机器上,手动配置。要进行代码调优需要手动Run和Tune。

我们想做Tensorflow模型调优,但服务器可能出现OOM、可能使用的端口被别人占用、也可能磁盘出现故障,服务器环境变成应用开发者的负担。

分布式Tensorflow同样需要把代码拷贝到分布式的各台机器上,且不论Tensorflow的性能是否随着节点数越多而增强,服务器维护成本已呈线性增加了。

虽然Google开源了一个非常好的深度学习工具,但它并没有解决深度学习应用部署和调度的问题。

有人说过,任何复杂的问题都能通过抽象来解决。

我们在中间引入一个分布式的管理系统,让上层业务应用不需要直接管理底层资源,由统一的调度系统去实现。

深度学习平台架构与设计

Cloud-ML:The Principles

我们希望这是一个云计算,而不是提供裸机的服务。用户只需写好应用代码提交,不用通过Ssh或登录到服务器上用脚本运行。

我们想把模型的训练和服务进行集成。一个模型训练完成后会得到一些模型文件,可以直接把这些模型文件应用起来。

我们希望这个平台是高可用的,即使用户的任务训练失败,也能重新给用户做一个调度。

用户之间的任务是需要做资源隔离和动态调度。

我们希望能支持并发的训练。

通过Automatically Tuning平台,用户可以一次提交多个超参数组合,让它并行训练,等训练结束可以直接看到效果。

Cloud-ML:All-In-One Platform

目前这个平台已经为用户提供深度学习框架的开发环境,开发完之后可以把代码提交上去,然后就可以训练,训练结果会直接保存在我们自己的分布式存储里。用户可以通过这个平台起一个RPC服务,他的手机或业务服务器能够直接调用这个服务。我们还提供了Model Zoo以及RPC客户端的一些功能。

这是深度学习平台的基本架构。

最上层是用户业务,有广告、搜索、游戏等,都有自己的业务场景,可以根据自己的数据格式编写一些Tensorflow、深度学习的脚本。通过Cloud-Ml的API把任务提交到服务端,由服务端创建一个容器,把它调用到真正的物理机计算资源上。

这整个大平台主要是由Tensorflow和Kubermetes实现的。由这个平台管理底层维护的CPU服务器和GPU服务器、虚拟机以及AWS的机器。

Cloud-ML:Kubernetes Inside

Kubermetes是一个容器的集群管理系统,它会依赖一个多节点的Etcd集群,有一个或多个Master去管理Kubelet节点。每个物理机会部署一个Kubelet和Docker进程,在上面会运行多个Docker的Container。

我们这个平台封装了一个Kubelet,让用户把业务代码提交上来,组成一个Docker容器的格式,然后由Kubelet去调度。

Cloud-ML:The Architecture

这是一个分层和解耦的基本架构,好处就是API服务只需要负责授权认证、任务管理,调度通过Kubermetes去做,Kubermetes的元数据都通过Etcd去存储,每一部分都利用API进行请求。这样就能把整个系统的组件解耦。

Cloud-ML:Train Job

有了深度学习平台之后,通过已经支持的API声明提交任务的名称,编写好Python代码的地址。运行代码的参数通过Post请求过来。

我们也提供SDK对API做了封装。

命令行工具Command能够直接把写好的脚本提交到云平台进行训练。还有内部集成的Web Console。

训练任务提交之后,在命令行可以看到任务训练日志。

Tensorboard可以看定义的模型结构。

Cloud-ML:Model Service

训练任务结束后可以直接起一个Model Service。因为文件已经保存在云存储里了,只要再发一个API请求,在后端也封装了一个Docker Image。

底层是依赖Google已经开源的Tensorflow Serving直接加载模型文件。

左边是Online Services,用户把模型训练完保存在这里,起一个容器,对外提供高性能的RPC服务。

Cloud-ML:Predict Client

在线服务支持Grpc和HTTP接口,理论上支持大部分编程语言。可以使用Java客户端、C++客户端、Go客户端和Python客户端,或直接在Andriod请求模型服务。

通过一个统一的接口对外提供图像相关的API,底层是由Kubermetes进行调度和资源隔离。

右边是Python的Grpc客户端,当模型起来以后,用户只需要编写二十几行Python代码,把模型的输入准备好,就可以请求服务。

Cloud-ML:Wrap-Up

在有深度学习平台以后,工作流是这样的。上面是工作环境,云端有服务器和基础架构维护的服务。用户在本地环境编写自己的Tensorflow应用,在本地验证这个应用能否跑起来。

通过Submit Train Job的API把任务提交到云端,真正用GPU或CPU训练的代码就在云端运行。运行完之后会把模型保存到分布式存储里面。

用户可以用官方提供的Test TF APP去看模型训练的效果如何,如果没问题,在用户自己的环境调用Deploy Model的API,这样就会把Model拿出来起一个容器,对外提供RPC服务。

用户就可以选择自己喜欢的客户端,用RPC的方式请求模型服务。

深度学习平台实践与应用

Practice:Distributed Training

支持分布式训练。用户在Python脚本里定义了一系列参数,把这个脚本拷贝到各台机器上去运行。

我们让用户把分布式节点个数和当前进程角色通过环境变量定义,环境变量名是固定的。这样它只需要一个环境变量就可以定义进程在分布式训练里的角色。

我们把用户的脚本拿出来以后,不需要它去管理服务器的环境,只需要声明这个集群有多少个PS、Worker和Master,把这些参数提交给Cloud-Ml的API服务,由它来申请可用的IP和端口。

Practice:Storage Integration

我们对存储系统做了集成。开源的Tensorflow目前只支持本地存储,因为我们在云端训练,任务由我们调度到特定的机器,用户不可能直接把训练数据放到本地。

我们希望用户能直接访问我们的分布式存储,所以对Tensorflow源码做了修改。提交任务的时候可以直接指定一个FDS的路径,系统就能根据用户的权限直接读取训练数据。

对Google官方的Tensorflow做了拓展。训练完之后数据全部放在分布式存储里,用Tensorflow指定FDS路径。

训练完把模型导出到FDS以后,通过Cloud-Ml的API创建一个服务,加载它的模型文件。

针对不同的模型声明不同的请求数据,输入类型和输入的值通过Json定义,就可以请求模型服务了。

Practice:Support HPAT

HPAT是神经网络里的超参数自动调优,极大缩短了科研人员和专注做算法模型人员的时间。

Practice:Dependency Management

让用户提交代码的时候提交一个标准的Python Package。

Practice:BringYour Own Image

让用户的Docker直接提交到Kubermetes集群里,真正彻底解决用户依赖的问题。

Practice:ModelZoo

我们把Model文件放到存储中,通过API把Paper实现了,不同的Model都可以部署到这个平台上,这样就可以通过RPC来直接访问这个服务了。

总结

今天主要给大家分享了深度学习的应用,以及在思考做一个深度学习平台之后,我们的考虑和架构设计,希望能给大家带来一些帮助。我们也相信云计算大数据时代已经到来,下一个时代将会是深度学习,并且未来会继续往云深度学习发展。谢谢大家!

今天的分享到此结束,谢谢大家!

相关推荐
1. 魅族推荐平台架构
2. 大数据平台快速解决方案

编者:IT大咖说,欢迎关注“itdakashuo”,@IT大咖说 ,转载请标明版权和出处

时间: 2024-09-21 19:25:07

小米深度学习平台架构与实现的相关文章

云计算深度学习平台架构与实践的必经之路

定义云深度学习平台什么是云深度学习?随着机器学习的发展,单机运行的机器学习任务存在缺少资源隔离.无法动态伸缩等问题,因此要用到基于云计算的基础架构服务.云机器学习平台并不是一个全新的概念,Google.微软.亚马逊等都有相应的服务,这里列举几个比较典型的例子. 定义云深度学习平台什么是云深度学习?随着机器学习的发展,单机运行的机器学习任务存在缺少资源隔离.无法动态伸缩等问题,因此要用到基于云计算的基础架构服务.云机器学习平台并不是一个全新的概念,Google.微软.亚马逊等都有相应的服务,这里列

老师木讲架构:深度学习平台技术演进

2017年12月22日,袁进辉(老师木)代表OneFlow团队在全球互联网架构大会上海站做了<深度学习平台技术演进>的报告,小编对报告内容作简要梳理注解,以飨读者. 此次报告的主要观点为:(1)计算力是神经网络/深度学习复兴的最大推动力之一:(2)面对深度学习的计算力挑战,软件至少和硬件一样地关键,单靠硬件无法提供易用性和扩展性:(3)鉴于深度学习上层业务和底层硬件的独特性,传统大数据平台里的某些技术未必再对深度学习平台适用:(4)深度学习软件平台技术在快速演进中,一部分早期被采用的技术正在被

将旗下的深度学习平台免费开放,美团云到底是怎么考虑的?

随着人工智能和大数据的火热,与二者紧密相连的云服务也成为一片热土:除了从一开始就扎根于云服务行业的垂直厂商,更有不少具有一定体量的互联网公司跨界而入,BAT 如此,网易如此,京东亦如此. 实际上,连起家于团购和外卖行业的美团也已经趁势入局. 左手 Intel,右手 NVIDIA 10 月 31 日,美团点评旗下的云服务美团云,以"赋能 AI 共生共赢"为主题,在北京举行了 2017 年美团云人工智能峰会,这也是美团云首次举办面向行业的此类峰会. 在此次峰会上,美团云总经理李爽率先展示了

继谷歌、FB后 百度开放深度学习平台PaddlePaddle

9月26日消息,百度近日宣布其全新的深度学习开源平台PaddlePaddle在开源社区Github及百度大脑平台开放,供广大开发者下载使用. 继Google.Facebook后百度开放深度学习平台PaddlePaddle 什么是PaddlePaddle? Google于去年11月发布并开源了新的机器学习平台TensorFlow,供相关技术人员进行语音识别或照片识别等多项机器深度学习领域的研究:IBM几乎同步采取了行动,于去年11月底宣布通过Apache软件基金会免费为外部程序员提供System

华米CEO黄汪谈2017的人工智能战略:发力于深度学习平台与深度学习芯片

近日雷锋网(公众号:雷锋网)了解到,华米科技 CEO 黄汪在 2017 新年内部信中写到,华米成立人工智能实验室,并将发力深度学习平台的搭建和基于 DL 的可穿戴芯片的研发. 黄汪提到,人工智能是一种能力,华米经过今年一整年的准备,在近期宣布成立华米人工智能实验室,并声称在 2 年内成为业内顶尖的 AI 团队.据悉,华米人工智能实验室不仅负责搭建华米手表在云端运动及健康大数据的深度学习平台,还将与第三方合作,主导研发自有的第一颗基于深度学习的可穿戴芯片. 黄汪曾提到:我一直认为华米是一家人体数据

数人云联合清华OCP实验室共建深度学习平台

<企业网D1Net>11月14日(北京)近日,数人云与清华大学交叉信息研究院开放计算项目实验室(OCP实验室)合作共建深度学习平台,该平台通过数人云操作系统实现GPU资源共享,利用Docker技术交付深度学习的运行环境,让深度学习项目组师生可以更加灵活地使用GPU资源,并解决深度学习环境部署繁琐的问题. 深度学习算法的计算性能依赖强大的GPU计算能力,为了尽可能提高GPU资源利用率,数人云利用Mesos将GPU资源汇聚成资源池实现资源共享,并借用Docker交付深度学习的运行环境. 深度学习平

【BDTC先睹为快】邹永强:腾讯Mariana深度学习平台实战细节大曝光

2014年12月12-14日,由中国计算机学会(CCF)主办,CCF大数据专家委员会承办,中科院计算所与CSDN共同协办的  2014中国大数据技术大会(Big Data Technology Conference 2014,BDTC 2014) 将在北京新云南皇冠假日酒店拉开帷幕.大会为期三天,以推进行业应用中的大数据技术发展为主旨,拟设立"大数据基础设施"."大数据生态系统"."大数据技术"."大数据应用"."大

[译]搭建个人深度学习平台:GTX 1080 + Ubuntu 16.04 + CUDA 8.0RC + CuDNN 7 + Tensorflow/Mxnet/

本文讲的是[译]搭建个人深度学习平台:GTX 1080 + Ubuntu 16.04 + CUDA 8.0RC + CuDNN 7 + Tensorflow/Mxnet/, 原文地址:Build Personal Deep Learning Rig: GTX 1080 + Ubuntu 16.04 + CUDA 8.0RC + CuDnn 7 + Tensorflow/Mxnet/Caffe/Darknet 原文作者:Guanghan Ning 译文出自:掘金翻译计划 本文永久链接:github

谢源:计算存储一体化,在存储里做深度学习,架构创新实现下一代AI芯片

谢源教授于1997年获得清华大学电子工程系学士学位,于1999年和2002年获得普林斯顿大学电机工程系硕士和博士学位.于2003年加入宾夕法尼亚州立大学计算机系,2008年获得终身教职,2012年提升正教授.2014年他转入加州大学圣芭芭拉分校电机与计算机工程系(ECE)担任正教授.他同时也是北京大学的兼职教授和台湾新竹清华大学的客座教授. 谢源教授也拥有丰富的工业界经验,他于2002-2003年任职于IBM担任微电子部门全球设计中心的咨询工程师,2012年到2013年期间加入AMD,负责组建和