Communitygithub.com

NVIDIA-AI-IOT/jetson-ai-lab

Jetson AI Labのモデルカタログページ(フロントマター、推論エンジン、ベンチマーク連携、UIブロック制御)を設定・編集するためのスキルです。

jetson-ai-lab とは?

このスキルは、Jetson AI Labの静的Astroサイトにおけるモデルカタログページの設定と編集を支援します。モデルページはMarkdownファイル(YAMLフロントマター)で構成され、Hero、Model Detailsサイドバー、Run on JetsonのServe/Call/One-shot UI、ベンチマークチャートなど、ほぼすべての可視要素がフロントマターによって駆動されます。スキルは、フロントマターの各タグ(precision, modalities, benchmark_keyなど)の役割、3つの「ブロックレバー」(hide_run_button, matrix_modules_disabled, modules_supported)の優先順位、そしてベンチマークデータ(src/data/benchmarks.json)との連携方法を詳細に説明します。特に、OOM(メモリ不足)、DNR(動作しない)、null(未テスト)の概念を区別し、モデルが特定のJetsonモジュールで実行可能かどうかを適切に表現する方法を提供します。

対応~Claude Code✓Codex CLI~Cursor
npx skills add https://github.com/NVIDIA-AI-IOT/jetson-ai-lab/tree/HEAD/.agents/skills/jetson-model-catalog-inference

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

Jetson AI Lab: モデルカタログページの設定

現実の確認

  • Jetson AI Lab は 静的Astroサイト です。推論APIをホストしていません。ユーザーはサイトからコマンドをコピーして、Jetson(または他のマシン)で実行します。
  • モデルページは、Astroのコンテンツコレクション models 内の Markdownファイル です:src/content/models/<slug>.md。
  • ファイルの slug(拡張子 .md を除いたファイル名)がURLセグメントになり、公開ルート /models/<slug> となります(src/pages/models/[slug].astro 参照)。
  • モデルページ上のほぼすべての可視要素は、そのファイルの YAMLフロントマター によって駆動されます(Hero、Model Detailsサイドバー、Run on Jetsonタブ、Callスニペット、one-shotタブ、ベンチマークチャート)。本文のMarkdownは、下部の Model Details 散文セクションのみを埋めます。

「Jetson AI Lab推論API」のベースURLをでっち上げないでください — そんなものはありません。


ページの構造(上から下まで)

セクション駆動元コンポーネント/ファイル
Hero(タイトル、バッジ、「Command to Run on Jetson」/「Benchmark」/「Model Details」チップ)title, is_new, type, short_description、エンジンとbenchmark_keyの有無src/pages/models/[slug].astro
スペックサイドバー(パラメータ、モダリティ、コンテキスト長、ライセンス、精度ピル)parameters(またはmodel_size)、modalities(またはvision_capable)、context_length、license、precision(トークンごと)src/pages/models/[slug].astro L137–193
Run on Jetson → Serveマトリクスserving.entries(推奨)またはsupported_inference_engines、さらにmatrix_modules_disabledModelServeSection.astro
Call the modelclient_call.{shell,python,intro}(またはエンジンとhf_checkpointから自動構築)ModelCallSection.astro
One-shot推論(モジュールごとのタブ)one_shot_inference.*ModelOneShotSection.astro + src/lib/evalRunModal.ts
ベンチマークチャートbenchmark_key(+オプションのbenchmark_series)→ src/data/benchmarks.jsonと結合ModelBenchmarkSection.astro
Model Details散文+外部リンク(Try on build.nvidia.com、View on HuggingFace)本文Markdown + build_nvidia_url、huggingface_url(またはhf_checkpoint)src/pages/models/[slug].astro L242–289

フロントマターリファレンス

すべてのモデルページはYAMLフロントマターによって駆動されます。バリデーションは src/content/config.ts(modelsSchema)にあります。

常に含めるタグ

スキーマ必須(ビルドが失敗する)またはリポジトリ内のすべてのモデルで使用されるもの。新しいモデルを追加する際はすべて含めてください。

タグスキーマ機能
title必須モデルページとカタログカードに表示される名前。
short_description必須カタロググリッドとHeroサブタイトルに表示される1行の要約。
precision必須スラッシュまたはカンマ区切りの量子化トークン(例:"NVFP4 / FP8 / Q4_K_M GGUF")。各トークンはサイドバーに色付きピルとしてレンダリングされます([slug].astroのprecisionPill)。
family任意だが普遍的に使用カタログ内のモデルをグループ化します。特別な値"Google Gemma4"は、散文の上にGemma 4チュートリアルCTAバナーをトリガーします。
model_id, icon, is_new, order, type, hf_checkpoint, huggingface_url, minimum_jetson任意だが普遍的に使用カタログカード/Hero/外部リンク。huggingface_urlは省略された場合、https://huggingface.co/${hf_checkpoint}にフォールバックします。

Model Detailsサイドバータグ(Heroの右側にあるダークなスペックカードを駆動)

これらをスキップすると、サイドバーからその行が消えます(エラーにはならず、単に洗練度が下がります)。

タグサイドバーの行備考
parameters(またはmodel_sizeへのフォールバック)「Parameters」自由テキスト。例:"~9B" または "30B total / 3B active"。
modalities: [...]「Modalities」`"Text"
vision_capable(ブール値)(Modalitiesのフォールバック)modalitiesが存在する場合でも明示的に設定します — カタログフィルターなど他の場所で使用されます。
context_length「Context Length」自由テキスト。例:"128K"、"262K"。
license「License」自由テキスト。例:"Apache 2.0"、"NVIDIA Open Model License"。
model_size(Parametersのフォールバック)例:"12GB"。
memory_requirementsサイドバーには表示されないが、他のUIで使用例:"16GB RAM"。

状況に応じたタグ

モデルが必要とする場合のみ追加してください。

タグ使用時リポジトリでの使用率
build_nvidia_urlモデルにNVIDIA Buildページがある場合 → Try on build.nvidia.comボタンを追加。モデルの約67%
matrix_modules_disabled一部のマトリクスモジュールタブを、このモデルのすべてのエンジンでグレーアウト/非クリック可能にする場合。モデルの約10%
hide_run_buttonエンジンデータが存在する場合でも、Run on Jetson UI全体(Serve + Call + one-shot)を非表示にする。モデルの約5%
benchmark_keysrc/data/benchmarks.jsonに測定されたパフォーマンスがあるモデル。値はそのベンチマークエントリのnameフィールドと一致する必要があります。モデルの約30%
benchmark_series: [...]追加の比較バーを並べて表示する(例:同じファミリーの前世代と比較)。各値はbenchmarks.jsonの別のnameです。一部のみ

推論ブロック(hide_run_button: trueでない限り、少なくとも1つ必須)

ブロック目的
serving.entries新しいスタイルのエンジンリスト — 新しいモデルでは推奨。 空でない場合、UIでsupported_inference_enginesを上書きします。
supported_inference_enginesレガシーなエンジン配列。現在も動作し、今日最も一般的な形式です。
one_shot_inferenceOne-shot実行コマンド(シェル/Python/モジュールごとのバリエーション)。Callの下に「One-shot inference」というタブ付きセクションをレンダリングします。
client_call.{shell,python,intro}Call the modelスニペットのオプションの上書き。省略された場合、ページはエンジンコマンドとhf_checkpointからcurlの例を自動構築します。

Run on Jetson: 3つの「ブロックレバー」(OOM vs 非表示 vs グレーアウトの使い分け)

これらは階層的です。サーブマトリクスは次の順序で評価します:

  1. hide_run_button: true(フロントマター、トップレベル)

    • Run on Jetsonセクション全体(Serve + Call + one-shot)を非表示にします。
    • モデルがカタログに存在するが、サイトからまだ起動できない場合に使用します(例:NGCダウンロードが必要、ゲートされたチェックポイント、検証待ち)。
    • 例:src/content/models/cosmos-reason2-8b.md — エンジンデータはドキュメント用に保持されますが、実行UIは非表示のままです。
  2. matrix_modules_disabled: [moduleId, ...](フロントマター、トップレベル)

    • リストされたモジュールタブを、このモデルのすべてのエンジンでグレーアウトします。タブは表示されますが、クリックできません。
    • Jetsonモジュールが理論的には可能だが、このモデルではまだ検証されていない場合に使用します。
  3. engines[].modules_supported: [moduleId, ...](エンジンごと、serving.entries[]またはsupported_inference_engines[]内)

    • 許可リスト:リストされたモジュールIDのみがそのエンジンで有効になります。リスト外のセルは、そのエンジン行でグレーアウト表示されます。
    • フィールドを完全に省略 → エンジンはすべてのマトリクスモジュールをサポートします。空の配列はエンジンが何もサポートしないことを意味します(稀)。
    • モデルはどこでも動作するが、特定のエンジンがサブセットでのみ動作する場合に使用します(例:vLLM Thorのみ、Ollama Orin+Thor)。

OOMは別の概念であり、src/data/benchmarks.jsonに存在します — 以下のベンチマークを参照してください。

表現したいこと…使用するもの…
「このモデルはサイトから実行する準備ができていない」hide_run_button: true
「このモデルはOrin Nanoでは(どのエンジンでも)実行できない」matrix_modules_disabled: [orin_nano_8]
「vLLMはこのモデルではThorでのみ動作し、llama.cppはどこでも動作する」vLLMエントリ:modules_supported: [thor_t5000, thor_t4000];llama.cppでは省略
「ベンチマークしたところ、T4000でメモリ不足になった」benchmarks.jsonのその量子化に"oom": ["t4000"]を追加(モデルフロントマターには属さない)
「ベンチマークしたところ、モデルがOrin Nanoで単に動作しない」benchmarks.jsonのその量子化に"dnr": ["orin_nano_8gb"]を追加
「この組み合わせはまだ測定していない」benchmarks.jsonで値をnullに設定。マーカーは描画されず、バーは単に存在しません。

推論データ: サーブマトリクス(エンジン)

エンジンリストは src/lib/modelFrontmatterAdapter.ts の getSupportedInferenceEngines によって構築されます:

  • serving.entries が存在し、空でない場合 → それらのエントリが使用されます(新しい作業では推奨)。
  • それ以外の場合は supported_inference_engines(レガシー配列)が使用されます。

各エンジン行は src/lib/inferenceCommands.ts の SupportedEngineEntry にマッピングされます。推奨:

  • serve_command_orin / serve_command_thor は、長時間実行サーブコマンド用(vLLM、Ollamaなど)。
  • レガシーな run_command_orin / run_command_thor は非推奨ですが、フォールバックとして引き続き受け入れられます。

オプションフィールド:

  • modules_supported — 上記のブロックレバー #3を参照。
  • run_commands_by_module: Runマトリクスセル用のセルごとの上書きマップ { moduleId: command }。
  • install_command / install_command_orin / install_command_thor: サーブコマンドの上に # Installation ブロックとして接頭辞付け。

エンジン表示順は固定で、modelFrontmatterAdapter.tsのsortEnginesForUiによって決定されます:vLLM → SGLang → llama.cpp → Ollama → Edge-LLM → その他(アルファベット順)。フロントマターから順序を制御しようとしないでください。

正規のJetsonモジュールID

src/lib/inferenceCommands.ts の JETSON_MATRIX_MODULES で定義されています。modules_supported / matrix_modules_disabled / one_shot_inference.modules_supported ではこれらの正確なIDを使用してください。

モジュールIDマトリクスタブ?プラットフォーム
thor_t5000はいthor
thor_t4000はいthor
orin_agx_64はいorin
orin_nx_16はいorin
orin_nano_8はいorin
orin_agx_32データのみ(タブなし)orin
orin_nx_8データのみ(タブなし)orin
orin_nano_4データのみ(タブなし)orin

「データのみ」のID(showInMatrixUi: false)は有効なフロントマターであり、platformKeyによってコマンドを解決しますが、Serve/Runマトリクスタブは表示されません。新しいIDを発明しないでください — リストを拡張するにはJETSON_MATRIX_MODULESのコード変更が必要です。

リポジトリ内の例:

  • serving.entries(新しいスタイル):src/content/models/ministral3-8b-reasoning.md
  • レガシーな supported_inference_engines とリッチなエンジンごとの modules_supported:src/content/models/nemotron-3-nano-omni.md
  • hide_run_button: true:src/content/models/cosmos-reason2-8b.md

One-shot推論

オプションのフロントマターブロック one_shot_inference(スキーマは src/content/config.ts)。フィールド:

  • run_command_orin、run_command_thor — プラットフォームごとの単一コマンド実行。
  • shell、python — プラットフォーム固有ではないスニペット。
  • shell_by_module、python_by_module — 正規のモジュールIDをキーとした、モジュールごとの上書きマップ。
  • modules_supported — 表示するモジュールタブを制限します。
  • intro — タブの上に表示されるオプションのMarkdownイントロ。

表示:ModelOneShotSection.astro は、上記のコマンドフィールドの少なくとも1つが空でない場合にセクションを表示します(hasContentチェック)。

スニペット/モジュール解決は src/lib/evalRunModal.ts にあります(evalSnippetByModule、evalMatrixModuleSpecsを参照)。


Call the model(client_call)

オプションのフロントマターブロック — Call the modelに表示される自動生成されたcurlの例を上書きします。

client_call:
  intro: "サーバーが起動したら:"
  shell: |-
    curl -s http://${JETSON_HOST}:8080/v1/chat/completions \
      -H "Content-Type: application/json" \
      -d '{ "model": "my_model", "messages": [{"role":"user","content":"hi"}] }'
  python: |-
    import openai
    ...

client_call を完全に省略すると、ModelCallSection.astro が hf_checkpoint と最初のエンジンのサーブコマンドから例を合成します。


ベンチマークデータ

ベンチマーク数値はモデルフロントマターにはありません。これらは src/data/benchmarks.json の models[] の下にあります。モデルページはフロントマターフィールド benchmark_key を介して結合し、これは models[].name と正確に一致する必要があります。

ベンチマークデータの追加

  1. src/data/benchmarks.json の models[] にエントリを追加します:
{
  "family": "Family Name",
  "name": "Exact Name (this is the join key)",
  "releaseDate": "YYYY-MM-DD",
  "capabilities": { "language": true, "vision": false, "audio": false, "vla": false },
  "isl": 2048,
  "osl": 128,
  "engines": {
    "vLLM": {
      "NVFP4": {
        "concurrency1": { "t5000": 63.3, "t4000": 51.8, "agx_orin_64gb": null, "orin_nx_16gb": null, "orin_nano_8gb": null, "dgx_spark": 59.6 },
        "concurrency8": { "t5000": 181.2, "t4000": 147.4, "agx_orin_64gb": null, "orin_nx_16gb": null, "orin_nano_8gb": null, "dgx_spark": 191.2 }
      },
      "FP8": {
        "concurrency1": { "t5000": 54.7, "t4000": null, "agx_orin_64gb": null, "orin_nx_16gb": null, "orin_nano_8gb": null, "dgx_spark": 52.3 },
        "concurrency8": { "t5000": 129.8, "t4000": null, "agx_orin_64gb": null, "orin_nx_16gb": null, "orin_nano_8gb": null, "dgx_spark": 138.6 },
        "oom": ["t4000"]
      }
    },
    "Ollama": {
      "Q4_K_M": {
        "concurrency1": { "t5000": 27, "t4000": null, "agx_orin_64gb": 17, "orin_nx_16gb": null, "orin_nano_8gb": null, "dgx_spark": null },
        "concurrency8": { "t5000": 28, "t4000": null, "agx_orin_64gb": 17, "orin_nx_16gb": null, "orin_nano_8gb": null, "dgx_spark": null },
        "oom": ["orin_nx_16gb", "orin_nano_8gb"]
      }
    }
  }
}
  1. モデルフロントマターに以下を追加します:
benchmark_key: "Exact Name (this is the join key)"
benchmark_series:
  - "Predecessor Family Name"   # オプション — 比較バーを重ねて表示します

ベンチマークプロダクトID ≠ マトリクスモジュールID(重要な注意点)

ベンチマーク軸は、Run/Serveマトリクスとは異なるIDを使用します:

ハードウェアマトリクスモジュールID(フロントマター)ベンチマークプロダクトID(benchmarks.json)
Jetson Thor T5000thor_t5000t5000
Jetson Thor T4000thor_t4000t4000
Jetson AGX Orin 64GBorin_agx_64agx_orin_64gb
Jetson Orin NX 16GBorin_nx_16orin_nx_16gb
Jetson Orin Nano 8GBorin_nano_8orin_nano_8gb
Jetson AGX Orin 32GBorin_agx_32該当なし
Jetson Orin NX 8GBorin_nx_8該当なし
Jetson Orin Nano 4GBorin_nano_4該当なし
DGX Spark該当なしdgx_spark

常に正しいIDセットを使用してください。


モデルカタログ(src/content/models/ とカードリスト)

モデルのカードは src/pages/models/index.astro にリストされており、src/lib/collections.ts の getSortedModels によって提供されます。カードは family フィールドでグループ化され、order フィールドで各ファミリー内でソートされ、is_new が true のモデルには「New」バッジが表示されます。

モデルがカタログリストに表示されるためには、src/content/models/ に .md ファイルが存在し、すべてのスキーマ必須フィールドが設定されている必要があります。

特別なファミリー値:

  • "Google Gemma4":コンテンツの上にチュートリアルCTAバナーをトリガーします。
  • "NVIDIA Llama":特別なスタイリングやバッジはありませんが、将来的に予約されています。

その他のヒント

  • 新しいモデルを追加するときは、src/content/models/ に .md ファイルを作成し、必要なすべてのフロントマターフィールドを設定します。少なくとも1つの推論エンジンブロック(serving.entries または supported_inference_engines)を含めるか、hide_run_button: true を設定します。
  • hide_run_button: true はすべての推論ブロックを隠すわけではありません — これはRun on Jetson UIを非表示にするだけです。詳細サイドバー、ベンチマーク、散文は引き続き表示されます。エンジンデータをドキュメントのために保持するが、UIから実行できないようにしたい場合は、このオプションを使用します。
  • ベンチマークデータには OOM / DNR / null を使用します:
    • oom:モデルがメモリ不足で実行に失敗した場所の製品ID配列。マトリクスに「OOM」マーカーを描画します。
    • dnr:モデルが単に動作しない場所の製品ID配列(例:互換性のないエンジン、依存関係の欠落)。マトリクスに「DNR」マーカーを描画します。
    • null:特定のセルに対してベンチマークが行われていません。マーカーは描画されません。
  • ベンチマークデータは models[].engines 内の製品IDを使用します(t5000、agx_orin_64gb など)。マトリクスモジュールID(thor_t5000、orin_agx_64 など)と混同しないでください。

関連スキル