LoginSignup
6

More than 1 year has passed since last update.

posted at

updated at

amdgpu 21.40 で RDNA2 で HIP(CUDA っぽいの)が動くようになりました(experimental)

背景

AMD GPU で GPGPU(CUDA ぽいの)ができる ROCm がいつまで経っても RDNA/RDNA2 対応しておらんかった...

しかし, 最近 Cycles X が AMD HIP で RDNA2 で動かせるようになる(まずは Windows で)という記事があり, HIP 再訪することにしました.

https://code.blender.org/2021/11/next-level-support-for-amd-gpus/
https://code.blender.org/2021/04/cycles-x/

(ちなみに buggy OpenCL driver とあるのは AMD のことでしょうね :smiley: )

Linux では, 21.40 でついに対応し始めったっぽい?

admgpu 入れると rocm 関連のパッケージも入ります.

いままでは rocm 用(GPUGPU 用)と, OpenCL/OpenGL などのグラフィックスドライバの SW スタックは別でした.

21.40 から OpenCL あたりも rocr(ROC runtime) で動くようになります(ついでにいうと OpenCL も完全? OSS なスタックとなる).

ROC は Radeon Open Compute の略かしら?

upgrade

Linux では cuda repo とは異なり, amdgpu-install では(現時点では)アップグレードは対応していません.
amdgpu-uninstall してパッケージをアンインストールしておき, amdgpu-install の deb を再インストールで対応となります.

HIP とは

NVIDIA で言う CUDA みたいなのです(CUDA API 互換のライブラリとかを提供)
内部的には C/C++(LLVM に変換できるコンパイラがあれば rust なども) を GCN/RDNA ISA などで動くようにしていますので,
特に CUDA API にこだわらなければ, より汎用な C/C++ コードを GPU で動かせると思います.

いろいろ紆余曲折あったようですが, 最近では binary(fat binary)を comgr/rocr で動くように統一されてきたっぽい.

2020 年後半以降の HIP, HIP clang compiler について
https://qiita.com/syoyo/items/240a1b08cb72f1ea6fbe

最近ではやっと hipcc も apt で入る感じになってきました.

仕組み

AMD のサイトとかにまともな資料無いっぽいので推定ですが, こんな感じでしょうか...
(VEGA or later)

  HIP app   |  OpenCL app とか
            |
    |       |    |
    |/      |    |/
+-----------+-----------+
| hip.bc    |  oclc.bc  |    device library bitcode(`/opt/rocm/amdgcn/bitcode`)    
+-----------------------+  
| rocr/rocclr           |    (common) runtime
+-----------------------+
| amdgpu(former amdkfd) |    kernel driver
+-----------------------+

動かす.

amdgpu ドライバ(最近は apt meta package 形式)を入れているとします.

$ sudo apt install roc-dev

で hipcc など入れます.

あとはコンパイルするだけです!

square サンプルを動かしてみます.

info: running on device AMD Radeon RX 6800
info: allocate host mem (  7.63 MB)
info: allocate device mem (  7.63 MB)
info: copy Host2Device
info: launch 'vector_square' kernel
info: copy Device2Host
info: check result
PASSED!

Voila!

これで RDNA2 で Vulkan/OpenGL などでレイトレしたりレンダリングしたり, マイニング(OpenCL)したりしつつ, GPGPU(HIP)もできるようになります!

pytorch-rocm は...?

残念ながら最新 docker image でも gfx1003 が有効になっていないっぽく seg fault(HIP compile 失敗)しました.
ソースコードから gfx1003 有効にしてビルドすればいけるかもしれません.

しかし, Radeon VII で試したところ, 結局のところ pytorch-rocm は使い物にならないままのようですので(GPU のカーネルコンパイルが激遅 + GPU のほうが遅い),期待しないほうがいいでしょう.
(pytorch CUDA の API や書き方に合わせて無理やり動かしているので, 非効率)

HIP(C/C++) で, 自前で機械学習ライブラリ(MIOpen, ROCblas, ...)を叩いたほうがよさそうです!

HSA はどうなる?

不明. HIP に統一されていくのでしょうか...

RT core はどうなる?

ISA 自体はあるっぽいので, うまく叩けば使えるかもしれませんが, OptiX のように簡易に使える API は提供されていません.
とりあえずは Vulkan 経由になるでしょうか(HIP sample に Vulkan interop の例があります)

ただ, RDNA2 の HW raytracing(texture unit)の性能自体そんなに良いわけではないので, 無理して使っても性能でないでしょうから, RDNA3 など次期アーキテクチャに期待でしょうか.

Intel dGPU はどうなる?

Intel Xe ではどうなるでしょうか. Intel は OpenCL コンパイラをきちんとメンテしている感じがしますが... SYCL とかになるのかな?

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
6