Arch LinuxでAMD GPU (RDNA2) を使う: 2022
概要
買いました。ついに。RX6600XT を。
いろいろな事情[1][2] があって AMD を選びましたが、なにぶん最新の機種なので情報があまり多くありません。さらに、ドライバの選択肢が複数あってかなり混乱します。この記事は、RDNA2 アーキテクチャ、特に RX 6000 番台の AMD GPU を使う際、個人的にどのドライバ・設定を使うのがベストなのかを調べた結果です。
試したマシンの構成:
要素 | モデル |
---|---|
CPU | Intel Core i7-11700K |
GPU | AMD Radeon RX 6600 XT |
OS | Arch Linux |
Kernel | 6.2.6-zen1-1-zen |
カーネルモジュール
amdgpu
が自動でロードされるはずです。
Xorg
ArchWiki の通り、xf86-video-amdgpu
を入れます。
VAAPI / VDPAU
同じく Wiki 通りにlibva-mesa-driver
とmesa-vdpau
。環境変数は以下の通り。
LIBVA_DRIVER_NAME=radeonsi
LIBVA_DRIVER_PATH=/usr/lib/dri/radeonsi_drv_video.so
VDPAU_DRIVER=radeonsi
OpenCL
ドライバが 4 種類あって狂いそうになります。ArchWiki 英語版のDaVinci Resolve のページなどを参照するとよいかもしれません。
ドライバ | オープンソース | OpenCL Version | 備考 |
---|---|---|---|
opencl-mesa |
○ | 1.1 (※) | 汎用ドライバ? |
opencl-amd (AUR) |
△(混合) | 2.1 | 全部入り、AUR |
rocm-opencl-runtime |
○ | 2.1 | 今回使うやつ |
opencl-legacy-amdgpu-pro (AUR) |
× | 2.1 | 古めのカード用 |
結論からいうと、RDNA2 のカードで OpenCL を使うには rocm-opencl-runtime
をインストールするのがよさそうです。
opencl-mesa
一見それっぽい名前ですが、このドライバはサポートしている OpenCL のバージョンが 1.2 と低いです。どういう場面で有用になるのかよくわかっていません。
※ OpenCL バージョンについて
clinfo
を確認すると OpenCL 1.1 と報告されますが、実際は OpenCL 1.2 をサポートしているようです(参照)。以下の設定でバージョンをオーバーライドできます。
CLOVER_PLATFORM_VERSION_OVERRIDE=1.2
CLOVER_DEVICE_VERSION_OVERRIDE=1.2
CLOVER_DEVICE_CLC_VERSION_OVERRIDE=1.2
opencl-amd(AUR)
この AUR パッケージは後述する新旧の OpenCL ドライバに加え、後述する HIP のランタイムも含めた色々なものを同梱しています。AMD が公式サイトで配っている.deb
をまるっと持ってきているようです。
rocm-opencl-runtime
新しいオープンソースのドライバである、ROCm OpenCL Runtimeだけを Arch Linux 側でビルドしたのがrocm-opencl-runtime
パッケージです。Arch Linux 公式のcommunity
リポジトリからインストールできます。今回はこれを使いました。
opencl-legacy-amdgpu-pro(AUR)
おそらく古めのカード用のドライバ。RDNA2 では使いません。
OpenGL
ドライバが 2 種類ありますが、Wiki に記載がある通り、基本的にはmesa
で十分です。
必要であれば、プロプライエタリのamdgpu-pro-oglp
(AUR) ドライバとも共存が可能です。切り替えはprogl
プレフィックスコマンドで行います。
progl vk_pro ffmpeg -loglevel verbose -hwaccel auto -vaapi_device /dev/dri/renderD128 -i input.mp4 -c:v h264_amf -rc 1 -b:v 8M output.mp4
Vulkan
ドライバが 3 種類あります。
ドライバ | オープンソース | RT 対応 |
---|---|---|
amdvlk |
○(AMD が管理) | ○ |
vulkan-radeon |
○(Mesa が管理)、通称 RADV | ○ |
vulkan-amdgpu-pro |
× | ○ |
amdvlk
AMD 公式が出しているオープンソースのドライバ。DirectX と共通のライブラリが使われていたりして面白そうですが、vulkan-radeon
と比べると、安定性に欠ける印象です[3]。
vulkan-radeon(radv)
Mesa 傘下で開発されているオープンソースドライバ。性能も安定性も高く、基本的にはこれを使っておけば問題ないでしょう。
ちなみに、かの Steam Deck で動いているのもこのドライバで、同機の開発元の Valve からは積極的なコミットがあるようです(別の言い方:みなさんがゲーム機に注ぎ込んだお金が、喜ばしいことに、オープンソースドライバの開発に流れている)
vulkan-amdgpu-pro(amdvlk-pro)
プロプライエタリドライバ。場合により必要になります。
Vulkan: 結局どれがいいの?
評判を見る限り、vulkan-radeon
+ vulkan-amdgpu-pro
を入れておいて、用途に応じて切り替えるのがよさそうです(OpenGL と同様、Vulkan でも複数のドライバが共存できます)。デフォルトでどちらを使用するかは環境変数で指定します。
vulkan-radeon
をデフォルトにする設定は以下の通り。
DISABLE_LAYER_AMD_SWITCHABLE_GRAPHICS_1=1
VK_ICD_FILENAMES=/usr/share/vulkan/icd.d/radeon_icd.i686.json:/usr/share/vulkan/icd.d/radeon_icd.x86_64.json
RADV_PERFTEST=rt,gpl,nv_ms # Ray Tracing等の有効化
切り替えの際には、amd-vulkan-prefixes
(AUR) をインストールしておくと、OpenGL の場合と同様、プレフィックスコマンドで切り替えができます。
Vulkan: レイトレの確認
↓ のデモで確認できます。
HIP
AMD / NVIDIA 両対応版の CUDA みたいなやつです。Blender で GPU 支援を受けるために必要です(後述)。rocm-hip-runtime
をインストールすると利用できます。
AMF
Advanced Multimedia Framework(AMF)は AMD GPU 向けのプロプライエタリエンコーダで、ffmpeg / OBS などが対応しています。利用にはamf-amdgpu-pro
(AUR) のほか、OpenGL / Vulkan のプロプライエタリドライバが必要です。
progl vk_pro ffmpeg -loglevel verbose -hwaccel auto -vaapi_device /dev/dri/renderD128 -i input.mp4 -c:v h264_amf -rc 1 -b:v 8M output.mp4
機械学習系
PyTorch と Tensorflow の ROCm 版が利用できます。ただし、以下に述べる準備が必要です。
環境変数の設定
HSA_OVERRIDE_GFX_VERSION=10.3.0
環境変数の説明
HSA_OVERRIDE_GFX_VERSION
最新の ROCm (5.4.3)でも、すべてのツールにおいて RDNA2 のすべてのカードが公式にサポートされているわけではありません。具体的には gfx1030(Navi 21, RX 6800 / 6900)のみが全体でサポートされており、そのほかのカード(gfx1031, 1032)は gfx1030 として認識させることで動作する、という状態です。このための変数がHSA_OVERRIDE_GFX_VERSION
です。
参照:
依存パッケージのインストール
rocm-ml-sdk
をインストールし、あとはフレームワークごとの指示に従います。
PyTorch
pip3 install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/rocm5.1.1
Tensorflow
pip3 install tensorflow-rocm
PyTorch、Tensorflowともに Docker イメージも用意されているので、そちらも選択できます。
各アプリケーションでの Tips
Blender
Cycles X HIP
Blender 3.2 で HIP のサポートが付加され、AMD GPU でも NVIDIA GPU と同様のハードウェア支援を受けられるようになりました。rocm-hip-runtime
をインストールすることで、ROCm の HIP ランタイムが使えます。
ProRender
もう一つ、AMD が出している ProRender というエンジンがあります。こちらは GitHub から最新のリリースを落としてきて、そのままアドオンとしてインストールすれば使えます。
設定をいろいろいじってみましたが、どちらも問題なく動作しています。
DaVinci Resolve
ArchWiki 日本語版には OpenGL のプロプライエタリドライバ(amdgpu-pro-oglp
)が必要とありますが、英語版には(新しめのカードであれば)mesa
でも動くと記載されています。
ちなみに手元ではどちらも動きませんでした
PyTorch
GPU の認識確認
> python3
Python 3.10.5 (main, Jun 6 2022, 18:49:26) [GCC 12.1.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import torch
>>> print(torch.cuda.is_available())
True
CUDA じゃないのに CUDA なんかい
Tensorflow
同じく確認
> python3
Python 3.10.5 (main, Jun 6 2022, 18:49:26) [GCC 12.1.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import tensorflow
2022-07-27 12:13:20.244335: I tensorflow/core/util/util.cc:169] oneDNN custom operations are on. You may see slightly different num
erical results due to floating-point round-off errors from different computation orders. To turn them off, set the environment vari
able `TF_ENABLE_ONEDNN_OPTS=0`.
>>> tensorflow.config.list_physical_devices(device_type='GPU')
[PhysicalDevice(name='/physical_device:GPU:0', device_type='GPU')]
謎のメッセージ(Successful NUMa node...
)が出る場合、こちらも参照
そのほか便利なソフトウェア
rocm-smi
rocm-smi-lib
パッケージで、/opt/rocm/bin/rocm-smi
にインストールされます。
======================= ROCm System Management Interface =======================
================================= Concise Info =================================
GPU Temp AvgPwr SCLK MCLK Fan Perf PwrCap VRAM% GPU%
0 49.0c 4.0W 0Mhz 96Mhz 0% auto 135.0W 11% 0%
================================================================================
============================= End of ROCm SMI Log ==============================
nvidia-smi
っぽい?
radeontop
GPU 使用率等を確認できます。
nvtop
上とほぼ同じ。NVIDIA / AMD どちらでも使えるモニタリングツール。
LACT
Rust で書かれた AMD GPU 向けのユーティリティ。モニタリング・ファン制御・オーバークロック等の機能があります。
amdgpud
こちらも Rust 製で、上と同様のユーティリティ。
ただ、私の環境ではファン回転数をいじるとコイル鳴きがうるさくなりました。
Discussion
かなり参考になりました!ありがとうございます