🧬

Arch LinuxでAMD GPU (RDNA2) を使う: 2022

2022/07/10に公開
1

概要

買いました。ついに。RX6600XT を。

https://www.asrock.com/Graphics-Card/AMD/Radeon RX 6600 XT Challenger D 8GB OC/index.jp.asp

いろいろな事情[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-drivermesa-vdpau。環境変数は以下の通り。

/etc/environment
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プレフィックスコマンドで行います。

ffmpeg
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 傘下で開発されているオープンソースドライバ。性能も安定性も高く、基本的にはこれを使っておけば問題ないでしょう。

https://linuxreviews.org/The_Best_Linux_Vulkan_Driver_For_AMD_GPUs:_Mesa_RADV_vs_AMDVLK

ちなみに、かの Steam Deck で動いているのもこのドライバで、同機の開発元の Valve からは積極的なコミットがあるようです(別の言い方:みなさんがゲーム機に注ぎ込んだお金が、喜ばしいことに、オープンソースドライバの開発に流れている)

vulkan-amdgpu-pro(amdvlk-pro)

プロプライエタリドライバ。場合により必要になります。

Vulkan: 結局どれがいいの?

評判を見る限り、vulkan-radeon + vulkan-amdgpu-proを入れておいて、用途に応じて切り替えるのがよさそうです(OpenGL と同様、Vulkan でも複数のドライバが共存できます)。デフォルトでどちらを使用するかは環境変数で指定します。

vulkan-radeonをデフォルトにする設定は以下の通り。

/etc/environment
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: レイトレの確認

↓ のデモで確認できます。

https://github.com/SaschaWillems/Vulkan

vulkan-radeon

vulkan-amdgpu-pro

HIP

AMD / NVIDIA 両対応版の CUDA みたいなやつです。Blender で GPU 支援を受けるために必要です(後述)。rocm-hip-runtimeをインストールすると利用できます。

AMF

Advanced Multimedia Framework(AMF)は AMD GPU 向けのプロプライエタリエンコーダで、ffmpeg / OBS などが対応しています。利用にはamf-amdgpu-pro(AUR) のほか、OpenGL / Vulkan のプロプライエタリドライバが必要です。

ffmpeg
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 版が利用できます。ただし、以下に述べる準備が必要です。

環境変数の設定

/etc/environment
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です。

参照:

https://github.com/RadeonOpenCompute/ROCm/issues/1756

依存パッケージのインストール

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

PyTorchTensorflowともに Docker イメージも用意されているので、そちらも選択できます。

各アプリケーションでの Tips

Blender

Cycles X HIP

Blender 3.2 で HIP のサポートが付加され、AMD GPU でも NVIDIA GPU と同様のハードウェア支援を受けられるようになりました。rocm-hip-runtimeをインストールすることで、ROCm の HIP ランタイムが使えます。

https://docs.blender.org/manual/en/latest/render/cycles/gpu_rendering.html#hip-amd

setting

ProRender

もう一つ、AMD が出している ProRender というエンジンがあります。こちらは GitHub から最新のリリースを落としてきて、そのままアドオンとしてインストールすれば使えます。

https://www.amd.com/ja/technologies/radeon-prorender

https://github.com/GPUOpen-LibrariesAndSDKs/RadeonProRenderBlenderAddon

設定をいろいろいじってみましたが、どちらも問題なく動作しています。

rendering

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...)が出る場合、こちらも参照

https://github.com/tensorflow/tensorflow/issues/42738

そのほか便利なソフトウェア

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

https://github.com/clbr/radeontop

GPU 使用率等を確認できます。

nvtop

https://github.com/Syllo/nvtop

上とほぼ同じ。NVIDIA / AMD どちらでも使えるモニタリングツール。

LACT

https://github.com/ilya-zlobintsev/LACT

Rust で書かれた AMD GPU 向けのユーティリティ。モニタリング・ファン制御・オーバークロック等の機能があります。

LACT - info

LACT - OC

amdgpud

https://github.com/Eraden/amdgpud

こちらも Rust 製で、上と同様のユーティリティ。

amdfand

amdmond

ただ、私の環境ではファン回転数をいじるとコイル鳴きがうるさくなりました。

脚注
  1. ドライバのオープンソース比率が高い ↩︎

  2. Wayland 対応が確実 ↩︎

  3. swayWLR_RENDER=vulkanで起動しようとして、動作しませんでした ↩︎

Discussion

macchkymacchky

そのほか便利なソフトウェア

かなり参考になりました!ありがとうございます