Jetson推理内存调优Skill jetson-inference-mem-tune

为NVIDIA Jetson上的LLM/VLM推理服务提供内存调优与运行时选型建议。基于jetson-memory-audit快照,推荐vLLM、SGLang、llama.cpp、TensorRT Edge-LLM等运行时及gpu-memory-utilization、max-model-len、mem-fraction-static、n-gpu-layers等内存相关启动参数,以降低OOM风险、优化边缘推理部署。关键词:Jetson、内存调优、LLM推理、VLM推理、vLLM、SGLang、llama.cpp、TensorRT Edge-LLM、OOM、边缘计算、模型部署、GGUF、KV缓存。

边缘LLM推理 0 次安装 0 次浏览 更新于 9/6/2026
名称 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.sh JSON 快照开始。
  • 确定预期工作负载:llm-servervlm-serverembeddingrag
  • 如果用户给出期望的空闲内存目标,将其作为 --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 运行它。

说明

  1. 运行 jetson-memory-audit/scripts/audit.sh 捕获设备基线。
  2. 运行 scripts/recommend.py --audit /tmp/audit.json --runtime auto --workload llm-server --target-mb 6000 获取包含运行时和参数推荐的 JSON。
  3. 代理展示建议的运行时和精确的 CLI 参数。用户(或外部代理)使用这些参数启动/重启服务。
  4. 重新运行审计进行验证。

预期工作流

对特定提问使用 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

流程(脚本据此编码)

  1. 选择满足用户所需功能的最轻量运行时(连续批处理?结构化生成?CPU 卸载?)。
  2. 选择满足用户准确度要求的最低精度(模型基准测试技能)。
  3. 扫描运行时内存旋钮(vLLM 从 gpu-memory-utilization 开始,llama.cpp 从 n-gpu-layersctx-size 开始),找到能维持目标吞吐量的最小占用空间。
  4. 使用 jetson-memory-audit 重新测量。

安全

只读。此技能永远不启动、停止或重启模型服务器。它只输出参数;用户(或外部编排代理)负责调用运行时。