2018-03-30 00:23:18 hy13684802853 阅读数 14286
  • 深度学习框架Tensorflow案例实战视频课程

    深度学习框架Tensorflow案例实战视频培训课程概况: Tensorflow是谷歌开源的深度学习(包括机器学习)框架,伴随着人工智能业的兴盛其大名早已响彻云霄。本课程从Tensorflow安装开始讲起,从基本计算结构到深度学习各大神经网络,全程案例代码实战,一步步带大家入门如何使用深度学习框架Tensorflow,玩转Tensorflow模型训练、等所有知识点。

    30267 人正在学习 去看看 唐宇迪

前些天在逛知乎的时候发现了一个好东西,一个非常好用的深度学习云平台——Floyd。它是一个非常便捷的深度学习云计算平台,虽然我前面已经搭建过了GPU版本的tensorflow,但是在速度上还是比不上在云服务器上训练啊。百度floyd后出现了一堆奇怪的东西,就是没有这个网站,我一开始还找了好久,所以为了方便我就把网站的地址贴在下面这里吧。 https://www.floydhub.com/

打开这个网站,你就发现了新大陆。



我们可以看到他的服务宗旨“你专心研究,我们负责环境配置,部署等其它”。

它使用的亚马逊的硬件资源,但是价格却很便宜,学生党完全能够负担的起,而且新注册的用户有好几个小时的免费使用时间,看上去很短,但是用来训练一些小一点的项目也是可以使用一段时间的。我体验了一下floyd,感觉很不错,对一些为配环境感到烦恼的人来说是很大的福音,因为floyd为用户提供了主流框架各个版本的环境,还有一点是一些常用的数据集也有现成的,用户上传的个人用户集也可以共享使用。

这里简述一下使用的流程。

1.首先当然是取注册一个账号。

2.然后安装一个客户端。如果你装了pip,那么就是一句命令的事。

因为我使用的事anaconda,所以我就在anaconda的命令行下面进行安装,成功之后显示如下:



3.接着登录


输入y之后浏览器会自动跳转到下面这个页面


复制这一串身份验证令牌,到终端粘贴,这里要注意的是终端不会显示你复制的身份验证令牌,所以粘贴之后回车就行了,复制之后回到终端右键一下就粘贴好了,如果不确定就右键点击终端的窗口,选择编辑->粘贴就行了。成功之后如下:



之后的运行命令在floyd上都有很详细的解释,运行之后在你的项目之下会出现这两个东西:



运行的时候不知道怎么操作在floyd中也有命令生成器给你参考:


我摸索了几下发现速度真的快了非常多,不过在使用自己的数据集的时候出了一点问题,我的数据集上传了,数据集路径也添加了,但最后还是失败了,不知道为什么,使用floyd还是不太熟练,以后还是要多用几次。

等我顺利使用成功后回来更新这篇博客。


更新来了(2018/5/24)

首先呢,我要收回一下上面的话,那就是速度并没有快很多,而且我记得第一次看的时候好像有免费的GPU使用时间,今天过来一看好像没了,于是就只能用CPU试一下,最后发现和我自己使用笔记本电脑的CPU是并没有太大差别。闲话不多说下面直接开始正文,这次使用的代码是基于卷积神经网络实现的数字识别,一个入门的程序,代码来自于我买的慕课网上的那个课程。


首先:进入代码所在的文件夹后登录floyd,可能我这不和大家不同,我的floyd是装在另一个环境上的,所以我要先启动一下我的环境。


启动我的环境之后登录


然后在floyd的网站上新建一个项目,我就直接演示结果好了,怎么创建看上面没更新之前的文章


创建之后在命令行初始化一下


再然后执行代码


进入到这个url,可以发现他就开始运行了


最后就是我项目的文件夹,像这样:只有一个py文件,其他的都是自动生成的




再最后:

说明一下,就是速度真的没有快多少,不过因为我们是使用的CPU,所以可以理解。但是有一个好处就是在云平台运行的时候你可以不用管它,一段时间后大概运行完了再去看一下就行了。中间的时间你可以去干别的事。


再再最后:

当我试着运行其他复杂一点的程序的时候,发现Python文件之间无法互相调用,目前我只会在上面运行这种只有一个Python程序的例子,如果有两个或三个以上的程序并且程序之间有互相调用的会就会报错,目前还不知道是什么原因。所以我也还没买GPU,等我会用了在花钱吧!!!最后一个最后,等我解决了这个问题,自如的使用这个平台之后呢会在过来更新的。。。



2017-09-09 22:37:13 qq_36076233 阅读数 5180
  • 深度学习框架Tensorflow案例实战视频课程

    深度学习框架Tensorflow案例实战视频培训课程概况: Tensorflow是谷歌开源的深度学习(包括机器学习)框架,伴随着人工智能业的兴盛其大名早已响彻云霄。本课程从Tensorflow安装开始讲起,从基本计算结构到深度学习各大神经网络,全程案例代码实战,一步步带大家入门如何使用深度学习框架Tensorflow,玩转Tensorflow模型训练、等所有知识点。

    30267 人正在学习 去看看 唐宇迪

没看过视频的兄弟,给出视频地址https://help.aliyun.com/video_detail/58290.html?spm=5176.video54948.6.601.e10kzY   最好还是先看一遍视频,讲的还是比较详细的。摆出图像识别例子地址:https://help.aliyun.com/document_detail/58277.html?spm=5176.doc51800.6.567.YNAdBY

代码及相关资源下载地址:https://help.aliyun.com/document_detail/51800.html?spm=5176.doc58277.6.581.UeqVXk

我也是刚接触PAI,为了熟悉PAI和大家一样,找到了这个例子,头疼的是跑了快两天,一直报错,简直进入了人间炼狱,可能因为是菜鸟一枚,对于视频中没有提及的细节,自己没有处理好,导致不停得走弯路,为了正在寻找解决方案的大兄弟们能够少走弯路,我首先给出一套应该可以运行的流程,在讨论一些报错的案例。

废话不多说,直接来套流程:

1.先把OSS中的文件放好(很关键,好多错误都出于此)


在我们创建的Bucket下创建者四个文件夹。文件夹名字就这样不要改。check_point中什么都不放,cifar-10-batches-py中放入下图文件


同样的名称保持不变,这里提示一下,开始我并不知道解压过的cifar-10-python.gz还能再解压,于是乎就在cifar-10-batches-py中只放一个cifar-10-python文件,这样结果就是一直报错。predict_code,和train_code分别放cifar_predict_pai.py和cifar_pai.py。

2.创建实验,拖需要的组件


这里最好是用TensorFlow(V1.0)版本,有网友实验用V1.1和V1.2跑不成。

3.设置TensorFlow-1(训练模型)


(1)python代码文件选train_code目录下的cifar_pai.py

(2)数据源目录选cifar-10-batches-py这个文件夹(一定是选这个文件夹,而不是文件夹下的子文件)。

(3)输出目录选check_point

到此,TensorFlow-1模型的信息就设置好了

4.设置TensorFlow-2(预测模型)


与设置TensorFlow-1模型不同点只有一个,就是python代码文件的选取,这里选predict_code中的cifar_predict_pai.py,TensorFlow-2面o型的其余两项与设置TensorFlow-1模型一样。

5.恭喜,可以运行了,先运行TensorFlow-1模型,再运行TensorFlow-2


点击执行该节点,运行完之后再执行TensorFlow-2节点。在查看日志中的logview中观察结果以及训练过程。


分割线==========================================================================

这里解释下出错案例(我在实验中遇到的问题)

案例1.设置python代码文件路径时没有选项:

原因:OSS新建Bucket时要选区域华东2,不要选其他的


案例2.


出现这种情况是因为cifar-10-batches-py文件夹中没有按上面流程步骤1中的标准放置文件,可能放了多余的文件或者缺少相关文件。

案例3.


这种结果跟2中的原因相同,运行的没有结果,按照案例2的修改方式就可以解决。

案例4.


这是因为在选取数据源目录时选取的是cifar-10-batches-py文件夹中的子文件,应该选取cifar-10-batches-py这个文件夹,不要选取目录下具体的子文件


最后感谢和我一起犯错一起解决问题的大兄弟“情笔金坚------铜就是铜的”,也是因为解决这个问题才荣幸的认识到这个幽默的大兄弟。

2017-06-07 23:56:45 heyc861221 阅读数 1642
  • 深度学习框架Tensorflow案例实战视频课程

    深度学习框架Tensorflow案例实战视频培训课程概况: Tensorflow是谷歌开源的深度学习(包括机器学习)框架,伴随着人工智能业的兴盛其大名早已响彻云霄。本课程从Tensorflow安装开始讲起,从基本计算结构到深度学习各大神经网络,全程案例代码实战,一步步带大家入门如何使用深度学习框架Tensorflow,玩转Tensorflow模型训练、等所有知识点。

    30267 人正在学习 去看看 唐宇迪

作者:陈迪豪,小米深度学习工程师,负责小米云深度学习平台的架构和实现,目前专注于TensorFlow和Kubernetes社区。
责编:何永灿,欢迎人工智能领域技术投稿、约稿、给文章纠错,请发送邮件至heyc#csdn.net(#改为@)
本文为《程序员》原创文章,未经允许不得转载,更多精彩文章请订阅《程序员》

深度学习服务介绍

机器学习与人工智能,相信大家已经耳熟能详,随着大规模标记数据的积累、神经网络算法的成熟以及高性能通用GPU的推广,深度学习逐渐成为计算机专家以及大数据科学家的研究重点。近年来,无论是图像的分类、识别和检测,还是语音生成、自然语言处理,甚至是AI下围棋或者打游戏都基于深度学习有了很大的突破。而随着TensorFlow、Caffe等开源框架的发展,深度学习的门槛变得越来越低,甚至初中生都可以轻易实现一个图像分类或者自动驾驶的神经网络模型,但目前最前沿的成果主要还是出自Google、微软等巨头企业。

Google不仅拥有优秀的人才储备和大数据资源,其得天独厚的基础架构也极大推动了AI业务的发展,得益于内部的大规模集群调度系统Borg,开发者可以快速申请大量GPU资源进行模型训练和上线模型服务,并且通过资源共享和自动调度保证整体资源利用率也很高。Google开源了TensorFlow深度学习框架,让开发者可以在本地轻易地组合MLP、CNN和RNN等模块实现复杂的神经网络模型,但TensorFlow只是一个数值计算库,并不能解决资源隔离、任务调度等问题,将深度学习框架集成到基于云计算的基础架构上将是下一个关键任务。

除了Google、微软,国内的百度也开源了PaddlePaddle分布式计算框架,并且官方集成了Kubernetes等容器调度系统,用户可以基于PaddlePaddle框架实现神经网络模型,同时利用容器的隔离性和Kubernetes的资源共享、自动调度、故障恢复等特性,但平台不能支持更多深度学习框架接口。而亚马逊和腾讯云相继推出了面向开发者的公有云服务,可以同时支持多种主流的开源深度学习框架,阿里、金山和小米也即将推出基于GPU的云深度学习服务,还有无数企业在默默地研发内部的机器学习平台和大数据服务。

面对如此眼花缭乱的云服务和开源技术,架构师该如何考虑其中的技术细节,从用户的角度又该如何选择这些平台或者服务呢。我将介绍小米云深度学习平台的架构设计与实现细节,希望能给AI领域的研发人员提供一些思考和启示。

云深度学习平台设计

云深度学习平台,我定义为Cloud Machine Learning,就是基于云计算的机器学习和深度学习平台。首先TensorFlow、MXNet是深度学习框架或者深度学习平台,但并不是云深度学习平台,它们虽然可以组成一个分布式计算集群进行模型训练,但需要用户在计算服务器上手动启动和管理进程,并没有云计算中任务隔离、资源共享、自动调度、故障恢复以及按需计费等功能。因此我们需要区分深度学习类库以及深度学习平台之间的关系,而这些类库实现的随机梯度下降和反向传播等算法却是深度学习应用所必须的,这是一种全新的编程范式,需要我们已有的基础架构去支持。

云计算和大数据发展超过了整整十年,在业界催生非常多优秀的开源工具,如实现了类似AWS IaaS功能的OpenStack项目,还有Hadoop、Spark、Hive等大数据存储和处理框架,以及近年很火的Docker、Kubernetes等容器项目,这些都是构建现代云计算服务的基石。这些云服务有共同的特点,例如我们使用HDFS进行数据存储,用户不需要手动申请物理资源就可以做到开箱即用,用户数据保存在几乎无限制的公共资源池中,并且通过租户隔离保证数据安全,集群在节点故障或者水平扩容时自动触发Failover且不会影响用户业务。虽然Spark通过MLib接口提供部分机器学习算法功能,但绝不能替代TensorFlow、Caffe等深度学习框架的作用,因此我们仍需要实现Cloud Machine Learning服务,并且确保实现云服务的基本特性——我将其总结为下面几条:

  • 屏蔽硬件资源保证开箱即用
  • 缩短业务环境部署和启动时间
  • 提供“无限”的存储和计算能力
  • 实现多租户隔离保证数据安全
  • 实现错误容忍和自动故障迁移
  • 提高集群利用率和降低性能损耗

相比于MapReduce或者Spark任务,深度学习的模型训练时间周期长,而且需要调优的超参数更多,平台设计还需要考虑以下几点

  • 支持通用GPU等异构化硬件
  • 支持主流的深度学习框架接口
  • 支持无人值守的超参数自动调优
  • 支持从模型训练到上线的工作流

这是我个人对云深度学习平台的需求理解,也是小米在实现cloud-ml服务时的基本设计原则。虽然涉及到高可用、分布式等颇具实现难度的问题,但借助目前比较成熟的云计算框架和开源技术,我们的架构和实现基本满足了前面所有的需求,当然如果有更多需求和想法欢迎随时交流。

云深度学习平台架构

遵循前面的平台设计原则,我们的系统架构也愈加清晰明了,为了满足小米内部的所有深度学习和机器学习需求,需要有一个多租户、任务隔离、资源共享、支持多框架和GPU的通用服务平台。通过实现经典的MLP、CNN或RNN算法并不能满足业务快速发展的需求,因此我们需要支持TensorFlow等用户自定义的模型结构,并且支持高性能GPU和分布式训练是这个云深度学习平台的必须功能,不仅仅是模型训练,我们还希望集成模型服务等功能来最大化用户的使用效益。

计算机领域有句名言“任何计算机问题都可以通过增加一个中间层来解决”。无论是AWS、OpenStack、Hadoop、Spark还是TCP/IP都是这样做的,通过增加一个抽象层来屏蔽底层资源,对上层提供更易用或者更可靠的访问接口。小米的cloud-ml平台也需要实现对底层物理资源的屏蔽,尤其是对GPU资源的抽象和调度,但我们不需要重新实现,因为社区已经有了很多成熟的分布式解决方案,如OpenStack、Yarn和Kubernetes。目前OpenStack和Yarn对GPU调度支持有所欠缺,虚拟机也存在启动速度慢、性能overhead较大等问题,而容器方案中的Kubernetes和Mesos发展迅速,支持GPU调度等功能,是目前最值得推荐的架构选型之一。

目前小米cloud-ml平台的任务调度和物理机管理基于多节点的分布式Kubernetes集群,对于OpenStack、Yarn和Mesos我们也保留了实现接口,可以通过实现Mesos后端让用户的任务调度到Mesos集群进行训练,最终返回给用户一致的使用接口。目前Kubernetes最新稳定版是1.6,已经支持Nvidia GPU的调度和访问,对于其他厂商GPU暂不支持但基本能满足企业内部的需求,而且Pod、Deployment、Job、StatefulSet等功能日趋稳定,加上Docker、Prometheus、Harbor等生态项目的成熟,已经在大量生产环境验证过,可以满足通用PaaS或者Cloud Machine learning等定制服务平台的需求。

使用Kubernetes管理用户的Docker容器,还解决了资源隔离的问题,保证不同深度学习训练任务间的环境不会冲突,并且可以针对训练任务和模型服务使用Job和Deployment等不同的接口,充分利用分布式容器编排系统的重调度和负载均衡功能。但是,Kubernetes并没有完善的多租户和Quota管理功能,难以与企业内部的权限管理系统对接,这要求我们对Kubernetes API进行再一次“抽象”。我们通过API Server实现了内部的AKSK签名和认证授权机制,在处理用户请求时加入多租户和Quota配额功能,并且对外提供简单易用的RESTful API,进一步简化了整个云深度学习平台的使用流程,整体架构设计如图1。

图片描述

图1 云深度学习平台整体架构

通过实现API Server,我们对外提供了API、SDK、命令行以及Web控制台多种访问方式,最大程度上满足了用户复杂多变的使用环境。集群内置了Docker镜像仓库服务,托管了我们支持的17个深度学习框架的容器镜像,让用户不需要任何初始化命令就可以一键创建各框架的开发环境、训练任务以及模型服务。多副本的API Server和Etcd集群,保证了整个集群所有组件的高可用,和Hadoop或者Spark一样,我们的cloud-ml服务在任意一台服务器经历断网、宕机、磁盘故障等暴力测试下都能自动Failover保证业务不受任何影响。

前面提到,我们通过抽象层定义了云深度学习平台的接口,无论后端使用Kubernetes、Mesos、Yarn甚至是OpenStack、AWS都可以支持。通过容器的抽象可以定义任务的运行环境,目前已经支持17个主流的深度学习框架,用户甚至可以在不改任何一行代码的情况下定义自己的运行环境或者使用自己实现的深度学习框架。在灵活的架构下,我们还实现了分布式训练、超参数自动调优、前置命令、NodeSelector、Bring Your Own Image和FUSE集成等功能,将在下面逐一介绍。

云深度学习平台实现

前面提到我们后端使用Kubernetes编排系统,通过API Server实现授权认证和Quota配额功能。由于云深度学习服务是一个计算服务,和我以前做过的分布式存储服务有着本质的区别,计算服务离线运算时间较长,客户端请求延时要求较低而且吞吐很小,因此我们的API服务在易用性和高性能上可以选择前者,目前主流的Web服务器都可以满足需求。基于Web服务器我们可以实现集成内部权限管理系统的业务逻辑,小米生态云提供了类似AWS的AKSK签名认证机制,用户注册登录后可以自行创建Access key和Secret key,请求时在客户端进行AKSK的签名后发送,这样用户不需要把账号密码或密钥加到请求中,即使密钥泄露也可以由用户来禁用,请求时即使签名被嗅探也只能重放当前的请求内容,是非常可靠的安全机制。除此之外,我们参考OpenStack项目的体系架构,实现了多租户和Quota功能,通过认证和授权的请求需要经过Quota配额检查,在高可用数据库中持久化相应的数据,这样平台管理员就可以动态修改每个租户的Quota,而且用户可以随时查看自身的审计信息。

小米cloud-ml服务实现了深度学习模型的开发、训练、调优、测试、部署和预测等完整功能,都是通过提交到后端的Kubernetes集群来实现,完整的功能介绍可以查看官方文档http://docs.api.xiaomi.com/cloud-ml/ 。Kubernetes对外提供了RESTful API访问接口,通过YAML或者JSON来描述不同的任务类型,不同编程语言实现的系统也可以使用社区开发的SDK来访问。对于我们支持的多个深度学习框架,还有开发环境、训练任务、模型服务等功能,都需要定制Docker镜像,提交到Kubernetes时指定使用的容器镜像、启动命令等参数。通过对Kubernetes API的封装,我们可以简化Kubernetes的使用细节,保证了对Mesos、Yarn等后端支持的兼容性,同时避免了直接暴露Kubernetes API带来的授权问题以及安全隐患。

除了可以启动单个容器执行用户的训练代码,小米cloud-ml平台也支持TensorFlow的分布式训练,使用时只需要传入ps和worker个数即可。考虑到对TensorFlow原生API的兼容性,我们并没有定制修改TensorFlow代码,用户甚至可以在本地安装开源的TensorFlow测试后再提交,同样可以运行在云平台上。但本地运行分布式TensorFlow需要在多台服务器上手动起进程,同时要避免进程使用的端口与其他服务冲突,而且要考虑系统环境、内存不足、磁盘空间等问题,代码更新和运维压力成倍增加,Cloud Machine Learning下的分布式TensorFlow只需要在提交任务时多加两个参数即可。有人觉得手动启动分布式TensorFlow非常繁琐,在云端实现逻辑是否更加复杂?其实并不是,通过云服务的控制节点,我们在启动任务前就可以分配不会冲突的端口资源,启动时通过容器隔离环境资源,而用户不需要传入Cluster spec等繁琐的参数,我们遵循Google CloudML标准,会自动生成Cluster spec等信息通过环境变量加入到容器的启动任务中。这样无论是单机版训练任务,还是几个节点的分布式任务,甚至是上百节点的分布式训练任务,cloud-ml平台都可以通过相同的镜像和代码来运行,只是启动时传入的环境变量不同,在不改变任何外部依赖的情况下优雅地实现了看似复杂的分布式训练功能。

图片描述

图2 云深度学习平台分布式训练

看到这里大家可能认为,小米的cloud-ml平台和Google的CloudML服务,都有点类似之前很火的PaaS(Platform as a Service)或者CaaS(Container as a Service)服务。确实如此,基于Kubernetes或者Mesos我们可以很容易实现一个通用的CaaS,用户上传应用代码和Docker镜像,由平台调度和运行,但不同的是Cloud Machine Learning简化了与机器学习无关的功能。我们不需要用户了解PaaS的所有功能,也不需要支持所有编程语言的运行环境,暴露提交任务、查看任务、删除任务等更简单的使用接口即可,而要支持不同规模的TensorFlow应用代码,用户需要以标准的Python打包方式上传代码。Python的标准打包方式独立于TensorFlow或者小米cloud-ml平台,幸运的是目前Google CloudML也支持Python的标准打包方式,通过这种标准接口,我们甚至发现Google CloudML打包好的samples代码甚至可以直接提交到小米cloud-ml平台上训练。这是非常有意思的尝试,意味着用户可以使用原生的TensorFlow接口来实现自己的模型,在本地计算资源不充足的情况下可以提交到Google CloudML服务上训练,同时可以一行代码不用改直接提交到小米或者其他云服务厂商中的云平台上训练。如果大家在实现内部的云深度学习平台,不妨也参考下标准的Python打包方式,这样用户同一份代码就可以兼容所有云平台,避免厂商绑定。

除了训练任务,Cloud Machine Learning平台最好也能集成模型服务、开发环境等功能。对于模型服务,TensorFlow社区开源了TensorFlow Serving项目,可以加载任意TensorFlow模型并且提供统一的访问接口,而Caffe社区也提供了Web demo项目方便用户使用。目前Kubernetes和Mesos都实现了类似Deployment的功能,通过制作TensorFlow Serving等服务的容器镜像,我们可以很方便地为用户快速启动对应的模型服务。通过对Kubernetes API的封装,我们在暴露给用户API时也提供了replicas等参数,这样用户就可以直接通过Kubernetes API来创建多副本的Deployment实例,并且由Kubernetes来实现负载均衡等功能。除此之外,TensorFlow Serving本身还支持在线模型升级和同时加载多个模型版本等功能,我们在保证TensorFlow Serving容器正常运行的情况下,允许用户更新分布式对象存储中的模型文件就可以轻易地支持在线模型升级的功能。

对于比较小众但有特定使用场景的深度学习框架,Cloud Macine Learning的开发环境、训练任务和模型服务都支持Bring Your Own Image功能,也就是说用户可以定制自己的Docker镜像并在提交任务时指定使用。这种灵活的设置极大地降低了平台管理者的维护成本,我们不需要根据每个用户的需求定制通用的Golden image,事实上也不可能有完美的镜像可以满足所有需求,用户不同的模型可能有任意的Python或者非Python依赖,甚至是自己实现的私有深度学习框架也可以直接提交到Cloud Machine Learning平台上训练。内测BYOI功能时,我们还惊喜地发现这个功能对于我们开发新的深度学习框架支持,以及提前测试镜像升级有非常大的帮助,同时用户自己实现的Caffe模型服务和XGBoost模型服务也可以完美支持。

当然Cloud Machine Learning平台还可以实现很多有意思的功能,例如通过对线上不同GPU机型打label,通过NodeSelector功能可以允许用户选择具体的GPU型号进行更细粒度的调度,这需要我们暴露更底层Kubernetes API实现,这在集群测试中也是非常有用的功能。而无论是基于GPU的训练任务还是模型服务,我们都制作了对应的CUDA容器镜像,通过Kubernetes调度到对应的GPU计算节点就可以访问本地图像处理硬件进行高性能运算了。小米cloud-ml还开放了前置命令和后置命令功能,允许用户在启动训练任务前和训练任务结束后执行自定义命令,对于不支持分布式存储的深度学习框架,可以在前置命令中挂载S3 fuse和FDS fuse到本地目录,或者初始化HDFS的Kerberos账号,灵活的接口可以实现更多用户自定义的功能。还有超参数自动调优功能,与Google CloudML类似,用户可以提交时指定多组超参数配置,云平台可以自动分配资源起多实例并行计算,为了支持读取用户自定义的指标数据,我们实现了类似TensorBoard的Python接口直接访问TensorFlow event file数据,并通过命令行返回给用户最优的超参数组合。最后还有TensorFlow Application Template功能,在Cloud Machine Learning平台上用户可以将自己的模型代码公开或者使用官方维护的开源TensorFlow应用,用户提交任务时可以直接指定这些开源模板进行训练,模板已经实现了MLP、CNN、RNN和LR等经典神经网络结构,还可以通过超参数来配置神经网络每一层的节点数和层数,而且可以支持任意稠密和稀疏的数据集,这样不需要编写代码就可以在云平台上训练自己的数据快速生成AI模型了。

在前面的平台设计和平台架构后,要实现完整的云深度学习服务并不困难,尤其是集成了Docker、Etcd、Kubernetes、TensorFlow等优秀开源项目,组件间通过API松耦合地交互,需要的重复工作主要是打通企业内部权限系统和将用户请求转化成Kubernetes等后端请求而已,而支持标准的打包方式还可以让业务代码在任意云平台上无缝迁移。

云深度学习平台实践

目前小米云深度学习平台已经在内部各业务部门推广使用,相比于直接使用物理机,云服务拥有超高的资源利用率、快速的启动时间、近乎“无限”的计算资源、自动的故障迁移、支持分布式训练和超参数自动调优等优点,相信可以得到更好的推广和应用。

除了完成上述的功能,我们在实践时也听取了用户反馈进行改进。例如有内部用户反馈,在云端训练的TensorFlow应用把event file也导出到分布式存储中,使用TensorBoard需要先下载文件再从本地起服务相对麻烦,因此我们在原有基础架构实现了TensorboardService功能,可以一键启动TensorBoard服务,用户只需要用浏览器就可以打开使用。

管理GPU资源和排查GPU调度问题也是相当繁琐的,尤其是需要管理不同GPU设备和不同CUDA版本的异构集群,我们统一规范了CUDA的安装方式,保证Kubernetes调度的容器可以正常访问宿主机的GPU设备。当然对于GPU资源的调度和释放,我们有完善的测试文档可以保证每一个GPU都可以正常使用,根据测试需求实现的NodeSelector功能也帮忙我们更快地定位问题。

由于已经支持几十个功能和十几个深度学习框架,每次升级都可能影响已有服务的功能,因此我们会在多节点的分布式staging集群进行上线演习和测试,并且实现smoke test脚本进行完整的功能性测试。服务升级需要更新代码,但是为了保证不影响线上业务,无论是Kubernetes还是我们实现的API Server都有多副本提供服务,通过高可用技术先迁移服务进行滚动升级,对于一些单机运行的脚本也通过Etcd实现了高可用的抢主机制,保证所有组件没有单点故障。

大家可以通过前面提到的文档地址和cloud-ml-sdk项目了解到更多细节,或者关注我微博(@tobe-陈迪豪)与我交流。

总结

本文介绍了实现企业级云深度学习平台需要的概念和知识,基于小米cloud-ml服务探讨了云平台的设计、架构、实现以及实践这四方面的内容,希望大家看完有所收获。


订阅《程序员》(含iOS、Android及印刷版)请访问 http://dingyue.programmer.com.cn
图片描述


2017中国人工智能大会(CCAI 2017)| 7月22日-23日 杭州
本届CCAI由中国人工智能学会、蚂蚁金服主办,由CSDN承办,最专业的年度技术盛宴:
- 40位以上实力讲师
- 8场权威专家主题报告
- 4场开放式专题研讨会
- 超过100家媒体报道
- 超过2000位技术精英和专业人士参会
与大牛面对面,到官网报名:http://ccai.caai.cn/
图片描述

2017-12-25 21:35:46 fitzgerald0 阅读数 4311
  • 深度学习框架Tensorflow案例实战视频课程

    深度学习框架Tensorflow案例实战视频培训课程概况: Tensorflow是谷歌开源的深度学习(包括机器学习)框架,伴随着人工智能业的兴盛其大名早已响彻云霄。本课程从Tensorflow安装开始讲起,从基本计算结构到深度学习各大神经网络,全程案例代码实战,一步步带大家入门如何使用深度学习框架Tensorflow,玩转Tensorflow模型训练、等所有知识点。

    30267 人正在学习 去看看 唐宇迪

百度云上部署Tensorflow进行模型训练

    上半年就了解过百度云但是还是tf1.0版本的,而谷歌3月份的升级到1.2改动挺大的,百度云上更新滞后,所以尽管有tf平台,版本落后每小时付费还是有点小贵,于是没有考虑了,近日有对比了几家平台,百度云深度学习tensorflow1.2了,更符合个人的习惯,同时可以选择用jupyter登录写代码。

    首先是进入百度云官网 实名认证,目前所有的云服务目前都需要实名认证

1 . 点击 百度深度学习 开启 




2. 下一步创建集群

看清管理员密码设置要求,地区就近在三个可以选择的范围内选一个,设置一个简单的集群名称,这个密码在用jupyter登录的时候需要输入。




3. 设置成功,充值,余额必须大于20元rmb  ---开通成功




4 .查看基本信息,选择登录方式,我选择的是jupyter 





5. 此时点击jupyter进入提示非私人连接,没关系,点显示详细信息,信任该链接


 


6. 成功进入jupyter登录页面,输入上面设置的管理员密码



7 .查看此时的路径和已有的模块,tensorflow1.2 gpu版本





8. 上传数据,使用百度云提供的bos,点击如下(需要开通这项服务,少额付费)



9 .创建Bucket,上传文件,速度还是非常快的





10. 点击获取地址。出现如下链接




11.使用 wget 上传, -O 是 -O (大欧)  把上传的这个文件名改成 name.文件后缀 如果不改会发现名字非常的长,后面跟一大串地址代码,而且很可能无法使用。


12. 这时候其实一直是计费的,点击释放集成,停止计费,本次运算结束,下一次需要从第一步开始重新设置集成。


2017-08-22 10:16:45 weixin_34043301 阅读数 20
  • 深度学习框架Tensorflow案例实战视频课程

    深度学习框架Tensorflow案例实战视频培训课程概况: Tensorflow是谷歌开源的深度学习(包括机器学习)框架,伴随着人工智能业的兴盛其大名早已响彻云霄。本课程从Tensorflow安装开始讲起,从基本计算结构到深度学习各大神经网络,全程案例代码实战,一步步带大家入门如何使用深度学习框架Tensorflow,玩转Tensorflow模型训练、等所有知识点。

    30267 人正在学习 去看看 唐宇迪


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


摘要

深度学习的概念源于人工神经网络的研究,含多隐层的多层感知器就是一种深度学习结构。深度学习通过组合低层特征形成更加抽象的高层表示属性类别或特征,以发现数据的分布式特征表示。

嘉宾演讲视频和PPT地址: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来直接访问这个服务了。

总结

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

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



3D点云的深度学习

阅读数 13007

没有更多推荐了,返回首页