在30分鐘內(nèi)創(chuàng)建你的深度學(xué)習(xí)服務(wù)器
每當(dāng)我開始一個(gè)新的項(xiàng)目時(shí),我發(fā)現(xiàn)自己一次又一次地創(chuàng)建一個(gè)深度學(xué)習(xí)機(jī)器。
從安裝Anaconda開始,最后為Pytorch和Tensorflow創(chuàng)建不同的環(huán)境,這樣它們就不會(huì)相互干擾。而在這中間,你不可避免地會(huì)搞砸,從頭開始。這種情況經(jīng)常發(fā)生多次。
這不僅是對(duì)時(shí)間的巨大浪費(fèi),它也是令人惱火的。通過(guò)所有的堆棧溢出線程,我們經(jīng)常想知道究竟出了什么問(wèn)題。
那么,有沒(méi)有一種方法可以更有效地做到這一點(diǎn)呢?
在這個(gè)博客中,我將嘗試在EC2上以最小的努力建立一個(gè)深度學(xué)習(xí)服務(wù)器,這樣我就可以專注于更重要的事情。
本博客明確地由兩部分組成:
- 設(shè)置一個(gè)預(yù)先安裝了深度學(xué)習(xí)庫(kù)的Amazon EC2機(jī)器。
 - 使用TMUX和SSH隧道設(shè)置Jupyter notebook。
 
別擔(dān)心,這不像聽(tīng)起來(lái)那么難。只需按照步驟操作,然后單擊“下一步”。
設(shè)置Amazon EC2計(jì)算機(jī)
我假設(shè)你擁有一個(gè)AWS賬戶,并且可以訪問(wèn)AWS控制臺(tái)。如果沒(méi)有,你可能需要注冊(cè)一個(gè)Amazon AWS賬戶。
- AWS控制臺(tái):https://aws.amazon.com/console/
 - 首先,我們需要轉(zhuǎn)到“Services”選項(xiàng)卡以訪問(wèn)EC2儀表板。
 

在EC2儀表板上,你可以從創(chuàng)建實(shí)例開始。

亞馬遜向社區(qū)AMI(亞馬遜機(jī)器映像)預(yù)裝了深度學(xué)習(xí)軟件。要訪問(wèn)這些AMI,你需要查看社區(qū)AMI,并在“搜索”選項(xiàng)卡中搜索“ Ubuntu深度學(xué)習(xí)”。你可以選擇其他任何Linux風(fēng)格,但是我發(fā)現(xiàn)Ubuntu對(duì)于滿足我的深度學(xué)習(xí)需求最為有用。在當(dāng)前設(shè)置中,我將使用深度學(xué)習(xí)AMI(Ubuntu 18.04)27.0版

選擇AMI后,可以選擇“實(shí)例類型”。在這里,你可以指定系統(tǒng)中所需的CPU,內(nèi)存和GPU的數(shù)量。亞馬遜提供了許多根據(jù)個(gè)人需求選擇的選項(xiàng)。你可以使用“過(guò)濾依據(jù)”過(guò)濾器過(guò)濾GPU實(shí)例。 在本教程中,我使用了p2.xlarge實(shí)例,該實(shí)例為NVIDIA K80 GPU提供了2,496個(gè)并行處理內(nèi)核和12GiB的GPU內(nèi)存。要了解不同的實(shí)例類型,你可以查看下方鏈接中的文檔,并查看價(jià)格。 查看文檔:https://aws.amazon.com/ec2/instance-types/ 查看價(jià)格:https://aws.amazon.com/emr/pricing/

你可以在第4步中更改連接到機(jī)器的存儲(chǔ)。如果你不預(yù)先添加存儲(chǔ),也可以,因?yàn)橐院笠部梢赃@樣做。我將存儲(chǔ)空間從90 GB更改為500 GB,因?yàn)榇蠖鄶?shù)深度學(xué)習(xí)需求都需要適當(dāng)?shù)拇鎯?chǔ)空間。

僅此而已,你可以在進(jìn)入最終審閱實(shí)例設(shè)置屏幕之后啟動(dòng)實(shí)例。單擊啟動(dòng)后,你將看到此屏幕。只需在“Key pair name”中輸入任何密鑰名稱,然后單擊“Download Key Pair”即可。你的密鑰將按照你提供的名稱下載到計(jì)算機(jī)上。對(duì)我來(lái)說(shuō),它被保存為“aws_key.pem”。完成后,你可以單擊“Launch Instances”啟動(dòng)實(shí)例。

請(qǐng)確保此密鑰對(duì)的安全,因?yàn)槊慨?dāng)你要登錄實(shí)例時(shí)都需要這樣做。
現(xiàn)在,你可以單擊下一頁(yè)上的“View Instances”以查看你的實(shí)例。這是你的實(shí)例的樣子:

要連接到你的實(shí)例,只需在本地計(jì)算機(jī)上打開一個(gè)終端窗口,然后瀏覽到保存密鑰對(duì)文件并修改一些權(quán)限的文件夾。
- chmod 400 aws_key.pem
 
完成此操作后,你將可以通過(guò)SSH連接到你的實(shí)例。SSH命令的格式為:
- ssh -i“ aws_key.pem” ubuntu @ <你的PublicDNS(IPv4)>
 
對(duì)我來(lái)說(shuō),命令是:
- ssh -i“ aws_key.pem” ubuntu@ec2-54-202-223-197.us-west-2.compute.amazonaws.com
 

另外,請(qǐng)記住,一旦關(guān)閉實(shí)例,公用DNS可能會(huì)更改。
你已經(jīng)準(zhǔn)備好機(jī)器并準(zhǔn)備就緒。本機(jī)包含不同的環(huán)境,這些環(huán)境具有你可能需要的各種庫(kù)。這臺(tái)特定的機(jī)器具有MXNet,Tensorflow和Pytorch,以及不同版本的python。最好的事情是,我們已經(jīng)預(yù)先安裝了所有這些功能,因此開箱即用。
 
設(shè)置Jupyter Notebook
但是,仍然需要使用一些東西才能充分使用計(jì)算機(jī)。其中之一就是Jupyter Notebook。要在計(jì)算機(jī)上設(shè)置Jupyter Notebook,我建議使用TMUX和隧道。讓我們逐步設(shè)置Jupyter Notebook。
使用TMUX運(yùn)行Jupyter Notebook 我們將首先使用TMUX在實(shí)例上運(yùn)行Jupyter Notebook。我們主要使用它,以便即使終端連接丟失,我們的筆記本電腦仍然可以運(yùn)行。
為此,你將需要使用以下命令創(chuàng)建一個(gè)新的TMUX會(huì)話:
- tmux new -s StreamSession
 
完成后,你將看到一個(gè)新屏幕,底部帶有綠色邊框。你可以使用jupyter notebook命令在此計(jì)算機(jī)上啟動(dòng)Jupyter Notebook 。你將看到類似以下內(nèi)容:

復(fù)制登錄URL將是有益的,這樣以后以后嘗試登錄到j(luò)upyter notebook時(shí),我們將能夠獲取令牌。就我而言,它是:
- http://localhost:8888/?token=5ccd01f60971d9fc97fd79f64a5bb4ce79f4d96823ab7872
 
下一步是分離TMUX會(huì)話,以便它在后臺(tái)繼續(xù)運(yùn)行,即使你離開ssh shell。要做到這一點(diǎn),只需按Ctrl+B,然后按D(按D時(shí)不要按Ctrl),你將返回到初始屏幕,顯示你已從TMUX會(huì)話中分離的消息。

如果需要,可以使用以下方法重新連接到會(huì)話:
- tmux attach -t StreamSession
 
SSH隧道訪問(wèn)本地瀏覽器上的notebook
第二步是進(jìn)入Amazon實(shí)例,以便在本地瀏覽器上獲取Jupyter notebook。如我們所見(jiàn),Jupyter notebook實(shí)際上運(yùn)行在云實(shí)例的本地主機(jī)上。我們?nèi)绾卧L問(wèn)它?我們使用SSH隧道。不用擔(dān)心,這很簡(jiǎn)單。只需在本地機(jī)器終端窗口上使用以下命令:
- ssh -i“ aws_key.pem” -L <本地計(jì)算機(jī)端口>:localhost:8888 ubuntu @ <你的PublicDNS(IPv4)>
 
對(duì)于這種情況,我使用了:
- ssh -i "aws_key.pem" -L 8001:localhost:8888 ubuntu@ec2-54-202-223-197.us-west-2.compute.amazonaws.com
 
這意味著,如果我在本地計(jì)算機(jī)瀏覽器中打開localhost:8001,則可以使用Jupyter Notebook。我當(dāng)然可以?,F(xiàn)在,我們只需輸入在先前的步驟之一中已經(jīng)保存的令牌即可訪問(wèn)notebook。對(duì)我來(lái)說(shuō)令牌是5ccd01f60971d9fc97fd79f64a5bb4ce79f4d96823ab7872
- 令牌: http://localhost:8888/?token=5ccd01f60971d9fc97fd79f64a5bb4ce79f4d96823ab7872&token=5ccd01f60971d9fc97fd79f64a5bb4ce79f4d96823ab7872
 

你只需使用你的令牌登錄即可。

現(xiàn)在,你可以通過(guò)選擇所需的任何不同環(huán)境來(lái)選擇新項(xiàng)目。你可以來(lái)自Tensorflow或Pythorch,也可以兩者兼得。notebook不會(huì)讓你失望的。

故障排除
重新啟動(dòng)計(jì)算機(jī)后,你可能會(huì)遇到NVIDIA圖形卡的一些問(wèn)題。具體來(lái)說(shuō),就我而言,該nvidia-smi命令停止工作。如果遇到此問(wèn)題,解決方案是從NVIDIA 網(wǎng)站下載圖形驅(qū)動(dòng)程序。
- NVIDIA 網(wǎng)站:https://www.nvidia.in/Download/index.aspx?lang=en-in
 

以上是我選擇的特定AMI的設(shè)置。單擊搜索后,你將可以看到下一頁(yè):

只需通過(guò)右鍵單擊并復(fù)制鏈接地址來(lái)復(fù)制下載鏈接。并在計(jì)算機(jī)上運(yùn)行以下命令。你可能需要在其中更改鏈接地址和文件名。
- # 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=Tesla
 - sudo sh NVIDIA-Linux-x86_64-410.129-diagnostic.run --no-drm --disable-nouveau --dkms --silent --install-libglvnd
 - modinfo nvidia | head -7
 - sudo modprobe nvidia
 
停止實(shí)例
就是這樣。你已經(jīng)掌握并啟動(dòng)了深度學(xué)習(xí)機(jī)器,并且可以隨意使用它。請(qǐng)記住,無(wú)論何時(shí)停止工作,都應(yīng)停止實(shí)例,因此,當(dāng)你不在實(shí)例上工作時(shí),無(wú)需向Amazon付費(fèi)。你可以在實(shí)例頁(yè)面上通過(guò)右鍵單擊你的實(shí)例來(lái)執(zhí)行此操作。請(qǐng)注意,當(dāng)你需要再次登錄到該計(jì)算機(jī)時(shí),你可能需要從實(shí)例頁(yè)面重新獲得公共DNS(IPv4)地址,因?yàn)樗赡芤迅摹?/p>

結(jié)論
我一直覺(jué)得建立深度學(xué)習(xí)環(huán)境非常麻煩。
在此博客中,我們通過(guò)使用深度學(xué)習(xí)社區(qū)AMI,TMUX和Jupyter Notebook的隧道技術(shù),在最短的時(shí)間內(nèi)在EC2上設(shè)置了新的深度學(xué)習(xí)服務(wù)器。該服務(wù)器已預(yù)先安裝了你在工作中可能需要的所有深度學(xué)習(xí)庫(kù),并且開箱即用。
那你還在等什么?只需在你自己的服務(wù)器上開始使用深度學(xué)習(xí)即可。















 
 
 









 
 
 
 