ROCm で RADV で Vulkan(compute kernel) を使うメモ


背景

  • 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