對(duì)于研究深度學(xué)習(xí)的朋友來說,GPU服務(wù)器是必不可少的,但是對(duì)于很多朋友來說可能沒有現(xiàn)成的昂貴GPU服務(wù)器供使用,因此利用云服務(wù)器來訓(xùn)練模型成為另一個(gè)選型。谷歌云較其他云服務(wù)器(AWS,阿里云等等)的優(yōu)勢(shì)在于新注冊(cè)賬號(hào)有$300美金的免費(fèi)使用額度,對(duì)于手頭并不寬裕的學(xué)生黨來說這可能是一個(gè)大的利好消息。今天我就來分享一下我是如何從頭開始搭建基于谷歌云的深度學(xué)習(xí)平臺(tái)。
第一步,
注冊(cè)谷歌賬號(hào),登陸谷歌云網(wǎng)站,綁定visa信用卡,領(lǐng)取$300免費(fèi)使用額度(這一步比較簡(jiǎn)單,有不清楚的地方google一下~)。PS:1.可能需要翻墻,因?yàn)槲铱梢苑瓑?,沒有試過不翻墻是否能完成這一步。2.聽說最近好像要先花費(fèi)$25才能得到免費(fèi)額度。。。
第二步,
申請(qǐng)GPU配額。谷歌服務(wù)器提供三種GPU,分別是K80,P100和V100,大家可以根據(jù)需要申請(qǐng)。初學(xué)者一般K80就夠用了。PS:申請(qǐng)?zhí)峤恢笮枰欢ǖ臅r(shí)間審核。
第三步,
進(jìn)入谷歌云控制臺(tái),選擇computer engine,打開VM(Visual Machine),點(diǎn)擊創(chuàng)建實(shí)例;
Cpu選擇4核15G內(nèi)存,GPU選擇K80
系統(tǒng)選擇Ubuntu16.04,硬盤選擇200G機(jī)械硬盤。
防火墻流量選項(xiàng)都勾選上。
完成之后點(diǎn)擊創(chuàng)建按鈕,等待幾分鐘之后,完成VM實(shí)例的創(chuàng)建。
第四步,
安裝深度學(xué)習(xí)的軟件環(huán)境。
1.安裝anoconda
wget https://repo.continuum.io/archive/Anaconda3-5.0.0-Linux-x86_64.sh
bash Anaconda3-5.0.0-Linux-x86_64.sh
PS:可以選擇下載安裝不同的anaconda版本
為了立刻使用 Anaconda,讀取你的啟動(dòng)文件:
source ~/.bashrc
2.安裝cuda,cudnn
安裝CUDA運(yùn)行時(shí)環(huán)境,首先確認(rèn)一下系統(tǒng)應(yīng)該至少?zèng)]有安裝除nvidia-common之外的任何nvidia的包:
dpkg -l | grep -i nvidia
否則使用以下命令刪除多余的包及配置文件:
sudo apt-get remove --purge name_of_ package
sudo apt-get autoremove
然后我們需要下載CUDA的安裝包和cuDNN:
sudo wgethttps://developer.download.nvidia.com/compute/redist/cudnn/v6.0/cudnn-8.0-linux-x64-v6.0.tgz
接下來安裝驅(qū)動(dòng)和運(yùn)行時(shí):
sudo dpkg -i cuda-repo-ubuntu1604_8.0.61-1_amd64.deb
sudo dpkg -i cuda-repo-ubuntu1604-8-0-local-cublas-performance-update_8.0.61-1_amd64.deb
sudo apt-get update
查看可用的CUDA運(yùn)行時(shí)版本:
sudo apt-cache policy cuda
安裝CUDA8.0
sudo apt-get install cuda=8.0.61-1
添加源并更新到最新驅(qū)動(dòng):
sudo add-apt-repository ppa:graphics-drivers/ppa
這里記得需要敲回車鍵確認(rèn)添加源
sudo apt-get update
sudo apt-get upgrade
sudo reboot
安裝cuDNN
tar -xvf cudnn-8.0-linux-x64-v6.0.tgz
sudo cp cuda/include/cudnn.h /usr/local/cuda/include
sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64
sudo chmod a+r /usr/local/cuda/include/cudnn.h /usr/local/cuda/lib64/libcudnn*
設(shè)置環(huán)境變量:
sudo vim ~/.bashrc
在文件最后添加下面內(nèi)容:
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/cuda/lib64:/usr/local/cuda/extras/CUPTI/lib64"
export CUDA_HOME=/usr/local/cuda
export PATH="$CUDA_HOME/bin:$PATH"
生效更改
source ~/.bashrc
最后敲nvidia-smi確認(rèn)驅(qū)動(dòng)安裝成功。
3.安裝opencv3
conda install -c https://conda.anaconda.org/menpo opencv3
4.安裝GPU版TensorFlow,keras,因?yàn)槲野惭b的而是cuda8.0,因此需要安裝對(duì)應(yīng)的tensorflow和keras版本,大家可以根據(jù)自己的需求,更換不同的版本。
pip install tensorflow-gpu==1.4
pip install keras==2.1
5.安裝unzip
sudo apt-get install unzip
6.pip install imutils
7,查看已經(jīng)安裝的軟件包
Conda list
第五步,
上傳代碼,下載數(shù)據(jù)集,開始模型訓(xùn)練。這一步,我向大家演示一遍利用我們搭建的谷歌云平臺(tái)訓(xùn)練kaggle貓狗圖像分類模型。
1.我們不需要把數(shù)據(jù)集下載到本地再重新上傳到谷歌云,直接利用下列指令完成數(shù)據(jù)集直接下載到服務(wù)器,簡(jiǎn)單快捷。
pip install kaggle-cli
kg download -u kaggle賬戶 -p 密碼 -c dogs-vs-cats -f train.zip
通過上面兩個(gè)指令,數(shù)據(jù)集就已經(jīng)下載到服務(wù)器當(dāng)前目錄下了,ls查看一下吧~PS:下載數(shù)據(jù)集之前可能需要我們先登錄kaggle,進(jìn)入dogs-vs-cats競(jìng)賽,在Rules一欄中點(diǎn)擊接受相關(guān)規(guī)則。
2.因?yàn)槲沂峭ㄟ^瀏覽器直接ssh到服務(wù)器的,因此在右上角就已經(jīng)提供了上傳和下載的功能,利用上傳文件功能,將我們的代碼上傳到服務(wù)器吧。PS:大家也可以選擇其他的方式上傳代碼,不會(huì)就google一下吧~
3.開始訓(xùn)練,保存模型和結(jié)果。我利用了Alexnet跑了一遍,這里我向大家展示一下我的訓(xùn)練結(jié)果,Epoch24能達(dá)到驗(yàn)證集89%的準(zhǔn)確率,訓(xùn)練更多的Epochs還能提高1%-4%左右的準(zhǔn)確率。
4.因?yàn)槟P陀?xùn)練時(shí)間較長(zhǎng),ssh連接服務(wù)器的時(shí)候會(huì)因?yàn)殚L(zhǎng)時(shí)間沒有操作而斷開,一旦連接斷開,運(yùn)行的訓(xùn)練程序也將被終止。。。
解決此問題有兩種方法。
方案一:在客戶端設(shè)置
方法很簡(jiǎn)單,只需在客戶端電腦上編輯(需要root權(quán)限)/etc/ssh/ssh_config,并添加如下一行:
ServerAliveInterval 60
此后該系統(tǒng)里的用戶連接SSH時(shí),每60秒會(huì)發(fā)一個(gè)KeepAlive請(qǐng)求,避免被踢。
方案二:在服務(wù)器端設(shè)置
如果有相應(yīng)的權(quán)限,也可以在服務(wù)器端設(shè)置,即編輯/etc/ssh/sshd_config,并添加:
ClientAliveInterval 60
需要注意的是在服務(wù)器端設(shè)置后需要重啟該服務(wù)器以使連接生效:sudo reboot
重啟后每一個(gè)連接到此服務(wù)器上的客戶端都會(huì)受其影響。另外應(yīng)注意啟用該功能后,安全性會(huì)有一定下降(比如忘記登出時(shí)……)
第六步,
最后我們需要做的就是在訓(xùn)練完成之后,保存我們搭建深度學(xué)習(xí)的平臺(tái),下次需要直接就可以啟用而不用再重新配置一遍。
進(jìn)入GCP的磁盤一欄中,將之前創(chuàng)建的服務(wù)器磁盤(保存著我們的數(shù)據(jù)和代碼)創(chuàng)建快照,完成之后,在快照一欄中查看是否已經(jīng)生成快照。
在下次需要訓(xùn)練的時(shí)候,重新創(chuàng)建實(shí)例,并在啟動(dòng)磁盤中選擇之前保存的快照,完成創(chuàng)建。進(jìn)入服務(wù)器之后,你會(huì)發(fā)現(xiàn)之前所有的數(shù)據(jù)都還保存著,然后開始你的下一次訓(xùn)練吧