AMD Radeon Instinct MI25
このページでは、AMD Radeon Instinct MI25 (及びその他の gfx900 vega10 GPU) で GPGPU を行うために必要な手順を説明します。
目次
BIOS と冷却
MI25 は、コンシューマーレベルのハードウェアとは互換性がないことがしばしばで、デフォルトではビデオ出力がありません。また、このカードは大量に電力を消費し、パッシブクーリング方式を採っています。この問題に対する解決策として、MI25 カードに WX9100 BIOS を書き込む方法があります。これにより、電力制限を 220W から 170W に下げ、PCIe ブラケットの後ろに隠されている Mini DisplayPort が利用可能になり、ファンヘッダをアクティブクーリングに使用できるようになり、MI25 を接続した状態でコンシューマーレベルのハードウェアを起動できるようになります。
MI25 カードを付けた状態で起動でき、かつ冷却しつづけられるならば、状況によっては、amdvbflashAUR で OS 内から BIOS を書き込めるかもしれません。そうでなくとも、オーバーヒートの危険を冒さずにハードウェアに BIOS を簡単に書き込める方法があります。
WX9100 BIOS は広くテストされており、推奨されます。これはここからダウンロードできます。
Raspberry Pi でハードウェアのフラッシュを行う
MI25 の BIOS チップはバックプレートの下にあり、flashrom、SOP8 テストクリップ、そして Raspberry Pi を使ってフラッシュできます。
はじめに、クリップで MI25 BIOS チップをこのダイアグラムに従って Raspberry Pi の GPIO ピンに接続する必要があります。慎重に接続し、次に Raspberry Pi を起動してください。そして、チップが認識されているかどうか、以下のコマンドで確かめてください。
# flashrom -p linux_spi:dev=/dev/spidev0.0,spispeed=8192
チップが正しく認識されたら、新しい BIOS を書き込む前に、オリジナルの BIOS をバックアップしておきます。これには2つの目的があり、1つはもしものためのバックアップで、もう一つは BIOS フラッシュチップと正しく接続されていることを確かめるためです。
# flashrom -p linux_spi:dev=/dev/spidev0.0,spispeed=8192 -r mi25-dump1.rom
# flashrom -p linux_spi:dev=/dev/spidev0.0,spispeed=8192 -r mi25-dump2.rom
$ sha1sum mi25-dump*.rom
2つのダンプのチェックサムが同じであれば、準備は完了です。同じでなかったら、一貫性のあるダンプが得られるまでクリップをつけ直し、チェックサムの確認を行ってください。
MI25 BIOS が 1MiB であるのに対し、WX9100 BIOS が 256KiB であることに気がついたかもしれません。この差を埋めるために、768KiB のゼロで埋められたファイルを作成し、WX9100 BIOS 218718.rom
の末尾に付け足します。
$ truncate -s +768KiB pad.bin
$ cat 218718.rom pad.bin > 218718-padded.rom
このようにしてパディングを追加した BIOS を、次は MI25 に書き込みます:
# flashrom -p linux_spi:dev=/dev/spidev0.0,spispeed=8192 -w 218718-padded.rom -V
Flashrom はフラッシュが成功したかどうかを検証するはずです。とはいえ、フラッシュ後に BIOS のダンプを取り、218718-padded.rom
とチェックサムを比較して、正しくフラッシュされたかどうかを確かめるのも良いでしょう。
冷却
MI25 には 4 ピンの JST-PH ファンヘッダがあり、WX9100 BIOS で動作させることができます。KK254 4 ピン (通常の 4 ピンコンピュータファン) と JST-PH 4 ピン (MI25 ファンヘッダ) を繋ぐ安いアダプタケーブルを買うだけです。探せば、2つの 4 ピンファンを MI25 から電源供給できる安いアダプタを見つけられるはずです ("Graphics Card Fan Adapter Cable" で検索してみてください)。アダプタケーブルを取り付けるにはシュラウドを取り外す必要があります。ケーブルは電源コネクタの横の隙間から逃がすことができます。
MI25 はパッシブクーリングなので、ヒートシンクに風が当たるようにエアフローを調整する必要があります。(デバイスにどのファンが付いているかによりますが) こういった冷却シュラウドを 3D プリンターで作るのは良いアイデアですが、それ以外で家でできる方法でも十分でしょう。
ROCm
MI25 (及びその他の gfx900 GPU) は非推奨となっており、公式のサポートは終了しました。これらの GPU は公式には ROCm 4 ではサポートされており、ROCm 5 では非公式ですがサポートされています。ROCm 6 ではサポートされていません。なので、gfx900 用の最新の ROCm スタックをインストールするには、まず rocm-hip-sdk バージョン 5.7.1-2 の依存パッケージと miopen-hip バージョン 5.7.1-1 の依存パッケージを確認してください。
レベル | 依存パッケージ |
---|---|
パッケージ | rocm-hip-sdk |
直接の依存関係 | rocm-hip-sdk rocm-core rocm-hip-libraries rocm-llvm rocm-hip-runtime hipblas hipcub hipfft hipsparse hipsolver miopen-hip rccl rocalution rocblas rocfft rocprim rocrand rocsolver rocsparse rocthrust |
2次的な依存関係 | composable-kernel hip-runtime-amd rocm-clang-ocl rocm-cmake rocm-language-runtime rocminfo |
3次的な依存関係 | comgr hsa-rocr rocm-smi-lib hsakmt-roct rocm-device-libs rocm-opencl-runtime |
任意の依存関係 | rocm-ml-libraries rocm-ml-sdk rocm-opencl-sdk |
Arch Linux Archive から ROCm 5.7.1 をインストールするために、downgradeAUR スクリプトで必要なパッケージのバージョンを選択して ROCm の環境を構築します。
# downgrade rocm-hip-sdk rocm-core rocm-hip-libraries rocm-llvm rocm-hip-runtime hipblas hipcub hipfft hipsparse hipsolver miopen-hip rccl rocalution rocblas rocfft rocprim rocrand rocsolver rocsparse rocthrust composable-kernel hip-runtime-amd rocm-clang-ocl rocm-cmake rocm-language-runtime rocminfo comgr hsa-rocr rocm-smi-lib hsakmt-roct rocm-device-libs rocm-opencl-runtime rocm-ml-libraries rocm-ml-sdk rocm-opencl-sdk
残りの ROCm パッケージについての詳細は Arch Linux のリポジトリを見てください。
OpenCL
opencl-amdAUR は機能しますが、先ほどインストールした ROCm 5.7.1 スタックとは互換性がありません。
ROCm と共に高性能な機能する OpenCL SDK とランタイムを手に入れる推奨される方法は、ROCm 5.7.1 と上記の表の依存パッケージを全てインストールすることです。
GPGPU でアクセラレートされたソフトウェア
この章では GPGPU でアクセラレートされたソフトウェアを挙げ、それらを gfx900 GPU で動作させる方法を説明します。
AUTOMATIC1111s Stable Diffusion ウェブ UI
Gradio ライブラリで実装されている、Stable Diffusion のウェブインターフェイスです。
stable-diffusion-web-ui-gitAUR は、インストール後の小さな手動設定で使えるようになります。これを動作させる方法は AUR 上の rabcor のコメントを見てください。
BitCrack
Bitcoin の秘密鍵をブルートフォースするツールです。
- リポジトリをクローンします:
$ git clone https://github.com/brichard19/BitCrack.git
cd
して、OpenCL サポートありでビルドします:
$ cd BitCrack && make BUILD_OPENCL=1
clBitCrack
を実行します:
$ ./bin/clBitCrack 1FshYsUh3mqgsG29XpZ23eLjWV8Ur3VwH 15JhYXn6Mx3oF4Y7PcTAv2wVVAuCFFQNiP 19EEC52krRUK1RkUAEZmQdjTyHT7Gp1TYT
Ollama
Get up and running with large language models.
The latest version of ollama to support ROCm 5.7 is 0.1.28. However, ollama 0.1.28 from the Arch Linux Archive is compiled without gfx900 support, so we must:
- Downgrade ollama.
# downgrade ollama==0.1.28
- Clone repository.
$ git clone https://github.com/ollama/ollama.git
- Change directory and checkout version 0.1.28
$ cd ollama && git checkout 21347e1
- Build for gfx900.
$ AMDGPU_TARGETS=gfx900 go generate ./... && go build .
- Replace ollamas executable with our freshly compiled binary
# mv ./ollama /usr/bin/ollama
- Start
ollama.service
. - Perform inference.
$ ollama run tinyllama
PyTorch
Pytorch v2.2.2 is the latest release that supports ROCm 5.7, and can be installed via pip
within a python311AUR virtual environment
.
(venv)$ pip install torch==2.2.2 torchvision==0.17.2 torchaudio==2.2.2 --index-url https://download.pytorch.org/whl/rocm5.7
Tensorflow
Tensorflow 2.13.0.570 is the latest ROCm 5.7 compatible release, and can be installed via pip
within a python311AUR virtual environment
.
(venv)$ pip install tensorflow-rocm==2.13.0.570
(venv)$ pip install tensorflow-rocm==2.13.0.570 jupyterlab ipython==8.23.0