PaddlePaddle发布基于Docker的AI系统开发流程

【新智元导读】 本文来自PaddlePaddle团队,介绍了PaddlePaddle与众不同的基于Docker的编译、开发、测试、调试、发布、部署、和运行的全流程及其背后的设计思路。

继两周前PaddlePaddle社区发布新的PythonAPI之后,最近又发布了对应的新版Docker镜像,并优化了镜像的体积和组织方式。

这些工作的目的是方便大家在单机和Kubernetes机群上运行分布式深度学习作业。当Baidu Research官方Twitter账号发布这条消息并且被Andrew Ng转发后,收到了很多反馈。其中有朋友们好奇Docker在AI中的应用是不是“overkill”。其实这些工作都是为了简化用户需要做的操作。只是Docker在AI系统中的应用还刚刚开始,大家可能还不熟悉,所以我们写作本文,介绍PaddlePaddle与众不同的基于Docker的编译、开发、测试、调试、发布、部署、和运行的全流程及其背后的设计思路。

除了PaddlePaddle本身,基于它开发的Deep Learning入门教材也是基于Docker image 的形式发布的。这本书中的每一章都是一个Jupyter Notebook。而Docker image里包括了Jupyter server、PaddlePaddle和所有被依赖的软件,所以大家不需要安装软件即可运行和浏览这本书,修改文中的例子程序并且执行和观察变化。

引入Docker也使得我们不需要修改PaddlePaddle的源码即可同时支持多种操作系统 -- Linux、Mac、Windows -- 因为这些操作系统都可以运行Docker了。

而且PaddlePaddle的开发环境(各种软件和配置)本身也被发布为一个Docker image,所以不仅是PaddlePaddle程序的用户、基于PaddlePaddle开发AI程序的用户,甚至PaddlePaddle的开发者,也都使用Docker container来开发和调试。

如果不希望使用Docker运行Paddle应用,用户可以使用开发环境镜像快速编译Paddle的.deb安装包,直接安装在企业的特定运行环境中运行!

应用镜像

《Deep Leanring 101》这本书是在Github社区里开发的一个PaddlePaddle应用程序。让我们先从这本书开始,解释PaddlePaddle应用开发和发布的过程吧。

因为PaddlePaddle社区已经把书籍的Docker镜像发布到了dockerhub.com,所以大家只需要执行一条命令即可运行这本书:

如果从国内访问dockerhub.com速度慢,也可以访问PaddlePaddle社区在中国香港维护的Docker registry 服务:

随后只需要在浏览器打开链接 http://localhost:8888,选择一个感兴趣的章节,即可在浏览器里阅读书籍。界面如下图所以。用户可以点击上方工具栏的“运行”按钮来运行样例代码,查看输出的结果,并对照书籍开始学习,体验Paddle带来的深度学习之旅。

如果大家好奇这本书的Docker镜像的创建方法,可以参见这个脚本程序 https://github.com/PaddlePaddle/book/blob/develop/.tools/build_docker.sh,并参见下文。大家可以把自己基于PaddlePaddle开发的应用发布出来,便于用户在单机和Kubernetes机群上运行。

生产环境镜像

上述书籍镜像都是基于PaddlePaddle的生产环境镜像(production iamge)构建的。生产环境镜像是任何PaddlePaddle应用镜像的基础,其中只包括build好的PaddlePaddle以及Python等必要的依赖,这样使其体积尽量小。目前PaddlePaddle社区维护以下四种生产镜像,分别对应包括不同CPU和GPU指令集的程序。

  • GPU/AVX paddle:0.10.0rc2-gpu
  • GPU/no-AVX paddle:0.10.0rc2-gpu-noavx
  • no-GPU/AVX paddle:0.10.0rc2
  • no-GPU/no-AVX paddle:0.10.0rc2-noavx

其中GPU版本镜像由于包含CUDA driver,体积会略大于纯CPU版本的镜像。而no-AVX镜像则提供可以兼容部分较早型号的不支持AVX指令集的CPU。也有一些云服务提供商提供的虚拟机不支持AVX指令集。

基于生产环境镜像开发应用

下面我们演示使用PaddlePaddle 生产环境镜像构建应用的方法。首先我们编写一个应用程序/work/myapp.py:

我们可以执行生产镜像,利用其中编译好的PaddlePaddle来执行我们的应用程序:

这个例子里,/work目录为保存run.py文件的目录,run.py程序和其依赖以及数据都会放在这个目录下,通过-v参数挂载到容器中,运行run.py即可启动我们的训练任务。

如果dockerhub.com速度慢,也可以使用PaddlePaddle社区维护的Docker registry:

可以看到如下输出(截取部分):

对于更加复杂的深度学习应用,比如应用可能依赖官方Docker镜像之外的库,用户可以直接基于PaddlePaddle 的生产环境镜像打包自己的应用,创建如下的Dockerfile:

使用诸如此类的Dockerfile即可根据用户的需要构建自己的镜像并应用于实际生产环境。

使用开发镜像

我们将PaddlePaddle的Docker镜像区分为生产环境和开发环境。生产环境仅包含应用运行必要的动态连接库,三方库和应用二进制文件;而开发环境则需要提供Paddle源代码、头文件、编译工具以及丰富的开发工具,包括:

  • gcc/clang
  • nvcc
  • Python
  • sphinx
  • woboq
  • sshd

开发环境镜像会极大的方便以下角色的工作: 1. 深度学习应用开发者:不再需要安装配置一台Ubuntu Linux机器并安装大量的依赖,只需要安装Docker。这样开发者可以使用自己的电脑或者远程的开发服务器都可以。 2. Paddle版本发布工程师:Paddle后续的版本发布更新均使用开发环境Docker镜像,根据Paddle的github分支/标签直接生成多个Paddle生产环境Docker镜像 3. 文档编写/Paddle网站更新:Paddle的文档通常是以“.md/.rst”格式保存在github上的,并随着源代码的更新而更新。文档和网站内容都是通过github的这些文档生成的,开发环境镜像会提供相应的工具,将“.md/.rst”格式解压、转换并生成html页面。

下面介绍如何使用开发环境镜像。考虑我们完成日常工作的方式,开发者可能会使用自己的笔记本/台式机/安装有GPU的工作站:

许多开发者会使用一台远程的安装了GPU的机器完成日常的开发工作,他们通常会ssh登录到这台服务器上开发。开发环境镜像也提供了sshd服务,这样开发者可以直接ssh登录到PaddlePaddle的开发环境容器中启动训练任务:

一个基本思路是: 使用git clone下载PaddlePaddle源码到开发机或本地,然后就可以使用自己惯用的编辑器(如Eclipse/VIM)开始代码编写工作。编译和测试则可以使用docker run -v挂载Paddle源代码目录到Docker开发环境镜像。这样就可以在Docker容器中直接编译和测试刚才修改的代码:

您可以使用下面的命令快速下载并启动一个PaddlePaddle开发环境的容器,并启动一个sshd服务。在 https://hub.docker.com/r/paddlepaddle/paddle/tags/ 找到您需要的版本替换 <version>。

总结

PaddlePaddle团队将以易用性为目标,持续更新,为AI从业者和对深度学习感兴趣的同学提供更方便的镜像和工具,把深度学习带给更多的人!

关于PaddlePaddle

PaddlePaddle是一个最早由百度科学家和工程师共同研发的并行分布式深度学习平台,兼备易用性、高效性、灵活性和可扩展性,目前已被百度内部多个产品线广泛使用。

PaddlePaddle目前已经开放源码, 但是远未完善,我们希望能在这个基础上不断的改进、扩展和延伸。 同时我们希望广大开发者积极提供反馈和贡献源代码,建立一个活跃的开源社区。

据介绍,PaddlePaddle是一个小而美的团队、核心成员10人左右、系统工程师为主、全部使用Github办公。

原文发布于微信公众号 - 新智元(AI_era)

原文发表时间:2017-03-25

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏云计算

容器只是一个起点

容器,Docker,Kubernetes已经出现有四年了。以致于有些人甚至认为这项技术是成熟的!但是,我强烈认为,容器基础设施的构造任然处于成长阶段。

24090
来自专栏DevOps时代的专栏

E2E 测试容器化实践

在互联网最初之时,没有任何容器化的概念,那么刚开始的时候是怎样开发软件或者是网站的吗?那时就是计算机便是服务器,就是一个简单的静态网页,没有复杂的业务逻辑。

14520
来自专栏云计算D1net

想要使用容器技术 这5类遗留工具就应该被淘汰

充分利用容器并不只是安装Dockers和激活容器应用程序那么简单。你需要改进的同样还有监控方法、安全性能等。 这么做的理由是,容器并不只是对你过去工作中使用到的...

35680
来自专栏逸鹏说道

KVM基于内核的虚拟机概念理解与客户机浅析

作为一个KVM的学习者,如果你想要自己完善一个KVM样品级的解决方案,仅仅学会图形化界面使用和简单的配置(详情见上一篇文章)是远远不够的。在上文中感谢@laow...

42440
来自专栏美团技术团队

美团容器平台架构及容器技术实践

美团的容器集群管理平台叫做HULK。漫威动画里的HULK在发怒时会变成“绿巨人”,它的这个特性和容器的“弹性伸缩”很像,所以我们给这个平台起名为HULK。貌似有...

21850
来自专栏技术翻译

一起使用Kubernetes和Docker的优点

您可能会听到很多关于Kubernetes和Docker的信息 -您可能想知道哪一个更好。

1.8K00
来自专栏Albert陈凯

5分钟弄懂Docker

尽管之前久闻Docker的大名了,但是天资愚钝,对其到底是个啥东西一直摸不清,最近花了一段时间整理了一下,算是整理出一点头绪来。 官网的介绍是这样的: Do...

35050
来自专栏PaddlePaddle

PaddlePaddle发布基于Docker的AI系统开发流程

继两周前(2017年3月11日)PaddlePaddle社区发布新的PythonAPI之后,最近又发布了对应的新版Docker镜像,并优化了镜像的体积和组织方式...

395110
来自专栏Java工程师日常干货

docker化你的java应用(上)前言走进docker

在各种技术大会(互联网架构,云计算等等),哪都少不了docker的身影。docker为啥这么火?因为它解决了大部分企业的痛点:快速的持续集成,服务的弹性伸缩,部...

13910
来自专栏磨磨谈

基于发行版本内核打造自己的内核

Linux当中最核心的部分就是内核,这个也是最基础,最可能被忽视的一部分,随便找一个刚入职的运维,学习个两三天,网上找些资料也能能自己安装编译内核了,很多运维的...

11520

扫码关注云+社区

领取腾讯云代金券