前言
工作原因一直想配置一臺自己的深度學習工作站服務器,之前自己看完paper想做一些實驗或者復現模型的時候只能用自己的日常PC來跑很麻煩...一方面電腦得裝雙系統,干活的時候就不能用作其他用途了;另一方面,即使是沒有使用流程的問題,GTX1080的性能也還是弱了一些,更何況我用的是一個A4迷你機箱,長時間高負載的訓練任務也不太可靠。
以前在公司的時候還可以用公司的DGX訓練集群做一些實驗,但是我現在的開發環境已經切換到了昇騰的NPU架構芯片之上了,昇騰平臺算力方面雖然是比肩甚至可以超越英偉達,但是目前暫時很多學術界的生態都還是基于GPU服務器的(主要是指開源代碼),且我們這兒昇騰服務器對個人也不好買(且買不起),所以有一臺這樣的GPU工作站還是會方便一些。
那么本文是我在組裝工作站過程中記錄的詳細操作流程,供有類似需求的同學參考~
1. 硬件篇
1.1 工作站配置選型
配件全家福
服務器的配置以個人使用性價比為主,同時考慮到以后的擴展性像是主板和機箱這些配件配置設置一些冗余。首先是CPU平臺的選擇,雖然AMD這兩年實在是香,但是作為生產力工具考慮到軟件庫的兼容性問題,還是決定選擇intel平臺里十代X系列CPU+X299主板,算是比較穩的方案,而且某東上CPU搭配主板套裝一起買也性價比也很高。GPU方面今年的30系顯卡都比較良心,使用兩塊3080或者一塊3090都是很給力的,24G的顯存也已經跟TITAN RTX持平了(價格卻只要一半)...這里考慮到主板上只能插兩塊PCIEx16的卡,為了以后可能的提升性能還需要再加一塊卡,所以3090是最佳選擇。
最后選定的配置如下:
- CPU:i9-10920X
- 顯卡GPU:七彩虹RTX3090 Advance
- 內存:芝奇幻光戟16G x 4共64G
- 主板:華碩X299-DELUXE PRIME
- 固態硬盤:1TB西數NVME SSD + 1TB三星870QVO SATA SSD
- 機械硬盤:希捷EXOS 12TB氦氣盤
- 電源:海盜船AX1200i 1200W模組電源
- 散熱器:海盜船H100X240水冷 + 若干120機箱風扇
- 機箱:海盜船AIR540 E-ATX機箱
其中硬盤的設計是這樣的:1T的NVME固態做系統盤,12T的機械盤作為數據集倉庫,另外一個1T SATA固態作為訓練時的數據集緩存,因為IO讀寫速度也是會影響訓練效率的,所以相比于直接從機械盤里面讀取數據,加一塊SSD做cache效果會好很多。
1.2 電腦組裝
總之就是快樂的玩具拼裝過程~
機箱尺寸比較大,預留的空間非常足所以不會出現像是在裝A4機箱時那種考驗走線和裝配順序的技巧問題;而且服務器嘛,安靜地塞在某個角落就好了,也不用過于考慮什么美觀問題,所以走線就很隨意了:
這個機箱設計還是很科學的,預留了足夠多的擴展接口比如:2個 3.5寸可快拆盤位、5個2.5寸可快拆盤位、光驅位(用不到,后期改造了)、前后頂部一堆風扇位等等。線材基本都可以塞到機箱的另一個側面,前面板安裝了三個進風風扇,背部安裝了一個出風風扇,水冷的冷排和風扇在頂端。
這里值得一提的是,正面的光驅位屬于用不上的老古董,所以我改造了一下準備裝一個小型的LCD屏幕上去,這樣偶爾需要進圖形桌面或者BIOS界面的時候,就不用再抱個顯示器插在機箱上了;此外以后也可以寫個軟件把這個屏幕作為系統狀態監視器來使用~
↑ 后面會3D打印一個外殼把屏幕固定住。
這個屏幕也是我前陣子剛設計的,項目已經開源了叫做PocketLCD
,感興趣的可以去倉庫看看:
https://github.com/peng-zhihui/PocketLCDgithub.com
2. 系統篇
系統選擇DL開發里面最常用的Ubuntu,最新的穩定版本是20.04,安裝過程需要準備一個U盤作為系統啟動盤。
2.1 安裝Ubuntu 20.04系統
- 在官網下載Ubuntu鏡像:Ubuntu 20.04.1 LTS (Focal Fossa)(http://releases.ubuntu.com/20.04/),選擇Desktop Image版本,得到.iso的鏡像文件。
- Windows下使用UltraISO工具打開.iso鏡像文件,并將其寫入到一個U盤,得到系統啟動盤:
-
將U盤插到服務器上,開機按
del鍵
(具體什么鍵跟主板型號有關)選擇啟動項進入臨時的Ubuntu系統,在圖形界面中選擇Install Ubuntu,所有配置都可以使用默認的,改一下用戶名和密碼即可。這里建議使用英文作為默認語言,省得給自己日后開發找麻煩哈。
安裝過程中會聯網下載一些軟件包更新,可以直接點skip掉,在安裝好系統之后再手動更新也是一樣的。
- 進入系統后設置一下root賬戶密碼:
sudo passwd root
2.2 配置國內鏡像軟件源
為了提升后續安裝軟件時的幸福感,第一步當然先要替換一下軟件源。
- 備份原來的源:
cp /etc/apt/sources.list /etc/apt/sources.list.bak
2. 將源的內容設置為阿里云鏡像:
sudo vim /etc/apt/sources.list
內容改為:
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
也可以去網上搜其他鏡像,在我這邊經測試阿里云是最快的。另外也可以在圖形桌面環境下打開Software & Updates
軟件,在里面也有網速測試并選擇最佳源的功能。
2.3 安裝Python和pip
- Ubuntu系統默認自帶python,有版本需求的話也可以自己安裝一下(不安裝也行因為后面會安裝conda環境):
sudo apt install python3
sudo apt install python3-pip
2. 不管是不是自己安裝的python,替換python的pip源建議是一定操作一下的,pip安裝速度會快很多:
cd ~
mkdir .pip
直接新建并編輯pip.conf:
sudo vim ~/.pip/pip.conf
改為以下內容(這里用的清華源,也可以試一下阿里、豆瓣等源):
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple/
[install]
trusted-host = pypi.tuna.tsinghua.edu.cn
3. 更改默認python版本,python目錄默認鏈接的是python2,而現在基本都是用python3開發了,每次都輸入python3很麻煩所以這里直接更換默認的python命令鏈接。
把原來的python軟鏈接刪掉:
sudo rm /usr/bin/python
新建一個軟鏈接:
sudo ln -s /usr/bin/python3 /usr/bin/python
sudo ln -s /usr/bin/pip3 /usr/bin/pip
現在輸入python就會進入python3環境了。
2.4 配置SSH & 遠程桌面
純凈安裝的系統里面默認沒有開啟SSH,我們手動安裝一下。
- 安裝ssh:
sudo apt install ssh
會自動安裝好很多依賴包并啟動服務,完成之后用XShell等軟件就可以SSH登錄服務器了。
2. 安裝xrdp
Xrdp 是一個微軟遠程桌面協議(RDP)的開源實現,它允許我們通過圖形界面控制遠程系統。這里使用RDP而不是VNC作為遠程桌面,是因為Windows自帶的遠程桌面連接軟件就可以連接很方便,另外RDP在Windows下的體驗非常好,包括速度很快(因為壓縮方案做得比較好),可以直接在主機和遠程桌面之間復制粘貼等等。
有的Xwindow軟件是不太兼容xrdp的(比如ubuntu 18.04的默認桌面),但是ubuntu 20.04使用的Gnome是完全ok的。
安裝過程如下:
sudo apt install xrdp
安裝完成xrdp 服務將會自動啟動,可以輸入下面的命令驗證它:
sudo systemctl status xrdp
默認情況下,xrdp 使用/etc/ssl/private/ssl-cert-snakeoil.key
,它僅僅對ssl-cert用戶組成員可讀,所以需要運行下面的命令,將xrdp用戶添加到這個用戶組:
sudo adduser xrdp ssl-cert
sudo systemctl restart xrdp
然后使用Windows自帶的遠程桌面軟件連接服務器IP地址或者域名就行了。
2.5 安裝frp進行內網穿透
前面介紹的SSH和遠程桌面都是需要在局域網下通過IP地址進行連接的,而我們配置一臺服務器最重要的訴求,應該是可以隨時隨地去訪問服務器。
那在家里面,網絡運營商提供的網絡服務通過路由器路由到各個設備,此時路由器會同時具備內網地址(路由器之內,局域網,LAN,也就是192.168.x.x)和外網地址(路由器之外,互聯網,WAN)。但是其實這個WAN口的IP并不是真正的“公網IP”,而是經過了多層的NAT轉換之后的地址,外網的設備是不能通過這個地址訪問到路由器的。這個問題的原因是ipv4地址池緊張,如果運營商給每家的路由器都安排一個公網ip的話,那ip地址早就不夠用了呀。
因此為了能讓外網訪問到我們局域網內的設備,就需要跟中國電信等運營商申請公網ip(現在能申請到的概率也已經不大了,而且即使申請到也不是所有端口都可以使用的),或者我們自己動手做一些操作來達到同樣的目的。
有幾種方法:
- 可以直接用類似花生殼(https://hsk.oray.com/)這樣的DDNS服務平臺做轉發實現內網穿透,優點是比較簡單穩定,缺點是需要持續付費,而且速度和延遲效果一般,而且每加一個端口都要額外付費。
- 也可以像我一樣使用frp之類的軟件做反向代理來實現內網穿透,這個方案也是需要你有一臺帶公網IP的云服務器的,優點就是完全可控,自己想配置多少個端口的穿透都可以,速度跟你的云服務器帶寬有關。
為什么需要多個端口?是因為不同應用占用的端口不同,比如我們的SSH走的是22號端口,而遠程桌面的rdp走的是3389號端口,如果需要自建Web服務的話則是走80/443端口、想把工作站作為上外網的代理服務器的話會需要1080端口等等...所以用上面第二個方案顯然會方便很多,而且云服務器也不貴,我在騰訊云上購買一年只要200左右。
下面介紹如何安裝配置frp:
frp分為frps(server)和frpc(client)兩個包 ,其中前者安裝到我們的云服務器上,后者安裝在需要被外網訪問到的各個設備上,這里就是指我們的深度學習工作站。
云服務器端:
去https://github.com/fatedier/frp/releases下載適合你服務器系統的frp軟件,我這里是用的是騰訊云64位Ubuntu16.04所以選擇frp_0.34.3_linux_amd64.tar.gz(https://github.com/fatedier/frp/releases/download/v0.34.3/frp_0.34.3_linux_amd64.tar.gz),下好之后解壓:
tar -zxvf frp_0.34.3_linux_amd64.tar.gz
我們需要編輯的文件是frps.ini :
內容改為:
[common]
bind_port = 7000 # frp服務的端口號,可以自己定
dashboard_port = 7500 # frp的web界面的端口號
dashboard_user = user # web界面的登陸賬戶,自己修改
dashboard_pwd = pass # web界面的登陸密碼,自己修改
authentication_method = token
token = xxxxx # frp客戶端連接時的密碼,自己修改
保存配置后,使用該命令啟動:
./frps -c ./frps.ini
在瀏覽器輸入 [云服務器的公網ip]:7500
即可訪問到 frp的web管理界面。
注意,可能需要去云服務器控制臺配置安全組規則 開放以上涉及到的端口,否則無法訪問。
本地的深度學習服務器端:
- 下載相應版本的frpc軟件包(跟剛剛一樣的):Releases · fatedier/frp (github.com)(https://github.com/fatedier/frp/releases),這里選amd64的,下好之后解壓到一個臨時文件夾。
- 修改frpc.ini配置文件,內容如下:
[common]
server_addr = xx.xx.xx.xx # 你的云服務器的公網ip
authentication_method = token
token = xxxxx # 剛剛配置的frp連接密碼
server_port = 7000 # 剛剛配置的frp服務端口
[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
通過上面的腳本就可以把對于云服務器特定端口的訪問給重定向到本地服務器的某個端口了,簡單地講就是:假如我用SSH客戶端訪問 [云服務器ip]:20022
,就可以經過反向代理直接訪問到[本地的訓練服務器ip]:22
;同理需要連接遠程桌面的話,只需要訪問[云服務器ip]:23389
就可以了。
當然你也可以修改腳本添加更多映射~
3. 添加開機自動啟動的腳本,新建一個文件內容如下:
文件名/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實際安裝目錄
ExecStop=/usr/bin/killall frpc
#啟動失敗1分鐘后再次啟動
RestartSec=1min
KillMode=control-group
#重啟控制:總是重啟
Restart=always
[Install]
WantedBy=multi-user.target
然后執行以下命令啟用腳本:
sudo systemctl enable frpc.service
sudo systemctl start frpc.service
通過下面的命令查看服務狀態,如果是running的話就說明可以了:
sudo systemctl status frpc.service
這里順便提一下,按照習慣一般把上面的frp軟件解壓防止在
/usr/local/bin
目錄下。Linux 的軟件安裝目錄是也是有講究的,理解這一點,在對系統管理是有益的
-
/usr
:系統級的目錄,可以理解為C:/Windows/
-
/usr/lib
:可以理解為C:/Windows/System32
-
/usr/local
:用戶級的程序目錄,可以理解為C:/Progrem Files/
,用戶自己編譯的軟件默認會安裝到這個目錄下 -
/opt
:用戶級的程序目錄,可以理解為D:/Software
,opt有可選的意思,這里可以用于放置第三方大型軟件(或游戲),當你不需要時,直接rm -rf
掉即可。在硬盤容量不夠時,也可將/opt
單獨掛載到其他磁盤上使用
源碼放哪里?
-
/usr/src
:系統級的源碼目錄 -
/usr/local/src
:用戶級的源碼目錄。
2.6 安裝SAMBA服務
如果能把服務器上的磁盤直接掛載到我們使用的Windows個人PC上是不是很爽?
如開頭的視頻里面演示的,可以通過建立局域網SAMBA服務來實現這個效果:
-
安裝
samba
和samba-common-bin
sudo apt-get install samba samba-common-bin
- 配置/etc/samba/smb.conf文件
sudo nano /etc/samba/smb.conf
在最后一行后面加入:
# 共享文件夾顯示的名稱
[home]
# 說明信息
comment = Fusion WorkStation Storage
# 可以訪問的用戶
valid users = pengzhihui,root
# 共享文件的路徑
path = /home/pengzhihui/
# 可被其他人看到資源名稱(非內容)
browseable = yes
# 可寫
writable = yes
# 新建文件的權限為 664
create mask = 0664
# 新建目錄的權限為 775
directory mask = 0775
可以把配置文件中你不需要的分享名稱刪除,例如 [homes], [printers] 等。
運行這個命令測試一下配置文件是否有錯誤,根據提示做相應修改:testparm
3. 添加登陸賬戶并創建密碼
必須是 linux 已存在的用戶:
sudo smbpasswd -a pi
然后重啟服務即可:
sudo /etc/init.d/samba-ad-dc restart
接下來可以在Windows的網絡中發現設備了:
但是可能會出現無法點開的情況,這里需要在Windows的憑據管理器中添加賬戶信息(開始菜單里搜索憑據管理器即可打開),點擊添加Windows憑據,輸入你的服務器名稱和賬戶密碼:
接下來就可以點進去看到服務器上的文件了。為了更加方便地進行文件交互,我們添加對應的磁盤到Windows資源管理器的此電腦中:
選擇剛剛服務器的網絡路徑即可添加:
3. DL開發環境配置篇
配置這臺服務器的主要作用就是做深度學習訓練,所以GPU相關的驅動和環境時肯定要安排好的,網上資料很多很雜,這里梳理出了最便捷可靠的安裝方法供大家參考~
3.1 安裝Nvidia顯卡驅動
最簡單的方式是通過系統的軟件與更新來安裝:
-
進入系統的圖形桌面,打開
Software & Updates
軟件,可以看到標簽欄有一個Additional Drivers
:
選擇第一個安裝Nvidia官方驅動(第二個是開源驅動)即可,根據網絡情況稍等大概十分鐘,安裝完重啟服務器。
- 重啟完之后更新一下軟件:
sudo apt update
sudo apt upgrade
這里會連帶Nvidia的驅動一起升級一遍,更新到最新的驅動;更新完可能會出現nvidia-smi命令報錯,再重啟一下就解決了。
3.2 安裝CUDA
如果之前安裝了舊版本的cuda和cudnn的話,需要先卸載后再安裝:
sudo apt-get remove --purge nvidia*
然后按照前面的方法重新安裝顯卡驅動,安裝好了之后開始安裝CUDA:
- 去官網下載cuda安裝包CUDA Toolkit 11.0 Download | NVIDIA Developer(https://developer.nvidia.com/cuda-11.0-download-archive),相關選項如下(根據實際情況選擇):
- 運行下面的命令進行安裝:
chmod +x cuda_11.0.2_450.51.05_linux.run
sudo sh ./cuda_11.0.2_450.51.05_linux.run
可能會報一個警告:
前面已經卸載過舊版本了直接Continue就好。然后根據提示選擇安裝選項,注意不要勾選第一個安裝顯卡驅動的,因為之前已經安裝過了。安裝完成后提示
3. 根據上圖提示需要配置環境變量:
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
4. 可以使用命令nvcc -V
查看安裝的版本信息:
也可以編譯一個程序測試安裝是否成功,執行以下幾條命令:
cd ~/Softwares/cuda/NVIDIA_CUDA-11.0_Samples/1_Utilities/deviceQuery
make
./deviceQuery
正常的話會有相應輸出,打印顯卡的信息。
3.3 安裝CuDNN
進入到CUDNN的下載官網:cuDNN Download | NVIDIA Developer(https://developer.nvidia.com/rdp/cudnn-download),然點擊Download開始選擇下載版本,當然在下載之前還有登錄,選擇版本界面如下:
我們選擇和之前cuda版本對應的cudnn版本:
下載之后是一個壓縮包,對它進行解壓,命令如下:
tar -xzvf cudnn-11.0-linux-x64-v8.0.5.39.tgz
使用以下兩條命令復制這些文件到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
:
3.4 安裝Conda環境
不同的訓練框架和版本可能會需要不同的python版本相對應,而且有的包比如numpy也對版本有要求,所以比較優雅的方法是給每個配置建立一個虛擬的python環境,在需要的時候可以隨時切換,而不需要的時候也能刪除不浪費磁盤資源,那在這方面conda是做得最好的。
下面介紹怎么安裝conda:
- 在Anaconda官網下載Linux安裝包:Anaconda | Individual Edition (https://www.anaconda.com/products/individual)
- 運行下面的命令安裝:
chmod +x Anaconda3-2020.11-Linux-x86_64.sh
./Anaconda3-2020.11-Linux-x86_64.sh
一路按ENTER確認,然后根據提示輸入yes,這里我為了目錄整潔不安裝在默認路徑,設置為下面的路徑:/home/pengzhihui/Softwares/anaconda
然后會詢問你是否要初始化conda,輸入yes確認,重開終端窗口之后,就可以看到conda環境可用了(base代表默認環境):
conda的使用方法網上搜一下有很多,這里就不贅述了。
3.5 安裝Nvidia-Docker
Docker也是虛擬化環境的神器,前面說的conda雖然可以提供python的虛擬環境并方便地切換,但是有的時候我們的開發環境并不只是用到python,比如有的native庫需要對應gcc版本的編譯環境,或者進行交叉編譯時安裝很多工具鏈等等。如果這些操作都在服務器本地上進行,那時間久了就會讓服務器的文件系統非常雜亂,而且還會遇到各種軟件版本沖突問題。
Docker就可以很好地解決這些問題,它其實可以理解為就是一個非常輕量化的虛擬機,我們可以在宿主服務器上新建很多個這種被稱為容器
的虛擬機,然后在里面配置我們的開發環境,且這些配置好的環境是可以打包成鏡像
的,方便隨時做分享和重用;不需要的時候,我們直接刪除容器就好了,其資源是和我們的服務器宿主機完全隔離的。
Docker的具體使用可以自己搜索一下很多教程,這里主要介紹如何把GPU暴露給Docker的容器(因為大家都知道像是VMware這種虛擬機里面都是無法共享宿主機的GPU的),是通過nvidia-docker
實現的。
以前為了配置nvidia-docker,需要安裝完docker之后再安裝單獨的nvidia docker2,而現在只需要安裝nvidia container toolkit即可,更加方便了。
- docker安裝 官網上有詳細的介紹:Install Docker Engine on Ubuntudocs.docker.com(https://docs.docker.com/engine/install/ubuntu/) 或者運行下面的命令安裝:
sudo apt-get update
sudo apt-get install docker.io
systemctl start docker
systemctl enable docker
可以運行這條命令檢查是否安裝成功:
docker version
2. 安裝NVIDIA Container Toolkit
官網安裝步驟:NVIDIA/nvidia-docker: Build and run Docker containers leveraging NVIDIA GPUs (github.com) (https://github.com/NVIDIA/nvidia-docker) 或者直接運行下面的命令:
##首先要確保已經安裝了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
安裝完成后可以新建一個容器測試一下:
sudo docker run -it --name test_nvidia_docker --gpus all nvidia/cuda:11.1-base
其中最后的參數nvidia/cuda:11.1-base
是Nvidia官方的鏡像,需要根據工作站主機中實際安裝的cuda版本進行修改,版本可以用nvcc -V
查看。
進入容器之后可以跑一下nvidia-smi
命令看看:
現在可以在docker里面正常使用GPU啦~
3.6 測試
這里通過一個簡單的python腳本測試一下GPU訓練是否一切正常,跑一個DL里面的Hello World程序,通過兩種方法測試:本地conda和docker虛擬機。
以后的開發過程中一般還是使用Docker的方式來進行更為優雅。
1. 本地Conda環境方式:
先用conda新建一個python3.8+pytorch1.7+cuda11.0的虛擬環境:
conda create --name python_38-pytorch_1.7.0 python=3.8
創建完成后進入環境:
conda activate python_38-pytorch_1.7.0
檢查一下是否切換到所需環境了:
which pip
如果看到使用的確實是我們設置的環境目錄中的pip的話說明就ok。
接下來在環境中安裝pytorch,可以參考官網的安裝命令:Start Locally | PyTorch(https://pytorch.org/get-started/locally/)
輸入以下命令進行安裝:
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
環境配置就完成了,下面新建一個簡單的測試腳本驗證功能,新建mnist_train.py
,內容如下:
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()
運行腳本,正常的話就可以看到訓練輸出了:
2. Docker環境方式:
首先還是新建一個Docker鏡像,運行下面的命令:
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
就進入到了帶gpu的ubuntu20.04容器中,效果可以參考文章開頭的視頻。按照前面的配置方法同樣配置好pytorch和其他軟件包,然后運行同樣的腳本,也可以得到上述輸出,說明gpu在docker中正常工作。
4. 工作站維護篇
4.1 工作站系統備份還原
1. 備份
由于Linux本身萬物皆文件的設計理念,加上root用戶對幾乎全部的系統文件都有訪問和更改的權限,因此Linux系統的備份和還原其實非常簡單,我們直接打包整個根文件系統就可以了。
我們可以使用tar命令來打包并壓縮文件系統,不過這里在打包的過程中需要排除一些不需要文件,或者與新系統文件沖突的文件,包括/tmp
、/proc
、/lost+found
等目錄。
找一個你想保存備份文件的目錄,運行下面的命令:
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 /
我們會得到一個名為backup.tgz
的壓縮文件,這個文件包含我們需要備份的系統的全部內容。
2. 還原
如果系統沒有出問題可以正常啟動的話,那直接在剛剛的壓縮包找找到想還原的文件替換就好了。而如果系統無法啟動了,或者說想換一塊硬盤克隆一樣的系統,那么可以按一下步驟操作:
- 重裝干凈的Ubuntu系統。跟上面介紹的一樣,使用U盤給目標磁盤重裝一個干凈的系統,這一步是為了省去自己分配存儲空間和掛載的麻煩,如果你會自己配置的話那也可以不做這一步。
-
再次使用U盤進入系統,這次選擇
try ubuntu without installing
,然后可以看到掛載好的剛剛安裝了干凈系統的另一個盤,我們在這里對盤里的根文件系統進行一些文件的提取:
sudo su
# 在tryUbuntu根目錄下有media文件夾,里面是U盤文件夾和新安裝的系統文件夾,在在里分別用(U盤)和(UBUNTU)表示
cd /media/(U盤)
mount -o remount rw ./
# 將新系統根目錄下/boot/grub/grub.cfg文件備份到U盤中
sudo cp /media/(Ubuntu)/boot/grub/grub.cfg ./
# 將新系統根目錄下/etc/fstab文件備份到U盤中,fstab是與系統開機掛載有關的文件,grub.cfg是與開機引導有關的文件,所以這一步至關重要
sudo cp /media/(UBUNTU)/etc/fstab ./
# 這一步刪除新裝ubuntu全部的系統文件,有用的fstab及grub.cfg已經備份
cd /media/(UBUNTU)
sudo rm -rf ./*
# 將U盤中backup.tgz復制到該目錄下并解壓縮
cp /media/(U盤)/backup.tgz ./
sudo tar xvpfz backup.tgz ./
# 創建打包系統時排除的文件
sudo mkdir proc lost+found mnt sys media
這一步完成后,在用我們在新系統中備份的fatab
及grub.cfg
文件去替換壓縮包中解壓出來的同名文件,sudo reboot
重啟后就發現系統已經恢復到備份時的狀態,包括各種框架,環境,系統設置~
以上,后面有更新的話還會繼續補充,希望對大家有幫助~
責任編輯:xj
原文標題:保姆級教程:個人深度學習工作站配置指南
文章出處:【微信公眾號:深度學習自然語言處理】歡迎添加關注!文章轉載請注明出處。
-
PC
+關注
關注
9文章
2076瀏覽量
154147 -
服務器
+關注
關注
12文章
9123瀏覽量
85328 -
深度學習
+關注
關注
73文章
5500瀏覽量
121113
原文標題:保姆級教程:個人深度學習工作站配置指南
文章出處:【微信號:zenRRan,微信公眾號:深度學習自然語言處理】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論