💭

pytorch2 + ROCm で RWKV(LLM Chatbot) と Wisper 動作確認メモ

2023/03/28に公開

pytorch 2.0 になって ROCm 対応がそれなりにきちんとサポートされたようです.

ROCm PyTorch のビルドにチャレンジしてから 1 年が経ちました(2019 年 7 月 27 日) (2019 年 9 月 24 日追記)
https://qiita.com/syoyo/items/758f7e0b86a9a2834864

2018 年の使い物にならないレヴェルから, 5 年ほど経ち, やっと基本的には使えるようになってきた感じでしょうか...

動作確認します!

環境

  • RX6800(RDNA2)
    • Radeon VII(Vega20) も OK だった!
  • Ubuntu 20.04 HWE kernel(5.15.x)
  • ROCm 5.3.4

ROCm 関連は

https://docs.amd.com/

からたどれる document 参考に一式入れておきます.

既存 ROCm がインストールされている場合は, amdgpu-uninstall で一度パッケージ一式削除しておく必要があります. そうしないと上書きインストールになり, apt/deb で依存関係エラーが起きたりします.

conda + pip でインストール

ROCm で Stable Diffusion 動きます(Stable Diffuson 2.0 も動くよ)
https://qiita.com/syoyo/items/5d361ef5ff95d8ca70ee

今までは ROCm prebuilt は beta 扱いで無かったりうまくインストールできなかったりで Docker で動かすのが推奨でしたが,

pytorch 2.0 から pip で ROCm 版入るようになったので, docker 経由ではなく, conda で構築した python 環境に pip でインストールするようにします!

執筆時点では pip prebuilt は ROCm 5.4.2 でしたが, RX6800 ではうまく動きました.

pip でインストールできるようになったことにより, 楽になりましたね.

まずは Whisper でベンチマーク

https://zenn.dev/syoyo/articles/8ee9cb8c9ace61

を参考にして whisper 動かします!
100W に Powerlimit しています.

fp16 + beamsearch 5 設定

...
[07:27.000 --> 07:30.000] みたいなことが伝わる内容になっていると思います
[07:30.000 --> 07:33.000] ぜひ見ていただきたいと思います
[07:33.000 --> 07:35.000] 有村香澄でした
infer 171.19400453567505

CUDA 版とはちょっと結果が異なりました(CUDA では最後「村上でした」になる).
3090 だと 57 秒くらいなので 3 倍くらい遅いです.
(fp32 flops では, 6800 は 3090 の半分 + 100W powerlimit もあるのでこんなものでしょうかね)

timestamp なし + beamsearch 2

[07:22.000 --> 07:24.000] 日頃女性がこういうふうにして
[07:25.000 --> 07:27.000] 自分たちの前で頑張ってくれているんだな
[07:28.000 --> 07:30.000] みたいなことが伝わる内容になっていると思います
[07:31.000 --> 07:33.000] ぜひ見ていただきたいと思います
[07:34.000 --> 07:35.000] 有村香澄でした
infer 94.43811631202698

3090 では 37 秒なので, 速度差 3 倍遅くらいは変わらず.
RX6800 を 220W に powerlimit では 90 秒でした.

また, 100W に powerlimit した Radeon VII ですと,

[07:00.000 --> 07:30.000] 皆さんには共感していただけるところがたくさんあるんじゃないかなと思っていますまた男性の方々にも女性が待ち合わ
せの前に入念に準備をしているところだったりとかデート中は実はすごくドキドキしていることがあったりもするのでそういったところもぜひ見てい
ただいて日頃女性がこういうふうにして自分たちの前で頑張ってくれているんだなみたいなことが伝わる内容になっています
[07:30.000 --> 07:37.610] ぜひ見ていただきたいと思います有村かすみでした
infer 113.03783535957336

fp16 + timestamp なし + beamsearch 2 で 113 秒でした. Radeon VII のほうがちょっと翻訳性能よいかも?

RWKV を動かす.

npaka 先生が伝授しておられる RWKV 動かします!

Google Colab で RWKV を試す
https://note.com/npaka/n/nc0592a884903

npaka 先生, ありがとうございます. 🙇‍♀️

14b は GPU メモリ 27 GB くらい使うようなので, 今回は 7b(14GB)使います!

https://huggingface.co/BlinkDL/rwkv-4-pile-7b

執筆時点での最新は

rwkv-4-pile-7b/RWKV-4-Pile-7B-20230313-ctx8192-test380.pth

でした. ファイル名に Instruct が入っているのでもよいかもです(こちらは 特定 QA task 用です)

ROCm 向けのコードの修正は必要ありませんでした.

RX6800(16GB. RDNA2)で動かしました.

======================= ROCm System Management Interface =======================
================================= Concise Info =================================
GPU  Temp (DieEdge)  AvgPwr  SCLK  MCLK   Fan  Perf  PwrCap  VRAM%  GPU%
0    34.0c           5.0W    0Mhz  96Mhz  0%   auto  100.0W   86%   0%
================================================================================
============================= End of ROCm SMI Log ==============================

メモリ使用量は, 想定通り 86% (14GB)でした.

...
Bob: How distant from Tokyo to New York?
Alice: It's about 2,600 km.

Bob: in kilometers, please?
Alice: (According to my knowledge, this distance is roughly 2,600 km.)

Bob: How tall Mt. Fuji is?
Alice: As a peak, it is 1,776 meters.

レスポンスは数秒くらいでとても速い!
回答は間違っていますがええ感じにチャット体験できました!

npaka 先生の記事を参考に, 日本語化してみます!

あなたは人間と会話するチャットボットです。

Human: こんにちは!
AI: こんにちは!お元気ですか?

Human: 日本の首都を教えて
AI: いいですね。どうもありがとう。 日本の首都を教えてください

Human: 富士山の高さは?
AI: 富士山の高さは8177メートルです。

Human: 豚肉を使ったレシピを3つ教えて
AI: 豚肉を使ったレシピを3つ教えてください

Human: 日本の首都はどこですか?
AI: 日本の首都は東京です。
  東京には富士山があります。

日本語はとりあえず扱えるけど, 簡単なものやうまく定型文にしないと反応悪く, まだまだって感じかね...

FuguMT で英訳して入力するか, 日本語データセットでファインチューンした RWKV に期待でしょうか.

簡単なまとめ

Pure(?) pytorch で書かれたコードは ROCm で動くようになってきた感があります.
pip で入るようにもなってインストールの手間も減りました!

Stable diffusion は pytorch2 で動作確認していませんが, pytorch 1.x ではすでに動いていたので問題なく動くでしょう.

  • データセンターに並べて物量で処理したい(GeForce だとブロックチェーン処理以外はデータセンターで利用できない)
  • メモリ 16 GB を生かして, メモリ多いのが求められる LLM(e.g. Chatbot) や Stable Diffusion 動かす
    • ROCm int8 対応などはまだまだであるが...

などで ROCm(AMD GPU) を活用がよいでしょうかね.

↓の ROCm 5.6 出てきたら, Windows + Blender で 3DCG 制作にも活用できそうです!(あとは Generative 3D 生成とか!)

ROCm 5.6 ...?

https://rocmdocs.amd.com/projects/alpha/en/develop/release/gpu_os_support.html

執筆時点(2023/03/27)では時期リリース(?) 5.6 は Alpha 版ですが,

Fiji/Polaris(GFX803)がコミュニティサポート(実際はソースコード公開されているんで, それみて誰か対応せよ(Arch あたりのメンテナーが頑張る?)という感じでしょうか)で一応継続してあります.

あと RDNA2 系は待望の? Windows 対応があります!(まずは Blender あたり用と思われる)

AMD GPUでも, Windows で LLM, Stable Diffusion などがやりやすくなりそうかもです.
(現時点では 5.6 でも RDNA3 は未サポートのようなので, RDNA2 がメインになるであろう)

Radeon VII サポートが消えてます...
(Instinct M50/60 VEGA の枠での扱いになるんじゃろか?)

TODO

  • Stable diffusion あたりの再度動作確認 + ベンチマークを取る
  • 6800 x 2 で RWKV 14B が動くか試す.

Discussion