Radeon GPUを搭載したUbuntu PCでVulkanを触ってみようとしたら色々躓いたので、メモしておくことにする
ハードウェア
- CPU, M/B : Intelの古いCPUとM/B(Haswellあたり)
- GPU : Radeon RX 7800 XT
- その他 : 省略
- (CPUとGPUのバランスがメチャクチャだが、一時的な動作チェック目的なので……)
OS 選び
- 他のLinux PCでUbuntu server 22.04 LTSを使っていたため、同じものを入れてみたが、起動後にデスクトップ環境を導入、AMDGPUやVulkanのドライバ等を入れてもVulkanからGPUが見えるようにならず諦め。(おそらくどうにかする方法はあるのだと思うのだが……。)
- 改めて、Ubuntu desktop 22.04.3 LTSをインストール。最新のGPU関係ソフトウェアが入るかも?と思ったので(実際にどうだったのかは未確認)インストール時のソフトウェアアップデートオプションなどはON。起動時に
[amdgpu] *ERROR* early_init of IP block ~
といったGPUドライバ関係のエラーメッセージが見えて不安だった、とりあえずまともな解像度のデスクトップ環境が立ち上がった。
GPUドライバのインストール
- AMDのWebサイトを参照し、Radeon for linuxのinstruction に従って23.30版をインストール。debファイルを拾ってきて
apt-get install
とapt-get update
しただけ。これで上記のエラーメッセージは消えた。 -
W: Download is performed unsandboxed as root as file ~ couldn't be accessed by user '_apt'. - pkgAcquire::Run
とかいうエラーが出たはずだが、debファイルを/tmp
に持っていってやり直したら通った。 - AMDGPU stackのインストール はとりあえず放置。必要がありそうなら改めてやる予定。
VulkanからGPUが見えるようにする
- Vulkanのテスト:準備
-
VulkanのWebサイト からInstallerを拾ってきて展開。
. ~/1.3.268.0/setup-env.sh
を実行 - (次のvkconfig実行時に躓いたので)aptで
libxcb-xinerama*
やらlibxcb-xinput*
をinstallした。
-
VulkanのWebサイト からInstallerを拾ってきて展開。
- Vulkanのテスト:実行(環境情報の確認)
- (デスクトップで直接、もしくはssh -Y接続で)vkconfigコマンドを実行するとGUIが立ち上がり、適切に環境構築できていればGPUの情報などが確認できる。下画像にあるように「AMD Unknown ~」の項があるので(Unknownではあるが)GPUがちゃんと認識されていると思われる。「OS選び」の項で 「VulkanからGPUが見えるようにならず」 と書いたのがこれで、この項が表示されるようにできなかった。何が根本原因だったかは不明。
- ここで正しくGPUが認識されるには条件があり、実行しているユーザがデスクトップGUIにログインしている(画面にデスクトップを表示している)必要がある。vkconfigコマンド自体はssh接続状態で実行しても良い。Ubuntu起動時に自動的にログインする設定があるので、それを利用すれば再起動してしまっても大丈夫。
- おそらく、いわゆるheadlessな状態でVulkanを使うための手段が用意されているはずで、それを使えばデスクトップGUIへのログインは不要になると思うのだが、現時点では解決方法がわかっていない。
暫定まとめ
- 今後は実際にVulkanによるGPUプログラムをコンパイルして実行できるかを試す予定。AMDGPU stackのインストールが必要かもしれない。
- vkconfigが動くようになってから思い出しながら書いたので、作業が抜けていたりする可能性がある。同じ環境構築を別のPCでまたやれば手順の再確認ができると思うので、その際にまたアップデートしたい。
Mesaドライバのインストール
- 上記のドライバでは
VK_KHR_ray_tracing_pipeline
が有効にならなくて困るケースがあったので、Mesaドライバを入れた。 - 参考:https://itsfoss.com/install-mesa-ubuntu/
結果
-
VK_KHR_ray_tracing_pipeline
は解決した。 - プログラムによっては、X転送状態だとうまく動かず、
DISPLAY=:0.0
などして本体につながったディスプレイに画面を出すのが必須になっている状態のものがある。どうにかできるのかは不明。 -
/var/log/Xorg.0.log
を見るといくつかエラーが出ている。解消できるだろうか?
メモ
- うまく行かないときはカーネルのバージョンを変えるのも考えた方が良さそう
- HWEとか……
- securebootはオフにしちゃった方が余計な問題が起きなさそう?
追記
- (最近の?)Vulkanでハードウエアレイトレーシングを行う際、再帰的に処理を行いたい場合は
maxRayRecursionDepth
が1より大きな値である必要がある模様。これを辿ってmaxRayRecursionDepth
の値が31になっているOSバージョン等を確認すると良いようだ。Ubuntu 22.04では駄目らしlく、23.04を入れた。