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_disabled | ModelServeSection.astro |
| Call the model | client_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_key | src/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_inference | One-shot実行コマンド(シェル/Python/モジュールごとのバリエーション)。Callの下に「One-shot inference」というタブ付きセクションをレンダリングします。 |
client_call.{shell,python,intro} | Call the modelスニペットのオプションの上書き。省略された場合、ページはエンジンコマンドとhf_checkpointからcurlの例を自動構築します。 |
Run on Jetson: 3つの「ブロックレバー」(OOM vs 非表示 vs グレーアウトの使い分け)
これらは階層的です。サーブマトリクスは次の順序で評価します:
-
hide_run_button: true(フロントマター、トップレベル)- Run on Jetsonセクション全体(Serve + Call + one-shot)を非表示にします。
- モデルがカタログに存在するが、サイトからまだ起動できない場合に使用します(例:NGCダウンロードが必要、ゲートされたチェックポイント、検証待ち)。
- 例:
src/content/models/cosmos-reason2-8b.md— エンジンデータはドキュメント用に保持されますが、実行UIは非表示のままです。
-
matrix_modules_disabled: [moduleId, ...](フロントマター、トップレベル)- リストされたモジュールタブを、このモデルのすべてのエンジンでグレーアウトします。タブは表示されますが、クリックできません。
- Jetsonモジュールが理論的には可能だが、このモデルではまだ検証されていない場合に使用します。
-
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 と正確に一致する必要があります。
ベンチマークデータの追加
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"]
}
}
}
}
- モデルフロントマターに以下を追加します:
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 T5000 | thor_t5000 | t5000 |
| Jetson Thor T4000 | thor_t4000 | t4000 |
| Jetson AGX Orin 64GB | orin_agx_64 | agx_orin_64gb |
| Jetson Orin NX 16GB | orin_nx_16 | orin_nx_16gb |
| Jetson Orin Nano 8GB | orin_nano_8 | orin_nano_8gb |
| Jetson AGX Orin 32GB | orin_agx_32 | 該当なし |
| Jetson Orin NX 8GB | orin_nx_8 | 該当なし |
| Jetson Orin Nano 4GB | orin_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など)と混同しないでください。