🧬

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

2022/07/09に公開約9,100字

概要

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

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

いろいろな事情[1][2]があって AMD を選びましたが、なにぶん最新の機種なので情報があまり多くありません。さらに、API によってはドライバの選択肢が複数あってかなり混乱します(後述)。この記事は、RDNA2 アーキテクチャ、特に RX 6000 番台の AMD GPU を使う際、個人的にどのドライバ・設定を使うのがベストなのかを調べた結果です。

試したマシンの構成:

要素 モデル
CPU Intel Core i7-11700K
GPU AMD Radeon RX 6600 XT
OS Arch Linux
Kernel 5.18.9-zen1-1-zen

ドライバの選択

カーネルモジュール

amdgpuが自動でロードされるはずです。

Xorg

ArchWiki 通りにxf86-video-amdgpuを入れます。

VAAPI / VDPAU

同じく Wiki 通りにlibva-mesa-drivermesa-vdpau

OpenCL

ドライバが 4 種類あって狂いそうになります。ArchWiki 英語版のDaVinciResolve のページの表がわかりやすいです。

ドライバ オープンソース OpenCL Version 備考
opencl-mesa 1.1 (※) 汎用ドライバ?
opencl-amd △(混合) 2.1 全部入り
rocm-opencl-runtime 2.1 rocm-archでメンテ
opencl-legacy-amdgpu-pro × 2.1 古めのカード用

結論からいうと、RDNA2 のカードで OpenCL を使うぶんには rocm-opencl-runtimeのインストールだけで済みます。

opencl-mesa

このドライバだけ、サポートする OpenCL のバージョンが低いです。どういう場面で有用になるのか謎です。

※ 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

名前こそ OpenCL ですが、新旧の OpenCL ドライバのみならず、後述する HIP のランタイムも含めた色々なものを同梱しているパッケージです。AMD が公式サイトで配っている.debをまるっと持ってきて再パッケージする感じのようです。

rocm-opencl-runtime

これに対して、新しいオープンソースのROCm OpenCL Runtimeを手元でビルドするのがrocm-opencl-runtimeです。このほかにも、rocm-archでは有志の方が積極的に ROCm 関連の PKGBUILD をメンテナンスしてくれています。

https://github.com/rocm-arch/rocm-arch

自分が最終的にインストールしたのはrocm-opencl-runtimeでした。

OpenGL

Wiki の通り。mesaでだいたい済みます。

プロプライエタリのamdgpu-pro-libglとも共存が可能です。切り替えはproglプレフィックスで行います。

Vulkan

ドライバが 3 種類あります。

ドライバ オープンソース RT 対応
amdvlk ○(AMD が管理) ×
vulkan-radeon ○(Mesa が管理)、通称 RADV
vulkan-amdgpu-pro ×

amdvlk

レイトレーシング非対応。特に強みはないです。

vulkan-radeon

Mesa 21.3 でレイトレーシングに対応しました。レイトレを除いたパフォーマンスは最も優秀(らしい)です。

https://linuxreviews.org/The_Best_Linux_Vulkan_Driver_For_AMD_GPUs:_Mesa_RADV_vs_AMDVLK

vulkan-amdgpu-pro

別名:amdvlk-pro

プロプライエタリドライバ。試した限り、レイトレーシングでは最強です。

結局どれがいいの?

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

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 # RADV Ray Tracingの有効化

vulkan-amdgpu-proとの切り替えのため、amd-vulkan-prefixesをインストールすると便利です。たとえばvulkan-amdgpu-proで steam を起動するなら:

vk_pro steam

動作確認

レイトレーシング等は ↓ のデモで確認できます。

https://github.com/SaschaWillems/Vulkan

vulkan-radeon

vulkan-amdgpu-pro

HIP

AMD 版の CUDA みたいなやつです。Blender をいい感じに使うために必要です(後述)。

先述のopencl-amdですべてインストールするか、rocm-hip-runtimeで必要なぶんだけ取ってくるかを選べます。おすすめは後者です。

AMF

Advanced Multimedia Framework(AMF)は AMD GPU 向けのプロプライエタリエンコーダで、Linux でも ffmpeg などが対応しています。

ArchWiki にはamf-amdgpu-proをインストールすればよいと記載がありますが、手元ではなぜか動作しませんでした。

(2022/07/27 追記)

amf-amdgpu-pro-fixをインストールすると動作しました。

ffmpeg
vk_pro ffmpeg -hwaccel auto -vaapi_device /dev/dri/renderD128 -i input.mp4 -vf scale=-1:480 -r 12 -c:v h264_amf -ar 16k -f mp4 -rc 0 -qp_b 22 -qp_i 22 -qp_p 22 -quality 0 output.mp4

機械学習系

(2022/07/27 追記)

PyTorch と Tensorflow のビルド済み ROCm 版 パッケージが pip からインストールできます。が、以下に述べる準備が必要です。

環境変数の設定

はじめに、以下の環境変数を設定しておきます。

/etc/environment
HSA_OVERRIDE_GFX_VERSION=10.3.0
AMDGPU_TARGETS=gfx1030
環境変数の説明
HSA_OVERRIDE_GFX_VERSION

最新の ROCm (5.1.2)でも、すべてのツールにおいて RDNA2 のすべてのカードが公式にサポートされているわけではありません。具体的には gfx1030(Navi 21, RX 6800 / 6900 Series)のみが全体でサポートされており、そのほかのカード(gfx1031, 1032)は認識をオーバーライドさせることで動作する、という状態です。このための変数がHSA_OVERRIDE_GFX_VERSIONです。

参照:

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

AMDGPU_TARGETS

依存パッケージをビルドする際、環境変数でビルド対象のカードを限定し、リソースを節約できる場合があります。特にrocblasはフルでビルドするとメモリを鬼のように食いつぶすので、この設定がほぼ必須になります(32GB で使用率 100%を確認)。

参照:

https://github.com/rocm-arch/rocm-arch#recommendations-for-building-from-source

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

次に、AUR にあるpython-pytorch-rocmtensorflow-rocmの依存関係を参考に、必要なパッケージをインストールします。最低でもrocm-hip-sdkmiopen-hipあたりが必要になると思います。

あとはフレームワークごとの指示に従います。

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 と同様のハードウェア支援を受けられるようになりました。最新の GPU では ROCm の HIP ランタイムが使えます。

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

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-libgl)が必要とありますが、英語版には(新しめのカードであれば)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 使用率等の基本情報を確認できます。

amdgpud

https://github.com/Eraden/amdgpud

Rust で書かれた AMD GPU 向けのユーティリティで、複数のデーモンからなります。モニタリング・ファン制御・オーバークロックに使えます。

name feature
amdmond モニタリング
amdfand ファン制御
amdvold 電圧制御・OC
amdguid GUI フロントエンド

amdfand

amdmond

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

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

  2. Wayland 対応が確実 ↩︎

Discussion

ログインするとコメントできます