用途
NVIDIA Inference Builder 是一个面向 Vision AI 的代码生成器,目标是在 NVIDIA GPU 上生成具备高性能视频与流式处理能力的可部署推理流水线。它把 YAML 配置(可选配合 OpenAPI 规范和自定义处理器)转换为推理流水线,并打包为 Docker 容器或独立应用。该工具属于 DeepStream 单体仓库(mono-repo),位于 tools/inference_builder 目录。
主要能力
- 根据 YAML 配置生成推理流水线;
- 通过 Jinja 模板为不同推理后端生成代码(templates/backend/),并为服务端点处理器生成代码(templates/responder/);
- 生成结果中会包含共享运行时库(lib/);
- 提供配置 schema(schemas/config.schema.json)、各后端 schema(schemas/backends/)与参考文档(schemas/README.md),覆盖后端、参数、数据类型、预处理器、响应器与路由;
- 提供覆盖各类后端的可运行示例(builder/samples/,索引见 builder/samples/README.md);
- 提供集成测试框架(builder/tests/,参见 run_tests.sh --help);
- 支持服务端类型 serverless(无需 OpenAPI 规范或服务定义);
- 配置 YAML 支持运行时环境变量替换:$ENV_VAR|default_value,并按默认值自动推断类型。
使用方式
从仓库根目录解析路径,以便在任意子目录下使用:
DEEPSTREAM_ROOT="$(git rev-parse --show-toplevel)"
INFERENCE_BUILDER_ROOT="$DEEPSTREAM_ROOT/tools/inference_builder"
source "$INFERENCE_BUILDER_ROOT/.venv/bin/activate"
python "$INFERENCE_BUILDER_ROOT/builder/main.py" --help
首次创建虚拟环境:
cd "$INFERENCE_BUILDER_ROOT"
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
获取当前 CLI 用法时,应以 --help 输出的权威参数为准,不要依赖记忆中的语法:
python "$INFERENCE_BUILDER_ROOT/builder/main.py" --help
典型流程:
- 浏览示例与 schema:在 builder/samples/ 中找到最接近的示例,查阅 schemas/config.schema.json 与 schemas/backends/ 确认字段。
- 编写 YAML 配置:按 schema 校验;数据类型、预处理器、响应器与路由可参考 schemas/README.md。建议尽量让热路径留在 GPU 上,避免可规避的 GPU 与 CPU 往返;优先对解码/编码、缩放与色彩转换、批处理、预处理、推理、跟踪、叠加等环节使用 GPU 加速。
- 生成流水线:python builder/main.py <config.yaml> [options]。
- 准备模型仓库:从 NGC/HuggingFace 下载模型到 model_repo 目录。
- 生成 nvinfer 配置(仅 DeepStream 后端):检查下载模型是否已包含运行时配置文件(nvdsinfer_config.yaml、nvdspreprocess_config.yaml);若没有则生成并放在模型旁。非 DeepStream 后端跳过此步。
- 选择平台并构建 Docker 镜像:阅读 doc/platform-guide.md,为目标硬件(x86_64、Jetson/Tegra、DGX Spark)选择正确的基础镜像与 Dockerfile,然后构建镜像。
- 运行与测试:挂载模型仓库运行容器;serverless 流水线会运行至结束;HTTP 服务器(fastapi/triton/nim)则发送测试请求验证。若有 GPU 资源,对运行中的容器做端到端冒烟测试,在真实硬件上验证完整流水线。
适用场景
- 为 DeepStream 检测服务生成配置,例如读取 RTSP、使用 Triton、暴露 FastAPI 端点;
- 将 dummy 示例改造成 serverless 图像推理流水线,并获取 Docker 构建与运行命令;
- 在 NVIDIA GPU 上以容器形式部署视频与流式 Vision AI 推理。
限制与注意事项
- 模型请求若存在歧义(例如模型变体、版本、精度或来源不明确),应先向用户澄清,不要猜测;
- 使用模型前应尽量收集版本、架构、输入/输出形状、精度与预期预处理信息,并与流水线 YAML 及运行时配置(如 nvdsinfer_config.yaml)交叉核对;输入维度、缩放因子、标签文件不一致是常见的静默失败来源;
- 自定义处理器类名属性必须与 YAML 配置中的处理器名称完全一致;
- 默认使用桥接网络并显式 -p 端口映射;仅在部署明确需要主机命名空间共享时建议 Docker host-network 或 host-IPC 模式,并在采用前说明安全权衡;
- 运行容器前用 nvidia-smi 检查空闲 GPU 显存;若 GPU 被占用或显存不足,用 --gpus device=N 选择空闲 GPU,或请用户释放资源,OOM 失败可能静默或具有误导性;
- DeepStream 后端要求在模型目录中提供单独的 nvdsinfer_config.yaml;
- 编写新配置时,必需的顶层字段只有 name、model_repo 和 models,其余均为可选;
- 关键运行时环境变量:HTTP_PORT(默认 8000)、LOG_LEVEL(默认 INFO)、DEBUG(0/1)、N_CODEC_INSTANCES(并行视频解码器数)、MAX_BATCH_SIZE(实时流帧批处理大小)。
关键目录
- builder/samples/:各类后端的可运行示例;
- schemas/config.schema.json:主配置 schema,包含全部字段、数据类型与校验规则;
- schemas/README.md:后端、参数、数据类型、预处理器、响应器与路由的综合参考;
- schemas/backends/:各后端 schema 与参数定义;
- templates/backend/:各推理后端的 Jinja 模板;
- templates/responder/:服务端点处理器的 Jinja 模板;
- lib/:生成流水线中包含的共享运行时库;
- builder/tests/:集成测试框架。