🧠

GMKtec EVO-X2でllama.cppをビルドしてローカルLLMを動かす

に公開

前回の記事で、EVO-X2 (Ryzen AI Max+ 395) に Ubuntu 24.04+ROCm を導入しました。今回は、ROCm(HIP/rocBLAS)有効の llama.cpp をビルドしてGPU実行できる状態にして、ローカルLLMを動作させ、モニタを実施します。

https://www.amazon.co.jp/dp/B0F5H9KS9R?th=1&linkCode=ll1&tag=nabelabs-22&linkId=03e0d0c8626fd1b723946524a68fbffb&language=ja_JP&ref_=as_li_ss_tl

1. ゴール

  • Python 仮想環境を作って モデル取得系を隔離
  • Hugging Face から Phi-3.5 Mini (GGUF) をダウンロード
  • llama.cpp を GPUオフロード段階的に 実行(-ngl 1 → 8 → 16 → 32)
  • rocm-smi で温度/電力/利用率/VRAM を 軽量モニタ
  • 生成速度(tok/s)を比較し確認

2. Python 仮想環境のセットアップ

いろいろ始める前に、Python仮想環境(venv)を整備します。なぜかというと、

  • huggingface_hub や hf_transfer を安全に更新できる
  • 依存衝突の回避 → プロジェクトごとに分離
  • 再現性の担保 → 壊れたら作り直しが速い
  • sudo pip を避け、安全にユーザー権限で完結

という理由からです。

作成&有効化&ツール更新

# 作成
python3 -m venv ~/venvs/evox2-llm

# 有効化(プロンプト先頭に (evox2-llm) が付けばOK)
source ~/venvs/evox2-llm/bin/activate

# ツール更新
(evox2-llm) python -m pip install -U pip setuptools wheel

3. モデル取得

Hugging Face Hub, Python API 直呼び
CLI は PATH 依存で詰まりがちなので、Python API を推奨。大容量転送高速化を有効化。

# 転送高速化
(evox2-llm) export HF_HUB_ENABLE_HF_TRANSFER=1
# モデル保存先
(evox2-llm) mkdir -p ~/models/phi-3.5-mini-gguf

GGUFモデルを取得します。

(evox2-llm) python - <<'PY'
from huggingface_hub import hf_hub_download
dst = hf_hub_download(
    repo_id="microsoft/Phi-3.5-mini-instruct-GGUF",
    filename="Phi-3.5-mini-instruct-IQ4_XS.gguf",
    local_dir="/home/nabe/models/phi-3.5-mini-gguf",
)
print("DOWNLOADED_TO:", dst)
PY

成功した場合のログ

DOWNLOADED_TO: /home/nabe/models/phi-3.5-mini-gguf/Phi-3.5-mini-instruct-IQ4_XS.gguf
$ ls -lh ~/models/phi-3.5-mini-gguf
-rw-rw-r-- 1 nabe nabe 2.0G ... Phi-3.5-mini-instruct-IQ4_XS.gguf

目的の GGUF が 2.0GB 前後で落ちていればOK

4. llama.cpp のビルド(ROCm/HIP 対応)

Githubから取得して、ビルド用ディレクトリを作成。

git clone https://github.com/ggerganov/llama.cpp.git
cd ~/llama.cpp
mkdir -p build && cd build

ROCm (HIPBLAS) を有効にして CMake を実行
GGML_HIP=ON と GGML_HIPBLAS=ON が鍵。ROCM_PATH は通常 /opt/rocm。

cmake \
  -DGGML_HIP=ON \
  -DGGML_HIPBLAS=ON \
  -DCMAKE_BUILD_TYPE=Release \
  -DCMAKE_PREFIX_PATH=/opt/rocm \
  ..
make -j$(nproc)
  • 補足:libggml-hipblas.so が必ずできるとは限らない(静的リンクや実行ファイル内に組み込まれる構成もある)。実行時ログで ROCm 利用が出ていればOK。

実行時に見るべきログ(判定の決め手)

ggml_cuda_init: found 1 ROCm devices:
  Device 0: AMD Radeon Graphics, gfx1151 ...
...
llama_model_load_from_file_impl: using device ROCm0 (AMD Radeon Graphics) ...
...
load_tensors: offloading N/33 layers to GPU

これが出れば ROCm バックエンドで実行できています。

5. 段階的 GPU オフロード(-ngl 1→8→16→32)

-ngl(GPUに載せる層数)を増やし、tok/s が伸びるか、電力・温度・VRAMはどうなるかを確認していきます。

共通条件:

  • モデル = Phi-3.5-mini-instruct-IQ4_XS.gguf(約1.92GiB)
  • スレッド = -t 8、プロンプトは短文(日本語一文応答)
~/llama.cpp/build/bin/llama-cli \
  -m ~/models/phi-3.5-mini-gguf/Phi-3.5-mini-instruct-IQ4_XS.gguf \
  -p "1文で自己紹介。" \
  -ngl <1|8|16|32> -t 8

実行ログ(抜粋)

# 起動時に ROCm を認識:
ggml_cuda_init: found 1 ROCm devices:
  Device 0: AMD Radeon Graphics, gfx1151 ...
llama_model_load_from_file_impl: using device ROCm0 ... - 65370 MiB free

最終行に実際の出力

== Running in interactive mode. ==
<略>
1文で自己紹介。

私はAIとして、自己紹介する中で人間の形ではないが、情報を提供し、質問に答え、
タスクを支援するプログラムです。

動きました。(パチパチ)
次に、GPUにオフロードを増やすとスループットがどうなるか実測します。

# 1秒間隔で温度/電力/利用率/VRAM変化を見るシンプル版
while true; do
  ts=$(date '+%H:%M:%S')
  /opt/rocm/bin/rocm-smi --showtemp --showpower --showuse --showmeminfo vram -d 0 \
   | awk -v ts="$ts" '
     /Temperature \(Sensor edge\)/{temp=$NF}
     /Current Socket Graphics Package Power/{pwr=$(NF)}
     /GPU use/{use=$(NF)}
     /Total VRAM Memory Used/{vram=$(NF)}
     END{printf "%s Temp=%s Power=%sW Use=%s VRAM=%s\n", ts,temp,pwr,use,vram}'
  sleep 1
done

実測スループット

-ngl 1
eval time ≈ 5615 ms / 255 runs → 約 45 tok/s
-ngl 8
eval time ≈ 5229 ms / 255 runs → 約 49 tok/s
-ngl 16
eval time ≈ 4596 ms / 255 runs → 約 55 tok/s
-ngl 32
eval time ≈ 3159 ms / 255 runs → 約 81 tok/s

結果を表にまとめました。

-ngl tok/s VRAM使用目安 GPU利用率目安 電力ピーク目安
1 45.4 < 0.2 GB 相当 〜4% 〜112 W
8 48.8 ~1.41 GB 〜15% 〜117 W
16 55.5 ~2.30 GB 〜33% 〜113 W
32 80.7 ~4.06 GB 80–87% 80〜90 W 帯

おー!なかなかいい値じゃないですか。

チャッピーの分析では

  • -ngl を上げるほど tok/s は素直に向上
  • VRAM使用量は段階的に増加。EVO-X2のiGPU(大容量UMA)のおかげで 4GB級まで余裕あり
  • 電力は “必ずしも直線的に増えない”。-ngl 32 は効率が良く、高いtok/sに対し消費は抑えめという印象。

6. まとめ(今回の到達点)

  • ROCm(HIP)有効の llama.cpp で EVO-X2 の iGPU を使って Phi-3.5-mini(IQ4_XS)を推論
  • -ngl 1→32 に連れて 45.4 → 80.7 tok/sへ改善。VRAM/電力/温度の挙動も把握

https://www.amazon.co.jp/dp/B0F5H9KS9R?th=1&linkCode=ll1&tag=nabelabs-22&linkId=03e0d0c8626fd1b723946524a68fbffb&language=ja_JP&ref_=as_li_ss_tl

Discussion