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?

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

0
Last updated at Posted at 2026-05-23

はじめに

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

この記事で伝えたいこと

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

解決したい課題

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

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

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

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

課題の原因

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

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

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

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

解決手段

デモ

jetfit_demo.gif

フィルタ・検索・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%
Good 71〜90%
Marginal 91〜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、コメントでフィードバックをもらえると励みになります。よろしくお願いします!

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?