安裝完Ubuntu16.04就開始搗鼓該如何進行深度學習了。在此之前還需要經曆以下過程:
1、更換國内鏡像源
安裝完Ubuntu 系統後第1件事就是更換為國内源:
我試過了阿裡雲不行,中科大可!
解決方法:[judygeng] sudo apt-get update 報錯 ubuntu xenial InRelease 明文簽署檔案不可用,結果為‘NOSPLIT’(您的網絡需要認證嗎?)解決
2、更新軟體清單
輸入
sudo apt-get update
不更新的話可能下不了軟體包
3、安裝中文輸入法
我最先開始下谷歌拼音,發現好難用不習慣,最後還是下了個搜狗
參考:
Ubuntu16.04系統安裝搜狗輸入法詳細教程
4、安裝vim
因為gedit修改檔案時會出現warning,用vim打開檔案就沒事
參考:
(gedit:20620): WARNING **: Set document metadata failed: Setting
但是我發現雖然用gedit編輯檔案會出現warning,但它好用啊!可以直接複制粘貼,也能滑鼠定位。vim就很難了。是以就算裝了vim我還是沒用╮(╯_╰)╭
※※※部署深度學習環境
最近在學目标檢測,看到了一本書《MXNext深度學習實戰》,裡面講得超級詳細,從一開始的環境配置到最後的實戰都寫得清清楚楚。是以以下配置都和書裡面的内容基本一緻。
其實我本來是打算用tensorflow架構的,但書本說MXNext架構也很好,而且各種操作真的寫得很詳細,我跟着一步步做就不怕出現太大的問題。
這十多天來我用win10,caffe、tensorflow架構想跑網上目标檢測的demo沒一個成功的!!環境配置搞得我頭都大。各種版本要對應好,從github上download下來的有些還需要自己配置編譯,這又要用到vs,cmake。真真真的缺太多東西了,是以最後我隻能裝個雙系統用Ubuntu16.04了。我太難了。
這裡是用Pycharm+Docker搭建的深度學習環境。
Docker是一個環境隔離工具,采用這種方式不用安裝CUDA,cuDNN,MXNet,隻需安裝Docker,然後通過Docker這個工具從鏡像(image)庫中拉取對于版本鏡像就可以直接使用了,這樣就不需要每次都在本地安裝。
接下來就開始配置吧~過程很曲折,結果很美好
1、安裝驅動
1、在桌面左側打開system settings
2、點選software&update
3、點選additional drivers,選擇第一個,點選apply changes
4、最後點選restart重新開機就可以了
2、下載下傳pycharm專業版(2018.3.7)
官網:https://www.jetbrains.com/pycharm/download/other.html
安裝方法參考:
Ubuntu下安裝Pycharm專業版并激活
專業版需要花費,學生黨暫沒經費,是以就在網上找了激活碼。
親測好用!!找了好久,隻有這個行:
https://www.cnblogs.com/codehome/p/8342430.html
這裡顯示2021/2/19到期,過期後應該還可以用上面的連結擷取新的激活碼
3、下載下傳安裝Docker(版本18.03.1)
下載下傳位址
選擇docker-ce_18.03.1-ce-0~ubuntu_amd64.deb
進入下載下傳docker的檔案夾,我的是預設下到了~/Downloads檔案夾下
是以輸入以下指令:
cd ~/Downloads
再輸入:
sudo -dpkg -i docker-ce_18.03.1~ce-0~ubuntu_amd64.deb
驗證Docker是否安裝成功:
docker --version
出現Docker version 18.03.1-ce, build 9ee9f40 就說明成功了
4、安裝NVIDIA-docker
接下來的操作都是以root使用者進行,否則可能會出現一些問題。
切換root時我遇到了一個問題,解決方法:
linux使用su切換使用者提示 Authentication failure的解決方法
1、先安裝curl:
curl是一個指令行工具,通過指定的URL來上傳或下載下傳資料,并将資料展示出來。
apt install curl
2、添加gpg key并建立一個倉庫:
先輸入:
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | apt-key add -
出現OK時再輸入:
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
再輸入:
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | tee /etc/apt/sources.list.d/nvidia-docker.list
結果如下
最後再輸入:
apt-get update
結果如下
3、安裝nvidia-docker2
輸入:
apt-get install -y nvidia-docker2
這裡出現一個問題:
E: Unable to fetch some archives, maybe run apt-get update or try with --fix-missing?
按照提示輸入:
apt-get install -y nvidia-docker2 --fix-missing
就完美解決,如圖:
安裝完成後需要重新導入Docker配置檔案:
pkill -SIGHUP dockerd
4、測試
這裡啟動一個名為nvidia/cuda的鏡像,如果機器中沒有該鏡像,那麼run指令在啟動前會自動拉取該鏡像),然後在鏡像中運作nvidia-smi指令,這條指令是用來檢視顯示卡資訊的。
輸入:
docker run --runtime=nvidia --rm nvidia/cuda nvidia-smi
這裡又報錯了:
解決方法參考:
[程式羊的自我修養 ]在執行Dockerfile時出現Get https://registry-1.docker.io/v2/錯誤的解決方案
我用的是以下解決方法:
修改docker鏡像源:
docker預設的源為國外官方源,下載下傳速度較慢,可改為國内源加速,我用了阿裡雲的
修改或新增配置檔案,輸入:
gedit /etc/docker/daemon.json
添加如下參數:逗号不要漏了
"registry-mirrors": ["https://aeckruos.mirror.aliyuncs.com"],
再重新開機一下docker服務:
systemctl daemon-reload
systemctl restart docker
解決了一個又來一個……
報錯:
解決辦法參考:nvidia-docker 安裝報錯記錄
正确的指令是需要加上cuda的版本号:
docker run --runtime=nvidia --rm nvidia/cuda:8.0-devel nvidia-smi
在這個過程中因為有一些源不太行,下到最後一點總是報錯報錯報錯,試了好幾個源,最後隻有改成阿裡雲才行,阿裡雲強!!!
搞定這個bug用了我好幾個小時。終于可以了,既氣又喜!
如果可以成功看到如下圖所示的顯示卡資訊就可以在鏡像中使用GPU了。
5、修改配置檔案
為了免得每次運作docker鏡像時都要加上–runtime=nvidia這個參數,可以在配置檔案中配置這個參數。
打開配置檔案
gedit /etc/docker/daemon.json
添加
"default-runtime":"nvidia",
如下圖所示:
儲存檔案,重新開機一下docker服務:
service docker restart
最後就可以使用以下指令在鏡像中看到顯示卡驅動資訊了:
docker run --rm nvidia/cuda:8.0-devel nvidia-smi
10、拉取MXNet鏡像
接下來在鏡像庫中拉取MXNet鏡像,Docker官方倉庫提供了多種多樣的MXNet鏡像:
https://hub.docker.com/r/mxnet/
這裡選擇python api對應的mxnet/python。
在docker中可以通過docker pull指令來拉取鏡像,鏡像名的命名規則一般是”倉庫名:标簽“,比如”mxnet/python:gpu“,這裡是按照《MXNet深度學習實戰》這本書采用的是MXNet1.3.1、CUDA8.0和Python3.x,可以通過以下指令拉取鏡像名為mxnet/python:1.3.1_gpu_cu80_py3的鏡像:
這裡也需要切換到root操作,開始時沒有用root就報錯了。
docker pull mxnet/python:1.3.1_gpu_cu80_py3
拉取鏡像一般需要幾分鐘時間,如下圖拉取成功。
接下來通過docker的run指令進入指定鏡像啟動容器并開始一些簡單的操作。
進入指定鏡像:
docker run --rm -it mxnet/python:1.3.1_gpu_cu80_py3 bash
其中,”–rm“參數表示退出容器後自動删除該容器,”-it“參數表示指定鏡像名稱。
如果成功啟動了容器,則指令行的字首如下所示:
[email protected]:/#
符号@後面的字元串表示啟動的容器的ID。
接下來的所有操作都會在這個容器環境中,不會影響機器環境。
然後通過輸入
python3
進入python環境,在該鏡像中預設使用python3.5.2
接着輸入
import mxnet as mx
沒有報錯就可以正常使用mxnet了。
接下來可以執行一些簡單的操作:
a=mx.nd.array([1,2,3]).as_in_context(mx.gpu(0))
b=mx.nd.array([4,5,6]).as_in_context(mx.gpu(0))
print(a+b)
以上操作如下圖所示:
太興奮啦!!!!搞了一天終于把環境搭建好了,接下來就可以好好跑模型了~
在某個環節出錯了不要慌,網上有很多解決方法,一個不行試多幾個,總有一個是可以的,不要放棄啊,想想成功後的欣喜,這一切都是值得的。