0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Nemotron-3-Nano-Omni 30B-A3BをROCmでうごかす

0
Posted at

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)。

test-image.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)。

ハマりどころ

  1. hf download のパターン展開
    位置引数とファイルパスを混在させると --include が無視される。

  2. PIE リンクエラー
    BUILD_SHARED_LIBS=OFF のとき -DCMAKE_POSITION_INDEPENDENT_CODE=ON 必須。

  3. llama-cli の入力ループ
    新しめのビルドでは -no-cnv が非推奨で、stdin がない状況だと
    空プロンプト > を無限に出力する。</dev/null で対処。

  4. CUDA API ログ表示
    ROCm でも ggml_cuda_init: found 1 ROCm devices ... と表示される
    (HIP が CUDA API を翻訳しているため)。正常動作。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?