背景
- ROCm 環境でも Vulkan(ゲーム用ではなく, GPU レイトレーシングや機械学習で compute shader で計算用) 使いたい
- OpenCL な機械学習コードを, ROCm で動作確認しつつ Vulkan にポートしたいとか.
- ゲーム向けなどの amdgpu(amdgpu-pro) ドライバだとプロプライエタリ(?)の Vulkan 使えるが, ROCm と共存できない
- kernel 4.18 以降であれば共存できる...かも?
ROCm 環境にて, RADV(Mesa の一部となっている amdgpu(これもオープンソースのはず)ドライバ上のオープンソース Vulkan 実装)で compute 系が動くのを確認しました.
最新 RADV だと, 性能は, プロプライエタリだったり AMDVLK(AMD 側で開発している Vulkan オープンソース実装?) と比べても遜色は無いと考えられます.
Mesa 20.0's RADV + ACO Vulkan Driver Now Consistently Beating AMD's AMDVLK Linux Driver
https://www.phoronix.com/scan.php?page=article&item=mesa20radv-aco-amdvlk&num=1
ただし RADV は最新 AMD Vulkan 機能の対応には時間がかかるようです.
インストール
Ubuntu 18.04 とします. ROCm がすでに入っているとします(ROCm 側の? amdgpu
kernel module が入っているとします)
mesa-vulkan-drivers/bionic-updates,now 19.0.8-0ubuntu0~18.04.3 amd64 [installed]
Mesa Vulkan graphics drivers
2019/12/20 時点で 19.0.8 と少し古いですが, 必要なのは apt で入ります.
$ sudo apt install mesa-vulkan-drivers
$ sudo apt install vulkan-info
vulkaninfo
で見てみます.
===========
VULKAN INFO
===========
Vulkan Instance Version: 1.1.70
Device Properties and Extensions :
==================================
GPU0
VkPhysicalDeviceProperties:
===========================
apiVersion = 0x40105a (1.1.90)
driverVersion = 79691784 (0x4c00008)
vendorID = 0x1002
deviceID = 0x66af
deviceType = DISCRETE_GPU
deviceName = AMD RADV VEGA20 (LLVM 8.0.0)
...
Voala!
複数 GPU の場合はそれぞれの GPU の情報が表示されるはずです.
機械学習で quantized kernel 実行に有益な VK_KHR_shader_float16_int8
はありませんでした.
patch 自体は取り込まれているので,
RADV Driver Gets Big Patch Series For 8-bit & 16-bit Arithmetic, 8-bit Storage
https://www.phoronix.com/scan.php?page=news_item&px=RADV-8-bit-16-bit-Extensions
最新 RADV(Mesa)をコンパイルすると使えるものと思われます.
compute 系コードを動かしてみる
vulkan_minimal_compute が動くのを確認しました.
コンパイルには, apt で libvulkan-dev を入れればとりあえずいけます.
また, Ubuntu の libvulkan1 は validation layers 込みっぽく, 実行時には validation layers も動きました.
さらなる高みへ
VK_KHR_shader_float16_int8
を使うには, 最新 Mesa(RADV) コンパイルでいけます.
RADV で最新 Vulkan を使うため, Mesa をコンパイルするメモ
https://qiita.com/syoyo/items/9b98a3124ce47065453f