UbuntuにAMDGPUのドライバーをインストールしようとしたらコケたお話
自宅のUbuntuマシンを22.04(Jammy Jerryfish)にアップデートし、AMD製のグラフィックカードが挿さっているのでAMD謹製の公式ドライバーをインストールしようとしたらつまずいたので解決方法を日本語で載せておこうと思いました。
Radeon Software for Linuxってなに
OpenGLやらGPGPU向けのROCmなどをまとめて入れてくれるようです。下記リンクが参考になりました。ありがとうございます。
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 |
ドライバーをインストールする
インストールはかんたんです。ざっくりと流れを載せておきますが、詳細はリンクを参照してください。
- リンク先で自分のディストリビューションを選択すると
amdgpu-install-VERSION.{deb,rpm}
ファイルがダウンロードされます - それぞれのコマンドを実行することでドライバーをインストールする
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
- あとは次をターミナルで叩くだけでドライバーのインストールが始まります
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を入れるときの依存関係でエラーが起きているということでした。
解決方法
解決には下記リンクが参考になりました。
大まかな流れとしてはrocm-llvmのdebパッケージを手動で編集して入れる感じです。
リンクの手順をまとめておきます。
-
mkidr temp
などとして作ったフォルダ内の下記コマンドでrocm-llvm
のdebパッケージをダウンロードする
~/temp$ apt download rocm-llvm
- ダウンロードしたdebファイルを展開する
~/temp$ ar x rocm-llvm_14.0.0.22204.50200-65_amd64.deb
- 展開後、
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
- 内容を書き換えた
control
ファイルを使っってcontrol.tar.xz
を作り直す
~temp/$ tar c postinst prerm control | xz -c > control.tar.xz
- rocm-llvmのdebパッケージを作り直す
~temp/$ ar rcs rocm-llvm_14.0.0.22204.50200-65_amd64.deb debian-binary control.tar.xz data.tar.xz
- Dependsに書き加えたパッケージをインストールする
投稿主の方はこれが本当に必要かはわからないが入れといたほうがいいだろうっていうてました。
~temp/$ sudo apt-get install libstdc++-10-dev libgcc-10-dev
- rocm-coreをインストールする
~temp/$ sudo apt install rocm-core
- 手動でパッケージングし直したrocm-llvmのdebファイルをインストールする
~temp/$ sudo dpkg -i rocm-llvm_14.0.0.22204.50200-65_amd64.deb
- ユーザーに権限をつける
~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