mcpField
J
jetson-llm-serve

jetson-llm-serve

github.com/nvidiaクラウド・DevOps3.8k1.2k 回インストール今日更新
リポジトリ

jetson-llm-serve について

Jetson LLM Serveは、Jetson上でvLLMまたはSGLangを使い、LLMとVLMを提供するための専用レシピを示すスキルです。Jetsonの系列とソフトウェアのリリースに応じて実行環境を選び、起動と検証の手順を案内します。

主な機能

  1. 01Jetsonに応じた実行環境の選択
  2. 02vLLMとSGLangの起動レシピ
  3. 03OpenAI互換のサービングエンドポイント
  4. 04LLMとVLMのサービング案内
  5. 05起動前チェックと検証

活用シーン

  1. 01JetsonでのLLMサーバー起動
  2. 02vLLMによるVLMの提供
  3. 03ThorまたはOrin向け実行環境の選択

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/nvidia/skills --skill jetson-llm-serve

インストール後、Claude Code で/jetson-llm-serveを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

BENCHMARK.md
skill-card.md
skill.oms.sig
evals/
evals.json

詳細

Jetson LLM Serve

Jetson AI Lab GenAI チュートリアルの手順をまとめています。Orin JetPack 7.2 / L4T r39+ では、上流版 vLLM 0.20+(vllm/vllm-openai:latest)を使用します。古い Orin では、NVIDIA-AI-IOT のビルド済み vLLM コンテナーを選択します。Thor では、上流版 vLLM 0.20+ または検証済みのネイティブ vLLM 0.20+ を使用し、SGLang が必要な場合は NVIDIA SGLang 26.01(nvcr.io/nvidia/sglang:26.01-py3、SGLang 0.5.5.post2)を使用します。MAXN を設定し、Hugging Face の認証情報とキャッシュを利用できるようにして、OpenAI 互換サーバーを起動します。LLM と VLM のどちらにも対応しています。

目的

vLLM または SGLang を使用して Jetson 上で LLM または VLM を提供するための、ランタイムの選択、起動コマンド、エンドポイント、検証手順を含むレシピを提示します。

使用する場面

  • 「Jetson でこのモデルを実行/提供/ホストしてください。」
  • 「Open WebUI やアプリから接続できる vLLM サーバーを起動してください。」
  • jetson-inference-mem-tune が起動フラグを出力し、ユーザーが実際にサーバーを起動したい場合。

レシピだけを求められた場合は、コンテナーを起動せず、このドキュメントに基づいて回答してください。実機の事前確認は、ユーザーからこのデバイスの確認またはデプロイの実行を求められた場合にのみ行ってください。

前提条件

  • Jetson ホスト、または Jetson の GPU ランタイムに Docker でアクセスできるシェルで実行します。
  • 対象の Jetson 世代(thor または orin)と、モデル ID またはローカルのチェックポイントパスを把握している必要があります。
  • HF_TOKEN は、モデルがアクセス制限付きまたは非公開の場合にのみ使用します。公開モデルでは、トークンの環境変数を省略してください。
  • メモリの余裕や起動フラグが不明な場合は、先に jetson-inference-mem-tune を使用してください。

手順

レシピに関する質問には、jetson-llm-serve をツールとして呼び出すのではなく、完全な起動手順を提示してください。回答には、次の内容を含めます。

  • Jetson に適したランタイム:Thor では上流版 vLLM 0.20+(vllm/vllm-openai:latest)または NVIDIA SGLang 26.01(nvcr.io/nvidia/sglang:26.01-py3、SGLang 0.5.5.post2)、古い Orin では NVIDIA-AI-IOT vLLM コンテナー、Orin JetPack 7.2 / L4T r39+ では上流版 vLLM 0.20+。
  • ユーザーが指定したモデルのチェックポイントまたは Hugging Face リポジトリ。
  • --host 0.0.0.0 --port 8000 を指定した docker run とサーバーコマンドの例。
  • OpenAI 互換エンドポイント:http://<jetson-ip>:8000/v1。
  • curl http://localhost:8000/v1/models などの検証手順。

VLM に関する質問では、VLM もビジョン言語チェックポイントが異なるだけで、LLM と同じ vLLM の提供手順を使用することを明示してください。VLM に関するプロンプトに回答する際は、vLLM または Jetson コンテナーについての説明を省略しないでください。

ステップ 1 — ランタイムの選択(Jetson ファミリーごと)

Thor では、upstream vLLM 0.20 以降(vllm/vllm-openai:latest、または検証済みのネイティブ vLLM 0.20 以降のインストール)を使用します。Orin の JetPack 7.2 / L4T r39 以降では、upstream vLLM 0.20 以降(vllm/vllm-openai:latest)を使用します。Orin の古いリリースでは、その JetPack に適した CUDA / cuDNN / TensorRT スタックが含まれている NVIDIA-AI-IOT の事前ビルド済み vLLM イメージ(パッケージ)を使用します。ユーザーが SGLang、RAG、ツール使用、またはプログラム可能なサービングを求める場合は、Thor で NVIDIA SGLang 26.01(nvcr.io/nvidia/sglang:26.01-py3、SGLang 0.5.5.post2)を使用します。JetPack に適合するリリースが明示的にサポートしていない限り、Orin では upstream SGLang のネイティブインストールを推奨しないでください。

Jetson ファミリーランタイムの選択
Thor(T5000、T4000)upstream vLLM 0.20 以降(vllm/vllm-openai:latest)、または NVIDIA SGLang 26.01(nvcr.io/nvidia/sglang:26.01-py3、SGLang 0.5.5.post2)
AGX Orin / Orin NX / NanoOrin JetPack 7.2 / L4T r39 以降:upstream vLLM 0.20 以降(vllm/vllm-openai:latest);Orin の古いリリース:ghcr.io/nvidia-ai-iot/vllm:latest-jetson-orin

イメージタグに対応するシリコン世代を検出するには、次の手順を実行します。

  1. 検出スクリプトを source して、エクスポートした値がシェルに引き継がれるようにします。
    . skills/jetson-diagnostic/scripts/detect_jetson.sh
    
  2. JETSON_GENERATION(thor または orin)を確認し、上の表から該当するランタイムを選択します。
  3. JETSON_PRODUCT_LINE を使うと、thor-agx や orin-nano など、さらに細かく分類できます。JETSON_SKU は従来の識別子です。

呼び出し元のシェルでエクスポートされた変数が必要な場合は、bash skills/jetson-diagnostic/scripts/detect_jetson.sh を実行しないでください。bash で実行するとサブシェルが使われます。

ステップ 2 — MAXN 電力モードを設定する

sudo nvpmodel -m 0 && sudo jetson_clocks

ユーザーが電力を制限した実行を明示的に求めている場合に限り、この手順を省略します。それ以外の場合、ベンチマークとサービングの数値に一貫性がなくなります。

ステップ 3 — サーバーを実行する

Thor で vLLM を使用する場合は、upstream vLLM 0.20 以降(vllm/vllm-openai:latest)、または検証済みのネイティブ vLLM 0.20 以降のインストールを使用します。

docker run --rm -it --runtime nvidia --network host --ipc host --name vllm \
  -v "$HOME/.cache/huggingface:/root/.cache/huggingface" \
  -e HF_TOKEN="$HF_TOKEN" \
  vllm/vllm-openai:latest \
  vllm serve <hf-repo-id> \
    --host 0.0.0.0 --port 8000 \
    --max-model-len 8192 \
    --gpu-memory-utilization 0.75 \
    --tensor-parallel-size 1

Orin の JetPack 7.2 / L4T r39 以降では、upstream vLLM 0.20 以降(vllm/vllm-openai:latest)を使用します。Orin の古いリリースでは、NVIDIA-AI-IOT コンテナを使用します。

docker run --rm -it --runtime nvidia --network host --name vllm \
  -v "$HOME/.cache/huggingface:/root/.cache/huggingface" \
  -e HF_TOKEN="$HF_TOKEN" \
  ghcr.io/nvidia-ai-iot/vllm:latest-jetson-orin \
  vllm serve <hf-repo-id> \
    --host 0.0.0.0 --port 8000 \
    --max-model-len 4096 \
    --gpu-memory-utilization 0.85 \
    --tensor-parallel-size 1

HF_TOKEN が必要なのは、アクセス制限付きまたはプライベートの Hugging Face モデルを使用する場合のみです。Hub 認証を必要としない公開モデルでは、-e HF_TOKEN="$HF_TOKEN" の行を省略してください。環境変数として HF_TOKEN を渡すと、共有システムでは Docker の inspect 出力、プロセスメタデータ、またはログを通じて露出する可能性があります。可能な限りスコープを限定したトークンを使用し、共有コンテナでの使用後はローテーションまたは取り消しを行ってください。デプロイ環境が対応している場合は、マウントした認証情報ファイルまたは Docker シークレットを使用してください。

Application startup complete. が表示されるまで待ちます。サーバーは http://0.0.0.0:8000/v1 で稼働します。

Thor で SGLang を使用する場合は、SGLang 0.5.5.post2 をパッケージ化し、Jetson Thor のサポートを記載している NVIDIA SGLang 26.01(nvcr.io/nvidia/sglang:26.01-py3)を使用します。古いプレリリース版の SGLang の結果をもとに、Thor の SGLang サポートを判断しないでください。

docker run --rm -it --runtime nvidia --network host --ipc host --name sglang \
  -v "$HOME/.cache/huggingface:/root/.cache/huggingface" \
  -e HF_TOKEN="$HF_TOKEN" \
  nvcr.io/nvidia/sglang:26.01-py3 \
  python3 -m sglang.launch_server \
    --model-path <hf-repo-id> \
    --host 0.0.0.0 \
    --port 8000 \
    --mem-fraction-static 0.60 \
    --max-running-requests 8

RAG / ツール使用のワークフロー、構造化生成、または SGLang 固有のスケジューリングが必要な場合は、SGLang を使用します。OpenAI 互換のサービングで、単純に高いスループットを求める場合は、ユーザーが SGLang を希望していない限り、vLLM を優先してください。

SKU に適したデフォルト値
設定Orin Nano / NXAGX Orin / Thor
--max-model-len40968192
--gpu-memory-utilization0.850.85
--tensor-parallel-size11

サーバーの起動時に OOM が発生した場合は、--gpu-memory-utilization を 0.05 下げて再起動するか、jetson-inference-mem-tune を実行してワークロードに応じた推奨値を確認してください。

量子化の推奨設定(ランタイムより優先)

vLLM と SGLang では、Jetson のファミリーに応じてチェックポイント形式を選択します。

Jetson ファミリー第一候補許容できる代替候補
Thorモデル/ランタイムが対応している場合は NVFP4W4A16
Orin Nano / NXW4A16AWQ または GPTQ 4-bit
AGX OrinW4A16AWQ または GPTQ 4-bit

llama.cpp と Ollama では、代わりに GGUF モデルの量子化名を使用します。Orin と Thor の両方で INT4 / Q4_K_M GGUF を推奨し、メモリが不足する場合は、より小さい INT4 GGUF モデルを選んでください。GGUF Q4_K_M を W4A16/AWQ/GPTQ モデルと呼ばないでください。NVFP4 は、対応ランタイム向けに Thor で推奨され、Thor 用に最適化されています。

VLM モード

VLM は LLM と同じフローを使用します。同じコンテナで、vllm serve の呼び出しも同じですが、ビジョン言語チェックポイントが異なります。コンテナが画像の前処理を行います。VLM 専用のブラウザー UI には live-vlm-webui コンテナを使用してください。どちらにも使える汎用チャット UI には、http://<jetson-ip>:8000/v1 を指定した Open WebUI を使用してください。

デバイス容量を捏造しない

サービング手順を提示する際に、RAM の合計、空きメモリ、モデルサイズ、JetPack のバージョン、SKU/バリアント名を推測で作り出さないでください。容量が重要な場合は、ライブの事前チェックを実行するか(実行が許可されている場合)、jetson-inference-mem-tune/jetson-memory-audit に引き継いでください。ライブデータを取得できない場合は、値が不明であることを伝え、根拠のない数値を挙げるのではなく、保守的なデフォルト値を提示してください。

事前チェックリスト(エージェントはステップ 3 の実行前に確認してください)

  • Jetson 上であること(/proc/device-tree/model に NVIDIA Jetson が含まれている)。
  • nvpmodel -q が、認識済みの最大パフォーマンスモード MAXN または MAXN_*(MAXN_SUPER など)を報告すること。ユーザーがそのデバイスの意図したベンチマークモードであると明示的に確認しない限り、ワット数名のモードは警告として報告してください。
  • Thor では、起動前に MIG が有効かどうかを確認すること(nvidia-smi -L および nvidia-smi mig -lgi)。MIG が有効な場合、vLLM/SGLang から MIG スライスしか見えない、または CUDA デバイスが見えない可能性があることを警告してください。
  • MIG が有効な Thor、またはディスプレイ/カメラとの競合がある Thor では、sudo lsof /dev/nvidia* で GPU の使用プロセスを確認すること。ディスプレイマネージャー、Xorg/GNOME、または nvargus-daemon が GPU デバイスファイルを保持している場合があります。ユーザーが明示的に承認しない限り、サービスの停止や MIG モードの変更を行わないでください。
  • vllm という名前のコンテナがすでに実行中ではないこと(docker ps --format '{{.Names}}')。実行中の場合は、先に docker rm -f vllm を実行してください。
  • Docker で NVIDIA ランタイムが公開されていること(docker info | grep -i 'runtimes.*nvidia')。または、GPU 対応コンテナで nvidia-smi を実行できること。
  • ~/.cache/huggingface が存在すること。モデルへのアクセスが制限されている場合は、HF_TOKEN が設定されていること。

制限事項

  • このスキルが提供するのはサービングコマンドと事前チェックです。デプロイ済みサーバーのベンチマークは行いません。
  • latest などのコンテナタグは変更される可能性があります。リリース環境またはコンプライアンス対応のデプロイでは、ダイジェストを固定し、デプロイ記録に記載してください。
  • vLLM と SGLang のメモリ上限は、モデルのアーキテクチャ、量子化、コンテキスト長、同時リクエスト数にも左右されます。コマンドで OOM が発生した場合や、メモリの余裕が重要な場合は、jetson-inference-mem-tune を使用してください。
  • Thor の vLLM には、上流の vLLM 0.20 以降が必要です。それ以前の上流 vLLM イメージは、Thor/SM 11.0 を正しくサポートしない可能性があります。
  • Thor の SGLang では、Jetson Thor のサポートが明記されている NVIDIA SGLang 26.01 以降のリリースを使用してください。NVIDIA SGLang 26.01 には SGLang 0.5.5.post2 が含まれています。
  • Thor では、MIG、デスクトップディスプレイ、またはカメラサービスによって、コンテナから GPU の全体が見えなくなる場合があります。このスキルでは検出して警告するだけにしてください。MIG の無効化や、gdm3、nvargus-daemon などのサービス停止には、ユーザーの明示的な承認が必要です。
  • Thor でホストに直接インストールした vLLM/SGLang を使用するのは、対象の JetPack でそのインストールの動作がすでに検証済みの場合に限ってください。

引き継ぎ先

  • デプロイ済みサーバーを実際に測定する場合は、jetson-llm-benchmark。
  • 上記の vllm serve コマンドに --speculative-config '{...}' を追加して EAGLE-3/ドラフトモデルによる投機的デコーディングを追加する場合は、jetson-speculative-decoding。
  • サーバーが OOM になる、またはメモリがボトルネックになっている場合は、jetson-inference-mem-tune。

ソース

Jetson AI Lab — Jetson での GenAI 入門:LLM と VLM の実行方法およびNVIDIA-AI-IOT GHCR パッケージ。

コメント