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

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

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

没看过视频的兄弟,给出视频地址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-10-11 18:48:03 LuohenYJ 阅读数 2273
  • 深度学习框架Tensorflow案例实战视频课程

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

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

网易云课堂深度学习工程师微专业:

http://mooc.study.163.com/smartSpec/detail/1001319001.htm


吴恩达神经网络和深度学习课程主页:

http://mooc.study.163.com/course/deeplearning_ai-2001281002#/info

吴恩达【深度学习工程师】学习笔记

http://binweber.top/

http://blog.csdn.net/koala_tree

http://blog.csdn.net/zchang81

人工智能背景了解书籍:
人工智能狂潮(简单科普的书籍,深入浅出,但是译名太差)
https://book.douban.com/subject/26698202/



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

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

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

作者:陈迪豪,小米深度学习工程师,负责小米云深度学习平台的架构和实现,目前专注于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-09 13:50:46 tream733 阅读数 12355
  • 深度学习框架Tensorflow案例实战视频课程

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

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

深度学习对计算要求太高了,没有高配的电脑,只好搭建GPU云主机。我用的是美团云,理由是穷,用不起阿里云和企鹅云。不过,美团云确实良心啊,配置和价格都让人感动。下面是笔记记录主要内容:

  • 一、GPU主机的基本配置
  • 二、anaconda的安装和依赖包的安装
  • 三、jupyter_notebooks的使用
  • 四、跑一个cnn结构的MNIST测试下速度

sorry,之前说美团云不能自定义镜像,实际上是在创建好云主机后可以导出镜像,在下次在创建主机时导入使用。我就觉得不可能这么不人性化滴,upupup。

首先基本配置主机


首先购买美团云产品,账户最低余额10快(建议少少的冲,因为云服务器计价是按照占用服务器时间来计算的,停机仍在计价)
购买步骤:美团云首页->产品服务->GPU云主机->购买->身份证认证->在GPU云服务器界面->新建选择配置 (完成后会在GPU主机处给你外网ip和密码)
我选的是单gpu、ubuntu16.04等配置,美团云不提供扩展镜像,服务器给的镜像只会装一些驱动和cuda8.0、cuDNN6.0。我电脑是deepin系统,若是windows系统还要下载putty或者xshell工具,美团云管理界面提供的终端不好用。尤其是服务器给的密码很复杂,网页终端不支持粘贴,linux系统密码不会显示,连星星都不显示,你会在输密码时候就有点想骂人。
打开终端、输入:

  tream@DESKTOP-SVLVPIM:~$ sudo ssh 101.236.**.**

按照提示输入密码:分别是sudo的本机密码和服务器密码。首次登录会生成系统秘钥:

The authenticity of host '101.236.**.** (101.236.**.**)' can't be established.ECDSA key fingerprint is SHA256:QImpuT3AaOrmn9GqFNBrUy9hBs5LKL+******.
Are you sure you want to continue connecting (yes/no)? 

登录成功提示如下:

Welcome to Ubuntu 16.04 LTS (GNU/Linux 4.4.0-101-generic x86_64)

 * Documentation:  https://help.ubuntu.com/

170 packages can be updated.
0 updates are security updates.

创建用户:

root@Tream733:~# sudo adduser tream
Adding user `tream' ...
Adding new group `tream' (1000) ...
Adding new user `tream' (1000) with group `tream' ...
Creating home directory `/home/tream' ...
Copying files from `/etc/skel' ...
Enter new UNIX password: 
Retype new UNIX password: 
passwd: password updated successfully
Changing the user information for tream
Enter the new value, or press ENTER for the default
    Full Name []: tream
    Room Number []: 
    Work Phone []: 
    Home Phone []: 
    Other []: 
Is the information correct? [Y/n] y

在root账户下面将用户加入sudo用户组:
有两个方法:
法一:sudo usermod -aG sudo tream(后一个sudo为用户组名,tream为用户名)
法二:使用vim编辑器

root@Tream733:~$ sudo vim /etc/sudoers
# User privilege specification
root    ALL=(ALL:ALL) ALL
tream   ALL=(ALL:ALL) ALL

进入vim编辑器,单击o可以进行编辑,编辑完之后单击Esc,退出编辑模式,’:q’退出,如果没有写入权限,可以直接用’w!’写入,在输入’:q’退出vim编辑器。

从root账户进入user账户:

root@Tream733:~# su tream
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.
tream@Tream733:/root$ 

但是root显示为蓝色,在使用过程中可能会出现tream不在sudo分组中,需要激活用户环境变量:

tream@Tream733:/root$ source /etc/profile
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.
tream@Tream733:/root$ 

给home路径下tream用户文件777权限(任意用户可以读写操作):

tream@Tream733:~$ sudo chmod -R 777 /home/tream/

若不给权限的话后面装软件会出现没有权限的问题

软件安装

首先安装anconda3,使用的是清华下载镜像,国外网速会超级慢,用wget下载安装文件,清华镜像上面最新linux版本是3-5.0.1,525M大小。

tream@Tream733:/root$ sudo wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/Anaconda3-5.0.1-Linux-x86_64.sh

安装:

sudo bash Anaconda3-5.0.1-Linux-x86_64.sh

然后就是enter、enter、enter直到出现是否接受协议:

Do you accept the license terms? [yes|no]
[no] >>> 
Please answer 'yes' or 'no':'

软件安装位置,默认是/home/tream/anaconda3,不需要更改就直接enter

Anaconda3 will now be installed into this location:
/home/tream/anaconda3

  - Press ENTER to confirm the location
  - Press CTRL-C to abort the installation
  - Or specify a different location below

[/home/tream/anaconda3] >>> 

到这一步软件装上了,但是还没有给环境变量。
一:给用户环境变量

tream@Tream733:/root$ sudo vim /etc/profile
export PATH=/home/tream/anaconda3/bin:$PATH

激活环境变量配置:source /etc/profile
二:给系统环境变量

tream@Tream733:/root$ sudo vim /etc/environment
:/home/tream/anaconda3/bin

激活环境变量配置:source /etc/environment
二选一即可
安装成功

tream@Tream733:/root$ conda --version
conda 4.3.30

设置anaconda install源:

tream@Tream733:/root$ conda config --add channels 'https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/'
Warning: 'https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/' already in 'channels' list, moving to the top
tream@Tream733:/root$ conda config --set show_channel_urls yes

设置完成后就可以用

conda update conda

在安装的过程中还是出现了无法写入anaconda3的情况,只好再次赋予777权限。

软件安装完成,现在可以用pip和conda来进行依赖包的安装。不过为了方便管理各种依赖库和用户,下面来介绍jupyter notebook工具

jupyter notebook的使用

创建jupyter notebook环境,附带的会安装一些依赖包。

tream@Tream733:/root$ conda create -n jupyter_notebook python=3

激活环境

tream@Tream733:/root$ source activate jupyter_notebook
(jupyter_notebook) tream@Tream733:/root$ 

退出环境:

source deactivate#暂时不需要执行。

就可以在jupyter notebook环境中安装依赖包了

coda install jupyter notebook

tensorflow-gpu安装

(jupyter_notebook) tream@Tream733:/root$ conda install tensorflow-gpu

可以在gpu后面指定版本,如tensorflow-gpu=1.1

测试显卡:

In [1]: import tensorflow as tf
In [2]: print('tensorflow version:{}'.format(tf.__version__))
tensorflow version:1.3.0
In [3]: print('default gpu device {}'.format(tf.test.gpu_device_name()))
device: 0, name: Tesla M60, pci bus id: 0000:00:15.0

显卡信息

name: Tesla M60
major: 5 minor: 2 memoryClockRate (GHz) 1.1775
pciBusID 0000:00:15.0
Total memory: 7.93GiB
Free memory: 7.85GiB

jupyter notebook的配置:
需要生成jupyter notebook配置文件

(jupyter_notebook) tream@Tream733:/root$ jupyter notebook --generate-config
Writing default config to: /home/tream/.jupyter/jupyter_notebook_config.py

调用ipython设置jupyter notebook密码

(jupyter_notebook) tream@Tream733:/root$ ipython
Python 3.6.2 |Continuum Analytics, Inc.| (default, Jul 20 2017, 13:51:32) 
Type 'copyright', 'credits' or 'license' for more information
IPython 6.1.0 -- An enhanced Interactive Python. Type '?' for help.
In [1]: from notebook.auth import passwd
In [2]: passwd()
Enter password: 
Verify password: 
Out[2]: 'sha1:b804cd47ff66:7c1d4a54809c54c356ae406b05c4c50767cc7958'
In [3]: exit

记录下’sha1:b804cd47ff66:7c1d4a54809c54c356ae406b05c4c50767cc7958’,在文件配置时候要用。
配置jupyter notebook的config文件

tream@Tream733:/root$ vi /home/tream/.jupyter/jupyter_notebook_config.py
c.NotebookApp.ip = '*'
c.NotebookApp.password = 'sha1:b804cd47ff66:7c1d4a54809c54c356ae406b05c4c50767cc7958'
c.NotebookApp.open_browser = False                                       

直接找个空地输入进去就好了,不要在文件里面找了,眼睛会瞎的。。。。
运行jupyter notebook
我的报错了:PermissionError: [Errno 13] Permission denied: '/run/user/0/jupyter'
解决办法:进入0文件夹,给予权限:tream@Tream733:~$ sudo chmod 777 /run/user/0/>
打开浏览器远程访问地址:http:(ip地址):8888(默认为8888,如果在其他端口,终端会有提示)
终端输出:
这里写图片描述
浏览器显示:
这里写图片描述
页面中可以上传文件。
终端中Ctrl+c停止jupyter notebook

运行一个程序测试运行速度

使用scp上传文件:
在本地计算机终端上运行:

tream@DESKTOP-SVLVPIM:~$ scp -r /home/tream/Desktop/T1 root@101.236.53.22:/home/tream
The authenticity of host '101.236.53.22 (101.236.53.22)' can't be established.
ECDSA key fingerprint is SHA256:QImpuT3AaOrmn9GqFNBrUy9hBs5LKL+7Lq522oMy70E.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '101.236.53.22' (ECDSA) to the list of known hosts.
root@101.236.53.22's password: 
t10k-images-idx3-ubyte.gz                             100% 1610KB   1.6MB/s   00:01    
train-images-idx3-ubyte.gz                            100% 9680KB   1.4MB/s   00:07    
t10k-labels-idx1-ubyte.gz                             100% 4542    25.7KB/s   00:00    
train-labels-idx1-ubyte.gz                            100%   28KB 281.4KB/s   00:00    
mnist.py                                              100% 4228    15.8KB/s   00:00    
tream@DESKTOP-SVLVPIM:~$ 

到服务器相应文件夹下:

tream@Tream733:/root$ cd /home/tream
tream@Tream733:~$ ls
anaconda3  T1
tream@Tream733:~$ 

运行程序:
“`
tream@Tream733:~cdT1/tream@Tream733: /T1 ls
MNIST_data mnist.py
tream@Tream733:~/T1$ python mnist.py

2017-12-10 06:16:31.899810: I tensorflow/core/common_runtime/gpu/gpu_device.cc:976] DMA: 0
2017-12-10 06:16:31.899820: I tensorflow/core/common_runtime/gpu/gpu_device.cc:986] 0: Y
2017-12-10 06:16:31.899832: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1045] Creating TensorFlow device (/gpu:0) -> (device: 0, name: Tesla M60, pci bus id: 0000:00:15.0)tep 0, training accuracy 0.1
step 100, training accuracy 0.9
step 200, training accuracy 0.8
step 300, training accuracy 0.8
step 400, training accuracy 0.9
step 500, training accuracy 0.9
step 600, training accuracy 0.8
step 700, training accuracy 0.8
step 800, training accuracy 0.9
step 900, training accuracy 1
step 1000, training accuracy 1
代码有10000步,速度算是非常快了,
2017-12-10 06:17:16.634586: W tensorflow/core/common_runtime/bfc_allocator.cc:217]
test accuracy 0.987

本程序不用保存模型,如要保存模型,可能还涉及到从服务器下载文件:
scp -r root@101.236.53.22:/home/tream/output/ /home/tream/

其他还有控制中心的一些操作,重装系统、设置防火墙、还有调整配置等等一系列功能。

没有linux经验,都是网络上整理还有咨询师兄,小白深度学习,后面可能会记录自己看的一些文章、还有记录跑过的对应文章的模型。

2018-03-22 12:07:40 u013019296 阅读数 12966
  • 深度学习框架Tensorflow案例实战视频课程

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

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

使用卷积神经网络(CNN)架构的深度学习(DL)现在是解决图像分类任务的标准解决方法。但是将此用于处理3D数据时,问题变得更加复杂。首先,可以使用各种结构来表示3D数据,所述结构包括:

1 体素网格
2 点云
3 多视图
4 深度图

对于多视图和深度图的情况,该问题被转换为在多个图像上使用2D CNN解决。通过简单定义3D卷积核,可以将2D CNN的扩展用于3D Voxel网格。但是,对于3D点云的情况,目前还不清楚如何应用DL工具。但是之前也已经有几种解决办法了,具体可以参看 http://www.cnblogs.com/li-yao7758258/p/8182846.html 的总结

以及最近山东大学研究者们提出的PointCNN,对于pointCNN 这篇论文是一种为基于点云的特征学习提出了一种简单且通用的框架。CNN成功的关键是要能利用数据中以网格形式密集表示的空间上的局部相关性(比如图像)。但是,点云是不规则和无序的,因此在这些点关联的特征上直接求核的卷积会导致形状信息的丢失,同时还会因顺序不同而不同。为了解决这些问题,提出了根据输入点学习一种X变换,然后将其用于同时加权与点关联的输入特征和将它们重新排列成潜在隐含的规范顺序,之后再在元素上应用求积和求和运算。我们提出的方法是典型CNN向基于点云的特征学习的泛化,因此将其称为PointCNN。实验表明,PointCNN能在多种有挑战性的基准数据集和任务上实现与之前最佳方法媲美或更好的表现。
这里写图片描述
PointCNN与其他方法的对比

其次,图像的可用数据比较多,尽管最近3D数据集的数量有所增加 。但是,对于3D情况,可以容易地生成合成数据。

下面附有在3D数据上使用DL工具的论文列表

Voxel Grid – Volumetric CNN:
Voxnet: A 3D convolutional neural network for real-time object classification
Volumetric and multi-view CNNs for object classification on 3d data – compared volumetric CNNs to Multi-view CNNs for object classification. They showed that the multi-view approach performs better, however, the resolution of the volumetric model was limited
3D shapenetes: A deep representation for volumetric shapes
Multi-View CNNs:
Volumetric and multi-view CNNs for object classification on 3d data
*Multi-View Convolutional Neural Networks for 3D Shape Recognition
Point clouds:*
Pointnet: Deep learning on point sets for 3d classification and segmentation – In this work they applied a convolution kernel on each point separately, creating a higher dimensional representation of each point and then max-pooling over the entire point set (max pooling used as a symmetric function) to get invariance to permutations of the input cloud (since there is no geometrical significance to the point order).
Hand-crafted features + DNN :
3D deep shape descriptor – fed heat kernel signatures (HKS) descriptor into an NN to get an Eigen-shape descriptor and a Fischer shape descriptor.
有问题请指出,同时欢迎大家关注微信公众号

或者加入3D视觉微信群一起交流分享
这里写图片描述

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