作業手順メモ
概要
最近購入した5万円をきる低価格のGMKtecのミニPC(OSはubuntu24.04に変更)にはRyzen 7 5825u
が搭載されているのですが、これにはGPU(Radeon Vega 8)が内蔵されています。AMDは自社のGPUでAIアプリを開発するためのROCmというソフトウェアスタックを提供しており、これを使えばRadeonでもPyTorchや生成AIアプリが動かせる、ということを知り、このiGPUでどこまで動かせるのか、PyTorchを使ったプログラム、および、ローカルLLMとして使えるlocal-ai及びollamaを動かして確かめてみました。※ちなみに現在ROCmではこのiGPUを正式にはサポートしていないようですので、試される方は自己責任でお願いします。
結論からいいますと、PyTorchに関しては実行するソフトによってはCPUよりGPUの方が遅かったり、GPUがハングすることもありました。local-aiやollamaも動作はするものの速度に難あり、といったところです。
BIOSの設定
まずはこちらを参考にしてBIOSの設定で、CPUの電源モードをperformanceに変更し、さらにUMA frame bufferのサイズを8Gに変更しました。
ROCmのインストール
- Ryzen 7 5825uのiGPU向けのROCmインストール手順を参照してインストールする
- ROCmのドライバをインストールするためのスクリプト(amdgpu-install)をここから探してダウンロード、インストールする
今回はubuntu24.04用の現時点(24/11/17現在)での最新版であるamdgpu-install_6.2.60204-1_all.debを使用。ダウンロードしたら、
sudo dpkg -i ./amdgpu-install_6.2.60204-1_all.deb
でインストールする。
- インストールしたスクリプトでROCmのドライバをインストール
sudo amdgpu-install --usecase=graphics,rocm,opencl -y --accept-eula
- renderとvideoのデバイスにアクセスできるようにROCmを使うユーザーをそれぞれのグループに追加
例えば、現在ログインしているユーザーでROCmを使用するなら
sudo usermod -a -G render $LOGNAME
sudo usermod -a -G video $LOGNAME
- ROCmを使用するユーザーの環境変数を追加
~/.bashrc
などに以下を追加しておく。
export PYTORCH_ROCM_ARCH=gfx900
export HSA_OVERRIDE_GFX_VERSION=9.0.0
※5825uのiGPUはgfx90c
というターゲット名であるが、ROCmの対応しているGPUにはないので、pytorchやlocal-aiなどで利用しているhipBLASというライブラリがエラーになる模様。そこで、この環境変数を設定することで、ROCmが対応しているgfx900
(gfx90c
の命令セットと互換性があるらしい)として扱われるようにしているようだ。
- PCを再起動する
- インストールできているかチェックする
- “
rocm-smi
“でGPUの状態をチェック
============================================ ROCm System Management Interface ============================================
====================================================== Concise Info ======================================================
Device Node IDs Temp Power Partitions SCLK MCLK Fan Perf PwrCap VRAM% GPU%
(DID, GUID) (Edge) (Socket) (Mem, Compute, ID)
==========================================================================================================================
0 1 0x15e7, 25445 44.0°C 12.0W N/A, N/A, 0 None 1200Mhz 0% auto Unsupported 0% 0%
==========================================================================================================================
================================================== End of ROCm SMI Log ===================================================
- “
clinfo
“でOpenCLで認識されているかチェック
Number of devices: 1
Device Type: CL_DEVICE_TYPE_GPU
Vendor ID: 1002h
Board name: AMD Radeon Graphics
Device Topology: PCI[ B#5, D#0, F#0 ]
- “apt show rocm-libs -a”でROCmのバージョンチェック
Package: rocm-libs
Version: 6.2.4.60204-139~24.04
Priority: optional
Section: devel
Maintainer: ROCm Dev Support <[email protected]>
PyTorchを試してみる
- pytorchのget-startedのページにあるコマンド(Compute PlatformはROCm6.2を指定)でインストール
pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/rocm6.2
- GPUが認識されているかを以下のPythonコードでチェック
import torch
print(torch.cuda.device_count())
for i in range(torch.cuda.device_count()):
print(torch.cuda.get_device_properties(i))
を実行すると、以下のように出力された。
_CudaDeviceProperties(name='AMD Radeon Graphics', major=9, minor=0, gcnArchName='gfx900:xnack+', total_memory=14483MB, multi_processor_count=8, uuid=58580000-0000-0000-0000-000000000000, L2_cache_size=1MB)
- 行列の掛け算、および主成分分析のコードを実行してみる
- 行列の掛け算
CPUよりかなり速い。Matrix Sizeが20000のとき、CPUは30.074051秒かかったがGPUは0.168245秒だった。 - 主成分分析
こちらは逆にCPUよりかなり遅くなった。
- 行列の掛け算
Matrix Size: 4000
実行開始 - Matrix Size: 4000
device_type の設定: GPU
Running on GPU
Available devices: cuda
PCA Calculation time: 434.748962 seconds
SVD Calculation time: 314.756380 seconds
実行開始 - Matrix Size: 4000
device_type の設定: CPU
Running on CPU
Available devices: cpu
PCA Calculation time: 8.335965 seconds
SVD Calculation time: 7.920610 seconds
- こちらを参考にChatRWKV v2を試してみる
実行途中でGPUが落ちてしまった。
HW Exception by GPU node-1 (Agent handle: 0x57a7bae47ec0) reason :GPU Hang
local-aiを動かす
- ROCM(AMD) accelerationを参考にコンテナを作成し立ち上げる
- 以下のdocker-compose.ymlでコンテナを立ち上げる。するとコンテナ内でビルドが始まる(かなり時間がかかる)。
services:
localai:
image: quay.io/go-skynet/local-ai:master-aio-gpu-hipblas
volumes:
- ./models:/models
environment:
- MODELS_PATH=/models
- DEBUG=true
- REBUILD=true
- BUILD_TYPE=hipblas
- GPU_TARGETS=gfx900 # Vega10
- HSA_OVERRIDE_GFX_VERSION=9.0.0 # Vega10
devices:
- /dev/dri
- /dev/kfd
ports:
- "8080:8080"
- 一旦コンテナを停止して、イメージ化(コンテナが削除されても再ビルド不要とするため)
docker compose stop
docker commit localai-localai-1 localai-rocm
- docker-compose.ymlを編集して、REBUILDはfalse,imageはlocalai-rocmに変更し、再度起動
services:
localai:
image: localai-rocm
volumes:
- ./models:/models
environment:
- MODELS_PATH=/models
- DEBUG=true
- REBUILD=false
- BUILD_TYPE=hipblas
- GPU_TARGETS=gfx900 # Vega10
- HSA_OVERRIDE_GFX_VERSION=9.0.0 # Vega10
devices:
- /dev/dri
- /dev/kfd
ports:
- "8080:8080"
- 動作確認
以下のコマンドでOpenAI互換のAPIをたたく。
curl http://localhost:8080/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer xxxxxxxxx" \
-d '{
"model": "gpt-4o",
"messages": [
{
"role": "system",
"content": "You are a helpful assistant."
},
{
"role": "user",
"content": "Hello!"
}
]
}'
- モデルのダウンロード
ブラウザからhttp://localhost:8080
にアクセスすると管理画面が表示される。ヘッダにあるmodels
をクリックすると表示されるモデル管理画面で必要なモデルをダウンロードする。例えばhermes-2-theta-llama-3-8b
であれば5825uのiGPU(Radeon Vega 8)でも動作した。APIをたたくときに指定するモデルにはダウンロードしたモデルに対応したモデル名(http://localhost:8080の管理画面の表のMODEL NAME列で確認できる)を指定する。
curl http://localhost:8080/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer xxxxxxxxx" \
-d '{
"model": "hermes-2-theta-llama-3-8b",
"messages": [
{
"role": "system",
"content": "あなたは優秀なプログラマーです。"
},
{
"role": "user",
"content": "Pythonで電卓を実装して。"
}
]
}'
レスポンスが返ってくるまでの時間を計測したところ、1分53秒かかりました。遅いですね。一応、rocm-smiでGPUが動いていることを確認してます。ちなみに、メインPC(Ryzen 7 3700X、Geforce RTX 3070)だと16秒くらいでしたので、7倍くらい遅い、ということになります。
ollamaを動かす
ollamaを動かすため以下のページを参考にさせていただきました。
- インストール
curl -fsSL https://ollama.com/install.sh | sh
これでollamaのサーバが起動するが、GPUがサポートしていないということで、CPUで動いてしまう。
/etc/systemd/system/ollama.service
のExecStartの下あたりに以下を追加
Environment="HSA_OVERRIDE_GFX_VERSION=9.0.0"
そのあと
sudo systemctl daemon-reload
sudo systemctl restart ollama
journalctl -u ollama
でollamaサーバのログをみてみる。
Dec 07 12:45:38 myserver ollama[2405]: time=2024-12-07T12:45:38.924Z level=INFO source=gpu.go:221 msg="looking for compatible GPUs"
Dec 07 12:45:38 myserver ollama[2405]: time=2024-12-07T12:45:38.932Z level=INFO source=amd_linux.go:386 msg="skipping rocm gfx compatibility check" HSA_OVERRIDE_GFX_VERSION=9.0.0
Dec 07 12:45:38 myserver ollama[2405]: time=2024-12-07T12:45:38.940Z level=INFO source=types.go:123 msg="inference compute" id=0 library=rocm variant="" compute=gfx90c driver=6.8 name=1002:15e7 to>D
のようにskipping rocm gfx compatibility checkとログに出ていれば環境変数が正しく認識されている。
- モデルをダウンロードしてチャットを起動する
ollama run nous-hermes2
- モデルをダウンロードするだけならpull
ollama pull gemma:2b
- OpenAI互換のAPIを利用する
curl http://localhost:11434/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer xxxxxxxxx" \
-d '{
"model": "nous-hermes2",
"messages": [
{
"role": "system",
"content": "あなたは優秀なプログラマーです。"
},
{
"role": "user",
"content": "Pythonで電卓を実装して。"
}
]
}'
レスポンスが返ってくるまで2分30秒かかりました。やっぱり遅いですね。
Comments