← 기사 목록
日本語https://qiita.com/tags/llm/feed

jetfitでJetson上のLLM選びの迷いを一掃するかも?

추출된 키워드

33
Jetson·5LLM·5jetfit·5統合メモリ·4帯域幅·4量子化·4llama.cpp·4GGUF·4TUI·3CUDA·3llama-bench·3tok/s·3FP4·3CLI·3KV キャッシュ·3OOM·3HuggingFace·3オンデバイス推論·3Jetson Orin NX 16GB·3llmfit·3PyTorch·2サーマルスロットリング·2MacBook·2Linux·2macOS·2DGX Spark GB10·2Jetson Nano·2Llama-3.1-8B-Q4_K_M.gguf·2DGX Spark·2Jetson AGX Thor·2JetPack·2uv·2pip install jetfit·2

원문

6,833
jetfitでJetson上のLLM選びの迷いを一掃するかも?

はじめに

llmfit からアイデアをもらい、Jetson 向けに作ってみました。llmfit は汎用の LLM 選定ツールですが、jetfit は Jetson シリーズの統合メモリ・帯域幅スペックに特化したスコアリングになっています。まだ荒削りな部分も多いので、使ってみた感想・バグ報告・改善提案など、なんでもフィードバックをもらえると嬉しいです。

この記事で伝えたいこと

  • Jetsonシリーズ上でLLMを動かす際の「モデル選び・量子化選び」はツールで一発解決できる
  • jetfit
    はハードウェアを自動検出し、約70モデル × 6段階の量子化をスコアリングして最適解を提示してくれる
  • インストールは
    pip install jetfit
    の1行。TUIもCLIも両方使える

解決したい課題

Jetson Orin NX 16GB でロボットのオンデバイス推論を試みていたとき、毎回こんな作業をしていました。

  • HuggingFace でモデルを探す
  • llama.cpp
    で Q4_K_M をダウンロード(数GB)
  • 実行 → OOM
  • Q3_K に落としてリトライ
  • 今度は遅すぎて使い物にならない
  • 別モデルを探して①に戻る

この「ダウンロード → 試す → 失敗 → やり直し」のループがかなり非効率でした。

「このJetsonで、このモデルの、どの量子化なら動くか」を事前に計算できれば、ダウンロード前に答えがわかるはずです。

課題の原因

Jetson のような統合メモリデバイスでは、以下の合計値が利用可能な RAM を超えるとOOMになります。

  • モデルの重み(量子化レベルによって変動)
  • KV キャッシュ(fp16)
  • ランタイムオーバーヘッド(約 0.5 GB)

さらにトークン生成速度はメモリ帯域幅がボトルネックになるため、各 Jetson デバイスの帯域幅スペックも考慮しないと「動くけど遅すぎる」という結果になります。

これを毎回手動で計算するのは手間がかかりすぎます。

解決手段

デモ

フィルタ・検索・SIM・Plan・Detail・Compare・Calibrate など、主要な操作を一通り収めています。

インストール

pip install jetfit

uv
を使う場合:
uv tool install jetfit   # グローバルインストール
uvx jetfit               # インストールなしで即実行

TUI 起動

jetfit

起動すると以下のような画面が表示されます。

  • 上部バー:検出されたデバイス名・RAM・帯域幅・JetPack バージョン
  • モデル一覧:総合スコア順。各行に推定 tok/s・最適量子化・メモリ使用率・適合グレードが表示される

主要なキーバインドは以下の通りです。

キー動作
j
/
k
モデルの移動
Enter
詳細ビュー(全量子化ラダーを表示)
p
プランモード(コンテキスト・量子化・目標 TPS を設定)
S
ハードウェアシミュレーション(別デバイスのプレビュー)
C
キャリブレーション(実機で tok/s を実測)
d
HuggingFace から GGUF を直接ダウンロード
/
検索バー
c
マークしたモデルを並べて比較

CLI モード

スクリプトや自動化に活用できます。

# ハードウェア情報を確認
jetfit system

# 現在のデバイス向けにモデルを提案
jetfit recommend

# モデル名で絞り込み
jetfit recommend --model llama

# 量子化レベルを固定して検索
jetfit recommend --quant Q4_K_M

# 使用可能なメモリを手動で指定
jetfit recommend --available-gb 12.0

# 別のハードウェアをシミュレーション
jetfit recommend --profile jetson_agx_orin_64gb

# JSON 形式で出力(他ツールとの連携に)
jetfit recommend --json

仕組みの解説

メモリ使用量の見積もり

必要メモリ = モデルの重み + KV キャッシュ(fp16) + 0.5 GB(オーバーヘッド)

FP4 対応デバイス(Jetson AGX Thor・DGX Spark)では、モデルの重みが実質半分になります。

適合グレード

グレードメモリ使用率
Perfect≤ 70%
Good71〜90%
Marginal91〜100%
TooTight> 100%

TooTight
はロードできません。
Marginal
は動作することもありますが、他プロセスとのメモリ競合で OOM になるリスクがあります。

速度推定

tok/s = (帯域幅 GB/s ÷ 実効モデルサイズ GB) × 効率係数 × 量子化速度係数
  • 効率係数:デフォルトは 0.50〜0.55(デバイスプロファイルごとに異なる)。
    A
    キーで手動調整できます
  • 量子化速度係数:Q8_0 が 1.00×、Q2_K が 1.80×

総合スコア(0〜100)

要素重み
正規化速度45%
適合レベル35%
量子化品質20%

スコアが高いほど「速く、メモリに余裕があり、品質も高い」モデルです。

キャリブレーション(推定精度を上げたい場合)

llama-bench
で実機の tok/s を計測し、効率係数を逆算します。一度実行すれば、以降すべてのモデルの推定精度が向上します。
# llama.cpp(CUDA 有効)のビルド
git clone https://github.com/ggml-org/llama.cpp
cmake -B build -DGGML_CUDA=ON && cmake --build build -j$(nproc)

# キャリブレーション実行
jetfit calibrate ~/models/Llama-3.1-8B-Q4_K_M.gguf

結果は

~/.config/jetfit/calibration.json
に保存されます。

Tip:7B 以上のモデルを使うと精度が高くなります。1B 以下はメモリ帯域幅ではなく演算性能がボトルネックになるため、帯域幅効率を低く見積もりすぎてしまいます。

サポートハードウェア(22 デバイス)

Jetson Nano(4 GB / 25.6 GB/s)から DGX Spark GB10(128 GB / 273 GB/s)まで対応しています。

非 Jetson 環境(macOS・Linux)では自動でシミュレーションモードに切り替わり、

S
キーで任意のデバイスプロファイルを選択できます。手元の MacBook で Orin NX の結果をプレビューする、といった使い方も可能です。

留意点・デメリット

  • 速度推定はあくまで目安です。実環境では他プロセスのメモリ使用量、サーマルスロットリング、バッチサイズなどが影響します。正確な値が必要な場合はキャリブレーションを実施してください。
  • モデルカタログは現在約 70 モデルを内蔵しています。カタログにないモデルは
    --available-gb
    オプションやプランモードで手動計算できます。
  • llama.cpp
    (GGUF 形式)専用です。PyTorch モデルの直接評価には対応していません。

まとめ

jetfit
を使えば、「Jetson でこのモデルは動くか?」という問いにダウンロード前に答えが出ます。

無駄なダウンロードと試行錯誤のサイクルから解放されます。

👉 https://github.com/mannsub/jetfit

まだ未熟なツールですが、Jetson で LLM を触っている方にとって少しでも役立てば嬉しいです。「動かない」「こんな機能がほしい」「ここがおかしい」など、どんな小さなことでも Issue や PR、コメントでフィードバックをもらえると励みになります。よろしくお願いします!