作者RumiManiac (Rumi!)
看板DataScience
標題Re: [問題] 新手每次跑模型時都是CPU滿載
時間Mon May 6 13:45:48 2024
更多細節可以讀這篇,他整理得很不錯,內容幾乎都是正確的
https://www.cnblogs.com/marsggbo/p/11838823.html
※ 引述《fragmentwing (片翼碎夢)》之銘言:
: 題外話,之前cmd那邊查cuda是11.8 設定找到的應用程式是11.6 torch是+cu113
: 這樣子竟然還能跑到想更新pytorch版本時才發現
nvidia-smi 查到的是 CUDA driver 版本
一般我們裝的 CUDA 指的是 CUDA runtime library (e.g. libcudart.so)
CUDA driver 提供 low-level API,而 CUDA runtime library 提供 high-level API
而 nvcc 是 CUDA compiler,個人認為跟上面的不完全相關,
只有在安裝 CUDA toolkit 的時候會整包一起下載,
此時的 nvcc 跟 CUDA runtime library 才會相同
到底有多少工具跟 "CUDA" 有關係,可以參考以下連結的 Table 5
https://docs.nvidia.com/cuda/cuda-installation-guide-linux/#meta-packages
所以我不怎麼推薦用 nvcc 去檢查 CUDA 版本...它甚至通常不需要下載
只不過偶爾還是會有神人寫 CUDA program 需要自己去編譯
PyTorch 是把 CUDA runtime library, cuDNN, 還有 NCCL 直接包在 package 裡面
https://discuss.pytorch.org/t/install-pytorch-with-cuda-12-1/174294/2
所以裝 PyTorch 才會不用先安裝 CUDA 那堆有的沒的
(反觀很久以前裝 TensorFlow 之前還要先裝 CUDA, cuDNN 版本號看半天...)
: --
: ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 42.77.107.182 (臺灣)
: ※ 文章網址: https://www.ptt.cc/bbs/DataScience/M.1712815245.A.08A.html
: 推 DaOppaiLoli: cmd 查的通常會是最高支援的版本 04/13 07:30
: → fragmentwing: 原來是這樣 我一直以為是我裝到哪個就是哪個 因為之 04/13 14:10
: → fragmentwing: 前看人家教學時都是要看cuda版本左邊的那個數字去找 04/13 14:10
: → fragmentwing: 相容性 原來根本可以跳過這步XD 04/13 14:10
: 推 DaOppaiLoli: 一個機器也可以多個 CUDA 共存,理論上 driver 支援 04/13 15:15
: → DaOppaiLoli: 的版本要大於實際安裝函式庫的版本,然後要大於應用 04/13 15:15
: → DaOppaiLoli: 程式的版本 04/13 15:15
: → DaOppaiLoli: 像你就是 driver 支援到 11.8,函式庫裝 11.6,然後 04/13 15:16
: → DaOppaiLoli: torch 是 11.3 04/13 15:16
: → DaOppaiLoli: 雖然還是建議都裝一樣的比較好 04/13 15:16
: → fragmentwing: 原來是剛好裝得有相容性 04/13 17:08
: → fragmentwing: 多個cuda共存是指同一張gpu嗎?這樣torch運行時會怎 04/13 17:08
: → fragmentwing: 麼選擇使用的cuda啊? 04/13 17:08
: 推 DaOppaiLoli: 在同一台機器,無論單張或多張卡,都可以有多個不同 04/15 09:01
: → DaOppaiLoli: 版本的 CUDA 函式庫共存,例如 Docker 或 Conda 就 04/15 09:01
: → DaOppaiLoli: 能做到這種多版本 CUDA 的管理,像這張圖裡 nvcc 告 04/15 09:01
: → DaOppaiLoli: 訴我們 CUDA 是 11.8 版,但 nvidia-smi 顯示的是 1 04/15 09:01
: → DaOppaiLoli: 2.2 版 04/15 09:01
nvidia-smi 跟 nvcc 看到的是不同的東西
不過確實是可以有多個不同版本的 CUDA runtime library 共存
它安裝起來看起來會像是這樣
(在 Linux)
/usr/local/cuda-11.8/
/usr/local/cuda-12.1/
/usr/local/cuda -> /usr/local/cuda-12.1/
(Windows 也行)
如果要降版使用,就改變 symbolic link 或是環境變數 (PATH, LD_LIBRARY_PATH) 即可
: → DaOppaiLoli: https://i.imgur.com/XLFRpgr.jpg 04/15 09:01
: → DaOppaiLoli: 至於 PyTorch 是如何判斷版本我是不太確定,但他可 04/15 09:01
: → DaOppaiLoli: 能會根據 nvcc 或 nvml 之類的來判斷,其他有些函式 04/15 09:01
: → DaOppaiLoli: 庫則可能會看 CUDA_HOME 環境變數來判斷 04/15 09:01
: → RumiManiac: nvidia-smi 查到的是 CUDA driver 版本,而 nvcc 查到 05/06 13:15
: → RumiManiac: 的是 CUDA compiler 版本,真正的 CUDA runtime lib 05/06 13:16
: → RumiManiac: 是根據不同安裝方式對應不同的路徑 e.g. /usr/local/ 05/06 13:16
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 59.127.105.44 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/DataScience/M.1714974351.A.0C3.html
→ yoyololicon: 以前pytorch 也是cuda toolkit 什麼的另外載 好像2. 05/06 16:17
→ yoyololicon: 0之後某版開始就整包裝了 05/06 16:17
推 retest75: 借串想問一下 我看很多安裝教學都有說PyTorch跟cuda 都 05/06 16:57
→ retest75: 要裝,而且要裝對應的版本,但我測試後發現PyTorch裝完 05/06 16:57
→ retest75: 後沒有特別去安裝cuda /以及cuda 版本跟PyTorch不對應 05/06 16:57
→ retest75: 這兩種狀況好像都能正常的抓到顯卡,這是什麼原因? 05/06 16:57
→ retest75: 因為PyTorch安裝過程會自動把需要的cuda 一併安裝嗎? 05/06 16:57
→ lycantrope: 不知道這篇在寫什麼... 05/06 21:16
→ RumiManiac: @yoyololicon 謝謝補充,整個打包的確是新版才有的 05/07 04:52
→ RumiManiac: 這也是以前 conda install 裡面有 cudatoolkit 的原因 05/07 04:54
→ RumiManiac: @retest75 對,你講的東西就是我這篇第36行講的 05/07 04:55
→ RumiManiac: @lycantrope 哪邊寫得不好歡迎批評指正 05/07 04:57
推 retest75: 原來!沒仔細看內文,感謝! 05/07 13:55
推 wuyiulin: 原來是這樣,太神啦!解答我從碩班以來的疑惑。 05/07 18:30
推 DaOppaiLoli: 推,感謝糾正觀念錯誤 05/08 09:26
推 fragmentwing: 推 05/08 16:23