当前位置: 首页 > 科技观察

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

时间:2023-03-20 23:18:55 科技观察

作者:Killian机器之心编译参与:NurhachuNull、李亚洲在这篇文章中,Killian研究员介绍了他的深度学习开发环境:TensorFlow+Docker+PyCharm+OSXFuse+Tensorboard。但是根据自己的预算、语言习惯、开发需求,每个人都会配置不同的开发环境,遇到各种各样的问题。因此,我们在文末附上了一份调查问卷,希望了解众多不同开发者的深度学习环境,最后整理出一篇文章,为大家提供不同的见解。我花了很多时间尝试用不同的东西配置我的深度学习环境。所以我想把我目前的工作流程整理成一个文档,希望能帮助到正在尝试做同样事情的人。目标在我开始创建我的模型之前,我心中有几个明确的目标,这是我理想使用的开发环境。以下是我将在这篇博文中详细说明的一些高级目标:在本地机器(标准MacBookPro笔记本电脑)上使用Pycharm编辑我的代码训练我的模型,我的同事使用这台远程机器没有任何冲突来运行/调试我的本地和远程机器上docker容器中开发/生产模式下的TensorFlow代码。当我的模型在远程机器上训练时,把模型的Performance以图形方式实时显示在本地机器上。致谢我要感谢我的实验室伙伴ChrisSaam,他为我指出了一些我将在本文中提及的有趣工具。一旦安装在远程机器上因此,在做任何其他事情之前,您可能需要做一些事情。顺便说一句,在这篇文章中,我将提到在您计划训练深度学习机器模型的远程机器(以及所有GPU端项目)上使用superduper。安装Nvidia-docker:您需要做的第一件事是安装Nvidia-docker。Docker确实是一个很酷的工具,但它目前不允许您最有效地使用任何NVIDIAGPU硬件或CUDA驱动程序,因此您无法使用docker来训练您的深度模型。Nvidia-docker为您解决了这个问题,看起来更像一个普通的docker。除了常规的Docker命令之外,它还提供了允许您更有效地管理NVIDIAGPU硬件的选项。图1:NVIDIA-Docker(由NVIDIA-Docker提供)安装Slurm:如果您打算与同事共享该深度学习机器,您可能需要安装SLURM之类的工具。通过限制默认情况下可用的命令集,SLURM使您可以更好地控制队友对其机器的权限,并强制每个成员使用特定的专用GPU/CPU资源来运行他们的“工作”环境。代码。如果您想避免团队成员同时访问机器时发生任何资源争用,这将非常有用。标准化文件夹设置:如果您打算与同事共享机器,那么在成员之间标准化文件夹结构也是一个好主意。我的深度学习机器是这样设置的:/home/myusername文件夹包含你自己的私人项目代码。/data文件夹包含团队在项目过程中共享的数据集。/work文件夹包含当前实验所需的特定数据集。该文件夹比/data文件夹低一级,但它在训练期间提供更快的内存访问。在本地计算机上安装OSXFuse:如果您像我一样使用最新版本的OSX,您可能会考虑安装OSXFuse。OSXFuse允许您使用SFTP/SSH从远程计算机将文件夹装载到本地Finder中。或者如果你不想花时间挂载你的远程/home文件夹,你可以简单地使用GITPUSH/PULL在本地机器和远程机器之间传输代码,但这不是很有效。因此,在长时间运行的过程中安装这些文件夹将为您节省大量时间。设置远程python解释器:在本地机器和远程机器上使用相同的docker镜像是避免以后可能出现的环境配置问题的另一种方法。Pycharm有这个很酷的功能,可以让你在docker容器中运行代码。在Pycharm中进行任何设置之前,请确保您拥有正确的TensorFlowdocker镜像。在您的本地机器上,您可能只需要以下步骤即可获取TensorFlow的docker镜像:#启动您的docker虚拟机docker-machinestartdefault#获取***TensorFlowCPU版本的docker镜像dockerpullgcr.io/tensorflow/tensorflow:latest获得所需的docker镜像后,请开始设置Pycharm项目解释器。在Pycharm中,转到Preferences>ProjectInterpreter>AddRemote(如下图所示)。当docker虚拟机的一个实例开始在你的本地机器上运行时,你需要选择一个docker配置(Dockerconfiguration)。一旦它连接到您的dockerVM,您应该会看到您刚刚获取的TensorFlow图像列在可用图像列表中。设置完成后,只要连接了pycharm,就可以开始了。日常工作在本地机器上安装远程文件夹:您要做的第一件事是确保您可以访问要在本地机器上运行的脚本。因此,您要做的第一件事是使用OSXFuse在Mac上挂载home/myusername文件夹,并可选择挂载深度学习数据。您可能希望为所有这些命令添加别名,因为它们很长。#挂载你的远程主文件夹sshfs-ouid=$(id-u)-ogid=$(id-g)myusername@mydeeplearningmachine.com:/home/myusername//LocalDevFolder/MountedRemoteHomeFolder#挂载你的远程数据文件夹(可选)sshfs-ouid=$(id-u)-ogid=$(id-g)myusername@mydeeplearningmachine.com:/data/myusername//LocalDevFolder/MountedRemoteDataFolder这里使用uid和gid映射用户和组ID本地和远程机器,因为它们可能会有所不同。在本地机器上启动docker:接下来,我们要确保pycharm将访问正确的库以在本地编译我们的代码。为此,只需在本地启动一个docker虚拟机。如果您没有更改设置中的任何内容,TensorFlowCPU映像应该已经在您的本地docker环境中。docker-machinestartdefault打开pycharm,选择刚才挂载的home文件夹下的项目。进入ProjectInterpreter参数选择,在可用的项目解释器列表中选择你之前创建的远程TensorFlow解释器,pycharm应该可以正确编译你的代码。此时,您可以在任何地方使用您的代码并更改任何您想要的内容。好的,在远程机器上,您已经使用新功能更新了pycharm中的代码,然后您想要训练/测试您的模型。使用SSH远程登录到您的机器:您需要做的第一件事就是远程登录到您的深度学习机器。sshmyusername@mydeeplearningmachine.com以运行SLURM作业:在继续下一步之前,请确保您的团队中没有其他成员正在运行作业。这将阻止您的任务获得它需要的资源,因此检查远程机器上当前正在运行的任务总是一个好主意。要使用SLURM执行此操作,只需运行squeue命令,该命令将列出当前在机器上运行的任务。如果由于某种原因您以前的任务之一仍在运行,您可以使用取消命令取消它。确保没有其他任务在运行后,让我们开始一个新任务。您可以使用以下命令启动新任务。srun--pty--share--ntasks=1--cpus-per-task=9--mem=300G--gres=gpu:15bashsrun命令提供了相当多的选项让你指定一个特定的任务有哪些资源是需要的。在此示例中,cpus-per-task、mem和gres选项可让您分别指定任务所需的CPU数量、总内存和GPU数量。pty选项只是提供了一个很好的命令行界面。启动Nvidiadocker:既然您已经为您的任务分配了资源,请启动一个docker容器以在正确的环境中运行您的代码。在这里,我们将不使用常规的docker,而是使用NVIDIA-Docker来充分利用我们的GPU。此外,要充分利用您的硬件,请确保您运行的是TensorFlowGPUdocker映像而不是dockerCPU映像。不要忘记使用-v选项将项目文件夹挂载到docker容器中。进入该容器后,您可以简单地使用常规python命令来运行您的代码。#启动你的容器nvidia-dockerrun-v/home/myusername/MyDeepLearningProject:/src-it-p8888:8888gcr.io/tensorflow/tensorflow:latest-gpu/bin/bash#不要忘记切换到你的源代码文件夹cdsrc#运行你的模型pythonmyDLmodel.py在你的本地机器上启动Tensorboard可视化:你几乎完成了。你的代码现在可以顺利运行了,然后你想使用tensorboard来实时查看你模型中的变量是如何变化的。这实际上是最简单的部分。首先,确保您知道本地docker机器的IP地址。您可以使用以下命令执行此操作:docker-machinels然后,切换到挂载的远程主文件夹并启动TensorFlowdocker容器。由于您已经在本地计算机上启动了Tensorflowdocker容器,因此请确保您正在启动docker容器的CPU版本。如上所述,不要忘记将项目文件夹挂载到docker容器中。为了可视化在本地机器上训练的模型,您还需要使用-p选项将Tensorboard使用的端口号从容器映射到本地机器。dockerrun-v/LocalDevFolder/MountedRemoteHomeFolder/MyDeepLearningProject:/src-p6006:6006-itgcr.io/tensorflow/tensorflow:latest/bin/bash进入docker容器后,通过指定路径保存模型变量(更可能是检查点文件夹的路径)来启动Tensorboard:tensorboard--logdir=Checkpoints/LatestCheckpointFolder如果一切顺利,你现在需要做的就是使用你最喜欢的浏览器访问http://DOCKER_MACHINE_IP:6006,它将在Tensorboard中显示显示您在模型中跟踪的所有变量。图2.Tensorboard可视化(由Jimgoo提供)