我的深度学习开发环境详解:TensorFlow + Docker + PyCharm等,你的呢?

作者: Killian 2017-06-19 17:54:58

作者:Killian

机器之心编译

参与:Nurhachu Null、李亚洲

在这篇文章中,研究员 Killian 介绍了自己的深度学习开发环境:TensorFlow + Docker + PyCharm + OSX Fuse + Tensorboard。但根据自己的预算、语言习惯、开发需求,每个人都会配置不同的开发环境,也遇到过各种各样的难题。因此,我们在文后附上了一份调查问卷,希望能了解众多不同开发者的深度学习环境,最终汇集成一篇文章为大家提供不同的洞见。

在尝试用不同的东西来配置深度学习环境这个过程中,我花费了相当多的时间。因此我想着把自己目前的工作流程整理成文档,希望可以帮助到尝试着做同样事情的人。

目标

在开始创建我的模型之前,我脑海中会有几个清晰的目标,即理想中会使用的开发环境。下面是我会在这篇博文中详细介绍的几个高层次目标:

  • 在本地机器 (一个标准的 MacBookPro 笔记本电脑) 上用 Pycharm 编辑我的代码

  • 用一个强大的远程机器来训练我的模型

  • 和我的同事们没有任何冲突地使用这台远程机器

  • 在本地和远程机器上的 docker 容器中以开发/产品的模式来运行/调试我的 TensorFlow 代码

  • 当我的模型在远程机器上训练的时候,把模型的性能图形化地实时显示在本地机器上

致谢

我想感谢我的实验室同伴 Chris Saam,因为他给我指明了几个我会在本文中提到的有趣的工具。

一次安装

远程机器上

因此,在做其他任何事情之前,你可能需要做这几件事情。顺便说一下,在这篇文章中我会提及在你的远程机器上 (带有所有的 GPU 的附属项目)使用 super duper,在这台远程机器上你计划训练你的深度学习机器模型。

安装 Nvidia-docker:你需要做的***件事情就是安装 Nvidia-docker。Docker 确实是一个很酷的工具,但是它目前并不能让你最有效地使用任何一个 NVIDIA 的 GPU 硬件或者 CUDA 驱动程序,所以你不可能拿 docker 来训练你的深度模型。Nvidia-docker 为你解决了这个问题,并且看上去更像一个普通的 docker。在常规的 Docker 命令之上,它还提供了一些选项,可以让你更有效地管理你的 NVIDIA GPU 硬件。

图 1: NVIDIA-Docker (由 NVIDIA-Docker 提供)

安装 Slurm:如果你计划和你的同事共享那个深度学习机器,你也许会想着安装像 SLURM 一样的工具。通过限制默认情况下可以使用的命令集,SLURM 让您对团队同事在机器上的权限拥有更好的控制,并且强制每个成员使用特定的专用 GPU/CPU 资源在「作业」环境中运行他们的代码。如果您希望避免任何因团队同事同时访问这台机器而产生的资源争夺,这确实是有用的。

把文件夹设置标准化:如果您计划和同事共享机器,就可以让成员之间的文件夹结构标准化,这也是一个好主意。我的深度学习机器的设置方式如下:

  • /home/myusername 文件夹包含你自己的私有项目代码。

  • /data 文件夹包含团队在项目过程中共享的数据集。

  • /work 文件夹包含当前实验需要的特定数据集。这个文件夹比 /data 文件夹更低一级,但是它在训练过程中提供了更快的内存访问。

本地机器上

安装 OS X Fuse: 如果你像我一样正在使用***版本的 OS X, 你可能会想着安装 OS X Fuse。OS X Fuse 可以让你用 SFTP/SSH 在本地 Finder 中从远程机器上挂载文件夹。或者如果你不想花费时间去挂载你的远程/home 文件夹,你可以简单地使用 GIT PUSH/PULL 在本地机器和远程机器之间传送代码,但是这样效率不高。所以在长时间运行的过程中挂载这些文件夹会替你节省大量时间。

设置一个远程的 python 解释器:在本地机器和远程机器上使用同一个 docker 映像是避免以后可能会发生的环境配置问题的另一个方法。Pycharm 有这个很酷的功能,可以让你在 docker 容器中运行代码。在 Pycharm 中进行任何设置之前,请保证你已经获取了正确 TensorFlow 的 docker 映像。在本地机器上,你可能仅仅需要以下步骤就可以获取 TensorFlow 的 docker 映像:

# 启动你的 docker 虚拟机

docker-machine start default

# 获取*** TensorFlow CPU 版本的 docker 映像

docker pull gcr.io/tensorflow/tensorflow:latest

当你获取期望的 docker 映像之后,就去设置你的 Pycharm Project Interpreter。在 Pycharm 中,转到 Preferences>Project Interpreter>Add Remote(如下图)。当 docker 虚拟机的实例在你的本地机器上开始运行时,就需要选择 docker 配置(Docker configuration)。一旦它连接到你的 docker 虚拟机,你应该会看到你刚才获取的 TensorFlow 映像已经在可用映像的列表中了。当这个设置好之后,只要 pycharm 连接好了,你就可以开始了。

每日常规程序

本地机器上

挂载远程文件夹:你想做的***件事情就是确保你可以访问你要在本地机器上运行的脚本。所以你要做的***件事情就是在你的 Mac 上用 OS X Fuse 挂载 home/myusername 文件夹,并且选择性地挂载深度学习数据。你可能希望为所有这些命令起一些别名,因为它们确实有些长。

# 挂载你的远程 home 文件夹

sshfs -o uid=$(id -u) -o gid=$(id -g) myusername@mydeeplearningmachine.com:/home/myusername/ /LocalDevFolder/MountedRemoteHomeFolder

# 挂载你的远程数据文件夹 (有选择地)

sshfs -o uid=$(id -u) -o gid=$(id -g) myusername@mydeeplearningmachine.com:/data/myusername/ /LocalDevFolder/MountedRemoteDataFolder

这里使用 uid 和 gid 来映射本地和远程机器的用户和组 ID,因为这些可能会有所不同。

在本地机器上启动 docker:接下来,我们想保证 pycharm 会访问正确的库来在本地编译我们的代码。为了做到这个,仅仅需要在本地启动一个 docker 虚拟机。如果你在设置中没有改变任何地方,TensorFlow 的 CPU 映像应该已经在你的本地 docker 环境中了。

docker-machine start default

打开 pycharm,并选择你刚才挂载的 home 文件夹中的项目。转到 Project Interpreter 参数选择中,在项目解释器的可用列表中选择你之前就创建好的远程 TensorFlow 解释器,pycharm 应该能够正确地编译你的代码。这时候,你可以随时随地使用你的代码,并且改变任何你想要改变的东西。

远程机器上

Ok,你已经在 pycharm 中用一项新功能更新了你的代码,然后你希望训练/测试你的模型。

用 SSH 远程登录你的机器:你需要做的***件事就是简单地远程登录你的深度学习机器。

ssh myusername@mydeeplearningmachine.com

运行一个 SLURM 任务: 在你进行下一步之前,请确保你的团队中没有其他成员正在运行任务。这会阻止你的任务得到它所需要的资源,所以检查一下目前有哪些任务正运行在远程机器上总会是一个不错的做法。使用 SLURM 做到这件事,只需要运行一下 squeue 命令即可,它会列出目前正运行在机器上的任务。如果由于某些原因你之前的某个任务仍然在运行,你可以使用 scancel 命令来取消它。在确定没有其他任务在运行之后,让我们开始一个新任务吧。你可以通过以下的命令来开始一个新的任务。

srun --pty --share --ntasks=1 --cpus-per-task=9 --mem=300G --gres=gpu:15 bash

srun 命令给出了相当多的选项来让你指定一个特定的任务需要哪些资源。在这个例子中,cpus-per-task、 mem 以及 gres 选项让你指定这个任务分别需要的 CPU 的数量、总体内存以及 GPU 的数量。pty 选项只是提供一个漂亮的命令行界面。

启动 Nvidia docker:既然你已经得到了为你的任务所分配的资源,那么,启动一个 docker 容器来在正确的环境中运行你的代码吧。与使用常规的 docker 有所不同,这里我们会使用 NVIDIA-Docker 来充分地利用我们的 GPU。另外,为了充分利用你的硬件,请保证你运行的是 TensorFlow 的 GPU docker 映像而不是 docker CPU 映像。别忘了使用 - v 选项来在 docker 容器中挂载你的项目文件夹。当你在那个容器中以后,你就可以简单地使用常规的 python 命令来运行你的代码了。

# 启动你的容器

nvidia-docker run -v /home/myusername/MyDeepLearningProject:/src -it -p 8888:8888 gcr.io/tensorflow/tensorflow:latest-gpu /bin/bash

# 别忘记切换到你的源码文件夹

cd src

# 运行你的模型

python myDLmodel.py

本地机器上

启动 Tensorboard 可视化:你还差一点点就做完了。你的代码现在正在顺利地运行,然后你想着使用 tensorboard 去实时地看一下你的模型中的变量是如何变化的。实际上这是最简单的一部分。首先,确保你知道自己本地 docker 机对应的 IP 地址。你可以使用下面的命令来做这件事:

docker-machine ls

然后,切换到已经挂载的远程 home 文件夹,并启动一个 TensorFlow docker 容器。因为你已经在本地机器上启动了一个 Tensorflow docker 容器,所以要确保你正在启动的是 CPU 版本的 docker 容器。如上面所述,不要忘记在 docker 容器中挂载你的项目文件夹。为了在本地机器可视化正在训练的模型,你还需要用 - p 选项将 Tensorboard 使用的端口号从容器映射到你的本地机器。

docker run -v /LocalDevFolder/MountedRemoteHomeFolder/MyDeepLearningProject:/src -p 6006:6006 -it gcr.io/tensorflow/tensorflow:latest /bin/bash

一旦你进入 docker 容器,通过制定你的模型保存变量的路径 (更可能是 checkpoint 文件夹的路径) 来启动 Tensorboard:

tensorboard—logdir=Checkpoints/LatestCheckpointFolder

如果一切进展顺利,你现在需要做的就是使用你最喜欢的浏览器转到到 https://DOCKER_MACHINE_IP:6006,

这会显示在 Tensorboard 中显示你在模型中正在跟踪的所有变量。

图 2.Tensorboard 可视化 (由 Jimgoo 提供)

深度学习 人工智能
上一篇:面向图像分析应用的海量样本过滤方案 下一篇:如何解决机器学习中的数据不平衡问题?
评论
取消
暂无评论,快去成为第一个评论的人吧

更多资讯推荐

欺诈不可怕,机器学习算法分分钟拿下! 精选

根据一项调查,采用基于AI的解决方案的防欺诈专家中有80%认为AI对打击欺诈者有效。但是,仍然存在的问题是弄清楚哪种机器学习算法可以有效地检测未知的欺诈模式。监督学习和无监督学习算法哪一个更有效?

读芯术 ·  2天前
助力抗疫,人工智能和大数据将全面爆发? 精选

新型冠状病毒肺炎疫情的爆发和传播,牵动着全国人民的心。社会各界纷纷投入到这场没有硝烟的疫情阻击战中。

中国经营报 ·  3天前
人工智能和区块链如何在2020年彻底改变移动应用产业?

2020年也不例外。移动应用行业将以明显的方式增长。人们需要了解人工智能行业将发生什么变化,以及企业在新的一年中如何计划使用这些革命性技术。

Pradeep Makhija ·  3天前
人工智能“捷径”将模拟速度提高数十亿倍

即使用最快的超级计算机模拟复杂的自然现象也要花上几个小时,如大气雾霾如何影响气候。

辛雨 ·  3天前
人工智能如何推动神经科技发展?

神经科技以人类神经系统原理为基础,旨在研究人类大脑这一极为复杂的模型架构。在实际作用方面,神经科技将帮助研究人员了解大脑功能与引发功能障碍的原因,并助力医生治疗各类神经系统疾病。至于具体应用,神经科技目前主要关注增强认知能力、改善睡眠并改善长寿人群的大脑健康等。

佚名 ·  3天前
2020年了,深度学习接下来到底该怎么走?

机器学习资深从业者 Ajit Rajasekharan 在本文中汇集了深度学习领域各路大佬的想法,并分享了他本人的一些思考。

亚希伯恩•菲 ·  4天前
AI战「疫」:百度开源口罩人脸检测及分类模型

2 月 13 日,百度飞桨宣布开源业界首个口罩人脸检测及分类模型。基于此模型,可以在公共场景检测大量的人脸同时,把佩戴口罩和未佩戴口罩的人脸标注出来,快速识别各类场景中不重视、不注意防护病毒,甚至存在侥幸心理的人,减少公众场合下的安全隐患。

Synced ·  4天前
2020年,比较适合AI的5种编程语言

AI系统的开发必须有计算机代码,而计算机程序的开发有不同类型的编程语言可以选择。本文分析哪些编程语言最适合你的人工智能或机器学习用例开发。

CSDN App ·  4天前
Copyright©2005-2020 51CTO.COM 版权所有 未经许可 请勿转载