如何用雲服務器進行深度學習

筆者網站:mwhitelab.com

筆者公衆號:技術雜學鋪

本文將從購買GPU服務器、遠程連接服務器、深度學習環境安裝、用jupyter操控服務器等方面逐一講解購買及使用GPU服務器的步驟。

免費在線jupyter可見在線jupyter平臺推薦

目錄

1. 服務器配置與購買

2. 服務器連接

3. 環境安裝

4. 用jupyter操控服務器

錄:使用密鑰對


1. 服務器配置與購買

雲服務器供應商有很多,本文以阿里云爲例,在百度雲、騰訊雲、谷歌雲等其他供應商購買服務器的步驟大同小異。

進入阿里雲官網

阿里雲官網

登錄(支付寶、淘寶賬戶均可登錄)並先預充一百元。

鼠標移動至右上角頭像可見餘額

在導航欄中選擇“產品”-“雲計算基礎”-“GPU雲服務器”

在雲服務器界面選擇“GN5(P100)購買”

接下來,我們便跳轉到了阿里雲服務器購買界面。默認情況下,系統爲我們推薦“包年包月”的計費方式。每月上千的GPU租賃費用對大部分用戶來說過於昂貴,而且我們只是偶爾會使用GPU計算服務,以月爲單位租賃服務器有點浪費。

阿里雲服務器購買界面

除了包年包月,我們還可以選擇“按量付費”或者“搶佔式實例”。按量付費是以小時爲單位進行計費,計算完畢後需手動關閉服務器以停止計費。“搶佔式實例”也是按小時計費,價格隨市場波動,出價高的一批用戶獲得GPU服務器的使用權。

“搶佔式實例”價格相對便宜,但當市場價格高於我們的出價時,我們的實例將會被釋放,服務器將會被他人使用。不過使用“自動出價”可以讓我們避免上述風險。

按量付費實例停機後不收費,搶佔式網絡雖然便宜,但必須釋放實例實例後纔會停止收費。

如果只是想體驗一下,計費方式可選擇“搶佔式實例”。地域選擇“華北5(呼和浩特)”會有優惠,價格大約在五到七塊每小時(價格會隨時間有些許波動)。讀者若想以後長期間斷使用服務器,一定要選“按量付費”,根據配置不同價格在八到十三塊每小時。(實際費用以秒爲單位進行計算)

服務器規格選擇“ecs.gn5-c8g1.2xlarge”,該規格有8個vCPU,60G內存,一塊P100 GPU,440G存儲空間(暫時存儲),Intel Xeon E5-2682v4 CPU。配置足以滿足絕大部分任務的需求了。

接着,設置鏡像。

鏡像推薦一:如下圖進行配置。CentOS/Ubuntu16.04系統都支持“自動安裝GPU驅動”(新手推薦使用Ubuntu16.04,遇到的坑會少一點),可免去之後安裝GPU驅動的步驟。(若是使用Tensorflow,仍需要手動安裝cuDNN)

Tensorflow-GPU的底層支持一直在變。當前(2019年3月20號)Tensorflow-gpu版本要求CUDA版本要9.0(目前不支持9.1!)且Driver要384.x或更高版本。讀者若是幾年後看到該文章,請先查詢tensorflow-gpu的GPU驅動版本要求。安裝驅動版本不符無法運行tensorflow-gpu

安裝GPU驅動一定要符合tensorflow-gpu的驅動要求

鏡像推薦二:讀者也可以選擇使用“鏡像市場”中的鏡像。如下圖中的鏡像,已經預裝了GPU驅動和tensorflow等框架。純小白建議選擇這個方法,此處就免去了文本第三步環境安裝的過程

存儲選擇默認設置。本地存儲440G空間會隨着我們的實例釋放後消除。一般我們的代碼都放在系統盤,40G的系統盤滿足大部分AI比賽或項目的存儲需求。若有額外需求,讀者可適當增加數據盤。這裏保持默認不更改。

不更改存儲設置

完成上述配置後,點擊“下一步:網絡和安全組”該界面,我們不做任何更改

值得注意的是“公網帶寬”中的帶寬大小是指流量留流出的帶寬大小,計費0.8元/G也是計算流量留出的費用。我們使用服務器下載文件屬於流量流入,與該“公網帶寬”選擇無關,且服務器下載文件免費

不更改網絡設置

安全組默認也保持不變。確保22端口打開即可,我們之後會通過ssh的方式連接服務器。

安全組,確保22端口打開

點擊“下一步:系統配置”。瞭解密鑰的讀者可在“登錄憑證”選擇“密鑰對”的方式。不瞭解密鑰的讀者可選“自定義密碼”(記住該密碼,當我們登錄服務器時,登錄名爲root,密碼爲此處設置的密碼)。

選擇登錄憑證

完成後點擊“確認訂單”。確認界面如下:

配置確認界面

“保存爲啓動模板”可選可不選。保存模板後,當我們再次購買類似服務器時,可以使用模板中的服務器配置。(按量計費時,我們想停止計費,只需關停服務器,不用刪除服務器。以後想用服務器,再次啓動即可,無需再次配置併購買服務器。)

另外,我們也可以設置自動釋放的時間(謹慎操作,到達釋放時間後,實例會被釋放,數據及IP不會被保留)若讀者對自己的使用時間沒有把握,不建議設置“使用時限”。

“使用時限”選項

點擊同意《雲服務器 ECS 服務條款》服務協議。

之後我們即可點擊右下角的“創建實例”了。創建實例之後即開始計費,直到我們手動停止服務爲止。

另外,當不用服務器的時候,一定記得要停止服務!

若使用按量計費,選擇“停止”即可(下圖綠色框),想用時選擇“啓動”即可。若使用搶佔式實例,則需要選擇“釋放設置”了(下圖紅色框),因爲搶佔式實例停止服務器後仍舊計費。下次使用時需要重新配置服務器,包括各類環境。

2. 服務器連接

在控制檯中我們可以看到我們正在運行的雲服務器。記住我們服務器的公網IP地址

這裏筆者使用Xshell來連接遠程服務器。打開Xshell,在菜單欄裏選擇“文件”-“新建”

名稱隨意設置,“主機”爲你購買的服務器的公網IP地址,協議SSH,端口22。

完成上述內容後,點擊確定即可。創建成功後,在界面左側雙擊我們剛剛創建的“阿里雲服務器”以連接服務器。

第一次登陸會有一個SSH安全警告,選擇“接收並保存”即可。

之後便是用戶登錄,默認的用戶名爲root

登錄方式則與之前“登錄憑證”相對應。密碼登錄或者密鑰登錄。

接着,我們便成功以ssh的方式遠程連接了阿里雲服務器。

3. 環境安裝

剛購買的雲服務器只有最簡單的一些配置。我們需要在此基礎上安裝一些深度學習需要的環境。

3.1 安裝GPU驅動、CUDA以及cuDNN

安裝GPU驅動、CUDA、cuDNN全是坑,不同環境下出現的問題千奇百怪,此處難以一一舉出。讀者若安裝時出現問題請直接百度/google,網上必有解決方法(雖然可能也不靠譜)。

Ubuntu出現的坑較少,此處以Ubuntu爲例。

3.1.1 安裝GPU驅動

在第一步配置服務器時若選擇“自動安裝GPU驅動”則可跳過這一步。

英偉達驅動下載頁面設置自己的配置,之後點擊“SEARCH”

接着進入信息確認界面,點擊“DOWNLOAD”

再之後,在如下界面,右鍵“AGREE&DOWNLOAD”,複製鏈接地址。

返回服務器命令行,輸入wget 地址

本案例是 wget http://us.download.nvidia.com/tesla/384.183/NVIDIA-Linux-x86_64-384.183.run

下載完後,執行如下代碼以安裝驅動

sudo chmod  a+x NVIDIA-Linux-x86_64-384.183.run
sudo ./NVIDIA-Linux-x86_64-384.183.run -no-x-check -no-nouveau-check -no-opengl-files 

安裝過程中會有窗口讓你選擇yes或者no,問你是否continue的時候選擇yes(筆者沒有遇到這個選擇),其他時候選擇no。

若驅動安裝成功,輸入nvidia-smi即可查看GPU當前狀態。

3.1.2 安裝CUDA以及cuDNN

這裏給出tensorflow官網上推薦的CUDA以及cuDNN安裝代碼

sudo apt-key adv --fetch-keys http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/7fa2af80.pub
wget http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/cuda-repo-ubuntu1604_9.1.85-1_amd64.deb
sudo apt install ./cuda-repo-ubuntu1604_9.1.85-1_amd64.deb
wget http://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1604/x86_64/nvidia-machine-learning-repo-ubuntu1604_1.0.0-1_amd64.deb
sudo apt install ./nvidia-machine-learning-repo-ubuntu1604_1.0.0-1_amd64.deb
sudo apt update
sudo apt install cuda9.0 cuda-cublas-9-0 cuda-cufft-9-0 cuda-curand-9-0  cuda-cusolver-9-0 cuda-cusparse-9-0 libcudnn7=7.2.1.38-1+cuda9.0 libnccl2=2.2.13-1+cuda9.0 cuda-command-line-tools-9-0

3.1.3 手動安裝cuDNN(使用pytorch可跳過)

若3.1.2中成功安裝CUDA但未成功安裝cuDNN,此時則需要我們進行手動安裝cuDNN了。這個步驟略微繁瑣,需要用戶前往

https://developer.nvidia.com/rdp/cudnn-download

註冊賬戶後纔會有權限下載文件,直接以wget的方式下載會被服務器拒絕。

我們只能用本地電腦訪問上述網站,註冊賬戶,然後選擇我們需要的cuDNN版本,先下載到本地。(選擇for CUDA 9.0版的,下載cuDNN Library for Linux)

接下來,我們需要將本地下好的文件傳到遠程的服務器上。但在這之前,我們需要先要將服務器允許傳輸文件的端口打開。

在阿里雲服務器管理界面,找到我們的服務器,選擇“管理”

在管理界面選擇“本實例安全組”

打開安全組界面後,在橫向菜單欄中選擇“安全組列表”,之後選擇“配置規則”

選擇“快速創建規則”

配置如下圖,選擇telnet(23)端口,授權對象填“0.0.0.0/0”。完成後,我們就可以從本地向服務器傳輸文件了。

我們在服務器命令行上輸入apt-get install -y lrzsz,安裝一個便於我們文件傳輸的工具。

命令行輸入rz,會彈出一個窗口,找到我們之前下載的文件,選擇“打開”。

之後便會開始傳輸文件

當文件傳出完成後,我們先把文件重新命名爲tgz格式。

mv cudnn-9.0-linux-x64-v7.5.0.56.solitairetheme8 cudnn-9.0-linux-x64-v7.5.0.56.tgz

解壓該文件tar -xzvf cudnn-9.0-linux-x64-v7.5.0.56.tgz

把解壓出的這幾個文件分別放到cudn安裝的位置。

值得注意的是,有的服務器cudn是安裝在/usr/local/cuda下,筆者的服務器是安裝在/usr/local/cuda-9.0下。讀者應該先查看一下自己/usr/local/中cuda文件夾名是什麼,再進行如下安裝。

依次將我們解壓好的文件放入cudn的安裝目錄對於位置。(每行指令最後的“/”一定要有!)

sudo cp cuda/include/cudnn.h /usr/local/cuda-9.0/include/
sudo cp cuda/lib64/libcudnn* /usr/local/cuda-9.0/lib64/

最後執行如下代碼即可成功安裝完cudnn

sudo chmod a+r /usr/local/cuda-9.0/include/cudnn.h
sudo chmod a+r /usr/local/cuda/lib64/libcudnn*

輸入cat /usr/local/cuda-9.0/include/cudnn.h | grep CUDNN_MAJOR -A 2 可檢查安裝是否成功(路徑中cuda-9.0在某些服務器中應該爲cuda)

3.2 安裝anaconda(可跳過)

Anaconda是一個開源的Python發行版本,其包含了conda、Python等180多個科學包及其依賴項。

3.2.1 下載並安裝anaconda

輸入wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/Anaconda3-4.4.0-Linux-x86_64.sh以下載anaconda文件(linux64位版)

運行 bash 下載文件名.sh 來安裝anaconda,這裏是bash Anaconda3-4.4.0-Linux-x86_64.sh

安裝過程中一直回車。遇到問yes或no的問題,除了問是否安裝vscode輸入no,其他都輸入yes。

若遇見“bunzip2: command not found”報錯執行yum install -y bzip2之後再執行bash 下載文件名.sh -u  (要加-u,-u的意思是重新安裝,覆蓋之前安裝的內容)

3.2.2 添加anaconda環境變量

安裝成功後,我們還要將anaconda添加到環境變量中。輸入vim .bashrc 以用vim編輯器來編輯.bashrc文件。

輸入vim .bashrc

注意,vim編輯器不是word文檔!想要修改文件,我們要先按下“i”鍵切換到插入模式。按下i後,左下角會有“INSERT”顯示,表示我們現在敲打鍵盤即可插入文字。

我們在文件開頭輸入:

#Anaconda
export PATH=/home/用戶名/anaconda3/bin:$PATH

其中用戶名在本案例中就是root,於是就應該輸入:

#Anaconda
export PATH=/home/root/anaconda3/bin:$PATH

按下Esc鍵,退出插入模式。依次按下”:”, “w”, “q”, 左下角應該顯示如下圖,之後“回車”,即可保存並關閉文件。

輸入source .bashrc 重新激活一下。此時輸入which python即可發現當前使用的python是anaconda3中的。(/root/anaconda3/bin/python)

若不行,則需重啓服務器,再輸入source .bashrc 重新激活。

3.3 修改鏡像源(可跳過)

3.3.1 修改conda鏡像

conda默認的鏡像源在國外,下載文件速度可能比較慢。我們需要將鏡像源修改爲國內的,下載速度會提高很多。

輸入如下命令修改conda的鏡像源

conda config --add channels https://mirrors.ustc.edu.cn/anaconda/pkgs/free/  
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
conda config --set show_channel_urls yes

3.3.2 修改pip鏡像源:

(阿里雲服務器的默認鏡像都已使用阿里雲的鏡像,讀者可跳過本步驟)

輸入mkdir .pip 創建.pip文件夾(有可能mkdir: cannot create directory ‘.pip’: File exists,表示已經有該文件了。)

輸入cd .pip 移動到.pip文件夾

輸入vim pip.conf,創建並修改pip.conf文件

將該文件修改爲如下內容(按下i進入插入模式,按下Esc退出插入模式,按下:wq並回車則保持並關閉文件):

[global]

index-url = https://pypi.tuna.tsinghua.edu.cn/simple

3.4 anaconda環境管理(可跳過)

anaconda可進行環境管理,可創建多個環境,不同環境內可安裝不同的包。默認情況下,我們在base環境中。新建環境可用:

conda create -n 環境名 python=python版本

我們新建一個名字叫tensorflow的環境,這個環境的python版本是3.6則應該爲:conda create -n tensorflow python=3.6。安裝過程中會問我們是否執行Proceed ([y]/n)?,我們回覆y。

安裝完新環境後,我們使用conda activate 環境名,即可從base環境切換到新環境。

可見該環境是python3.6的,我們之後安裝各類python包,import各類python包都是在該環境下進行。退出該環境可以輸入conda deactivate,這樣,我們就回到了base環境。

3.5 安裝深度學習框架

3.5.1 機器學習函數庫

常用的機器學習包有numpy,pandas,matplotlib,sklearn等,其中有的包已經隨anaconda一起安裝好了,有的則沒有(具體情況根據安裝的anaconda版本而定)。尚未安裝的需手動安裝。

使用 pip install 包名 即可。如:pip install pandas

3.5.2 Tensorflow

使用NVIDIA顯卡運行Tensorflow-gpu需要除了要裝驅動以外,還需要安裝cuDNN。(見3.1)

由於我們使用的是gpu版本,輸入pip install tensorflow-gpu即可安裝gpu版tensorflow。

安裝完後,檢驗一下我們的tensorflow是否安裝成功。

輸入python,進入python執行界面。在該界面下輸入import tensorflow as tf,不報錯即代表安裝成功。

報FutureWarning不要緊,只要import tensorflow成功即可。

安裝gpu版tensorflow出錯概率極高,各類問題請參見“3.6 安裝tensorflow-gpu出錯的各種可能”

3.5.3 PyTorch

PyTorch的官網上選擇自己的服務器配置即可找到對應下載代碼。

我們輸入 pip install torch 即可安裝PyTorch

輸入python,進入python執行界面。在該界面下輸入import torch ,不報錯即代表安裝成功。

3.6 安裝tensorflow-gpu出錯的各種可能

我們之前提到過,tensorflow對環境有比較嚴格的要求,如python版本只可爲2.7、3.3-3.6,CUDA爲9等等。

3.6.1 python版本檢查

在命令行輸入python -V(V要大寫)查看python版本,若爲版本不在2.7、3.3-3.6之間,請參照3.4 使用conda創建一個3.6python版本的環境,在該環境下安裝並使用tensorflow。

3.6.2 驅動以及CUDA版本檢查

輸入nvidia-smi查看GPU狀態,若報錯,則要重新安裝GPU驅動。見3.1.1

查看CUDA版本:cat /usr/local/cuda/version.txt (cuda目錄也可能爲cuda-9.0等,可輸入cat /usr/local/cuda-9.0/version.txt )若沒有,則參見3.1.2

查看cuDNN版本 cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2(cuda目錄也可能爲cuda-9.0,可輸入cat /usr/local/cuda-9.0/include/cudnn.h | grep CUDNN_MAJOR -A 2)若沒有,則參見3.1.3

若CUDA和cuDNN的版本與tensorflow-gpu要求的版本不符,則需重新安裝CUDA和cuDNN。

3.6.3 安裝指定tensorflow-gpu版本

輸入pip uninstall tensorflow-gpu即可卸載之前安裝的tensorflow-gpu

輸入 pip install tensorflow-gpu==版本號 如pip install tensorflow-gpu==1.12.0 即可安裝1.12.0版本的tensorflow。

4. 用jupyter操控服務器

我們可以通過xshell的隧道方式,讓我們以本地瀏覽jupyter的方式控制遠程服務器

4.1 配置jupyter

首先,在遠程服務器上安裝jupyter:pip install jupyter

接着,輸入jupyter notebook –generate-config –allow-root生成配置文件。

我們輸入python,進入python執行界面。輸入:

from notebook.auth import passwd
passwd()

之後系統會讓我們輸入並驗證新密碼,密碼選一個好記的即可。輸入完成後,系統會返回給我們一個加密的字符串,複製該字符串。

按下ctrl+z返回命令行,輸入vi ~/.jupyter/jupyter_notebook_config.py,以編輯該文件。

按下”i”鍵進入插入模式,插入如下內容

c.NotebookApp.ip='*'
c.NotebookApp.password = u'之前的那串sha1字符串'
c.NotebookApp.open_browser = False
c.NotebookApp.port =8888 # 任意端口均可(只要不佔用22,80等常用端口)

按下‘Esc’退出插入模式,輸入:wq回車以保持並關閉文件。

此時,輸入jupyter notebook –allow-root 服務器就在運行jupyter了,不過想要本地訪問,我們還需要讓阿里雲打開8888端口

4.2 開通服務器端口

與3.1.3開通端口類似。在修改安全組規則界面(具體詳情見3.1.3),我們選擇“添加安全組規則”

添加如下規則即可

此時,訪問我們服務器ip:8888 即可進入jupyter界面。密碼輸入我們在from notebook.auth import passwd; passwd() 時輸入的密碼。

密碼輸入完成後,即可用jupyter的方式訪問到我們的服務器了。

4.3 隧道連接

在Xshell界面左側的會話管理器,選擇屬性

點擊“隧道”-“添加”

輸入如下信息,偵聽端口任意,這裏爲5000;目標主機可以不用設置,目標端口是之前c.NotebookApp.port =8888設置的端口號。

完成後點擊確定。斷開與服務器的連接並重連。

此時運行jupyter後。我們可以以訪問本地5000端口的形式訪問遠程服務器了。

 

附錄:使用密鑰對

在配置阿里雲服務器時,在登陸憑證界面選擇“新建密鑰對”。

我們創建一個密鑰,並點擊確定。此時我們會下載一個.pem文件

下載的.pem文件爲密鑰(密鑰請勿泄露,公鑰隨意,其他人知道你的公鑰也無法僞造成你登錄服務器)。

以XShell爲例,我們在菜單欄選擇“工具”-“用戶密鑰管理者”

在打開的“用戶密鑰”窗口,我們選擇導入,導入之前的.pem文件

導入成功後如下圖。

密鑰相對於直接密碼登錄來說會安全很多。

回到登陸憑證界面,選擇我們之前創建的密鑰對即可。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章