5分钟配置好你的AI开发环境

作者 | Revolver

 

无论是第一次设置TensorFlow的新手数据科学爱好者,还是使用TB级数据的经验丰富的AI工程师,安装库、软件包或者框架总是一个困难又繁琐的过程。但是像Docker这样的集装箱化工具正在彻底改变着软件的可重复性,只不过它们还没有在数据科学和人工智能社区中流行起来。但随着机器学习框架和算法的不断发展,我们将很难花时间专注于学习所有相关的开发人员工具,尤其是那些与模型构建过程没有直接关联的工具。

 

在这篇文章中,我将展示如何使用docker和python工具包 datmo 为任何流行的数据科学和AI框架快速配置环境。

 

一. Docker

1. docker是什么

该软件于2013年由dotCloud 公司推出,发布以来一直备受关注和讨论,被认为可能会改变软件行业。

 

2. 为什么使用docker

如果让你说出软件开发最烦人的事情,那么环境配置必然是其中之一。例如开始编写Python应用程序,那么你的第一个步骤就是在您的计算机上安装Python。软件运行时,你不仅需要让自己计算机上的环境需适合你的应用程序按预期运行,并且还需要与生产环境相匹配。这就是所谓的环境一致性问题。这里面大量的重复劳动不说,还经常出现系统不兼容等莫名其妙的问题,非常令人崩溃。很可能再自己机器上跑通了,但放到用户的环境里,或者服务器上就出问题了。

 

那么可不可以在软件安装的时候把软件需要的环境一并复制过去呢?虚拟机(virtual machine)就是带环境安装的一种解决方案。它可以在一种操作系统里面运行另一种操作系统,但它的缺点很多:资源占用多、冗余步骤多、启动慢等等。

 

Docker是一种全新的虚拟化方式。传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程;而容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟。因此容器要比传统虚拟机更为轻便。在这样的前提下,它跟传统的虚拟化方式相比具有众多优势:

  • 高效的利用系统资源。

  • 启动速度快。容器里面的应用,直接就是底层系统的一个进程,而不是虚拟机内部的进程。由于直接运行于宿主内核,无需启动完整的操作系统,因此可以做到秒级、甚至毫秒级的启动时间。

  • 确保了应用运行环境一致性。

  • 可以在很多平台上运行,无论是物理机、虚拟机、公有云、私有云,甚至是笔记本,其运行结果是一致的。

  • 容器只要包含用到的组件即可,而虚拟机是整个操作系统的打包,所以容器文件比拟机文件要小很多。

 

3. 如何使用docker

首先要理解Docker的三个概念:镜像、容器、仓库。

 

镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的 类 和 实例 一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。镜像是只读的,可以用来创建Docker容器,容器看做是一个简易版的Linux环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。

 

Docker Registry 是集中存放镜像文件的场所,提供集中的存储、分发镜像的服务。一个 Docker Registry中可以包含多个仓库(Repository);每个仓库可以包含多个标签(Tag);每个标签对应一个镜像。

 

最常使用的 Registry 公开服务是官方的 Docker Hub,这也是默认的 Registry,并拥有大量的高质量的官方镜像。

 

这里以TensorFlow机器学习框架搭建为例讲解如何利用docker快速搭建环境。

 

首先你需要安装并启动Docker。如果要使用GPU则安装nvidia-docker。

1) 直接使用别人做好的镜像

在命令行输入以下两条命令:

docker image pull tensorflow/tensorflow
docker run -it  -p 8888:8888  -v /$(pwd)/notebooks:/notebooks  tensorflow/tensorflow

第一行命令在Docker Hub上拉取tensorflow官方镜像的cpu版本。

 

第二行则由此镜像创建一个容器,并在容器里运行jupyter服务。 在你的浏览器上打开http://localhost:8888/,就可以在jupyter里导入TensorFlow包了。

 

-v 参数的作用是将宿主机当前目录下的notebook目录挂载到容器内的/notebooks目录,不添加这个参数的话,当结束 container 的时候,jupyter notebook 里的内容也会随之消失。

 

我们还可以进入到容器里查看容器的环境配置信息:

docker run -it  -p 8888:8888  tensorflow/tensorflow  bash

 

解释一下参数含义:

-i:以交互模式运行容器,通常与 -t 同时使用

-t:为容器重新分配一个伪输入终端,通常与 -i 同时使用

bash:在容器内执行bash命令 

 

root@21cebb7bd6b4:/notebooks# python
Python 2.7.12 (default, Dec  4 2017, 14:50:18)
[GCC 5.4.0 20160609] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import tensorflow
>>>
root@21cebb7bd6b4:/notebooks# python3
Python 3.5.2 (default, Nov 23 2017, 16:37:01)
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import tensorflow
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named 'tensorflow'

 

2) 保存修改后的容器为新的镜像

通过在容器里执行bash命令后我们可以看到,TensorFlow官方提供的这个容器的环境已经安装了Python2和Python3,不过只有在python2上安装了TensorFlow的环境,如果你想在python3运行TensorFlow的话,可以自己手动在容器里进行你喜欢的环境配置

 

有没有办法把修改好的容器作为基础镜像,以后需要创建容器的时候都使用这个新的镜像呢?通过命令 docker commit [CONTAINER] 可以提交容器副本,制作属于你自己的镜像。命令格式如下:

docker commit -m="description" -a="ahthorName" 97744639b45d ahthorName/tensorflow-python3:latest

 

参数说明:

-m: 提交的描述信息

-a: 声明镜像作者

97744639b45d:容器ID

ahthorName/tensorflow-python3:latest: 指定要创建的目标镜像名

 

docker ps -a 这条命令可以列出所有已经创建的未删除的容器。

 

这里分享一个docker hub 上的镜像docker pull dash00/tensorflow-python3-jupyter,里面已经配置好了python3下TensorFlow的环境,大家可以直接拉取使用。

 

3)dockerfile定义全新镜像

上面的方法是在基础镜像的容器上做修改创建我们自己的镜像,我们也可以编写一个Dockerfile来构建全新的镜像。我们已经知道Docker镜像是制作Docker容器的模版,而Dockerfile则是一个定义Docker镜像的文件。下面我们尝试编写一个Dockerfile。

 

Dockerfile定义了容器内的环境配置。在此环境中,对网络接口和磁盘驱动器等资源的访问都是虚拟化的,该环境与系统的其他部分隔离。因此您需要将端口映射到外部的宿主机环境,并具体指定哪些文件是跟外部环境保持一致的。只要在定义好此操作之后,你就可以预期,无论什么时候你运行这个文件,由Dockerfile中定义的应用程序环境的构建都会执行完全相同的操作。

 

如何创建

这里是一个示例:创建一个空目录,创建一个名为的文件dockerfile,再创建两个文件requirements.txt和app.py和dockerfile放在一起。

 

以下是dockerfile文件内容,注释里有条语句的解释:

# 使用python:2.7-slim作为基础镜像
FROM python:2.7-slim

# 指定工作目录(或者称为当前目录)
WORKDIR /app

# 将当前文件夹下的内容(requirements.txt和app.py)复制到容器里的/app目录下
ADD . /app

# 安装在requirements.txt文件里指定的python包
RUN pip install --trusted-host pypi.python.org -r requirements.txt

# 向外部环境暴露80端口
EXPOSE 80

# 设置环境变量
ENV NAME World

# 一旦容器开始运行,则运行app.py作为容器的主进程
CMD ["python", "app.py"]

 

FROM 指定基础镜像,是必备的指令,并且必须是第一条指令。在 Docker Store 上有非常多的高质量的官方镜像提供给我们使用。

RUN 指令是用来执行命令行命令的。

CMD 指令用于指定默认的容器主进程的启动命令。有别于传统虚拟机概念,对于容器而言,其启动程序就是容器的主要进程,容器就是为了主进程而存在的。

 

有了 Dockerfile 文件,我们就可以使用docker image build命令创建 image 文件了。运行:

#-t参数用来指定 image 文件的名字
Docker  build  -t  friendlyhello

 

如果运行成功,使用docker image ls命令就可以看到新生成的 image 文件friendlyhello了,它位于你机器的本地Docker镜像注册表中。

docker image ls
REPOSITORY            TAG                 IMAGE ID
friendlyhello         latest              326387cea398

 

二. Datmo

如果你觉得上面描述的关于docker的操作依然十分麻烦的话,我还有一个工具推荐给你,那就是datmo。Datmo充分利用了Docker,简化了流程,帮助您快速轻松地运行AI框架。下面是使用流程:

 

1. 前提条件

  • 安装并启动Docker(https://docs.docker.com/install/#supported-platforms)

  • (如果使用GPU)安装CUDA 9.0(https://developer.nvidia.com/cuda-90-download-archive)

  • (如果使用GPU)安装nvidia-docker(https://github.com/datmo/datmo/wiki/Datmo-GPU-support-and-setup)

 

2. 安装datmo

就像任何python包一样,使用以下命令从终端安装datmo:

$ pip install datmo

 

3. 初始化datmo项目

在终端中,打开项目文件夹。然后,输入以下命令:

$ datmo init

然后,你将被要求提供项目的名称和描述。

 

4. 启动环境设置

在输入名称和描述后,datmo将询问是否要设置环境 - 输入y并按enter。

 

5. 选择系统驱动程序(CPU或GPU)

然后,CLI将询问希望为您的环境选择哪些系统驱动程序。如果不打算使用GPU,请选择cpu。

 

6. 选择一个环境

接下来,你将从众多预打包环境中选择一种。只需在提示中回复您要使用的环境的编号或ID。

 

7. 选择编程语言版本

上述许多环境都有不同的版本,具体取决于你计划使用的语言和版本。

 

例如,在选择keras-tensorflow环境后,我将面临以下提示,询问我是否要使用Python 2.7或Python 3.5。

 

8. 启动工作区

现在是时候启动你的工作区了。选择你要使用的工作区,然后在终端中输入相应的命令。

Jupyter Notebook - $ datmo notebook
JupyterLab - $ datmo jupyterlab
RStudio -  $ datmo rstudio(在R-base环境中可用)
终端模式 - $ datmo terminal

 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
[简介]"爱淘吧淘宝客"是由爱淘吧为淘宝客用户专门开发的一个便于商品、商铺信息推广的站点系统。您只需要下载淘宝客系统安装,您便拥有一个独立的淘宝客推广站点。系统集成淘宝客几种推广模式:商品、店铺、搜索、频道、主题等,并且系统还加入了淘宝客数据自动调用功能。 [基本功能] 1.淘宝客商品分类检索; 2.淘宝客搜索推广,内嵌淘宝客搜索推广代码,只需配置文件即可进行商品推广; 3.网站商品管理以及店铺管理,可以灵活的组织网站商品及店铺信息; 4.淘宝客频道推广; 5.淘宝客商品模板管理; 6.伪静态页面,更有利于搜索引擎收录 [系统环境需求] 1、Windows 平台: IIS/Apache PHP5 2、Linux/Unix 平台 Apache PHP5 建议使用平台:Linux Apache2.2 PHP5.2 3、PHP必须环境或启用的系统函数: allow_url_fopen [安装方法] 1.下载系统安装包并解压 2.修改upload文件夹里面的网站及淘宝客参数 3.修改后上传upload文件夹中的文件至网站根目录,网站就可以使用啦 4.免费使用本程序,请保留本站友情链接! 为了您更好的使用系统,如果这些描述无法满足您的需要,您可以加入我们的QQ群获得支持。 爱淘宝官方用户群:3744700 ◇ 官方网站: http://taoke.2i28.com ◇ 程序演示: http://www.2i28.com ◇ 淘宝客: http://taoke.alimama.com ◇ 淘宝客论坛: http://club.alimama.com     非常感谢您使用本产品. 2010.1.5 爱淘吧
OurHouse:爱窝房产;基于贴心猫v4.7二次开发的,专门为房产行业定制的一套系统;由专业的房产中介人士和外贸人士策划架构,和多位IT猿亲自放码精心制作而成;基于 `Jq2 + Bootstrap3` 前端开源框架,PC/WAP自适应;免费,开源,无加密,无限制!功能模块楼盘  楼盘检索:县区+乡镇,均价,(物业)类型,装修,销售(状态),户型(居室)  楼盘内页:楼盘首页,楼盘地图,户型,相册,动态,(关联)出售房,(关联)出租房  内页互动:意向关注提交  后台可无限自定义扩展字段/参数(其他所有模型,都可自定义字段)二手房  检索页:县区+乡镇,总价,面积,类型(房源),户型(居室)  二手内页:详情页,相册,A4打印页  内页互动:意向关注提交出租房  检索:县区+乡镇,月租,面积,类型(房源),户型(居室)  出租内页:详情页,相册,A4打印页  内页互动:意向关注提交辅助模块  基础模块:资讯 / 专题 / 问答 / 网站介绍  广告/友情链接  会员  采集,第三方API数据同步下载安装环境需求:PHP5.4 ~ PHP7.3(推荐:PHP5.6 ~ PHP7.2)扩展:curl, gd2Mysql:5.x+安装/配置数据库配置文件:/root/cfgs/boot/cfg_db.php;访问起始页:/index.php?start 检查配置;访问地址:/root/tools/setup/ 安装程序。不是安装在根目录,配置文件:`/root/cfgs/boot/_paths.php` 详细配置见[贴心猫通用说明]。重要提示演示数据:安装时为可选项;初次使用,强烈建议安装;同步采集接口下载后解压到 `/@read/data/` 目录下,自行调试运行;OurHouse(爱窝房产系统) v4.8 更新日志:1、修正:部署在https下,验证码不显示2、修正:php7.3下,一处Deprecated提示3、优化:安装系统/重置密码时,改进账号密码的验证

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值