0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

組裝深度學(xué)習(xí)工作站過程中的超詳細(xì)操作流程

新機(jī)器視覺 ? 來源:新機(jī)器視覺 ? 作者:新機(jī)器視覺 ? 2021-01-07 14:50 ? 次閱讀

導(dǎo)讀

本文記錄了組裝深度學(xué)習(xí)工作站過程中的超詳細(xì)操作流程,文章分為硬件、系統(tǒng)、DL開發(fā)環(huán)境配置以及工作站的維護(hù),可供有類似需求的同學(xué)作為參考。

0 前言

工作原因一直想配置一臺(tái)自己的深度學(xué)習(xí)工作站服務(wù)器,之前自己看完paper想做一些實(shí)驗(yàn)或者復(fù)現(xiàn)模型的時(shí)候只能用自己的日常PC來跑很麻煩...一方面電腦得裝雙系統(tǒng),干活的時(shí)候就不能用作其他用途了;另一方面,即使是沒有使用流程的問題,GTX1080的性能也還是弱了一些,更何況我用的是一個(gè)A4迷你機(jī)箱,長時(shí)間高負(fù)載的訓(xùn)練任務(wù)也不太可靠。

以前在公司的時(shí)候還可以用公司的DGX訓(xùn)練集群做一些實(shí)驗(yàn),但是我現(xiàn)在的開發(fā)環(huán)境已經(jīng)切換到了昇騰的NPU架構(gòu)芯片之上了,昇騰平臺(tái)算力方面雖然是比肩甚至可以超越英偉達(dá),但是目前暫時(shí)很多學(xué)術(shù)界的生態(tài)都還是基于GPU服務(wù)器的(主要是指開源代碼),且我們這兒昇騰服務(wù)器對個(gè)人也不好買(且買不起),所以有一臺(tái)這樣的GPU工作站還是會(huì)方便一些。

那么本文是我在組裝工作站過程中記錄的詳細(xì)操作流程,供有類似需求的同學(xué)參考~

1. 硬件篇

1.1 工作站配置選型

配件全家福

服務(wù)器的配置以個(gè)人使用性價(jià)比為主,同時(shí)考慮到以后的擴(kuò)展性像是主板和機(jī)箱這些配件配置設(shè)置一些冗余。首先是CPU平臺(tái)的選擇,雖然AMD這兩年實(shí)在是香,但是作為生產(chǎn)力工具考慮到軟件庫的兼容性問題,還是決定選擇intel平臺(tái)里十代X系列CPU+X299主板,算是比較穩(wěn)的方案,而且某東上CPU搭配主板套裝一起買也性價(jià)比也很高。GPU方面今年的30系顯卡都比較良心,使用兩塊3080或者一塊3090都是很給力的,24G的顯存也已經(jīng)跟TITAN RTX持平了(價(jià)格卻只要一半)...這里考慮到主板上只能插兩塊PCIEx16的卡,為了以后可能的提升性能還需要再加一塊卡,所以3090是最佳選擇。

最后選定的配置如下:

CPU:i9-10920X

顯卡GPU:七彩虹RTX3090 Advance

內(nèi)存:芝奇幻光戟16G x 4共64G

主板:華碩X299-DELUXE PRIME

固態(tài)硬盤:1TB西數(shù)NVME SSD + 1TB三星870QVO SATA SSD

機(jī)械硬盤:希捷EXOS 12TB氦氣盤

電源:海盜船AX1200i 1200W模組電源

散熱器:海盜船H100X240水冷 + 若干120機(jī)箱風(fēng)扇

機(jī)箱:海盜船AIR540 E-ATX機(jī)箱

其中硬盤的設(shè)計(jì)是這樣的:1T的NVME固態(tài)做系統(tǒng)盤,12T的機(jī)械盤作為數(shù)據(jù)集倉庫,另外一個(gè)1T SATA固態(tài)作為訓(xùn)練時(shí)的數(shù)據(jù)集緩存,因?yàn)镮O讀寫速度也是會(huì)影響訓(xùn)練效率的,所以相比于直接從機(jī)械盤里面讀取數(shù)據(jù),加一塊SSD做cache效果會(huì)好很多。

1.2 電腦組裝

總之就是快樂的玩具拼裝過程~

機(jī)箱尺寸比較大,預(yù)留的空間非常足所以不會(huì)出現(xiàn)像是在裝A4機(jī)箱時(shí)那種考驗(yàn)走線和裝配順序的技巧問題;而且服務(wù)器嘛,安靜地塞在某個(gè)角落就好了,也不用過于考慮什么美觀問題,所以走線就很隨意了:

這個(gè)機(jī)箱設(shè)計(jì)還是很科學(xué)的,預(yù)留了足夠多的擴(kuò)展接口比如:2個(gè) 3.5寸可快拆盤位、5個(gè)2.5寸可快拆盤位、光驅(qū)位(用不到,后期改造了)、前后頂部一堆風(fēng)扇位等等。線材基本都可以塞到機(jī)箱的另一個(gè)側(cè)面,前面板安裝了三個(gè)進(jìn)風(fēng)風(fēng)扇,背部安裝了一個(gè)出風(fēng)風(fēng)扇,水冷的冷排和風(fēng)扇在頂端。

這里值得一提的是,正面的光驅(qū)位屬于用不上的老古董,所以我改造了一下準(zhǔn)備裝一個(gè)小型的LCD屏幕上去,這樣偶爾需要進(jìn)圖形桌面或者BIOS界面的時(shí)候,就不用再抱個(gè)顯示器插在機(jī)箱上了;此外以后也可以寫個(gè)軟件把這個(gè)屏幕作為系統(tǒng)狀態(tài)監(jiān)視器來使用~

↑ 后面會(huì)3D打印一個(gè)外殼把屏幕固定住。

這個(gè)屏幕也是我前陣子剛設(shè)計(jì)的,項(xiàng)目已經(jīng)開源了叫做PocketLCD,感興趣的可以去倉庫看看:

https://github.com/peng-zhihui/PocketLCDgithub.com

2. 系統(tǒng)篇

系統(tǒng)選擇DL開發(fā)里面最常用的Ubuntu,最新的穩(wěn)定版本是20.04,安裝過程需要準(zhǔn)備一個(gè)U盤作為系統(tǒng)啟動(dòng)盤。

2.1 安裝Ubuntu 20.04系統(tǒng)

在官網(wǎng)下載Ubuntu鏡像:Ubuntu 20.04.1 LTS (Focal Fossa)(http://releases.ubuntu.com/20.04/),選擇Desktop Image版本,得到.iso的鏡像文件。

Windows下使用UltraISO工具打開.iso鏡像文件,并將其寫入到一個(gè)U盤,得到系統(tǒng)啟動(dòng)盤:

將U盤插到服務(wù)器上,開機(jī)按del鍵(具體什么鍵跟主板型號(hào)有關(guān))選擇啟動(dòng)項(xiàng)進(jìn)入臨時(shí)的Ubuntu系統(tǒng),在圖形界面中選擇Install Ubuntu,所有配置都可以使用默認(rèn)的,改一下用戶名和密碼即可。這里建議使用英文作為默認(rèn)語言,省得給自己日后開發(fā)找麻煩哈。

安裝過程中會(huì)聯(lián)網(wǎng)下載一些軟件包更新,可以直接點(diǎn)skip掉,在安裝好系統(tǒng)之后再手動(dòng)更新也是一樣的。

1. 進(jìn)入系統(tǒng)后設(shè)置一下root賬戶密碼:sudo passwd root

2.2 配置國內(nèi)鏡像軟件源

為了提升后續(xù)安裝軟件時(shí)的幸福感,第一步當(dāng)然先要替換一下軟件源。

1. 備份原來的源:cp /etc/apt/sources.list /etc/apt/sources.list.bak

2. 將源的內(nèi)容設(shè)置為阿里云鏡像:

sudo vim /etc/apt/sources.list

內(nèi)容改為:

deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse

3. 更新軟件列表:

sudo apt update sudo apt upgrade

也可以去網(wǎng)上搜其他鏡像,在我這邊經(jīng)測試阿里云是最快的。另外也可以在圖形桌面環(huán)境下打開Software & Updates軟件,在里面也有網(wǎng)速測試并選擇最佳源的功能。

2.3 安裝Pythonpip

1. Ubuntu系統(tǒng)默認(rèn)自帶python,有版本需求的話也可以自己安裝一下(不安裝也行因?yàn)楹竺鏁?huì)安裝conda環(huán)境):sudo apt install python3 sudo apt install python3-pip

2. 不管是不是自己安裝的python,替換python的pip源建議是一定操作一下的,pip安裝速度會(huì)快很多:

cd ~ mkdir .pip

直接新建并編輯pip.conf:

sudo vim ~/.pip/pip.conf

改為以下內(nèi)容(這里用的清華源,也可以試一下阿里、豆瓣等源):

[global] index-url = https://pypi.tuna.tsinghua.edu.cn/simple/ [install] trusted-host = pypi.tuna.tsinghua.edu.cn

3. 更改默認(rèn)python版本,python目錄默認(rèn)鏈接的是python2,而現(xiàn)在基本都是用python3開發(fā)了,每次都輸入python3很麻煩所以這里直接更換默認(rèn)的python命令鏈接。

把原來的python軟鏈接刪掉:

sudo rm /usr/bin/python

新建一個(gè)軟鏈接:

sudo ln -s /usr/bin/python3 /usr/bin/python sudo ln -s /usr/bin/pip3 /usr/bin/pip

現(xiàn)在輸入python就會(huì)進(jìn)入python3環(huán)境了。

2.4 配置SSH & 遠(yuǎn)程桌面

純凈安裝的系統(tǒng)里面默認(rèn)沒有開啟SSH,我們手動(dòng)安裝一下。

安裝ssh:

sudo apt install ssh

會(huì)自動(dòng)安裝好很多依賴包并啟動(dòng)服務(wù),完成之后用XShell等軟件就可以SSH登錄服務(wù)器了。

2. 安裝xrdp

Xrdp 是一個(gè)微軟遠(yuǎn)程桌面協(xié)議(RDP)的開源實(shí)現(xiàn),它允許我們通過圖形界面控制遠(yuǎn)程系統(tǒng)。這里使用RDP而不是VNC作為遠(yuǎn)程桌面,是因?yàn)閃indows自帶的遠(yuǎn)程桌面連接軟件就可以連接很方便,另外RDP在Windows下的體驗(yàn)非常好,包括速度很快(因?yàn)閴嚎s方案做得比較好),可以直接在主機(jī)和遠(yuǎn)程桌面之間復(fù)制粘貼等等。

有的Xwindow軟件是不太兼容xrdp的(比如ubuntu 18.04的默認(rèn)桌面),但是ubuntu 20.04使用的Gnome是完全ok的。

安裝過程如下:

sudo apt install xrdp

安裝完成xrdp 服務(wù)將會(huì)自動(dòng)啟動(dòng),可以輸入下面的命令驗(yàn)證它:

sudo systemctl status xrdp

默認(rèn)情況下,xrdp 使用/etc/ssl/private/ssl-cert-snakeoil.key,它僅僅對ssl-cert用戶組成語可讀,所以需要運(yùn)行下面的命令,將xrdp用戶添加到這個(gè)用戶組:

sudo adduser xrdp ssl-cert sudo systemctl restart xrdp

然后使用Windows自帶的遠(yuǎn)程桌面軟件連接服務(wù)器IP地址或者域名就行了。

2.5 安裝frp進(jìn)行內(nèi)網(wǎng)穿透

前面介紹的SSH和遠(yuǎn)程桌面都是需要在局域網(wǎng)下通過IP地址進(jìn)行連接的,而我們配置一臺(tái)服務(wù)器最重要的訴求,應(yīng)該是可以隨時(shí)隨地去訪問服務(wù)器。

那在家里面,網(wǎng)絡(luò)運(yùn)營商提供的網(wǎng)絡(luò)服務(wù)通過路由器路由到各個(gè)設(shè)備,此時(shí)路由器會(huì)同時(shí)具備內(nèi)網(wǎng)地址(路由器之內(nèi),局域網(wǎng),LAN,也就是192.168.x.x)和外網(wǎng)地址(路由器之外,互聯(lián)網(wǎng),WAN)。但是其實(shí)這個(gè)WAN口的IP并不是真正的“公網(wǎng)IP”,而時(shí)經(jīng)過了多層的NAT轉(zhuǎn)換之后的地址,外網(wǎng)的設(shè)備是不能通過這個(gè)地址訪問到路由器的。這個(gè)問題的原因是ipv4地址池緊張,如果運(yùn)營商給每家的路由器都安排一個(gè)公網(wǎng)ip的話,那ip地址早就不夠用了呀。

因此為了能讓外網(wǎng)訪問到我們局域網(wǎng)內(nèi)的設(shè)備,就需要跟中國電信等運(yùn)營商申請公網(wǎng)ip(現(xiàn)在能申請到的概率也已經(jīng)不大了,而且即使申請到也不是所有端口都可以使用的),或者我們自己動(dòng)手做一些操作來達(dá)到同樣的目的。

有幾種方法:

可以直接用類似花生殼(https://hsk.oray.com/)這樣的DDNS服務(wù)平臺(tái)做轉(zhuǎn)發(fā)實(shí)現(xiàn)內(nèi)網(wǎng)穿透,優(yōu)點(diǎn)是比較簡單穩(wěn)定,缺點(diǎn)是需要持續(xù)付費(fèi),而且速度和延遲效果一般,而且每加一個(gè)端口都要額外付費(fèi)。

也可以像我一樣使用frp之類的軟件做反向代理來實(shí)現(xiàn)內(nèi)網(wǎng)穿透,這個(gè)方案也是需要你有一臺(tái)帶公網(wǎng)IP的云服務(wù)器的,優(yōu)點(diǎn)就是完全可控,自己想配置多少個(gè)端口的穿透都可以,速度跟你的云服務(wù)器帶寬有關(guān)。

為什么需要多個(gè)端口?是因?yàn)椴煌瑧?yīng)用占用的端口不同,比如我們的SSH走的是22號(hào)端口,而遠(yuǎn)程桌面的rdp走的是3389號(hào)端口,如果需要自建Web服務(wù)的話則是走80/443端口、想把工作站作為上外網(wǎng)的代理服務(wù)器的話會(huì)需要1080端口等等...所以用上面第二個(gè)方案顯然會(huì)方便很多,而且云服務(wù)器也不貴,我在騰訊云上購買一年只要200左右。

下面介紹如何安裝配置frp:

frp分為frps(server)和frpc(client)兩個(gè)包 ,其中前者安裝到我們的云服務(wù)器上,后者安裝在需要被外網(wǎng)訪問到的各個(gè)設(shè)備上,這里就是指我們的深度學(xué)習(xí)工作站。

云服務(wù)器端:

去https://github.com/fatedier/frp/releases下載適合你服務(wù)器系統(tǒng)的frp軟件,我這里是用的是騰訊云64位Ubuntu16.04所以選擇frp_0.34.3_linux_amd64.tar.gz,下好之后解壓:

tar -zxvf frp_0.34.3_linux_amd64.tar.gz

我們需要編輯的文件是frps.ini :

內(nèi)容改為:

[common] bind_port = 7000 # frp服務(wù)的端口號(hào),可以自己定 dashboard_port = 7500 # frp的web界面的端口號(hào) dashboard_user = user # web界面的登陸賬戶,自己修改 dashboard_pwd = pass # web界面的登陸密碼,自己修改 authentication_method = token token = xxxxx # frp客戶端連接時(shí)的密碼,自己修改

保存配置后,使用該命令啟動(dòng):

./frps -c ./frps.ini

在瀏覽器輸入[云服務(wù)器的公網(wǎng)ip]:7500即可訪問到 frp的web管理界面。

注意,可能需要去云服務(wù)器控制臺(tái)配置安全組規(guī)則 開放以上涉及到的端口,否則無法訪問。

本地的深度學(xué)習(xí)服務(wù)器端:

下載相應(yīng)版本的frpc軟件包(跟剛剛一樣的):Releases · fatedier/frp (github.com),這里選amd64的,下好之后解壓到一個(gè)臨時(shí)文件夾。

修改frpc.ini配置文件,內(nèi)容如下:[common] server_addr = xx.xx.xx.xx # 你的云服務(wù)器的公網(wǎng)ip authentication_method = token token = xxxxx # 剛剛配置的frp連接密碼 server_port = 7000 # 剛剛配置的frp服務(wù)端口 [Fusion-ssh] type = tcp local_ip = 127.0.0.1 local_port = 22 remote_port = 20022 [Fusion-rdp] type = tcp local_ip = 127.0.0.1 local_port = 3389 remote_port = 23389

通過上面的腳本就可以把對于云服務(wù)器特定端口的訪問給重定向到本地服務(wù)器的某個(gè)端口了,簡單地講就是:假如我用SSH客戶端訪問[云服務(wù)器ip]:20022,就可以經(jīng)過反向代理直接訪問到[本地的訓(xùn)練服務(wù)器ip]:22;同理需要連接遠(yuǎn)程桌面的話,只需要訪問[云服務(wù)器ip]:23389就可以了。

當(dāng)然你也可以修改腳本添加更多映射~

3. 添加開機(jī)自動(dòng)啟動(dòng)的腳本,新建一個(gè)文件內(nèi)容如下:

文件名/etc/systemd/system/frpc.service,注意修改其中的路徑:

[Fusion] Description=Frp Server Daemon After=syslog.target network.target Wants=network.target [Service] Type=simple ExecStart=/usr/local/bin/frp/frpc -c /usr/local/bin/frp/frpc.ini # 修改為你的frp實(shí)際安裝目錄 ExecStop=/usr/bin/killall frpc #啟動(dòng)失敗1分鐘后再次啟動(dòng) RestartSec=1min KillMode=control-group #重啟控制:總是重啟 Restart=always [Install] WantedBy=multi-user.target

然后執(zhí)行以下命令啟用腳本:

sudo systemctl enable frpc.service sudo systemctl start frpc.service

通過下面的命令查看服務(wù)狀態(tài),如果是running的話就說明可以了:

sudo systemctl status frpc.service

這里順便提一下,按照習(xí)慣一般把上面的frp軟件解壓防止在/usr/local/bin目錄下。Linux 的軟件安裝目錄是也是有講究的,理解這一點(diǎn),在對系統(tǒng)管理是有益的

/usr:系統(tǒng)級的目錄,可以理解為C:/Windows/

/usr/lib:可以理解為C:/Windows/System32

/usr/local:用戶級的程序目錄,可以理解為C:/Progrem Files/,用戶自己編譯的軟件默認(rèn)會(huì)安裝到這個(gè)目錄下

/opt:用戶級的程序目錄,可以理解為D:/Software,opt有可選的意思,這里可以用于放置第三方大型軟件(或游戲),當(dāng)你不需要時(shí),直接rm -rf掉即可。在硬盤容量不夠時(shí),也可將/opt單獨(dú)掛載到其他磁盤上使用

源碼放哪里?

/usr/src:系統(tǒng)級的源碼目錄

/usr/local/src:用戶級的源碼目錄。

2.6 安裝SAMBA服務(wù)

如果能把服務(wù)器上的磁盤直接掛載到我們使用的Windows個(gè)人PC上是不是很爽?

如開頭的視頻里面演示的,可以通過建立局域網(wǎng)SAMBA服務(wù)來實(shí)現(xiàn)這個(gè)效果:

1.安裝samba和samba-common-bin

sudo apt-get install samba samba-common-bin

1.配置/etc/samba/smb.conf文件

sudo nano /etc/samba/smb.conf

在最后一行后面加入:

# 共享文件夾顯示的名稱 [home] # 說明信息 comment = Fusion WorkStation Storage # 可以訪問的用戶 valid users = pengzhihui,root # 共享文件的路徑 path = /home/pengzhihui/ # 可被其他人看到資源名稱(非內(nèi)容) browseable = yes # 可寫 writable = yes # 新建文件的權(quán)限為 664 create mask = 0664 # 新建目錄的權(quán)限為 775 directory mask = 0775

可以把配置文件中你不需要的分享名稱刪除,例如 [homes], [printers] 等。

運(yùn)行這個(gè)命令測試一下配置文件是否有錯(cuò)誤,根據(jù)提示做相應(yīng)修改:testparm

3. 添加登陸賬戶并創(chuàng)建密碼

必須是 linux 已存在的用戶:

sudo smbpasswd -a pi

然后重啟服務(wù)即可:

sudo /etc/init.d/samba-ad-dc restart

接下來可以在Windows的網(wǎng)絡(luò)中發(fā)現(xiàn)設(shè)備了:

但是可能會(huì)出現(xiàn)無法點(diǎn)開的情況,這里需要在Windows的憑據(jù)管理器中添加賬戶信息(開始菜單里搜索憑據(jù)管理器即可打開),點(diǎn)擊添加Windows憑據(jù),輸入你的服務(wù)器名稱和賬戶密碼:

接下來就可以點(diǎn)進(jìn)去看到服務(wù)器上的文件了。為了更加方便地進(jìn)行文件交互,我們添加對應(yīng)的磁盤到Windows資源管理器的此電腦中:

d1dd87d6-503c-11eb-8b86-12bb97331649.jpg

選擇剛剛服務(wù)器的網(wǎng)絡(luò)路徑即可添加:

d1ec58b0-503c-11eb-8b86-12bb97331649.png

3. DL開發(fā)環(huán)境配置篇

配置這臺(tái)服務(wù)器的主要作用就是做深度學(xué)習(xí)訓(xùn)練,所以GPU相關(guān)的驅(qū)動(dòng)和環(huán)境時(shí)肯定要安排好的,網(wǎng)上資料很多很雜,這里梳理出了最便捷可靠的安裝方法供大家參考~

3.1 安裝Nvidia顯卡驅(qū)動(dòng)

最簡單的方式是通過系統(tǒng)的軟件與更新來安裝:

進(jìn)入系統(tǒng)的圖形桌面,打開Software & Updates軟件,可以看到標(biāo)簽欄有一個(gè)Additional Drivers:

d20778e8-503c-11eb-8b86-12bb97331649.jpg

選擇第一個(gè)安裝Nvidia官方驅(qū)動(dòng)(第二個(gè)是開源驅(qū)動(dòng))即可,根據(jù)網(wǎng)絡(luò)情況稍等大概十分鐘,安裝完重啟服務(wù)器。

重啟完之后更新一下軟件:

sudo apt update sudo apt upgrade

這里會(huì)連帶Nvidia的驅(qū)動(dòng)一起升級一遍,更新到最新的驅(qū)動(dòng);更新完可能會(huì)出現(xiàn)nvidia-smi命令報(bào)錯(cuò),再重啟一下就解決了。

3.2 安裝CUDA

如果之前安裝了舊版本的cuda和cudnn的話,需要先卸載后再安裝:

sudo apt-get remove --purge nvidia*

然后按照前面的方法重新安裝顯卡驅(qū)動(dòng),安裝好了之后開始安裝CUDA:

去官網(wǎng)下載cuda安裝包:CUDA Toolkit 11.0 Download | NVIDIA Developer(https://developer.nvidia.com/cuda-11.0-download-archive),相關(guān)選項(xiàng)如下(根據(jù)實(shí)際情況選擇):

d226810c-503c-11eb-8b86-12bb97331649.jpg

運(yùn)行下面的命令進(jìn)行安裝:

chmod +x cuda_11.0.2_450.51.05_linux.run sudo sh ./cuda_11.0.2_450.51.05_linux.run

可能會(huì)報(bào)一個(gè)警告:

d24585de-503c-11eb-8b86-12bb97331649.png

前面已經(jīng)卸載過舊版本了直接Continue就好。然后根據(jù)提示選擇安裝選項(xiàng),注意不要勾選第一個(gè)安裝顯卡驅(qū)動(dòng)的,因?yàn)橹耙呀?jīng)安裝過了。安裝完成后提示

d2634998-503c-11eb-8b86-12bb97331649.jpg

2. 根據(jù)上圖提示需要配置環(huán)境變量:

nano ~/.bashrc

再文件最后加入以下語句:

export CUDA_HOME=/usr/local/cuda-11.0 export LD_LIBRARY_PATH=${CUDA_HOME}/lib64 export PATH=${CUDA_HOME}/bin:${PATH}

然后使其生效:

source ~/.bashrc

3. 可以使用命令nvcc -V查看安裝的版本信息:

d2835e9a-503c-11eb-8b86-12bb97331649.png

也可以編譯一個(gè)程序測試安裝是否成功,執(zhí)行以下幾條命令:

cd ~/Softwares/cuda/NVIDIA_CUDA-11.0_Samples/1_Utilities/deviceQuery make ./deviceQuery

正常的話會(huì)有相應(yīng)輸出,打印顯卡的信息。

3.3 安裝CuDNN

進(jìn)入到CUDNN的下載官網(wǎng):cuDNN Download | NVIDIA Developer(https://developer.nvidia.com/rdp/cudnn-download),然點(diǎn)擊Download開始選擇下載版本,當(dāng)然在下載之前還有登錄,選擇版本界面如下:

d29ddd06-503c-11eb-8b86-12bb97331649.jpg

我們選擇和之前cuda版本對應(yīng)的cudnn版本:

d2d120bc-503c-11eb-8b86-12bb97331649.jpg

下載之后是一個(gè)壓縮包,對它進(jìn)行解壓,命令如下:

tar -xzvf cudnn-11.0-linux-x64-v8.0.5.39.tgz

使用以下兩條命令復(fù)制這些文件到CUDA目錄下:

sudo cp cuda/lib64/* /usr/local/cuda-11.0/lib64/ sudo cp cuda/include/* /usr/local/cuda-11.0/include/

拷貝完成之后,可以使用以下命令查看CUDNN的版本信息:

cat /usr/local/cuda/include/cudnn_version.h | grep CUDNN_MAJOR -A 2

可以看到版本信息如下,為8.0.5:

d2e49ee4-503c-11eb-8b86-12bb97331649.png

3.4 安裝Conda環(huán)境

不同的訓(xùn)練框架和版本可能會(huì)需要不同的python版本相對應(yīng),而且有的包比如numpy也對版本有要求,所以比較優(yōu)雅的方法是給每個(gè)配置建立一個(gè)虛擬的python環(huán)境,在需要的時(shí)候可以隨時(shí)切換,而不需要的時(shí)候也能刪除不浪費(fèi)磁盤資源,那在這方面conda是做得最好的。

下面介紹怎么安裝conda:

在Anaconda官網(wǎng)下載Linux安裝包:Anaconda | Individual Edition(https://www.anaconda.com/products/individual)

運(yùn)行下面的命令安裝:chmod +x Anaconda3-2020.11-Linux-x86_64.sh ./Anaconda3-2020.11-Linux-x86_64.sh

一路按ENTER確認(rèn),然后根據(jù)提示輸入yes,這里我為了目錄整潔不安裝在默認(rèn)路徑,設(shè)置為下面的路徑:/home/pengzhihui/Softwares/anaconda

然后會(huì)詢問你是否要初始化conda,輸入yes確認(rèn),重開終端窗口之后,就可以看到conda環(huán)境可用了(base代表默認(rèn)環(huán)境):

d325d6e8-503c-11eb-8b86-12bb97331649.png

conda的使用方法網(wǎng)上搜一下有很多,這里就不贅述了。

3.5 安裝Nvidia-Docker

Docker也是虛擬化環(huán)境的神器,前面說的conda雖然可以提供python的虛擬環(huán)境并方便地切換,但是有的時(shí)候我們的開發(fā)環(huán)境并不只是用到python,比如有的native庫需要對應(yīng)gcc版本的編譯環(huán)境,或者進(jìn)行交叉編譯時(shí)喲啊安裝很多工具鏈等等。如果這些操作都在服務(wù)器本地上進(jìn)行,那時(shí)間久了就會(huì)讓服務(wù)器的文件系統(tǒng)非常雜亂,而且還會(huì)遇到各種軟件版本沖突問題。

Docker就可以很好地解決這些問題,它其實(shí)可以理解為就是一個(gè)非常輕量化的虛擬機(jī),我們可以在宿主服務(wù)器上新建很多個(gè)這種被稱為容器的虛擬機(jī),然后在里面配置我們的開發(fā)環(huán)境,且這些配置好的環(huán)境是可以打包成鏡像的,方便隨時(shí)做分享和重用;不需要的時(shí)候,我們直接刪除容器就好了,其資源是和我們的服務(wù)器宿主機(jī)完全隔離的。

Docker的具體使用可以自己搜索一下很多教程,這里主要介紹如何把GPU暴露給Docker的容器(因?yàn)榇蠹叶贾老袷荲Mware這種虛擬機(jī)里面都是無法共享宿主機(jī)的GPU的),是通過nvidia-docker實(shí)現(xiàn)的。

以前為了配置nvidia-docker,需要安裝完docker之后再安裝單獨(dú)的nvidia docker2,而現(xiàn)在只需要安裝nvidia container toolkit即可,更加方便了。

docker安裝 官網(wǎng)上有詳細(xì)的介紹:Install Docker Engine on Ubuntudocs.docker.com(https://docs.docker.com/engine/install/ubuntu/) 或者運(yùn)行下面的命令安裝:sudo apt-get update sudo apt-get install docker.io systemctl start docker systemctl enable docker

可以運(yùn)行這條命令檢查是否安裝成功:

docker version

2. 安裝NVIDIA Container Toolkit

d33dc0d2-503c-11eb-8b86-12bb97331649.png

官網(wǎng)安裝步驟:NVIDIA/nvidia-docker: Build and run Docker containers leveraging NVIDIA GPUs (github.com)(https://github.com/NVIDIA/nvidia-docker) 或者直接運(yùn)行下面的命令:

##首先要確保已經(jīng)安裝了nvidia driver # 2. 添加源 distribution=$(. /etc/os-release;echo $ID$VERSION_ID) curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add - curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list # 2. 安裝并重啟 sudo apt-get update && sudo apt-get install -y nvidia-container-toolkit sudo systemctl restart docker

安裝完成后可以新建一個(gè)容器測試一下:

sudo docker run -it --name test_nvidia_docker --gpus all nvidia/cuda:11.1-base

其中最后的參數(shù)nvidia/cuda:11.1-base是Nvidia官方的鏡像,需要根據(jù)工作站主機(jī)中實(shí)際安裝的cuda版本進(jìn)行修改,版本可以用nvcc -V查看。

進(jìn)入容器之后可以跑一下nvidia-smi命令看看:

d3670cd0-503c-11eb-8b86-12bb97331649.jpg

現(xiàn)在可以在docker里面正常使用GPU啦~

3.6 測試

這里通過一個(gè)簡單的python腳本測試一下GPU訓(xùn)練是否一切正常,跑一個(gè)DL里面的Hello World程序,通過兩種方法測試:本地conda和docker虛擬機(jī)。

以后的開發(fā)過程中一般還是使用Docker的方式來進(jìn)行更為優(yōu)雅。

1. 本地Conda環(huán)境方式:

先用conda新建一個(gè)python3.8+pytorch1.7+cuda11.0的虛擬環(huán)境:

conda create --name python_38-pytorch_1.7.0 python=3.8

創(chuàng)建完成后進(jìn)入環(huán)境:

conda activate python_38-pytorch_1.7.0

檢查一下是否切換到所需環(huán)境了:

which pip

如果看到使用的確實(shí)是我們設(shè)置的環(huán)境目錄中的pip的話說明就ok。

接下來在環(huán)境中安裝pytorch,可以參考官網(wǎng)的安裝命令:Start Locally | PyTorch(https://pytorch.org/get-started/locally/)

d3790a16-503c-11eb-8b86-12bb97331649.jpg

輸入以下命令進(jìn)行安裝:

pip install torch==1.7.0+cu110 torchvision==0.8.1+cu110 torchaudio===0.7.0 -f https://download.pytorch.org/whl/torch_stable.html

環(huán)境配置就完成了,下面新建一個(gè)簡單的測試腳本驗(yàn)證功能,新建mnist_train.py,內(nèi)容如下:

import torch import torch.nn as nn import torch.nn.functional as F import torch.optim as optim import torch.backends.cudnn as cudnn from torchvision import datasets, transforms class Net(nn.Module): def __init__(self): super(Net, self).__init__() self.conv1 = nn.Conv2d(1, 10, kernel_size=5) self.conv2 = nn.Conv2d(10, 20, kernel_size=5) self.conv2_drop = nn.Dropout2d() self.fc1 = nn.Linear(320, 50) self.fc2 = nn.Linear(50, 10) def forward(self, x): x = F.relu(F.max_pool2d(self.conv1(x), 2)) x = F.relu(F.max_pool2d(self.conv2_drop(self.conv2(x)), 2)) x = x.view(-1, 320) x = F.relu(self.fc1(x)) x = F.dropout(x, training=self.training) x = self.fc2(x) return F.log_softmax(x, dim=1) def train(model, device, train_loader, optimizer, epoch): model.train() for batch_idx, (data, target) in enumerate(train_loader): data, target = data.to(device), target.to(device) optimizer.zero_grad() output = model(data) loss = F.nll_loss(output, target) loss.backward() optimizer.step() if batch_idx % 10 == 0: print('Train Epoch: {} [{}/{} ({:.0f}%)] Loss: {:.6f}'.format( epoch, batch_idx * len(data), len(train_loader.dataset), 100. * batch_idx / len(train_loader), loss.item())) def main(): cudnn.benchmark = True torch.manual_seed(1) device = torch.device("cuda") if torch.cuda.is_available() else torch.device("cpu") print("Using device: {}".format(device)) kwargs = {'num_workers': 1, 'pin_memory': True} train_loader = torch.utils.data.DataLoader( datasets.MNIST('./data', train=True, download=True, transform=transforms.Compose([ transforms.ToTensor(), transforms.Normalize((0.1307,), (0.3081,)) ])), batch_size=64, shuffle=True, **kwargs) model = Net().to(device) optimizer = optim.SGD(model.parameters(), lr=0.01, momentum=0.5) for epoch in range(1, 11): train(model, device, train_loader, optimizer, epoch) if __name__ == '__main__': main()

運(yùn)行腳本,正常的話就可以看到訓(xùn)練輸出了:

d38934fe-503c-11eb-8b86-12bb97331649.jpg

2. Docker環(huán)境方式:

首先還是新建一個(gè)Docker鏡像,運(yùn)行下面的命令:

sudo docker run -it --name train_mnist -v /etc/timezone:/etc/timezone -v /etc/localtime:/etc/localtime -v /home/pengzhihui/WorkSpace/_share:/home/workspace/_share --gpus all nvidia/cuda:11.1-base

就進(jìn)入到了帶gpu的ubuntu20.04容器中,效果可以參考文章開頭的視頻。按照前面的配置方法同樣配置好pytorch和其他軟件包,然后運(yùn)行同樣的腳本,也可以得到上述輸出,說明gpu在docker中正常工作。

4. 工作站維護(hù)篇

4.1 工作站系統(tǒng)備份還原

備份

由于Linux本身萬物皆文件的設(shè)計(jì)理念,加上root用戶對幾乎全部的系統(tǒng)文件都有訪問和更改的權(quán)限,因此Linux系統(tǒng)的備份和還原其實(shí)非常簡單,我們直接打包整個(gè)根文件系統(tǒng)就可以了。

我們可以使用tar命令來打包并壓縮文件系統(tǒng),不過這里在打包的過程中需要排除一些不需要文件,或者與新系統(tǒng)文件沖突的文件,包括/tmp、/proc、/lost+found等目錄。

找一個(gè)你想保存?zhèn)浞菸募哪夸洠\(yùn)行下面的命令:

tar -cvpzf ubuntu_backup@`date +%Y-%m+%d`.tar.gz --exclude=/proc --exclude=/tmp --exclude=/boot --exclude=/lost+found --exclude=/media --exclude=/mnt --exclude=/run /

我們會(huì)得到一個(gè)名為backup.tgz的壓縮文件,這個(gè)文件包含我們需要備份的系統(tǒng)的全部內(nèi)容。

2. 還原

如果系統(tǒng)沒有出問題可以正常啟動(dòng)的話,那直接在剛剛的壓縮包找找到想還原的文件替換就好了。而如果系統(tǒng)無法啟動(dòng)了,或者說想換一塊硬盤克隆一樣的系統(tǒng),那么可以按一下步驟操作:

重裝干凈的Ubuntu系統(tǒng)。跟上面介紹的一樣,使用U盤給目標(biāo)磁盤重裝一個(gè)干凈的系統(tǒng),這一步是為了省去自己分配存儲(chǔ)空間和掛載的麻煩,如果你會(huì)自己配置的話那也可以不做這一步。

再次使用U盤進(jìn)入系統(tǒng),這次選擇try ubuntu without installing,然后可以看到掛載好的剛剛安裝了干凈系統(tǒng)的另一個(gè)盤,我們在這里對盤里的根文件系統(tǒng)進(jìn)行一些文件的提?。簊udo su # 在tryUbuntu根目錄下有media文件夾,里面是U盤文件夾和新安裝的系統(tǒng)文件夾,在在里分別用(U盤)和(UBUNTU)表示 cd /media/(U盤) mount -o remount rw ./ # 將新系統(tǒng)根目錄下/boot/grub/grub.cfg文件備份到U盤中 sudo cp /media/(Ubuntu)/boot/grub/grub.cfg ./ # 將新系統(tǒng)根目錄下/etc/fstab文件備份到U盤中,fstab是與系統(tǒng)開機(jī)掛載有關(guān)的文件,grub.cfg是與開機(jī)引導(dǎo)有關(guān)的文件,所以這一步至關(guān)重要 sudo cp /media/(UBUNTU)/etc/fstab ./ # 這一步刪除新裝ubuntu全部的系統(tǒng)文件,有用的fstab及grub.cfg已經(jīng)備份 cd /media/(UBUNTU) sudo rm -rf ./* # 將U盤中backup.tgz復(fù)制到該目錄下并解壓縮 cp /media/(U盤)/backup.tgz ./ sudo tar xvpfz backup.tgz ./ # 創(chuàng)建打包系統(tǒng)時(shí)排除的文件 sudo mkdir proc lost+found mnt sys media

這一步完成后,在用我們在新系統(tǒng)中備份的fatab及grub.cfg文件去替換壓縮包中解壓出來的同名文件,sudo reboot重啟后就發(fā)現(xiàn)系統(tǒng)已經(jīng)恢復(fù)到備份時(shí)的狀態(tài),包括各種框架,環(huán)境,系統(tǒng)設(shè)置~

以上,后面有更新的話還會(huì)繼續(xù)補(bǔ)充,希望對大家有幫助~

責(zé)任編輯:lq

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 芯片
    +關(guān)注

    關(guān)注

    456

    文章

    51037

    瀏覽量

    425449
  • gpu
    gpu
    +關(guān)注

    關(guān)注

    28

    文章

    4761

    瀏覽量

    129135
  • 深度學(xué)習(xí)
    +關(guān)注

    關(guān)注

    73

    文章

    5510

    瀏覽量

    121340

原文標(biāo)題:保姆級教程:個(gè)人深度學(xué)習(xí)工作站配置指南

文章出處:【微信號(hào):vision263com,微信公眾號(hào):新機(jī)器視覺】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    NPU在深度學(xué)習(xí)的應(yīng)用

    設(shè)計(jì)的硬件加速器,它在深度學(xué)習(xí)的應(yīng)用日益廣泛。 1. NPU的基本概念 NPU是一種專門針對深度學(xué)習(xí)算法優(yōu)化的處理器,它與傳統(tǒng)的CPU和G
    的頭像 發(fā)表于 11-14 15:17 ?727次閱讀

    SMT組裝過程中缺陷類型及處理

    表面貼裝技術(shù)(SMT)是現(xiàn)代電子制造業(yè)的關(guān)鍵環(huán)節(jié),它通過自動(dòng)化設(shè)備將電子元件精確地放置在PCB上。盡管SMT技術(shù)已經(jīng)相當(dāng)成熟,但在組裝過程中仍然可能出現(xiàn)各種缺陷。 一、焊膏印刷缺陷 焊膏量不足或
    的頭像 發(fā)表于 11-14 09:25 ?701次閱讀

    芯片封裝——組裝

    文章來源:學(xué)習(xí)那些事 本文簡單介紹了芯片封裝在芯片的組裝過程中的連接材料、組裝問題和保護(hù)措施以及芯片黏結(jié)劑和封裝內(nèi)添加劑的必要性。 芯片封裝在芯片的組裝過程中,連接材料的選擇和
    的頭像 發(fā)表于 09-27 10:37 ?408次閱讀

    PyTorch深度學(xué)習(xí)開發(fā)環(huán)境搭建指南

    PyTorch作為一種流行的深度學(xué)習(xí)框架,其開發(fā)環(huán)境的搭建對于深度學(xué)習(xí)研究者和開發(fā)者來說至關(guān)重要。在Windows操作系統(tǒng)上搭建PyTorc
    的頭像 發(fā)表于 07-16 18:29 ?1163次閱讀

    利用Matlab函數(shù)實(shí)現(xiàn)深度學(xué)習(xí)算法

    在Matlab實(shí)現(xiàn)深度學(xué)習(xí)算法是一個(gè)復(fù)雜但強(qiáng)大的過程,可以應(yīng)用于各種領(lǐng)域,如圖像識(shí)別、自然語言處理、時(shí)間序列預(yù)測等。這里,我將概述一個(gè)基本的流程
    的頭像 發(fā)表于 07-14 14:21 ?2379次閱讀

    基于Python的深度學(xué)習(xí)人臉識(shí)別方法

    基于Python的深度學(xué)習(xí)人臉識(shí)別方法是一個(gè)涉及多個(gè)技術(shù)領(lǐng)域的復(fù)雜話題,包括計(jì)算機(jī)視覺、深度學(xué)習(xí)、以及圖像處理等。在這里,我將概述一個(gè)基本的流程
    的頭像 發(fā)表于 07-14 11:52 ?1296次閱讀

    深度學(xué)習(xí)反卷積的原理和應(yīng)用

    像分割、圖像重建和生成對抗網(wǎng)絡(luò)(GANs)等,反卷積展現(xiàn)出了其獨(dú)特的優(yōu)勢和廣泛的應(yīng)用前景。本文將詳細(xì)探討深度學(xué)習(xí)的反卷積技術(shù),包括其定義、原理、實(shí)現(xiàn)方式、應(yīng)用場景以及與其他上采樣方法
    的頭像 發(fā)表于 07-14 10:22 ?2093次閱讀

    電容充放電過程中電壓的變化規(guī)律

    電容充放電過程中電壓的變化規(guī)律是一個(gè)非常重要的電子學(xué)課題,涉及到電容器的基本工作原理和特性。在這篇文章,我們將詳細(xì)探討電容充放電過程中電壓
    的頭像 發(fā)表于 07-11 09:43 ?6283次閱讀

    深度學(xué)習(xí)的時(shí)間序列分類方法

    的發(fā)展,基于深度學(xué)習(xí)的TSC方法逐漸展現(xiàn)出其強(qiáng)大的自動(dòng)特征提取和分類能力。本文將從多個(gè)角度對深度學(xué)習(xí)在時(shí)間序列分類的應(yīng)用進(jìn)行綜述,探討常用
    的頭像 發(fā)表于 07-09 15:54 ?1072次閱讀

    深度學(xué)習(xí)的無監(jiān)督學(xué)習(xí)方法綜述

    應(yīng)用往往難以實(shí)現(xiàn)。因此,無監(jiān)督學(xué)習(xí)深度學(xué)習(xí)扮演著越來越重要的角色。本文旨在綜述深度
    的頭像 發(fā)表于 07-09 10:50 ?846次閱讀

    TensorFlow與PyTorch深度學(xué)習(xí)框架的比較與選擇

    深度學(xué)習(xí)作為人工智能領(lǐng)域的一個(gè)重要分支,在過去十年取得了顯著的進(jìn)展。在構(gòu)建和訓(xùn)練深度學(xué)習(xí)模型的過程中
    的頭像 發(fā)表于 07-02 14:04 ?1016次閱讀

    深度學(xué)習(xí)模型訓(xùn)練過程詳解

    詳細(xì)介紹深度學(xué)習(xí)模型訓(xùn)練的全過程,包括數(shù)據(jù)預(yù)處理、模型構(gòu)建、損失函數(shù)定義、優(yōu)化算法選擇、訓(xùn)練過程以及模型的評估與調(diào)優(yōu)。
    的頭像 發(fā)表于 07-01 16:13 ?1400次閱讀

    深度學(xué)習(xí)的模型優(yōu)化與調(diào)試方法

    深度學(xué)習(xí)模型在訓(xùn)練過程中,往往會(huì)遇到各種問題和挑戰(zhàn),如過擬合、欠擬合、梯度消失或爆炸等。因此,對深度學(xué)習(xí)模型進(jìn)行優(yōu)化與調(diào)試是確保其性能優(yōu)越的
    的頭像 發(fā)表于 07-01 11:41 ?907次閱讀

    深度學(xué)習(xí)編譯工具鏈的核心——圖優(yōu)化

    深度神經(jīng)網(wǎng)絡(luò)模型可以看做由多個(gè)算子連接而成的有向無環(huán)圖,圖中每個(gè)算子代表一類操作(如乘法、卷積),連接各個(gè)算子的邊表示數(shù)據(jù)流動(dòng)。在部署深度神經(jīng)網(wǎng)絡(luò)的過程中,為了適應(yīng)硬件平臺(tái)的優(yōu)化、硬件
    的頭像 發(fā)表于 05-16 14:24 ?1016次閱讀
    <b class='flag-5'>深度</b><b class='flag-5'>學(xué)習(xí)</b>編譯工具鏈<b class='flag-5'>中</b>的核心——圖優(yōu)化

    深度學(xué)習(xí)的不同Normalization方法小結(jié)

    深度神經(jīng)網(wǎng)絡(luò),存在一種內(nèi)部協(xié)變偏移(internal covariate shift)現(xiàn)象,它是由于訓(xùn)練過程中不斷變化的網(wǎng)絡(luò)參數(shù)導(dǎo)致網(wǎng)絡(luò)各層的輸入分布發(fā)生變化。
    的頭像 發(fā)表于 02-20 13:54 ?718次閱讀
    <b class='flag-5'>深度</b><b class='flag-5'>學(xué)習(xí)</b><b class='flag-5'>中</b>的不同Normalization方法小結(jié)