终结重复工作!教你30分钟创建自己的深度学习机器
重复的工作总是很让人恼火。
就像每当开启一个新的项目,我都得一遍遍地创建新的深度学习机器。先是安装Anaconda,再为Python和Tensorflow配置不同环境以防互相干扰。进行到一半时,会不可避免地陷入一团糟,然后又重新开始,检查所有StackOverflow线程,也不知道哪儿出了错。这种情况常常发生。
再被折磨很多次后,我开始思考,有没有更加高效的方法呢?
功夫不负有心人。我终于找到了在EC2上建立一个深度学习服务器最简单的方法。只要30分钟搞定重复工作,你就能把时间留出来去做更重要的事情啦。
建立AmazonEC2机器
首先你得有一个AWS账号,并可以登录AWSConsole。若没有,则需要首先申请一个AmazonAWS账户。
第一步,转到Services选项卡访问EC2仪表盘。
第二步,在EC2仪表盘上,开始创建自己的实例。
第三步,Amazon为CommunityAMIs(Amazon Machine Image)提供预装深度学习软件。要访问这些AMI,需要先访问community AMI并在搜索标签中搜索“Ubuntu版本深度学习”。
其他Linux操作系统也可以,但我认为Ubuntu版本最符合进行深度学习的需求。这个步骤里会用到深度学习AMI(Ubuntu 18.04),版本为27.0。
紧接着,一旦选定了一款AMI,接下来就是选择实例的类型啦。这时要明确系统中所需的CPU、存储器及GPU的数量。Amazon提供基于个人需求的多种选择。可以用“Filter by”过滤器来筛选GPU 实例。
本文使用的是p2.xlaege实例,p2.xlaege实例为 NVIDIAK80 GPU提供了2496个并行处理内核及12GiB的GPU内存。
第五步,可以在第四步更改附加到机器上的存储器,如果不预先添加存储器的话也可以稍后再操作。绝大多数的深度学习都要求适当的存储器容量,于是我把存储器容量从90GB扩到500GB。
第六步,完成以上步骤就可以进入实例设置的最终页面并启动instance。一旦点Launch,就会看到这样一个页面。在Key pairname中写入密钥名,然后点击“Downloadkey pair”。密钥会按提供的名称下载到电脑上。设置的名称是“aws_key.pem”。完成之后,可以点击“LaunchInstances”。
每次登录自己的实例都会要求输入密钥对,所以务必保证密钥对的安全性。
好啦,现在可以单击下一页的“Viewinstances”来查看你的实例。这就是创建的实例:
如果想要连接实例,只需打开本地计算机的终端窗口,并浏览保存密钥对文件的文件夹,然后修改一些权限。
chmod 400 aws_key.pem
操作之后,就可以通过SSHing连接到instance。SSH 指令的形式如下:
ssh -i "aws_key.pem"ubuntu@<Your PublicDNS(IPv4)>
指令是这样的:
ssh -i "aws_key.pem"[email protected]
还要记住一点,如果关闭了实例,Public DNS可能会改变。
这时机器已经准备好了。这台机器里包含了不同的环境,拥有各种可能所需的库。这台特别的机器还有拥有各种不同版本python的MXNet、Tensorflow和 Pytorch。这些已都预装好,可以立即开始运作了。
创建JupyterNotebook
如果想要充分发挥设备的性能,还有几样东西必不可少。其中一项就是JupyterNotebooks。我推荐使用TMUX和tunneling在机器上创建Jupyter Notebooks。
使用TMUX来运行Jupyter Notebook
首先使用TMUX在实例上运行Jupyter notebook。主要采用TMUX是因为即使终端连接丢失,Jupyter Notebook仍可以运行。因此,我们需要使用以下代码来创建一个新的TMUX会话:
tmux new -s StreamSession
完成后,你将会看到新的界面,底部有一个绿色的边框。接下来可以使用常规Jupyternotebook指令来创建自己的Jupyter Notebook。如下图:
复制登录的URL很有帮助,这样之后登录Jupyter Notebook时能够得到一个令牌。令牌是这样的:http://localhost:8888/?token=
5ccd01f60971d9fc97fd79f64a5bb4ce79f4d96823ab7872
下一步是分离TMUX 会话,这样一来即使关闭SSH shell也可以继续在后台运行。只需按下Ctrl+B,然后D(按D时不要按Ctrl )就会返回到初始界面,你就会看到消息:已经断开当前会话。
如果有需要,也可以使用下面的代码来再次重连会话:
tmux attach -t StreamSession
2.SSH 隧道访问本地浏览器上的Jupyter notebook
第二步是进入Amazon instance,在本地浏览器上获取Jupyter Notebook。可以看到,实际上JupyterNotebook正在云实例的本地主机上运行。那么我们该如何进行访问呢?SSH 隧道。相当于是直接地在填空。只需在本地机器终端窗口上使用以下指令:
ssh -i "aws_key.pem" -L<Local Machine Port>:localhost:8888 ubuntu@<Your PublicDNS(IPv4)>
这种情况使用的是:
ssh -i "aws_key.pem" -L8001:localhost:8888 [email protected]
意味着如果我在本地机器浏览器上打开本地主机:8001,就一定能使用JupyterNotebook。现在输入之前步骤中保存的令牌来访问notebook。令牌是
5ccd01f60971d9fc97fd79f64a5bb4ce79f4d96823ab7872
用自己的令牌登录,这下子就完全拥有自己的notebook啦!
现在选择任一想要的环境就可以着手进行新的项目了。可以是Tensorflow或Pytorch,或是两者一起的最佳版本。这个notebook可不会让你失望的。
调试
一旦机器重新启动,可能会面临一些NVIDIA显卡上的问题。我就碰到了nvidia-smi指令停止工作的情况。如果遇到这个问题,可以通过从NVIDIA网站下载图形驱动程序来解决。
以上是我选择的特定AMI的设置。点击搜索,就能看到下一页:
只需右键单击并复制链接地址即可复制下载链接。然后在机器上运行以下指令。你可能需要在这上面更改链接地址和文件名。
# When nvidia-smi doesnt work:wget https://www.nvidia.in/content/DriverDownload-March2009/confirmation.php?url=/tesla/410.129/NVIDIA-Linux-x86_64-410.129-diagnostic.run&lang=in&type=Teslasudo shNVIDIA-Linux-x86_64-410.129-diagnostic.run --no-drm --disable-nouveau --dkms--silent --install-libglvndmodinfo nvidia | head -7sudo modprobe nvidia
停止实例
好啦,你已经创建并开始运行深度学习机器了,可以想怎么使用就怎么使用。
有一点要注意,记住停止工作时要停止实例,以免不在实例上工作时还要向Amazon支付费用。此外,在这台机器上再次登陆时,需要从instance页面获取Public DNS(IPv4)以防更改。