| 名称 | jetson-inference-mem-tune |
| 描述 | 为任何 NVIDIA Jetson 上的 LLM/VLM 工作负载选择服务栈和每个运行时的内存标志(vLLM、SGLang、llama.cpp、TensorRT Edge-LLM)。 |
| 版本 | 0.0.1 |
| 开源协议 | “Apache-2.0” metadata: |
| 作者 | “Jetson Team” tags: [jetson, inference, memory] languages: [python] data-classification: public |
Jetson 推理内存调优
针对给定的 Jetson SKU/变体和用户工作负载,推荐推理运行时以及要传递给运行时的具体内存相关参数。不包含量化方案选择——那属于模型基准测试技能——但会指出每个运行时可以有效服务的最低精度门槛。
用途
将实时的 jetson-memory-audit 快照转换为 Jetson 上 LLM/VLM 服务的运行时和启动参数建议。当用户需要适配模型、降低 OOM 风险或切换到更低内存的服务栈时使用。
使用时机
- “在 Orin Nano 8 GB 上运行 7B 模型,应该用哪个服务栈?”
- “vLLM 内存不足(OOM)——
--gpu-memory-utilization和--max-model-len应该设为多少?” - “同样的模型,更少内存——能否从 vLLM 切换到 llama.cpp?”
- 在
jetson-memory-audit显示模型服务器是 NvMap / PSS 最大消耗者之后。
先决条件
- 从目标 Jetson 上当前的
jetson-memory-audit/scripts/audit.shJSON 快照开始。 - 确定预期工作负载:
llm-server、vlm-server、embedding或rag。 - 如果用户给出期望的空闲内存目标,将其作为
--target-mb传入;否则脚本将使用 SKU 默认值。
可用脚本
| 脚本 | 用途 | 参数 |
|---|---|---|
scripts/recommend.py |
读取审计 JSON 并输出运行时和启动参数建议。 | --audit PATH、--runtime、--workload、--target-mb、--human。 |
如果您的代理运行时支持 run_script,请调用 run_script("scripts/recommend.py", ["--audit", "/tmp/audit.json", "--runtime", "auto", "--workload", "llm-server"]) 并总结返回的 JSON。否则,请从仓库根目录使用 python3 运行它。
说明
- 运行
jetson-memory-audit/scripts/audit.sh捕获设备基线。 - 运行
scripts/recommend.py --audit /tmp/audit.json --runtime auto --workload llm-server --target-mb 6000获取包含运行时和参数推荐的 JSON。 - 代理展示建议的运行时和精确的 CLI 参数。用户(或外部代理)使用这些参数启动/重启服务。
- 重新运行审计进行验证。
预期工作流
对特定提问使用 scripts/recommend.py 并回答其 JSON 输出。如果直接执行受阻,请运行 python3 {baseDir}/scripts/recommend.py ...。
- 对于 vLLM OOM 类提问,使用
--runtime vllm --workload llm-server运行,并引用launch_flags中具体的--gpu-memory-utilization=<0.x>和--max-model-len=<number>值。 - 对于“最低内存”或 Orin Nano 8 GB 类提问,使用
--runtime auto --workload llm-server运行;优先选择 JSON 中的运行时,并在选择llama-cpp时明确提及 GGUF / 4-bit 权衡。 - 对于 SGLang 类提问,使用
--runtime sglang运行,并引用--mem-fraction-static、--max-running-requests以及任何上下文/KV 缓存说明。 - 对于“从 vLLM 切换到 llama.cpp”类提问,使用
--runtime llama-cpp运行,并引用-ngl、-c和--no-mmap。
限制
- 建议的时效性仅与审计 JSON 一致。在停止服务、更改电源模式或重启模型服务器后,请重新运行
jetson-memory-audit。 - 脚本根据 SKU 默认值和审计总数估算内存压力;特定模型的 KV 缓存、量化和分词器行为可能仍需要基准测试。
- 此技能仅输出参数。它不启动、停止或重启模型服务器。
错误处理
- 退出码
2:审计 JSON 无法读取、解析或不含有效的数字内存字段。请询问用户重新运行jetson-memory-audit/scripts/audit.sh。 - 退出码
3:不支持的运行时或工作负载请求。请使用scripts/recommend.py --help中列出的--runtime和--workload值重新运行。 - 空的或缺失的
launch_flags:不要编造后备参数。报告脚本失败并请求新的审计或受支持的运行时。
recommend.py 的输出契约
{
"sku": "orin-nx",
"variant": "orin-nx-16gb",
"mem_total_gb": 16,
"runtime": "vllm",
"rationale": "在此内存预算下,连续批处理+分页注意力提供最高吞吐。",
"launch_flags": [
"--gpu-memory-utilization=0.55",
"--max-model-len=4096",
"--max-num-seqs=8",
"--enable-prefix-caching"
],
"alternatives": [
{ "runtime": "llama-cpp", "rationale": "使用 GGUF Q4_K_M 时内存下限更低。", "launch_flags": ["-ngl 28", "-c 4096", "--no-mmap"] }
],
"notes": ["如果同时运行小型 VLM,请进一步降低 --gpu-memory-utilization。"]
}
覆盖的运行时
| 运行时 | 最适合于 | 关键内存旋钮 | 首选安装路径 |
|---|---|---|---|
| llama.cpp | 最紧预算;GGUF;Orin Nano 级 | -ngl、-c、--mlock、--no-mmap |
ghcr.io/nvidia-ai-iot/llama_cpp:latest-jetson-{orin,thor} |
| vLLM | 使用连续批处理的高吞吐服务 | --gpu-memory-utilization、--max-model-len、--max-num-seqs、--enable-prefix-caching |
Thor 和 Orin JetPack 7.2 / L4T r39+:上游 vLLM 0.20+(vllm/vllm-openai)容器或经过验证的原生 vLLM 0.20+。较旧的 Orin:NVIDIA-AI-IOT 镜像 |
| SGLang | 可编程工作流(RAG、工具调用、结构化输出) | --mem-fraction-static、--mem-fraction-dynamic、--max-running-requests |
Thor:NVIDIA SGLang 26.01(nvcr.io/nvidia/sglang:26.01-py3,SGLang 0.5.5.post2)。Orin:与 JetPack 匹配的环境 |
| TensorRT Edge-LLM | NVIDIA 调优的生产级服务 | 按 SKU 的构建档案;分页 KV;KV 重用 | 目标 JetPack 的供应商文档 |
对于 Orin JetPack 7.2 / L4T r39+,支持上游 vLLM 0.20+。对于较旧的 Orin 版本,在有可用 NVIDIA-AI-IOT 预构建 vLLM 镜像时优先使用这些镜像,因为它们带有与 JetPack 匹配的 CUDA/cuDNN/TensorRT 栈。对于 Thor,优先使用上游 vLLM 0.20+(
vllm/vllm-openai)或经过验证的原生 vLLM 0.20+ 安装;对于 SGLang,使用 NVIDIA SGLang 26.01(nvcr.io/nvidia/sglang:26.01-py3,SGLang 0.5.5.post2)或明确列出支持 Jetson Thor 的更新的 NVIDIA SGLang 发布说明。不要将 Orin 特定的 Jetson 容器路径强加给 Thor,也不要假设 Orin 上原生支持上游 SGLang。
量化建议
使用运行时特定的量化名称。vLLM 和 SGLang 通常使用 Hugging Face 检查点,如 W4A16、AWQ、GPTQ、FP16 或 NVFP4。llama.cpp 和 Ollama 使用 GGUF 模型,因此推荐 INT4/Q4_K_M 风格的 GGUF。
| 运行时家族 | Jetson 家族 | 首选 | 备选 |
|---|---|---|---|
| vLLM / SGLang | Thor | NVFP4(当模型/运行时支持时) | W4A16 |
| vLLM / SGLang | Orin Nano / NX | W4A16 | AWQ 或 GPTQ 4-bit |
| vLLM / SGLang | AGX Orin | W4A16 | AWQ 或 GPTQ 4-bit |
| llama.cpp / Ollama | Orin 和 Thor | GGUF INT4 / Q4_K_M | 若内存紧张,使用更小的 INT4 GGUF 模型 |
不要将 GGUF Q4_K_M 描述为 W4A16/AWQ/GPTQ。除非输出中包含 quant 字段,否则不要将 Thor NVFP4 结果与 Orin W4A16 结果进行比较。
运行时命令指南
将 recommend.py 作为内存旋钮的真相来源,然后将其 launch_flags 放入匹配的服务命令中。将命令指南保存在此技能中,而不是单独的小参考文件中,以便代理一次摄入完整的指令集。
对于 JetPack 7.2 / L4T r39+ 下 Orin 上的 vLLM,请使用上游 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-model-id-or-local-path> \
--host 0.0.0.0 \
--port 8000 \
--gpu-memory-utilization 0.60 \
--max-model-len 4096 \
--max-num-seqs 8 \
--enable-prefix-caching
对于 Thor 上的 vLLM,请使用上游 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-model-id-or-local-path> \
--host 0.0.0.0 \
--port 8000 \
--gpu-memory-utilization 0.75 \
--max-model-len 8192 \
--max-num-seqs 32 \
--enable-prefix-caching
Thor vLLM 说明:不要根据 vLLM 0.20 之前的结果判断 Thor 支持情况;上游 vLLM 支持自 vLLM 0.20+ 开始。
对于 Thor 上的 SGLang,请使用 NVIDIA SGLang 26.01(nvcr.io/nvidia/sglang:26.01-py3)。NVIDIA SGLang 26.01 包含 SGLang 0.5.5.post2,并明确列出对 Jetson Thor 的支持。避免根据旧版预发布 SGLang 结果判断 Thor 支持。除非更新的 NVIDIA SGLang 发布说明表明 gpt-oss 或 FP8 路径的已知问题已修复,否则避免在 Thor 上推荐它们。
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-model-id-or-local-path> \
--host 0.0.0.0 \
--port 8000 \
--mem-fraction-static 0.60 \
--max-running-requests 8
对于 llama.cpp,在可用时使用 NVIDIA-AI-IOT llama.cpp 镜像,或使用与 JetPack 匹配构建的 llama-server 二进制文件。在 Orin 和 Thor 上均从 GGUF INT4 / Q4_K_M 开始;如果审计显示内存紧张,请选择更小的 INT4 GGUF 模型。
docker run --rm -it --runtime nvidia --network host --name llama-cpp \
-v "$PWD/models:/models:ro" \
ghcr.io/nvidia-ai-iot/llama_cpp:latest-jetson-<orin-or-thor> \
llama-server \
-m /models/<model>.gguf \
--host 0.0.0.0 \
--port 8000 \
-ngl 28 \
-c 4096 \
--no-mmap \
--flash-attn
流程(脚本据此编码)
- 选择满足用户所需功能的最轻量运行时(连续批处理?结构化生成?CPU 卸载?)。
- 选择满足用户准确度要求的最低精度(模型基准测试技能)。
- 扫描运行时内存旋钮(vLLM 从
gpu-memory-utilization开始,llama.cpp 从n-gpu-layers和ctx-size开始),找到能维持目标吞吐量的最小占用空间。 - 使用
jetson-memory-audit重新测量。
安全
只读。此技能永远不启动、停止或重启模型服务器。它只输出参数;用户(或外部编排代理)负责调用运行时。