[2024/05/04 更新]
2023/08 公司添購 RTX 6000 Ada 48 GB * 2 和 A 100 80GB * 4
2024/05 公司添購RTX 6000 Ada 48 GB * 8 * 2
[ 純文字版 ]
首先,這網誌荒廢了一陣子,但翻了一下,關於深度學習好像也是積累了幾篇,有興趣的可以看一下,但我想年代有點久遠,可能會不太適合現在的安裝了;網路很多教學文,所以這次就不說幹話,手把手教你自己打造安全的深度學習開發測試環境;希望能幫助大家踩越少坑越好 ! 選在 May the Fourth be with You 這天也不錯 ! 從最開始心血來潮自己亂摸索,順手買了 960,直到狠下心的工欲善其事必先利其器的用力勸敗哦 ! 記得,有時候,不討高層長官們喜的話,冒著被凍或被踢出還是要講,千萬不要讓你的高層長官們(不用自己動手的都算)覺得不用買 GPU,不用花錢招募(就是想找即戰力但只招得起新鮮人),用想的就可以做出天下無敵的落地應用。。。最最重要的還有數據 !!! 難道你覺得最後落不了地,高層長官們會不怪你嗎 ?
由於大家很容易沒仔細瞭解互相的相依性,一股腦的就裝,常常也看到很多人說裝不起來;所以首先來好好關注一下你需要注意以下這些東西,然後你全部看完後再決定到底要怎樣搭配各個版本:OS, GPU, CUDA, cuDNN, Docker / NGC / nVIDIA Docker, Python / Anaconda, Tensorflow, Pytorch。
(很重要) 強列建議,本機端順利裝好後,就快點看 docker 的處理吧 ! (很重要)
- OS:建議 ubuntu 16.04 LTS (支援至2021年04月),我個人之前機器都是14.04 LTS(支援至 2019年04月),後來都是用 docker,就沒再去做升級這樣;這次為了寫這篇則是裝了 16.04 LTS 這樣。。。2023/08 已經改使用 Ubuntu 22.04 LTS,但 USB Wifi 編譯一直失敗,又換回 Ubuntu 20.04 LTS*** USB Wifi 驅動程式番外篇 ***心血來潮的想說幫Ubuntu這台工作站搞個Wifi,或者是 4G LTG 分享器,想不到整個囧爆,碰到 USB Wifi 在 ubuntu 20.04 跟 22.04 上會發生找不到 wifi 選項的問題 ! 如左上圖所示,導致無法像右上圖一樣選擇連線隱藏的wifi。(1.) 首先是想搞 4G LTE 網路分享,去買了 TP-Link Deco X20-4G,結果,NAT、Port 轉發,都 GG(2.) 後來改換用手機吃4G,然後USB網路共用,嗯 ! 可以 WORK;但是重開機就得去現場按一下(3.) 接著又買了這些支援Linux的USB 無線網卡:USB-N10 NANO、AC600 MU-MIMO 雙頻無線網卡、AC1200 MU-MIMO 雙頻USB 3.0 無線網路卡;悲劇的是編譯驅動好幾次,查用的晶片型號,最後只有AC600 這個 DWA-171 (C) 用 D 可以成功在 Ubuntu 20.04 上連線隱藏網路A. https://github.com/uzh-rpg/rpg_dwa171_wifidongleB. https://github.com/aircrack-ng/rtl8188eusC. https://github.com/drygdryg/rtl8188eusD. https://github.com/morrownr/8821cu-20210916
(4.) 你以為只有這樣就能風平浪靜嗎 ? 錯 ! 萬一你不小心給它 apt-get upgrade 或升級了什麼,就會發生這又找不到 wifi 選項了 ! 然後當你用 lsusb 跟 sudo dkms status 時會看到這樣的字串:
rtl8821CU, 5.4.1, 5.4.0-73-generic, x86_64: installed (WARNING! Diff between built and installed module!)
經過一番研究,找到下方連結,參考了下這樣的指令把它移除:
sudo dkms remove -m rtl8821CU -v 5.4.1 --all
然後再到前述的D下載檔案,然後直接用 install-driver.sh 安裝:
D-Link DWA-171 AC600 wifi dongle not detected at all in Ubuntu 20.04 - GPU 規格及型號 (驅動程式):有2個網址需要注意;很多時候因為驅動版本就會跟下方的cuda還有cudnn再互相衝到,需要特別注意 ! 以我自己為例,是使用 440.82。。。2023/08是用535.104.05
首先是 https://en.wikipedia.org/wiki/CUDA#GPUs_supported 這個 wiki,裡面清楚寫了各種 GPU 的Micro-architecture,基本上建議如果真的要跑深度學習,請務必以 Pascal 為基本款出發 ! 記得在安裝前先切到 tty2 然後 sudo service lightdm stop 關閉服務。
接著安裝相依套件:sudo apt install dkms build-essential linux-headers-generic
然後在本機端前面按 ctrl + alt + F1,切換到 tty 2 記議直接在本機端前做安裝驅動這件事;不然這裡可能會碰上一些奇怪的錯誤。接著建議都先把安裝OS自帶的移除:sudo apt-get remove --purge nvidia* 或 dpkg -l 'nvidia*' 然後再 dpkg --remove nvidia-(XXX)。;或者知道被預安裝的版本的就像下面這樣:
sudo apt-get remove --purge nvidia-driver-535
sudo apt-get autoremove
確認了 GPU 型號後,就到這個網址挑選驅動程式下載吧,強烈建議看完全部想清楚再來挑選版本:https://www.nvidia.com/Download/index.aspx?lang=twRTX 6000 Ada:wget https://tw.download.nvidia.com/XFree86/Linux-x86_64/535.104.05/NVIDIA-Linux-x86_64-535.104.05.runA100:wget https://tw.download.nvidia.com/tesla/535.86.10/NVIDIA-Linux-x86_64-535.86.10.run
下載好後記得 chmod a+x 補上執行權限,然後一定要 sudo service lightdm stop 接著
./NVIDIA-Linux-x86_64-XXX.run -no-x-check -no-nouveau-check -no-opengl-files -no-x-check
一般來說應該都正常,但如果碰上問題,可以試試這幾篇文章,有提到一些動作:
https://blog.csdn.net/ksws0292756/article/details/79160742
https://zhuanlan.zhihu.com/p/31575356
sudo ./NVIDIA-Linux-x86_64-535.98.run
正常來說,都是照上面這樣安裝成功的,疏不知,就是有那個 BUT ... 會裝不起來
(1.) NVIDIA-SMI has failed because it couldn‘t communicate with the NVIDIA driver.
https://blog.csdn.net/wjinjie/article/details/108997692
https://andy51002000.blogspot.com/2019/01/nvidia-smi-has-failed-because-it.html
https://blog.csdn.net/wjinjie/article/details/108997692
(2.) 【nvidia-smi】Failed to initialize NVML: Driver/library version mismatch
https://www.cnblogs.com/duby0/p/17060960.html
https://zhuanlan.zhihu.com/p/94378201
(3.) 安裝NVIDIA驅動出現: An NVIDIA kernel module 'nvidia-drm'
https://zhuanlan.zhihu.com/p/135875408[Linux] Ubuntu 安裝、移除 NVIDIA 顯示卡驅動程式(Driver)教學# sudo apt-get install nvidia-driver-535
(這篇蠻清楚的)
最後這次我是採取用 apt-get 安裝的# sudo add-apt-repository ppa:graphics-drivers
# sudo apt-get update
# sudo apt-cache search nvidia-driver-*
# sudo reboot - CUDA:這個就非常重要了,因為跟上下兩個提到的都會互相依存,比如說 CUDA 10 就需要TensorFlow >= 1.13.0,然後驅動版本是自帶410.48 這樣就會把你第二步的440.82給蓋掉,這些都可以透過這個網站 https://developer.nvidia.com/cuda-toolkit-archive 來找到;另外附上網址與截圖,希望可以注意到裡面 cuda 版本跟驅動程式版本也是會有影響的,當下載好了以後,都是直接執行然後安裝的,要注意的是,一定要注意好 cuda 版本跟對應的驅動版本。
wget https://developer.download.nvidia.com/compute/cuda/12.2.1/local_installers/cuda_12.2.1_535.86.10_linux.run
sudo sh cuda_12.2.1_535.86.10_linux.run
sudo apt install nvidia-cuda-toolkit
/Developer/NVIDIA/CUDA-#.#
Do you accept the previously read EULA?
accept/decline/quit: accept
Install NVIDIA Accelerated Graphics Driver for Linux-x86_64 410.48?
(y)es/(n)o/(q)uit: n
Install the CUDA 10.0 Toolkit?
(y)es/(n)o/(q)uit: y
Enter Toolkit Location
[ default is /usr/local/cuda-10.0 ]:
Do you want to install a symbolic link at /usr/local/cuda?
(y)es/(n)o/(q)uit: y
Install the CUDA 10.0 Samples?
(y)es/(n)o/(q)uit: n
===========
= Summary =
===========
Driver: Not Selected
Toolkit: Installed in /usr/local/cuda-10.0
Samples: Not Selected - cuDNN:這個也是會跟上方有互相搭配,全名是 NVIDIA CUDA® Deep Neural Network library,請先到後面網址註冊個帳號,https://developer.nvidia.com/rdp/form/cudnn-download-survey;後面 nVIDIA GPU Cloud 也會需要用到 ... 當然這個也需要注意一下跟 cuda 版本的搭配;下載好了之後,就是把相關的檔案復制到 cuda 資料夾的對應目錄裡;這邊比較麻煩的就是沒辦法直接 wget 在 ubuntu 上直接用,得想辦法自己先下載了再上傳這樣 !
NVIDIA cuDNN Installation Guide
- Docker / nVIDIA Docker:接著是要安裝 docker,這兩個指令就可以搞定
sudo apt-get install curl
curl -sSL https://get.docker.com | sudo sh
接著看硬碟配置狀況做改動
ps faux | grep -i docker
sudo docker info
sudo systemctl stop docker
sudo rsync -avh /var/lib/docker/ /path/to/your/docker/
sudo vi /etc/docker/daemon.json
"data-root": "/path/to/your/docker", #加上這行
sudo systemctl daemon-reload
sudo systemctl start docker
sudo docker info
ps faux | grep -i docker
接著是要安裝 nvidia-docker2 (https://github.com/NVIDIA/nvidia-docker)
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
apt-get update
apt-get install nvidia-docker2
安裝 nvidia-container-runtime:https://github.com/nvidia/nvidia-container-runtime#docker-engine-setup
apt-get install nvidia-container-runtime
service docker restart
【超快速教學】如何在Ubuntu安裝Docker,使用官方推薦方式
更改 Docker 預設路徑
接著來補充一下在使用一些開源套件時很常碰到 cuda、cudnn、driver 跟 pytorch 等版本不一樣的問題 ! 請愛用 docker來解決,並且請到這兩個地方去找到並 pull 你會用到的版本
https://hub.docker.com/r/nvidia/cuda/tags
https://catalog.ngc.nvidia.com/orgs/nvidia/containers/cuda/tags
docker pull nvidia/cuda:11.6.1-cudnn8-runtime-ubuntu20.04 (舉例,然後就準備 run)
docker network ls
docker network inspect network_name (看看你現在有那些 docker 網路)
docker network connect network_name docker_name (這樣才有把你的docker加到同網路)
nvidia-docker run -it --name twman -m 32g -v /etc:/opt/etc -v /home/twman:/opt/data nvidia/cuda:11.6.1-cudnn8-runtime-ubuntu20.04 bash
(加 -v /etc 是懂的人就會懂,有時就是剛好只能用 docker 但不能 sudo 就是用起來不舒服,-m 則應該是可以避免偶爾跑下去會被 killed 的問題?)
apt-get install pip git vim htop screen libgl1-mesa-glx libglib2.0-0 -y
最後面那兩個 libgl1-mesa-glx libglib2.0-0 是為了避免以下錯誤
ImportError: libGL.so.1: cannot open shared object file: No such file or directory
ImportError: libgthread-2.0.so.0: cannot open shared object file: No such file or directory
adduser twman (新增帳號前記得先 root 做一下 apt-get update 跟 install 上面的;接著就是盡量新增一個普通帳號,然後切換過去吧,因為你實際佈署上線時,通常你不是 root)
su xxxx
cd /opt/data/ (再來,就是快點裝 conda 啦)
./Anaconda3-2024.02-1-Linux-x86_64.sh
conda create -n env_name python=3.8 (記得改名)
conda activate env_name
conda install pytorch=1.9.1 torchvision=0.10.1 torchaudio=0.9.1 cudatoolkit=11.1 -c pytorch -c nvidia
pip3 install torch==1.9.1+cu111 torchvision==0.10.1+cu111 torchaudio==0.9.1 -f https://download.pytorch.org/whl/torch_stable.html - python / anaconda:
這個就是需要到anaconda官網下載 https://www.anaconda.com/distribution/
wget https://repo.anaconda.com/archive/Anaconda3-2020.02-Linux-x86_64.sh
sh Anaconda3-2020.02-Linux-x86_64.sh
如果做好一台的環境後可以這樣做,來匯入匯出避免反覆設定相關套件
conda env export --name yourenv --file yourenv.yml
conda env create -f yourenv.ymlconda info --envs - Tensorflow:
conda install tensorflow==1.15.0 - Pytorch:
這個就應該是最簡單的了,直接看網頁上就能裝
https://pytorch.org/get-started/locally/
conda install pytorch torchvision cudatoolkit=10.0 -c pytorch
至於驗證版本等則是用這樣的指令 !
python -c "import torch; print(torch.__version__)"
1.3.0
python3 -c "import torch; print(torch.version.cuda)"
10.1.243
python3 -c "import torch; print(torch.backends.cudnn.version())"
7603
python -c "import torch; print(torch.cuda.is_available())"
True