Nemotron-3-Nano-Omni 30B-A3B (gfx1151) セットアップ・動作確認メモ
AMD Ryzen AI MAX+ 395 (Radeon 8060S, gfx1151, 48GB VRAM) 上で
NVIDIA Nemotron-3-Nano-Omni-30B-A3B-Reasoning(GGUF 量子化版)を
ROCm 7.2 + llama.cpp で動かした際の手順と性能ログ。
環境
- OS: Ubuntu 24.04.4 LTS
- GPU: AMD Ryzen AI MAX+ 395 / Radeon 8060S (gfx1151, 48 GB VRAM)
- ROCm: 7.2.1 (
/opt/rocm) - Python: 3.12.3
- llama.cpp: build b8993 (commit a95a11e5b)
モデル
- リポジトリ: unsloth/NVIDIA-Nemotron-3-Nano-Omni-30B-A3B-Reasoning-GGUF
- 量子化: UD-Q4_K_XL (約 22.3 GiB / 6.06 BPW)
- アーキテクチャ: nemotron_h_moe(MoE: 128 experts、6 active)
- マルチモーダル:
mmproj-F16.gguf(vision encoder, 約 1.5 GiB) - パラメータ: 31.58B(active 約 3.5B)
- コンテキスト長: 1,048,576
モデルのダウンロード
hf_transfer を使うと高速。--include のパターンはシェル展開を避けるため必ずクォートする。
pip install huggingface_hub hf_transfer --break-system-packages
HF_HUB_ENABLE_HF_TRANSFER=1 hf download \
unsloth/NVIDIA-Nemotron-3-Nano-Omni-30B-A3B-Reasoning-GGUF \
--include "*UD-Q4_K_XL*" "mmproj-F16.gguf" \
--local-dir ~/nemotron-3/Nemotron-3-Nano-Omni-30B-A3B-Reasoning-GGUF
注意: hf download は位置引数のファイル名と --include を併用すると
--include が無視される。最初は mmproj しか落ちないので、本体は別コマンドで取得する。
HF_HUB_ENABLE_HF_TRANSFER=1 hf download \
unsloth/NVIDIA-Nemotron-3-Nano-Omni-30B-A3B-Reasoning-GGUF \
--include "*UD-Q4_K_XL*" \
--local-dir ~/nemotron-3/Nemotron-3-Nano-Omni-30B-A3B-Reasoning-GGUF
llama.cpp のビルド (gfx1151 / ROCm)
cd ~
git clone https://github.com/ggml-org/llama.cpp
cd ~/llama.cpp
export HSA_OVERRIDE_GFX_VERSION=11.5.1
export ROCM_PATH=/opt/rocm
export HIP_VISIBLE_DEVICES=0
export AMDGPU_TARGETS=gfx1151
export HIPCXX=/opt/rocm/lib/llvm/bin/clang++
export HIP_PATH=/opt/rocm
export PATH=/opt/rocm/bin:$PATH
export LD_LIBRARY_PATH=/opt/rocm/lib:/opt/rocm/lib/llvm/lib:${LD_LIBRARY_PATH:-}
cmake -S . -B build \
-DBUILD_SHARED_LIBS=OFF \
-DGGML_HIP=ON \
-DAMDGPU_TARGETS=gfx1151 \
-DCMAKE_HIP_ARCHITECTURES=gfx1151 \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_POSITION_INDEPENDENT_CODE=ON \
-DLLAMA_CURL=ON
cmake --build build --config Release -j \
--target llama-cli llama-mtmd-cli llama-server llama-gguf-split
オリジナル (CUDA) との差分
| 項目 | CUDA 版 | gfx1151 版 |
|---|---|---|
| バックエンド | -DGGML_CUDA=ON |
-DGGML_HIP=ON |
| ターゲット指定 | (自動) |
-DAMDGPU_TARGETS=gfx1151 -DCMAKE_HIP_ARCHITECTURES=gfx1151
|
| コンパイラ | nvcc | HIPCXX=/opt/rocm/lib/llvm/bin/clang++ |
| 静的リンク用 | (不要) | -DCMAKE_POSITION_INDEPENDENT_CODE=ON |
CMAKE_POSITION_INDEPENDENT_CODE=ON を入れないと、
relocation R_X86_64_32 ... can not be used when making a PIE object でリンクに失敗する。
LLAMA_CURL は新しい llama.cpp では非推奨警告が出るが、ビルドは通る。
生成されるバイナリ
~/llama.cpp/build/bin/ に以下が出力される(合計 約 300 MB)。
-
llama-cli… テキスト推論 CLI -
llama-mtmd-cli… マルチモーダル推論 CLI -
llama-server… OpenAI 互換 HTTP サーバ -
llama-gguf-split… GGUF 分割/結合ツール
実行時の環境変数
export HSA_OVERRIDE_GFX_VERSION=11.5.1
export HIP_VISIBLE_DEVICES=0
動作確認
1. GPU 認識
~/llama.cpp/build/bin/llama-cli --version
ggml_cuda_init: found 1 ROCm devices (Total VRAM: 49152 MiB):
Device 0: AMD Radeon Graphics, gfx1151 (0x1151), VMM: no, Wave Size: 32, VRAM: 49152 MiB
2. テキスト推論
~/llama.cpp/build/bin/llama-cli \
-m ~/nemotron-3/Nemotron-3-Nano-Omni-30B-A3B-Reasoning-GGUF/NVIDIA-Nemotron-3-Nano-Omni-30B-A3B-Reasoning-UD-Q4_K_XL.gguf \
-ngl 99 -n 64 --no-warmup -no-cnv \
-p "The capital of Japan is" </dev/null
出力: Tokyo.(思考タグ [Start thinking] ... [End thinking] 付き)
| 指標 | 値 |
|---|---|
| Prompt eval | 134.8 t/s |
| Generation | 59.1 t/s |
注: 新しい llama-cli は -no-cnv を非推奨(警告あり)。
入力待ちでループするので </dev/null でリダイレクトする、
あるいは llama-server 経由で使うのが推奨。
3. マルチモーダル推論
~/llama.cpp/build/bin/llama-mtmd-cli \
-m ~/nemotron-3/Nemotron-3-Nano-Omni-30B-A3B-Reasoning-GGUF/NVIDIA-Nemotron-3-Nano-Omni-30B-A3B-Reasoning-UD-Q4_K_XL.gguf \
--mmproj ~/nemotron-3/Nemotron-3-Nano-Omni-30B-A3B-Reasoning-GGUF/mmproj-F16.gguf \
-ngl 99 --image ~/nemotron-3/test-image.jpg \
-p "Describe this image in detail." \
-n 256 --no-warmup </dev/null
テスト画像: 1795×2397 の猫写真(Wikimedia の Cat_November_2010-1a.jpg)。
応答抜粋:
A striking tabby cat sitting on a white concrete ledge.
The cat's fur is a beautiful blend of brown, black, and tan,
with classic tabby stripes and a distinctive "M" marking on its forehead.
Its eyes are a captivating green ...
縞模様、額の M 字、緑の瞳、ぼけた背景の枝、青空までを正確に認識。
プロンプト長別の所要時間
| 用途 | プロンプト | -n |
出力 | 総時間 |
|---|---|---|---|---|
| Yes/No 判定 | "Is there a cat in this image?" | 5 | "Yes" | 2.08 秒 |
| 一文説明 | "Describe this image in one short sentence." | 30 | "A tabby cat sits on a wall, gazing directly at the camera." | 2.23 秒 |
| 分類 | "Classify this image: animal, vehicle, food, ..." | 10 | "animal" | 2.03 秒 |
| 詳細記述 | "Describe this image in detail." | 256 | 約 220 トークンの英語説明 | 5.79 秒 |
「画像を理解する」までの所要時間は約 0.8 秒(image encode 約 0.2 秒 + prompt eval 約 0.6 秒)で、
残りは生成トークン数に比例する。
性能サマリ
| 指標 | 値 |
|---|---|
| 画像エンコード | 178 ms |
| 画像デコード | 14 ms |
| Prompt eval | 約 432 t/s |
| Generation | 約 58 t/s |
メモリ使用量(マルチモーダル時)
| 用途 | サイズ |
|---|---|
| モデル本体 | 22,454 MiB |
| KV キャッシュ(1M ctx) | 6,144 MiB |
| ビジョンエンコーダ | 1,514 MiB |
| 計算バッファ | 3,091 MiB |
| 合計(VRAM) | 約 32 GB(48GB の 66%) |
llama-server での常駐運用
CLI 起動のオーバーヘッド(約 2 秒)を省きたい場合は llama-server を推奨。
~/llama.cpp/build/bin/llama-server \
-m ~/nemotron-3/Nemotron-3-Nano-Omni-30B-A3B-Reasoning-GGUF/NVIDIA-Nemotron-3-Nano-Omni-30B-A3B-Reasoning-UD-Q4_K_XL.gguf \
--mmproj ~/nemotron-3/Nemotron-3-Nano-Omni-30B-A3B-Reasoning-GGUF/mmproj-F16.gguf \
-ngl 99 -c 8192 --host 0.0.0.0 --port 8080
OpenAI 互換 API で叩ける(POST /v1/chat/completions)。
ハマりどころ
-
hf downloadのパターン展開
位置引数とファイルパスを混在させると--includeが無視される。 -
PIE リンクエラー
BUILD_SHARED_LIBS=OFFのとき-DCMAKE_POSITION_INDEPENDENT_CODE=ON必須。 -
llama-cliの入力ループ
新しめのビルドでは-no-cnvが非推奨で、stdin がない状況だと
空プロンプト>を無限に出力する。</dev/nullで対処。 -
CUDA API ログ表示
ROCm でもggml_cuda_init: found 1 ROCm devices ...と表示される
(HIP が CUDA API を翻訳しているため)。正常動作。
