終結重復工作!教你30分鐘創建自己的深度學習機器
圖源:unsplash
重復的工作總是很讓人惱火。
就像每當開啟一個新的項目,我都得一遍遍地創建新的深度學習機器。先是安裝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"ubuntu@ec2-54-202-223-197.us-west-2.compute.amazonaws.com

還要記住一點,如果關閉了實例,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 ubuntu@ec2-54-202-223-197.us-west-2.compute.amazonaws.com
意味著如果我在本地機器瀏覽器上打開本地主機: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)以防更改。

建立一個深度學習環境是一件很重要的事情。現在你已經學會了如何在最短的時間內,使用深度學習 CommunityAMI、TMUX和 Tunneling在EC2為Jupyter Notebooks創建了一個新的深度學習服務器。這臺預裝的服務器里有所有可能在工作中需要的深度學習庫,并能即時運作。
所以,你還在等什么呢?