如何在Windows上设置Udacity深度学习课程的TensorFlow学习环境

9

我相信很多对于学习深度学习感兴趣的人都听说过这门课程:

https://www.udacity.com/course/deep-learning--ud730

我正在学习这门课程,并想分享一下如何从零开始在Windows上设置学习环境的逐步指令。

  • 第一个答案名为设置环境,是关于设置学习环境的内容。您只需运行它一次。

  • 第二个答案名为本地机器重新启动后,是关于如何在重启计算机后重新启动环境的内容。

  • 查看第三个答案名为它是如何工作的,以了解所有相关信息的工作原理(或者您可以盲目地跟随第一个答案,稍后再进行检查)。

4个回答

5

设置环境(仅运行一次!)

注意:要在计算机重新启动后启动准备好的环境,请使用第二个答案中的计算机本地重启后指令。


步骤:

  1. 下载并安装Docker Toolbox:

https://www.docker.com/products/docker-toolbox

Docker是一个工具,用于在计算机上部署预配置的虚拟学习环境。它将在虚拟机内运行,不会对您的计算机造成任何影响。

  1. (可选步骤) Docker将把它的文件放在系统磁盘(C:)上,如果使用SSD可能需要更改。您可以按以下方式进行更改:

mklink /J "C:\Users\USER\.docker" "D:\Docker"

  • USER替换为您的用户名
  • "D:\Docker"替换为您想要存储Docker文件的其他驱动器路径

更多信息:在Windows上更改.docker目录

  1. 打开Windows CMD。进入Docker安装的文件夹。创建一个新的Docker虚拟机:

docker-machine create vdocker -d virtualbox

  1. (神奇步骤)只需运行它!

FOR /f "tokens=*" %i IN ('docker-machine env --shell cmd vdocker') DO %i

更多信息请见: 如何启动tensorflow docker jupyter笔记本

  1. 下载并安装预配置的作业docker镜像:

docker run -it -p 8888:8888 -p 6006:6006 --name tensorflow-udacity -it b.gcr.io/tensorflow-udacity/assignments:0.5.0

  1. (重要步骤!) 配置端口转发:
    • 运行Oracle VM VirtualBox连接 (应该在安装Docker时创建):

enter image description here

  • 转到vdocker机器的设置:

enter image description here

  • 添加端口转发(它将在虚拟环境中将8888端口转发到本地计算机的8810端口):

enter image description here

P.S. 如果您已经在本地计算机上安装了IPython笔记本,则使用:8810端口

  1. 在“设置…”菜单中(从上一步开始),允许虚拟机使用更多内存:

N.B. 在您更改系统设置之前,必须关闭VirtualBox。(由jlarsch提供)

使用以下命令停止VM:

docker-machine stop vdocker

enter image description here

(可选) 您还可以允许它使用更多核心以使其运行更快:

enter image description here

  1. 利润!

enter image description here


太棒了!运行得很好。我有点盲目地跟随。第二个端口是用来干什么的?:-p 6006:6006 - jlarsch
@jlarsch 对我来说,这有点神秘。它只是运行,并且我相信它是安全的。 - Denis Kulagin
1
似乎默认情况下,Docker 的内存分配不足。你解决了如何允许 Docker 使用更多内存的问题吗? - jlarsch
1
很酷。值得指出的是,在您进行任何系统设置更改之前,必须关闭VirtualBox。 - jlarsch
@jlarsch 很好的补充,将其加入指令中。 - Denis Kulagin
显示剩余2条评论

1

本地机器重启后

在计算机重启后开始学习环境,请创建一个名为udacity-tf-start.bat.bat文件,其内容如下:

call docker-machine start vdocker

FOR /f "tokens=*" %%i IN ('docker-machine env --shell cmd vdocker') DO %%i

call docker start -ai tensorflow-udacity

重要! %% 是一种转义符号,仅在 BAT 文件 中使用。如果您通过命令行运行相同的命令集,请使用以下命令:

FOR /f "tokens=*" %i IN ('docker-machine env --shell cmd vdocker') DO %i

在会话之间保存的文件是否进行了更改?例如,将任务1的测试数据用于任务2? - jlarsch
@jlarsch 绝对没错!这就是为什么要分开两个指令的原因。如果你安装从互联网下载的镜像(或者已经缓存在电脑上的),它会删除所有数据并用源文件替换,但如果你遵循重启后的步骤,那么你的数据将在不同的会话之间持久存在。 - Denis Kulagin

1

除了其他回答中提供的内容,下面是我用于创建/运行/启动docker机器的起始脚本。现在的设置过程简化为从https://docs.docker.com/toolbox/toolbox_install_windows/安装最新版本的docker工具箱(这应该会自动安装vbox),然后运行脚本:

@echo off
set DOCKERMACHINENAME=tensorflow-udacity
set REPOSITORY=gcr.io/tensorflow/udacity-assignments:0.6.0
set "LOCALDIR0=/%SystemDrive:~0,1%/"
call :LoCase LOCALDIR0
SET "LOCALDIR=%LOCALDIR0%Users/%USERNAME%"
docker-machine.exe env %DOCKERMACHINENAME% > nul 2> nul
if "%errorlevel%"=="0" goto m_exists
::Machine has to be created
docker-machine create -d virtualbox --virtualbox-memory 8196 %DOCKERMACHINENAME%

:m_exists

::Check if machine needs to be restarted
docker-machine ip %DOCKERMACHINENAME% > nul 2>nul
if not "%errorlevel%"=="0" (docker-machine.exe restart %DOCKERMACHINENAME%)

FOR /F "tokens=*" %%i IN ('docker-machine env --shell cmd %DOCKERMACHINENAME%') DO %%i
FOR /F "tokens=*" %%F IN ('docker-machine ip %DOCKERMACHINENAME%') DO (SET DOCKERMACHINEIP=%%F)
echo Access to iPython: %DOCKERMACHINEIP%:8888

docker inspect %DOCKERMACHINENAME% > nul 2> nul
if "%errorlevel%"=="0" goto m_started
:: Machine has to be started
docker run -p 8888:8888 --name %DOCKERMACHINENAME% -v %LOCALDIR%:/mnt/hosttmp:rw -it %REPOSITORY%
goto finished

:m_started
docker start -ai %DOCKERMACHINENAME%
goto finished

:LoCase
FOR %%i IN ("A=a" "B=b" "C=c" "D=d" "E=e" "F=f" "G=g" "H=h" "I=i" "J=j" "K=k" "L=l" "M=m" "N=n" "O=o" "P=p" "Q=q" "R=r" "S=s" "T=t" "U=u" "V=v" "W=w" "X=x" "Y=y" "Z=z") DO CALL SET "%1=%%%1:%%~i%%"

:finished
::hint: to remove container use: docker rm %DOCKERMACHINENAME%

小写转换代码是从http://www.robvanderwoude.com/battech_convertcase.php复制的。 - Oliver Zendel

0

它是如何运作的

免责声明:它可能有些类似于克里斯托弗·诺兰的电影《盗梦空间》的情节。

整体画面

enter image description here

细节

由于Windows操作系统的一些限制,Docker无法在本地运行(尚未)。这就是为什么我们首先创建一个虚拟盒子:

docker-machine create vdocker -d virtualbox

下一步(称为魔法步骤)设置了一些环境变量,以便docker命令能够连接到在虚拟盒子内部运行的docker守护进程

FOR /f "tokens=*" %i IN ('docker-machine env --shell cmd vdocker') DO %i

>SET DOCKER_TLS_VERIFY=1

>SET DOCKER_HOST=tcp://192.168.99.100:2376

>SET DOCKER_CERT_PATH=C:\Users\USER\.docker\machine\machines\vdocker

>SET DOCKER_MACHINE_NAME=vdocker

然后我们运行:

docker run -it -p 8888:8888 -p 6006:6006 --name tensorflow-udacity -it b.gcr.io/tensorflow-udacity/assignments:0.5.0

这将从指定的URL下载一个镜像,并创建一个名为tensorflow-udacityDocker容器重要提示!该容器在虚拟机中运行。

请注意-p标志:

-p 8888:8888 -p 6006:6006

它告诉Docker守护程序将容器的端口8888转发(发布)到主机(虚拟机)端口8888。 它还不可用于Windows机器!

现在,我们向虚拟机设置添加了另一个端口转发规则:

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接