🐧

UbuntuにAMDGPUのドライバーをインストールしようとしたらコケたお話

2022/09/03に公開

自宅のUbuntuマシンを22.04(Jammy Jerryfish)にアップデートし、AMD製のグラフィックカードが挿さっているのでAMD謹製の公式ドライバーをインストールしようとしたらつまずいたので解決方法を日本語で載せておこうと思いました。

Radeon Software for Linuxってなに

https://www.amd.com/ja/support/kb/release-notes/rn-amdgpu-unified-linux-22-20
AMDが自社製グラフィックカード(GPU)であるRadeonシリーズ向けに開発した公式ドライバーです。
OpenGLやらGPGPU向けのROCmなどをまとめて入れてくれるようです。下記リンクが参考になりました。ありがとうございます。
https://zenn.dev/haxibami/articles/archlinux-amd-gpu#blender
Windows、Mac OS向けはもちろんのことLinux向けには以下のディストリビューションがサポートされています。

  • Ubuntu 20.04.5 HWE
  • Ubuntu 22.04 and 22.04.1 HWE
  • RHEL 7.9
  • RHEL 8.6
  • RHEL 9.0
  • SLED/SLES 15 SP 3

Ubuntu22.04にアップデートしたのでいけるやんけと思いインストールすることに。

検証環境は以下です。

要素 モデル
CPU AMD Ryzen 5 2600
GPU Radeon RX Vega 56
OS Ubuntu 22.04
Kernel 5.15.0-46-generic

ドライバーをインストールする

インストールはかんたんです。ざっくりと流れを載せておきますが、詳細はリンクを参照してください。
https://amdgpu-install.readthedocs.io/en/latest/

  1. リンク先で自分のディストリビューションを選択するとamdgpu-install-VERSION.{deb,rpm}ファイルがダウンロードされます
  2. それぞれのコマンドを実行することでドライバーをインストールするamdgpu-installコマンドがインストールされます
$ cd ~/Downloads
# For Ubuntu:
$ sudo apt-get install ./amdgpu-install-VERSION.deb
$ sudo apt-get update
# For RHEL:
$ sudo yum install ./amdgpu-install-VERSION.rpm
# For SLE:
$ sudo zypper install ./amdgpu-install-VERSION.rpm
  1. あとは次をターミナルで叩くだけでドライバーのインストールが始まります
    amdgpu-install

、、、はずだったんですがこんなエラーが出てインストールできないという自体に陥りました。

The following packages have unmet dependencies:
 rocm-llvm : Depends: python but it is not installable
             Depends: libstdc++-5-dev but it is not installable or
                      libstdc++-7-dev but it is not installable
             Depends: libgcc-5-dev but it is not installable or
                      libgcc-7-dev but it is not installable
             Recommends: gcc-multilib but it is not going to be installed
             Recommends: g++-multilib but it is not going to be installed
E: Unable to correct problems, you have held broken packages.

rocm-llvmというAMDのGPUでGPGPUするためのrocm用のllvmを入れるときの依存関係でエラーが起きているということでした。

解決方法

解決には下記リンクが参考になりました。
https://github.com/RadeonOpenCompute/ROCm/issues/1713#issuecomment-1193332549

大まかな流れとしてはrocm-llvmのdebパッケージを手動で編集して入れる感じです。
リンクの手順をまとめておきます。

  1. mkidr tempなどとして作ったフォルダ内の下記コマンドでrocm-llvmのdebパッケージをダウンロードする
~/temp$ apt download rocm-llvm
  1. ダウンロードしたdebファイルを展開する
~/temp$ ar x rocm-llvm_14.0.0.22204.50200-65_amd64.deb
  1. 展開後、controlというファイルがあるのでテキストエディタで開き、Dependsの部分をDepends: python3, libc6, libstdc++6|libstdc++8, libstdc++-5-dev|libstdc++-7-dev|libstdc++-10-dev, libgcc-5-dev|libgcc-7-dev|libgcc-10-dev, rocm-coreに書き換える

編集後のcontrolファイル

Package: rocm-llvm
Architecture: amd64
Section: devel
Priority: optional
Maintainer: ROCm Compiler Support <rocm.compiler.support@amd.com>
Version: 14.0.0.22204.50200-65
Release:    65
Depends: python3, libc6, libstdc++6|libstdc++8, libstdc++-5-dev|libstdc++-7-dev|libstdc++-10-dev, libgcc-5-dev|libgcc-7-dev|libgcc-10-dev, rocm-core
Provides: llvm-amdgpu
Recommends: gcc, g++, gcc-multilib, g++-multilib
Description: ROCm compiler
  ROCm compiler based on LLVM 14.0.0
  1. 内容を書き換えたcontrolファイルを使っってcontrol.tar.xzを作り直す
~temp/$ tar c postinst prerm control | xz -c > control.tar.xz
  1. rocm-llvmのdebパッケージを作り直す
~temp/$ ar rcs rocm-llvm_14.0.0.22204.50200-65_amd64.deb debian-binary control.tar.xz data.tar.xz
  1. Dependsに書き加えたパッケージをインストールする
    投稿主の方はこれが本当に必要かはわからないが入れといたほうがいいだろうっていうてました。
~temp/$ sudo apt-get install libstdc++-10-dev libgcc-10-dev
  1. rocm-coreをインストールする
~temp/$ sudo apt install rocm-core
  1. 手動でパッケージングし直したrocm-llvmのdebファイルをインストールする
~temp/$ sudo dpkg -i rocm-llvm_14.0.0.22204.50200-65_amd64.deb
  1. ユーザーに権限をつける
~temp/$ sudo usermod -a -G render $LOGNAME
~temp/$ sudo usermod -a -Gおわりに video $LOGNAME

以上でインストールが終わります。あとは下記コマンドを実行してデバイスが認識されていればOKです。

$ /opt/rocm/bin/clinfo


Number of platforms:				 1
  Platform Profile:				 FULL_PROFILE
  Platform Version:				 OpenCL 2.1 AMD-APP (3452.0)
  Platform Name:				 AMD Accelerated Parallel Processing
  Platform Vendor:				 Advanced Micro Devices, Inc.
  Platform Extensions:				 cl_khr_icd cl_amd_event_callback 


  Platform Name:				 AMD Accelerated Parallel Processing
Number of devices:				 1
  Device Type:					 CL_DEVICE_TYPE_GPU
  Vendor ID:					 1002h
  Board name:					 Radeon RX Vega
  Device Topology:				 PCI[ B#8, D#0, F#0 ]
  Max compute units:				 56
  Max work items dimensions:			 3
    Max work items[0]:				 1024
    Max work items[1]:				 1024
    Max work items[2]:				 1024
  Max work group size:				 256
...

おわりに

記事作って思ったけどLinuxでAMDのGPU使いたい人なんて自分で解決できる人しか使わないんじゃ?って思い始めてこの記事の需要を見失いました。

スーパーコンピューターとかのHPC界隈ではAMDのGPUは割と採用実績もあるんですがコンシューマー帯の普及が進まないなあ...という印象です。

自分が使っているVega56も最新版のROCmのサポートが切れてしまっているくらいです。

最新のROCmでは現行のRX6000系(RDNA2)の対応が進んでいたりはしているんですが、、、

今回が初のZenn投稿なので、間違い等指摘がありましたらぜひよろしくおねがいします。

Discussion