從入門到入土:個人深度學習工作站配置指南(保姆級教程)

2020-12-25 網易


  作者 | 稚暉@知乎(已授權)

  來源丨https://zhuanlan.zhihu.com/p/336429888

  本文記錄了稚暉大佬組裝深度學習工作站過程中的超詳細操作流程,可謂是手把手教學、堪稱保姆級教程。

  本章分為硬體、系統、DL開發環境配置以及工作站的維護幾個章節,希望能幫到大家,給大家做個參考。

  前言

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

  以前在公司的時候還可以用公司的DGX訓練集群做一些實驗,但是我現在的開發環境已經切換到了昇騰的NPU架構晶片之上了,昇騰平臺算力方面雖然是比肩甚至可以超越英偉達,但是目前暫時很多學術界的生態都還是基於GPU伺服器的(主要是指開原始碼),且我們這兒昇級伺服器對個人也不好買(且買不起),所以有一臺這樣的GPU工作站還是會方便一些。

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

  首先我們來看一下配置完後最終效果的視頻:

  

  2

  硬體篇

  2.1 工作站配置選型

  配件全家福

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

  最後選定的配置如下:

  

  其中硬碟的設計是這樣的:1T的NVME固態做系統盤,12T的機械盤作為數據集倉庫,另外一個1T SATA固態作為訓練時的數據集緩存,因為IO讀寫速度也是會影響訓練效率的,所以相比於直接從機械盤裡面讀取數據,加一塊SSD做cache效果會好很多。

  2.2 電腦組裝

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

  機箱尺寸比較大,預留的空間非常足所以不會出現像是在裝A4機箱時那種考驗走線和裝配順序的技巧問題;而且伺服器嘛,安靜地塞在某個角落就好了,也不用過於考慮什麼美觀問題,所以走線就很隨意了:


  這個機箱設計還是很科學的,預留了足夠多的擴展接口比如:2個 3.5寸可快拆盤位、5個2.5寸可快拆盤位、光碟機位(用不到,後期改造了)、前後頂部一對風扇位等等。線材基本都可以塞到機箱的另一個側面,前面板安裝了三個進風風扇,背部安裝了一個出風風扇,水冷的冷排和風扇在頂端。

  這裡值得一提的是,正面的光碟機位屬於用不上的老古董,所以我改造了一下準備裝一個小型的LCD屏幕上去,這樣偶爾需要進圖形桌面或者BIOS界面的時候,就不用再抱個顯示器插在機箱上了;此外以後也可以寫個軟體把這個屏幕作為系統狀態監視器來使用~


  

↑ 後面會3D列印一個外殼把屏幕固定住。

  這個屏幕也是我前陣子剛設計的,項目已經開源了叫做PocketLCD,感興趣的可以去倉庫看看:

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

  3

  系統篇

  系統選擇DL開發裡面最常用的Ubuntu,最新的穩定版本是20.04,安裝過程需要準備一個U盤作為系統啟動盤。

  3.1 安裝Ubuntu 20.04系統

  


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

      


  2.   Windows下使用UltraISO工具打開.iso鏡像文件,並將其寫入到一個U盤,得到系統啟動盤:

      


  1.   將U盤插到伺服器上,開機按del鍵(具體什麼鍵跟主板型號有關)選擇啟動項進入臨時的Ubuntu系統,在圖形界面中選擇Install Ubuntu,所有配置都可以使用默認的,改一下用戶名和密碼即可。這裡建議使用英文作為默認語言,省得給自己日後開發找麻煩哈。

      

  安裝過程中會聯網下載一些軟體包更新,可以直接點skip掉,在安裝好系統之後再手動更新也是一樣的。

  2. 進入系統後設置一下root帳戶密碼:

  sudo passwd root3.2 配置國內鏡像軟體源

  為了提升後續安裝軟體時的幸福感,第一步當然先要替換一下軟體源。

  1. 備份原來的源:

  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軟體,在裡面也有網速測試並選擇最佳源的功能。

  3.3 安裝Python和pip

  1. 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環境了。

  3.4 配置SSH & 遠程桌面

  純淨安裝的系統裡面默認沒有開啟SSH,我們手動安裝一下。

  


  1.   安裝ssh:

      

sudo apt install ssh

  會自動安裝好很多依賴包並啟動服務,完成之後用XShell等軟體就可以SSH登陸伺服器了。

  2. xr安裝dp

  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(現在能申請到的概率也已經不大了,而且即使申請到也不是所有埠都可以使用的),或者我們自己動手做一些操作來達到同樣的目的。

  有幾種方法:

  

為什麼需要多個埠?是因為不同應用佔用的埠不同,比如我們的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,下好之後解壓:

  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管理界面。

  

注意,可能需要去雲伺服器控制臺配置安全組規則 開放以上涉及到的埠,否則無法訪問。

  本地的深度學習端伺服器:

  


  1.   下載相應版本的frpc軟體包(跟剛剛一樣的):Releases · fatedier/frp (github.com),這裡選amd64的,下好之後解壓到一個臨時文件夾。

      


  2.   修改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:用戶級的源碼目錄。

      

3.6 安裝SAMBA服務

  如果能把伺服器上的磁碟直接掛載到我們使用的Windows個人PC上是不是很爽?

  如開頭的視頻裡面演示的,可以通過建立區域網SAMBA服務來實現這個效果:

  1.安裝sambasamba-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/
# 可被其他人看到資源名稱(非內容)
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資源管理器的此電腦中:


  選擇剛剛伺服器的網絡路徑即可添加:


  4

  DL開發環境配置篇

  配置這臺伺服器的主要作用就是做深度學習訓練,所以GPU相關的驅動和環境是肯定要安排好的,網上資料很多很雜,這裡梳理出了最便捷可靠的安裝方法供大家參考~

  4.1 安裝Nvidia顯卡驅動

  最簡單的方式是通過系統的軟體與更新來安裝:

  


  1.   進入系統的圖形桌面,打開Software & Updates軟體,可以看到標籤欄有一個Additional Drivers

      

  選擇第一個安裝Nvidia官方驅動(第二個是開源驅動)即可,根據網絡情況稍等大概十分鐘,安裝完重啟伺服器。

  


  1.   重啟完之後更新一下軟體:

      

sudo apt update
sudo apt upgrade

  這裡會連帶Nvidia的驅動一起升級一遍,更新到最新的驅動;更新完可能會出現nvidia-smi命令報錯,再重啟一下就解決了。

  4.2 安裝CUDA

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

  sudo apt-get remove --purge nvidia*

  然後按照前面的方法重新安裝顯卡驅動,安裝好了之後開始安裝CUDA:

  


  1.   去官網下載cuda安裝包:CUDA Toolkit 11.0 Download | NVIDIA Developer(https://developer.nvidia.com/cuda-11.0-download-archive),相關選項如下(根據實際情況選擇):

      


  1.   運行下面的命令進行安裝:

      

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

  可能匯報一個警告:


  前面已經卸載過舊版本了直接Continue就好。然後根據提示選擇安裝選項,注意不要勾選第一個安裝顯卡驅動的,因為之前已經安裝過了。安裝完成後提示


  2. 根據上圖提示需要配置環境變量:

  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查看安裝的版本信息:


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

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

  正常的話會有相應輸出,列印顯卡的信息。

  4.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


  4.4 安裝Conda環境

  不同的訓練框架和版本可能會需要不同的python版本相對應,而且有的包比如numpy也對版本有要求,所以比較優化的方法是給每個配置建立一個虛擬的python環境,在需要的時候可以隨時切換,而不需要的時候也能刪除不浪費磁碟資源,那在這方面conda是做得最好的。

  下面介紹怎麼安裝conda:

  


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

      


  2.   運行下面的安裝命令:

      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的使用方法網上搜一下有很多,這裡就不贅述了。

  4.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即可,更加方便了。

  1.   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啦~

  4.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}%)]\tLoss: {:.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中正常工作。

  5

  工作站維護篇

  5.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

      

  這一步完成後,在用我們在新系統中備份的fatabgrub.cfg文件去替換壓縮包中解壓出來的同名文件,sudo reboot重啟後就發現系統已經恢復到備份時的狀態,包括各種框架,環境,系統設置~

  以上,後面有更新的話還會繼續補充,希望對大家有幫助~

  由於微信公眾號試行亂序推送,您可能不再能準時收到AI科技評論的推送。為了第一時間收到AI科技評論的報導, 請將「AI科技評論」設為星標帳號,以及常點文末右下角的「在看」。

相關焦點

  • 【電腦知識科普】如何去配置一臺音頻工作站電腦
    言歸正傳,那我們如何去配置一臺適合我們音頻工作站的PC電腦呢!(做直播的同學也要看過來,因為道理相通)1、CPU的選擇:首先市面上主流的CPU有兩個品牌AMD和英特爾,那CPU如何區分性能?細心的同學會關注到CPU的參數數據,比如有幾核心、幾線程以及它的主頻與睿頻,那這些參數肯定數值越大它的性能就越好。但是工作站電腦CPU只有一個牌子!那就是英特爾!
  • 雲服務太麻煩,我花9000美元自建深度學習工作站,上雙路泰坦RTX
    創建屬於自己的深度學習工作站大概是很多機器學習從業者的夢想,本文作者 Rahul Agarwal 也不例外。然而創建工作站並非易事,你得有時間,還得有錢。主要是得有錢……在拖延了很長時間後,Rahul Agarwal 下定決心創建自己的工作站。原因無他,受夠了使用雲服務時,不管多小的項目都要設置伺服器、進行一系列安裝,或者運行時和網絡連接受限。
  • 機器學習漫遊指南 最完整的入門書單(外文版)
    在雷鋒網所篩選的學習資源中,這堪稱是迄今為止最全面、最完整、權威性比較高的一份 ML 書單,涵蓋了最值得學習者、從業者、開發者認真研讀的精品書目。這份指南適合多樣背景的讀者:從想要了解機器學習的普通人,到入門新手,再到高階開發者和學術研究人員。因此,雷鋒網對其進行編譯整理,特來與大家分享。
  • 深度學習裝機指南:從GPU到顯示器,全套硬體最新推薦
    GPU顯卡(GPU)是深度學習的重要部件,甚至比CPU更重要。做深度學習不用GPU只用CPU顯然是不明智的,所以作者Tim先介紹了GPU的選擇。而實際上,它對深度學習性能幾乎沒有影響。如果只有一個GPU,PCIe通道的作用只是快速地將數據從內存傳輸到顯存。ImageNet裡的32張圖像(32x225x225x3)在16通道上傳輸需要1.1毫秒,在8通道上需要2.3毫秒,在4通道上需要4.5毫秒。這些只是是理論數字,實際上PCIe的速度只有理論的一半。
  • 我的深度學習入門路線
    所有的網際網路公司,例如 Google、 微軟、百度、騰訊等巨頭,無不在布局人工智慧技術和市場。各大公司也迅速開展了人工智慧人才爭奪戰。百度、騰訊、阿里巴巴、京東等網際網路巨頭甚至都在美國矽谷不惜高薪挖掘人工智慧人才。現在北京、上海等地,深度學習算法崗位,年薪 3、40w 都十分正常!
  • 精華 | Pr全套視頻學習教程從入門到精通,自學者必備!
    500多部世界經典電影劇本197個微電影MV視頻調色Adobe系列最全教程合集4800套LED大屏幕背景184個火焰特效視頻素材110組藍色逆光鏡頭光效MG動畫素材包AE 2019 插件合集最全Pr插件收集C4D全套漢化插件合集頂級人像攝影布光教程PS調色修圖教程攝影后期視頻教程2019最火抖音課程videoleap剪輯vlog教程
  • 新手學漫畫怎麼入門?漫畫初學入門教程
    新手學漫畫怎麼入門?漫畫初學入門教程!喜歡畫畫的小白們還在入坑的邊緣來回徘徊猶豫就會敗北?微課菌經常能在私信中看到這樣的字眼:「初學者如何學畫」、「怎樣入門」「學漫畫入門怎麼學習」等相關問題。所以今天出一期漫畫新手常見問題解答特輯,給想學漫畫的萌新解除一些不必要的疑惑!
  • 剛接觸Lumion,這份入門+案例教程不容錯過
    Enscape入門+進階教程可以私信小編獲取經過我們多個項目的使用測評發現:Lumion什麼都好,就是對電腦硬體要求太高,而且隨著Lumion版本的升級對電腦硬體的要求也越來高。以前Lumion6.0可以帶得動,升級到Lumion8.0後電腦就有點吃不消了,現在Lumion已經步入11.0時代,那對電腦要求又如何?
  • 深度強化學習的人工智慧在遊戲中的運用:遊戲AI入門及AI優化指南
    (本文接下來不包括AI底層代碼,AI工具開發等程序向內容,該部分在網絡上已經有很多教程大家可以去學習,個人認為策劃對於底層AI的具體實現是不需要了解的,而對於AI製作與優化是需要學習的。)《逆水寒》雖然逆水寒機器人是深度學習AI進行控制,但其表現仍然可以用在很多先用的MOMORPG之中。
  • 想深入學習佔星,有哪些必讀的入門書籍
    本文的目的是為那些喜歡嚴肅佔星但覺得沒有辦法深入學習的人提供一些學習佔星的指導。基於以上目的,我將盡力為熱愛佔星的初學者解答問題。由於個人學習的局限性,歡迎大家真誠地討論和批評,共同提高。讓我們明確一點,我們有些朋友只問自己或別人的星盤配置,比如某個方面,宮裡某個地方。對於這類朋友,我真誠建議大家找一位可靠的佔星專業人士做一次全面系統的會診。因為你很容易對自己或他人產生基於某一種論斷的偏見。一旦這種偏見建立起來,很容易引起誤解,進而對你的生活產生不好的影響。
  • 小白快速入門教程總結!群暉玩PT,看電影,資料備份,看這個就夠了!
    關於以上的使用教程,在我們這個網站都有了。為了照顧一下新手用戶,今天就給大家總結一下 ,新手入門必看,方便大家學習。群暉NAS或者PT站方面碰到問題,可以使用我們網站的搜索功能搜索相關關鍵詞,查找相關文章。
  • Java工程師入門深度學習(三):輕鬆上手Deep Java Library_科技...
    DJL(Deep Java Library )是亞馬遜在2019年宣布推出的開源Java深度學習開發包,它是在現有深度學習框架基礎上使用原生Java概念構建的開發庫。它為開發者提供了深度學習的最新創新和使用前沿硬體的能力,例如GPU、MKL等。簡單的API抽象並簡化了開發深度學習模型所涉及的複雜性,使得DJL更易於學習和應用。
  • 「修煉開始」一文帶你入門深度學習
    來源 | Jack Cui責編 | Carol封圖 | CSDN下載自視覺中國前言圖解 AI 算法系列教程,不僅僅是涉及深度學習基礎知識,還會有強化學習、遷移學習等,再往小了講就比如拆解目標檢測算法,對抗神經網絡(GAN)等等。
  • 圍棋定式:從入門到入土——13
    都是兩分定式,怎麼選擇還是要看個人的喜好與配置。圖4那黑棋如果不想下成上圖,只能這樣拐吃。由於白棋有C2立的借用,以下連壓,黑棋是有苦難言,只能一個排著一個退。這下就有意思了,拐一個不想給白棋走厚,結果反而讓白棋厚了。這圖倒也不能說白棋就便宜了,畢竟黑棋實地實在是很大。至於黑棋為什麼不能扳,可以參考:圍棋定式:從入門到入土(7)。
  • 零基礎板繪應該如何入門?板繪入門教程分享
    零基礎板繪應該如何入門?板繪入門教程分享!近幾年我國無論是遊戲,影視,還是動畫漫畫行業都顯露出了蓬勃發展的景象。伴隨著受日本歐美動畫電影影響的一代人逐漸長大,我們也開始了自己的文化輸出。越來越多的人開始了解和接觸板繪。
  • 2019 到目前為止的深度學習研究進展匯總
    在剛剛結束的2019年的第一季度裡,深度學習技術在快速的向前發展。我經常會去查看相關研究人員的工作,以便了解這項技術的進展。這項工作讓我能夠了解到很多我不知道的事情,然後以此優化自己的工作時間安排。,它由靈活且易於擴展的模塊化構建塊組成,實驗時可以集中配置且可高度定製。
  • Arduino入門教程|1.1環境搭建
    Arduino是我接觸的第一款單片機,之前一直聽說C51單片機,但由於51確實已經比較老了,而Arduino作為一款新興的開源單片機系統,也是受到國內外很多創客的支持,甚至許多青少年都已經開始學習使用此款單片機。
  • 直播教程 | 虎牙官方推薦的直播設備(電腦)配置參考
    新主播入門第一句:直播要配什麼電腦?小白主播日常:哎呀好卡啊?!把觀眾都卡走了!!!如果設備達不到官方推薦的配置,可以通過降低直播畫質、關閉無關直播的進程、使用硬體編碼器等方法進行正常直播,不影響觀眾正常觀看。虎牙PC主播端使用教程:直播教程 | 虎牙PC主播端使用教程(新手主播必看)二、手機開播手機開播的主播,官方沒有給出手機性能要求,咱們國人普遍用的手機性能在全球範圍內都是數一數二的。
  • 零基礎看得懂的C語言入門教程
    一、前言 距離上一次編寫C語言的教程是5年前了(2015年),由於自己是從初一時開始學習編程,深知學習編程的痛苦。當時正在念大學的我想著分享自己自學編程的經驗,搭建了一個社區(社區之後自己維護太懶,維護了一年不到關閉了)第一次編寫了C語言教程,分享自己的學習經驗。社區關閉後,於2017年上傳至了CSDN留存至今。 現在回過頭查看當時自己編寫的教程,由於當時技術的淺薄,編寫的教程還是存在很多的不足,故有了一個重新編寫C語言教程的想法。
  • PS教程:172集入門到精通,輕鬆成為PS高高手
    學習的盲點主要在於:PS太專業,光是排列得密密麻麻的功能區,還有繁瑣的操作步驟,足以讓新手望而卻步。講真,對於初學PS的朋友而言,有一套細緻入微的PS教程是極其重要的。林兆勝老師在《172集入門到精通,輕鬆成為PS高高手》課程裡面,將Photohop的圖層、蒙版、通道三大核心知識通過眾多案例為您講得通透,並教會你熟練運用PS的工具命令,融會貫通做出自己的PS作品。林兆勝老師的PS教程最大優勢在於:全面系統,高效實用,素材齊全,視頻教程搭配電子書,易學易懂。