1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        保姆級(jí)教程:個(gè)人深度學(xué)習(xí)工作站配置指南

        共 16689字,需瀏覽 34分鐘

         ·

        2020-12-18 14:30

        作者丨稚暉@知乎(已授權(quán))
        來(lái)源丨h(huán)ttps://zhuanlan.zhihu.com/p/336429888

        0 前言

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

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

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

        首先我們來(lái)看一下配置完后最終效果的視頻:

        1. 硬件篇

        1.1 工作站配置選型

        配件全家福

        服務(wù)器的配置以個(gè)人使用性價(jià)比為主,同時(shí)考慮到以后的擴(kuò)展性像是主板和機(jī)箱這些配件配置設(shè)置一些冗余。首先是CPU平臺(tái)的選擇,雖然AMD這兩年實(shí)在是香,但是作為生產(chǎn)力工具考慮到軟件庫(kù)的兼容性問(wè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ù)集倉(cāng)庫(kù),另外一個(gè)1T SATA固態(tài)作為訓(xùn)練時(shí)的數(shù)據(jù)集緩存,因?yàn)镮O讀寫速度也是會(huì)影響訓(xùn)練效率的,所以相比于直接從機(jī)械盤里面讀取數(shù)據(jù),加一塊SSD做cache效果會(huì)好很多。

        1.2 電腦組裝

        總之就是快樂(lè)的玩具拼裝過(guò)程~

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

        這個(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)視器來(lái)使用~

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

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

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

        2. 系統(tǒng)篇

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

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

        1. 在官網(wǎng)下載Ubuntu鏡像:Ubuntu 20.04.1 LTS (Focal Fossa)(http://releases.ubuntu.com/20.04/),選擇Desktop Image版本,得到.iso的鏡像文件。
        2. Windows下使用UltraISO工具打開(kāi).iso鏡像文件,并將其寫入到一個(gè)U盤,得到系統(tǒng)啟動(dòng)盤:
        1. 將U盤插到服務(wù)器上,開(kāi)機(jī)按del鍵(具體什么鍵跟主板型號(hào)有關(guān))選擇啟動(dòng)項(xiàng)進(jìn)入臨時(shí)的Ubuntu系統(tǒng),在圖形界面中選擇Install Ubuntu,所有配置都可以使用默認(rèn)的,改一下用戶名和密碼即可。這里建議使用英文作為默認(rèn)語(yǔ)言,省得給自己日后開(kāi)發(fā)找麻煩哈。

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

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

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

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

        1. 備份原來(lái)的源:

        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)測(cè)試阿里云是最快的。另外也可以在圖形桌面環(huán)境下打開(kāi)Software & Updates軟件,在里面也有網(wǎng)速測(cè)試并選擇最佳源的功能。

        2.3 安裝Python和pip

        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開(kāi)發(fā)了,每次都輸入python3很麻煩所以這里直接更換默認(rèn)的python命令鏈接。

        把原來(lái)的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)沒(méi)有開(kāi)啟SSH,我們手動(dòng)安裝一下。

        1. 安裝ssh:
        sudo apt install ssh

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

        2. 安裝xrdp

        Xrdp 是一個(gè)微軟遠(yuǎn)程桌面協(xié)議(RDP)的開(kāi)源實(shí)現(xiàn),它允許我們通過(guò)圖形界面控制遠(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的。

        安裝過(guò)程如下:

        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,它僅僅對(duì)ssl-cert用戶組成語(yǔ)可讀,所以需要運(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)下通過(guò)IP地址進(jìn)行連接的,而我們配置一臺(tái)服務(wù)器最重要的訴求,應(yīng)該是可以隨時(shí)隨地去訪問(wèn)服務(wù)器。

        那在家里面,網(wǎng)絡(luò)運(yùn)營(yíng)商提供的網(wǎng)絡(luò)服務(wù)通過(guò)路由器路由到各個(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)過(guò)了多層的NAT轉(zhuǎn)換之后的地址,外網(wǎng)的設(shè)備是不能通過(guò)這個(gè)地址訪問(wèn)到路由器的。這個(gè)問(wèn)題的原因是ipv4地址池緊張,如果運(yùn)營(yíng)商給每家的路由器都安排一個(gè)公網(wǎng)ip的話,那ip地址早就不夠用了呀。

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

        有幾種方法:

        • 可以直接用類似花生殼(https://hsk.oray.com/)這樣的DDNS服務(wù)平臺(tái)做轉(zhuǎn)發(fā)實(shí)現(xiàn)內(nèi)網(wǎng)穿透,優(yōu)點(diǎn)是比較簡(jiǎn)單穩(wěn)定,缺點(diǎn)是需要持續(xù)付費(fèi),而且速度和延遲效果一般,而且每加一個(gè)端口都要額外付費(fèi)。
        • 也可以像我一樣使用frp之類的軟件做反向代理來(lái)實(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ù)器也不貴,我在騰訊云上購(gòu)買一年只要200左右。

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

        frp分為frps(server)和frpc(client)兩個(gè)包 ,其中前者安裝到我們的云服務(wù)器上,后者安裝在需要被外網(wǎng)訪問(wèn)到的各個(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?即可訪問(wèn)到 frp的web管理界面。

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

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

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

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

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

        3. 添加開(kāi)機(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

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

        sudo systemctl status frpc.service

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

        • /usr:系統(tǒng)級(jí)的目錄,可以理解為C:/Windows/
        • /usr/lib:可以理解為C:/Windows/System32
        • /usr/local:用戶級(jí)的程序目錄,可以理解為C:/Progrem Files/,用戶自己編譯的軟件默認(rèn)會(huì)安裝到這個(gè)目錄下
        • /opt:用戶級(jí)的程序目錄,可以理解為D:/Software,opt有可選的意思,這里可以用于放置第三方大型軟件(或游戲),當(dāng)你不需要時(shí),直接rm -rf掉即可。在硬盤容量不夠時(shí),也可將/opt單獨(dú)掛載到其他磁盤上使用

        源碼放哪里?

        • /usr/src:系統(tǒng)級(jí)的源碼目錄
        • /usr/local/src:用戶級(jí)的源碼目錄。

        2.6 安裝SAMBA服務(wù)

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

        如開(kāi)頭的視頻里面演示的,可以通過(guò)建立局域網(wǎng)SAMBA服務(wù)來(lái)實(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]
        # 說(shuō)明信息
        comment = Fusion WorkStation Storage
        # 可以訪問(wèn)的用戶
        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è)命令測(cè)試一下配置文件是否有錯(cuò)誤,根據(jù)提示做相應(yīng)修改:testparm

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

        必須是 linux 已存在的用戶:

        sudo smbpasswd -a pi

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

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


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

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

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

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

        3. DL開(kāi)發(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)

        最簡(jiǎn)單的方式是通過(guò)系統(tǒng)的軟件與更新來(lái)安裝:

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

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

        1. 重啟完之后更新一下軟件:
        sudo apt update
        sudo apt upgrade

        這里會(huì)連帶Nvidia的驅(qū)動(dòng)一起升級(jí)一遍,更新到最新的驅(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),安裝好了之后開(kāi)始安裝CUDA:

        1. 去官網(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í)際情況選擇):
        1. 運(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è)警告:

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

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

        nano ?~/.bashrc

        再文件最后加入以下語(yǔ)句:

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

        也可以編譯一個(gè)程序測(cè)試安裝是否成功,執(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開(kāi)始選擇下載版本,當(dāng)然在下載之前還有登錄,選擇版本界面如下:

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

        下載之后是一個(gè)壓縮包,對(duì)它進(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

        3.4 安裝Conda環(huán)境

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

        下面介紹怎么安裝conda:

        1. 在Anaconda官網(wǎng)下載Linux安裝包:Anaconda | Individual Edition(https://www.anaconda.com/products/individual
        2. 運(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ì)詢問(wèn)你是否要初始化conda,輸入yes確認(rèn),重開(kāi)終端窗口之后,就可以看到conda環(huán)境可用了(base代表默認(rèn)環(huán)境):

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

        3.5 安裝Nvidia-Docker

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

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

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

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

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

        官網(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è)容器測(cè)試一下:

        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命令看看:

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

        3.6 測(cè)試

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

        以后的開(kāi)發(fā)過(guò)程中一般還是使用Docker的方式來(lái)進(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í)是我們?cè)O(shè)置的環(huán)境目錄中的pip的話說(shuō)明就ok。

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

        輸入以下命令進(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è)簡(jiǎn)單的測(cè)試腳本驗(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}%)]\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()


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

        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容器中,效果可以參考文章開(kāi)頭的視頻。按照前面的配置方法同樣配置好pytorch和其他軟件包,然后運(yùn)行同樣的腳本,也可以得到上述輸出,說(shuō)明gpu在docker中正常工作。

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

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

        1. 備份

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

        我們可以使用tar命令來(lái)打包并壓縮文件系統(tǒng),不過(guò)這里在打包的過(guò)程中需要排除一些不需要文件,或者與新系統(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)的全部?jī)?nèi)容。

        2. 還原

        如果系統(tǒng)沒(méi)有出問(wèn)題可以正常啟動(dòng)的話,那直接在剛剛的壓縮包找找到想還原的文件替換就好了。而如果系統(tǒng)無(wú)法啟動(dòng)了,或者說(shuō)想換一塊硬盤克隆一樣的系統(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è)盤,我們?cè)谶@里對(duì)盤里的根文件系統(tǒng)進(jìn)行一些文件的提?。?/section>
          sudo 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)開(kāi)機(jī)掛載有關(guān)的文件,grub.cfg是與開(kāi)機(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


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


        以上,希望對(duì)大家有幫助~


        ·················END·················



        推薦閱讀

        ?? ?川普的退休生活,AI 宅舞很專業(yè)。?? ?清華 CVer 對(duì)自監(jiān)督學(xué)習(xí)的一些思考????帶你「周游世界」的 MODNet 算法?? ?「修煉開(kāi)始」一文帶你入門深度學(xué)習(xí)?? ?百年老照片修復(fù)算法,那些高顏值的父母!



        瀏覽 49
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            看黄无限数入口 | 中文字幕欧美精品一区二区三区 | 人人摸人人舔人人操 | 局长含着花蒂啃咬高潮 | 欧洲一级大片 | 东北女人18一级毛片 | 国产精品爽爽久久久天 | 水多视频| 91无码人妻精品一区二区三区男 | 囯产伦精一区二区三区妓 |