专栏名称: 中国人工智能学会
关注中国人工智能学会官方公共账号,收取学会的科普信息、新闻动态、活动预告及人工智能领域科技前沿信息。
目录
相关文章推荐
爱可可-爱生活  ·  【[57星]Nvidia ... ·  昨天  
新智元  ·  Claude突获「超能力」!Anthropi ... ·  昨天  
爱可可-爱生活  ·  [RO] GR00T N1: An ... ·  昨天  
CloudMan  ·  网文校对系统 - 新方案 ·  昨天  
51好读  ›  专栏  ›  中国人工智能学会

我的深度学习开发环境详解:TensorFlow + Docker + PyCharm等,你的呢(附问卷)

中国人工智能学会  · 公众号  · AI  · 2017-06-19 16:47

正文

本文经机器之心(微信公众号:almosthuman2014)授权转载,禁止二次转载



选自Upflow.co

作者: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) [email protected]:/home/myusername/ /LocalDevFolder/MountedRemoteHomeFolder


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

sshfs -o uid=$(id -u) -o gid=$(id -g) [email protected]:/data/myusername/ /LocalDevFolder/MountedRemoteDataFolder


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


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


docker-machine start default







请到「今天看啥」查看全文