買了一張 Sapphire Nitro+ Radeon RX580 的二手顯卡, 終於第一次成功在自己的電腦上跑 gpu 版的 tensorflow, 開心!
想在自己的電腦上玩機器學習, 最熱門的做法當然是買 nVidia 的顯卡。 可是我有 好、 幾、 次 不愉快的 nVidia 經驗, 所以這次改買 AMD 的 radeon 系列顯卡。 先買了一張二手 RX VEGA 64, 完全不會動 :-( 最後改買這張二手 rx580 才終於成功。
把龐大的顯卡很驚險地正正好塞進電腦、 再接上顯卡的額外電源, 開機之後,
內顯自動失效, 螢幕必須接這張顯卡才看得見。
用 sudo lshw -C video
查看得到:
*-display description: VGA compatible controller product: Ellesmere [Radeon RX 470/480/570/570X/580/580X/590] vendor: Advanced Micro Devices, Inc. [AMD/ATI] physical id: 0 bus info: pci@0000:01:00.0 version: e7 width: 64 bits clock: 33MHz capabilities: vga_controller bus_master cap_list rom configuration: driver=amdgpu latency=0 resources: irq:127 memory:90000000-9fffffff memory:a0000000-a01fffff ioport:3000(size=256) memory:a0400000-a043ffff memory:c0000-dffff
所以我猜本篇大概也適用於其他品牌的 rx570/rx580/rx590 。 專屬於 AMD radeon GPU 的加速函式庫是 ROCm, 類似 nvidia 的 cuda。 ROCm 知名度低很多, 但重點它是開放原始碼軟體。 根據 官方的硬體支援清單, (臺灣比較容易買到的) rx580 屬於 「也許可用但官方並不正式支援」 的型號。 以下在 linux mint 20 ulyana, xfce 版 上面, 全程以 sudo bash (root) 的身份執行。 主要參考 這篇 跟 這篇 再加上一些搜尋。
首先要確認系統裡沒有其他版本的 rocm。 基本上沒裝過 rocm 的系統都沒問題; 至於我, 雖然先前試著為 vega 安裝過 rocm, 但因為我採用神奇的 btrfs 所以只需要倒退回一個乾淨的 snapshot 即可從零開始。
apt update apt install libnuma-dev wget -q -O - http://repo.radeon.com/rocm/rocm.gpg.key | sudo apt-key add - echo 'deb [arch=amd64] http://repo.radeon.com/rocm/apt/3.5.1/ xenial main' | sudo tee /etc/apt/sources.list.d/rocm.list apt update apt install rocm-dkms
注意: 上面的 xenial 不要改成 focal, 那個 repo 真的就只有 xenial 版。 為什麼指定 3.5.1 版? 因為在較新的 ROCm 4.x 當中, AMD 已經不再支援 rx570/rx580/rx590 系列的硬體。 [1、 2] 下載速度超慢。 安裝過程會自動重新編譯 kernel 及重製 initrd。 我的 kernel 正好是文中所建議的 5.4.0-42-generic , 所以不需要降級, 一切順利。 完成後, 在 /lib 底下會看見兩個最新的檔案 initrd.img-5.4.0-42-generic 跟 vmlinuz-5.4.0-42-generic 。 因為我不是用 grub2 而是用 extlinux, 所以需要手動把 initrd.img-5.4.0-42-generic 複製到開機分割區底下正確的位置 (順便改名為 initrd.img-5.4.0-42-rocm) 並且修改 extlinux.conf 開機選單。
如果一切順利的話, 重開機之後即可用 /opt/rocm/bin/rocminfo
跟 /opt/rocm/opencl/bin/clinfo
確認底層的驅動程式可以顯示GPU/顯卡的硬體資訊。
再來當然不要直接安裝 tensorflow 等等,
而是要透過 docker, 既可偷懶又比較容易將不同的環境需求分開管理。
在 dockerhub 上找到 rocm/tensorflow ,
挑選 版本最接近的 tag,
這樣執行: docker run -it --name rocmtf
-v /home/ckhung/work/rocmtf/:/shared/ -p 8888:8888 -p 6006:6006
--device=/dev/kfd --device=/dev/dri --group-add video
rocm/tensorflow:rocm3.5-tf2.2-dev
進入 container 以後:
cd /root/benchmarks/scripts/tf_cnn_benchmarks/
然後 time python3 tf_cnn_benchmarks.py --num_gpus=1
--batch_size=32 --model=resnet50
實測速度。
第一次執行好像花了四分多, 這次則得到:
total images/sec: 43.90
花了 1 分 35 秒。
另外, 照這
這個初學者教學 也成功地把 MNIST 的訓練流程走一遍。
還可以在 docker 裡面啟動 jupyter notebook:
jupyter notebook --ip=0.0.0.0 --allow-root &s;
然後就可以從 host 的瀏覽器連向 localhost:8888 。
詳見 這個問答。
改試 rocm/tensorflow 較新的 tag, rocm4.1-tf2.4-dev 跟 rocm3.10-tf2.3-dev 進入之後用 rocminfo 查詢硬體資訊看似 OK, 但實測 tf_cnn_benchmarks.py 時則出現 hipErrorNoBinaryForGpu 的錯誤訊息, 看來新版的 rocm 就是無法搭配舊版的底層驅動程式。
另外又搜尋到
rocm/rocm-terminal 這樣執行: docker run -it
--name trocm --device=/dev/kfd --device=/dev/dri --group-add video
rocm/rocm-terminal
。
進入 container 以後 sudo bash
不需要密碼即可變身為 root。
一樣可用 rocminfo
跟 /opt/rocm/opencl/bin/clinfo
確認 container 跟底層的驅動程式溝通良好。
搜尋不到如何查詢目前環境下的 rocm 的版本。
找到 這個
好像是它的 Dockerfile 原始碼...
如果把其中 4.x 版的地方降級成 3.5.1 版,
是不是就可以拿來進一步安裝 tensorflow 以外的深度學習框架呢?
(例如 PyTorch 或 keras/theano 等等)
算了, 以後再研究。
最近 挖礦熱潮讓顯卡價格飆漲, 希望跟這款舊版的 (甚至二手的) 沒有太大關係。 不過為保險起見, 想 ROCm 的讀者們還是趕快先去為你的電腦買一張 rx5[789]0 顯卡吧!
https://github.com/ROCmSoftwarePlatform/rocBLAS/issues/1172
回覆刪除RX580 的計算結果可能有問題
另外,VEGA 64 有錯誤訊息嗎
對啊, 如那個 issue 所說, ROCm 3.7 以上會有問題。 所以我參考的那兩篇才推薦 3.5.1 吧。 這個較舊的版本到目前為止沒有看到問題。
回覆刪除VEGA 64 感覺完全沒通電。 還是透過內顯看螢幕。 sudo lshw -C video 也只看到內顯。 買到瑕疵品了。
我也要來買一片RX580來玩!!
回覆刪除您好, 请问您的CPU型号是多少?我显卡的也是580,但是CPU是三代IVY 酷睿,ROCM官网查了, 说只支持四代HASWELL 以上,在安装完ROCM-DKMS 后,调用rocminfo 会报错,好像是跟PCIe atomics 有关,现在还在考虑是不是换个CPU 主板
回覆刪除硬體我沒什麼研究耶。 只知道我的 CPU 是 intel i5-9400 , 而且寒假在另一個城市,無法測試。 用你說的關鍵詞搜尋到這個, 不知有沒有幫助? https://github.com/RadeonOpenCompute/ROCm/issues/827
刪除我换了个主板,升级到4代处理器就可以了!感谢,和大佬学习ML
刪除