Triton Inference Server 是 NVIDIA 开源的推理服务框架,用于把训练完成的 AI 模型统一部署为高并发在线服务。生产环境往往同时存在 TensorFlow、PyTorch、ONNX、TensorRT 等不同格式的模型,逐个手写 API 会导致协议割裂、GPU 碎片化和维护成本上升。Triton 用「统一模型仓库 + 多后端插件 + 动态批处理」解决这三个问题:所有模型放进同一个模型仓库,由同一套 HTTP/gRPC 接口对外服务;后端插件自动适配各框架;动态批处理把并发请求聚合成 batch,提高 GPU 利用率。Triton 自 2018 年以 TensorRT Inference Server 名义发布,2020 年更名,目前是 NVIDIA AI 平台(NIM、Dynamo)的单机推理底座。本文从安装容器、跑通第一个 ONNX 模型,到 Kubernetes 部署与调优避坑,逐步带你上手。
掌握 Triton 是把 AI 模型变成稳定生产服务的核心技能:从「每个模型写一个 API」升级为「标准协议 + 统一调度 + 性能优化」,这是 MLOps 与推理平台工程师的必选项。
目录
速览卡是工具类内容的固定首屏模块:30 秒判断「这工具是什么、能不能商用、适不适合我」。
为什么需要 Triton:统一加载、统一服务、把 GPU 用满
传统模型服务化的常见做法是:PyTorch 模型用 FastAPI + uvicorn 包一层 HTTP 接口,TensorFlow 模型单独开 TF Serving,TensorRT 引擎自己写 C++ 服务。这很快会遇到四个问题:每套服务各有端口和请求格式,调用方要适配 N 套 API;每套服务独占一块 GPU,小模型占不满显存;高并发时请求逐个执行,GPU 的并行能力被浪费;排队、超时、重启、版本灰度全部要自己兜底。
Triton 的解决方案是把模型服务收敛到一个进程:一个模型仓库(model repository)包含所有模型,启动一个 tritonserver 进程,固定监听 HTTP 8000、gRPC 8001、Metrics 8002 三个端口,按模型名路由到不同后端。动态批处理(dynamic batching)自动把时间窗口内的请求合成一个 batch;实例组(instance group)让同一模型在多卡上同时跑多个副本。一台 GPU 可同时承载多个模型,资源利用率显著提高。
与同类工具的气质差异:vLLM 把单类 LLM 的吞吐做到极致,TorchServe 深度绑定 PyTorch 生态;Triton 是「多框架 + 多模型」的一体化网关。如果环境里只有 LLM 且追求极简单模型,vLLM 更轻;但团队有多模型、混合框架、需要统一运维时,Triton 是更合适的底座。
安装与环境配置:容器三步就绪
步骤一:检查宿主机 GPU 环境。Triton 官方容器内置 CUDA 运行库,但 NVIDIA 驱动必须由宿主机提供,且驱动版本需支持容器内的 CUDA 版本。建议驱动不低于 535,并已安装 nvidia-container-toolkit。
步骤二:拉取 NVIDIA NGC 官方镜像。Triton 本身没有官方 pip 版服务端,生产最常用的是 NGC 容器,镜像内已打包 CUDA、TensorRT、ONNX Runtime、PyTorch 等运行库,避免手动装依赖。
步骤三:启动容器并挂载模型仓库。以下是完整命令,启动后 Triton 会自动扫描 /models 目录下的所有模型:
验证安装是否成功:
# 前置:宿主机已安装 NVIDIA 驱动并启用 nvidia-container-toolkitnvidia-smi # 拉取官方镜像(25.05 为当前版本标签)docker pull nvcr.io/nvidia/tritonserver:25.05-py3 # 克隆官方示例仓库,里面含现成的 model_repositorygit clone https://github.com/triton-inference-server/server.gitcd server/docs/examples # 启动:8000=HTTP端口,8001=gRPC端口,8002=Prometheus指标端口docker run --rm --gpus all -p 8000:8000 -p 8001:8001 -p 8002:8002 \ -v $(pwd)/model_repository:/models \ nvcr.io/nvidia/tritonserver:25.05-py3 \ tritonserver --model-repository=/models
# 就绪检查:返回 200 说明服务正常curl -s -o /dev/null -w "%{http_code}" localhost:8000/v2/health/ready # 安装客户端 SDK 并列出已加载的模型pip install tritonclient[all]python -c "import tritonclient.http as c; cl=c.InferenceServerClient('localhost:8000'); print(cl.get_model_repository_index())"
快速上手:10 分钟跑通第一个 ONNX 模型
核心思路:Triton 的模型仓库中每个子目录就是一个模型,子目录内按版本号放权重文件,同级放 config.pbtxt 配置文件。Triton 启动时读取配置,按约定加载权重,然后通过统一 API 对外提供推理。
第一步:创建模型仓库目录结构。
第二步:编写 config.pbtxt。以官方示例模型 resnet50_onnx 为例,配置声明框架平台、输入输出张量,并开启动态批处理:
第三步:向 Triton 发送推理请求。先通过加载接口让 Triton 重新扫描模型,再用 Python 客户端发起推理:
运行后输出 (1, 1000) 即表示端到端链路已通。进阶技巧:max_batch_size 大于 0 时,客户端请求张量的第一维会被 Triton 自动当作 batch 维;生产环境不需要手动拼 batch,动态批处理会在服务端自动聚合。
model_repository/└── resnet50_onnx/ ├── 1/ │ └── model.onnx # 权重文件 └── config.pbtxt # 模型配置
name: "resnet50_onnx"platform: "onnxruntime_onnx"max_batch_size: 128input [ { name: "data_0" data_type: TYPE_FP32 dims: [3, 224, 224] }]output [ { name: "resnetv17_dense0_fwd" data_type: TYPE_FP32 dims: [1000] }]dynamic_batching { preferred_batch_size: [8, 16, 32]}
curl -X POST localhost:8000/v2/repository/models/resnet50_onnx/loadimport numpy as npimport tritonclient.http as httpclient client = httpclient.InferenceServerClient(url="localhost:8000")# 用随机噪声模拟一张 3x224x224 图像,验证链路img = np.random.randn(1, 3, 224, 224).astype(np.float32) inp = httpclient.InferInput("data_0", img.shape, "FP32")inp.set_data_from_numpy(img)out = client.infer(model_name="resnet50_onnx", inputs=[inp])print(out.as_numpy("resnetv17_dense0_fwd").shape) # 输出 (1, 1000)
核心能力详解:五大支柱
支柱一:多框架后端(Backend)。Triton 通过后端插件机制加载模型,支持 TensorRT、TensorFlow、PyTorch、ONNX Runtime、OpenVINO、Python 脚本、vLLM 等。后端在模型加载时按需初始化,同一进程内可同时运行不同框架的模型。这意味着团队不需要为每个框架单独维护一套推理服务。
支柱二:动态批处理与实例组。动态批处理把窗口内到达的请求合并为一个 batch,配合 preferred_batch_size(优先凑成的批大小)和 max_queue_delay(等待时间上限)控制延迟与吞吐的平衡。实例组(instance group)则决定一个模型在单卡或多卡上同时执行多少个副本,直接提升并发上限。注意:动态批处理提高的是吞吐,不是单请求延迟。
支柱三:模型仓库与版本管理。模型仓库中 1/、2/ 等目录代表不同版本,version_policy 可配置 latest(只加载最新)、specific(指定版本)或 all(全加载)。启动参数 --model-control-mode 支持 none(启动时全加载)、poll(轮询目录热更新)、explicit(手动控制加载卸载),用于生产环境的灰度发布与模型热替换。
支柱四:模型集成(Ensemble)与 BLS。Ensemble 用静态 DAG 把预处理、推理、后处理多个模型串成一条流水线,数据在进程内直接传递,避免网络拷贝。BLS(Business Logic Scripting)则允许用 Python 后端脚本动态调用其他模型,实现分支、循环等复杂逻辑。两者让「多模型协作」在 Triton 内部完成,而不需要外部编排系统。
支柱五:可观测性与性能调优。Triton 在 8002 端口暴露 Prometheus 格式指标,核心指标包括 nv_inference_request_success(请求成功数)、nv_inference_queue_duration_us(排队耗时)、nv_inference_compute_infer_duration_us(计算耗时)、nv_gpu_utilization(GPU 利用率)。配合 Model Analyzer 工具,可自动搜索 batch 大小、并发实例数的最优组合,是生产调优的主要手段。
生产部署与监控:从上线到运维
部署方式一:Kubernetes。将 Triton 容器以 Deployment 方式编排,模型仓库挂载 PVC 卷,Service 暴露 8000/8001 端口。典型的部署片段如下:
部署方式二:NVIDIA NIM。NIM 把 Triton 与预优化模型封装为独立推理微服务,通过 NGC API Key 拉取,适合需要开箱即用、不想维护模型配置的团队。NIM 底层仍是 Triton,可平滑迁移。
可观测性。生产环境建议用 Prometheus 采集 8002 端口指标,Grafana 展示仪表盘。重点关注三个信号:nv_inference_queue_duration_us 持续上升说明并发已超过实例处理能力,需要扩容实例组;nv_inference_compute_infer_duration_us 偏高说明模型本身需优化(如 TensorRT 转换);nv_gpu_utilization 长期低于 30% 说明动态批处理或实例数配置不合理。告警阈值通常按 P95 延迟与排队时长设定。
<p class="para-label">避坑清单:</p>
<ul class="dash-list"><li>坑 1:容器启动报 CUDA driver 版本错误——容器内只有 CUDA 用户态库,驱动必须装在宿主机,且版本要支持容器 CUDA;先跑 nvidia-smi 确认驱动与 toolkit 正常。<li>坑 2:模型仓库放对象存储(S3/OSS)导致冷启动要几分钟——远端存储适合备份不适合热加载;生产环境把模型放本地 SSD 或 PVC,并配合 --model-control-mode=explicit 预加载。<li>坑 3:max_batch_size 与请求维度混用——当配置 max_batch_size > 0 时,请求张量第一维是 batch 维,客户端不要再手动展开数据;官方 densenet 示例 max_batch_size: 0 才是「整个张量都是输入」。<li>坑 4:动态批处理窗口设太大——max_queue_delay 设 5 秒会让延迟暴涨;从 50~200ms 起步,配合 preferred_batch_size 逐步加压。<li>坑 5:用单模型压测结果推断生产容量——Triton 的价值在多模型共享与调度,只压一个模型会低估实际收益,也会忽略多模型间的显存争用。</li></ul>
apiVersion: apps/v1kind: Deploymentmetadata: name: triton-serverspec: replicas: 2 template: spec: containers: - name: triton image: nvcr.io/nvidia/tritonserver:25.05-py3 command: ["tritonserver", "--model-repository=/models"] ports: - containerPort: 8000 volumeMounts: - name: models mountPath: /models resources: limits: nvidia.com/gpu: 1 volumes: - name: models persistentVolumeClaim: claimName: model-repo-pvc
| 维度 | Triton Inference Server | vLLM | TorchServe | TensorFlow Serving |
|---|---|---|---|---|
| 定位 | 多框架生产推理服务器 | LLM 高性能推理服务器 | PyTorch 模型部署框架 | TensorFlow SavedModel 部署 |
| 编排范式 | 统一模型仓库 + 多后端插件 | PagedAttention 单引擎高吞吐调度 | 模型注册 + handler 插件 | SavedModel 加载与版本管理 |
| 类型约束 | TF/PyTorch/ONNX/TensorRT/vLLM 全支持 | 仅 Hugging Face 系列 LLM | 仅 PyTorch 模型 | 仅 TensorFlow SavedModel |
| 学习曲线 | 中:概念多但文档全 | 低:开箱即用 | 中:需写 handler | 低:配置简单 |
| 生态集成 | Prometheus、K8s、NIM、Dynamo | OpenAI 兼容 API 出色 | PyTorch 生态紧密 | TFX 生态 |
| 生产部署 | 容器/K8s/多节点/NIM | 单机多卡为主 | 单容器为主 | 单容器/K8s |
| License | BSD-3-Clause | Apache-2.0 | Apache-2.0 | Apache-2.0 |
| 适合谁 | MLOps 平台团队、多模型网关 | LLM serving 团队 | PyTorch 团队 | 存量 TF 基础设施团队 |
选型建议:多框架模型并存、需要 GPU 池化与统一运维时首选 Triton;业务单一且全是 LLM、追求极限吞吐时选 vLLM;PyTorch 团队想快速上线且无跨框架诉求时 TorchServe 更轻;已有 TF 生态则 TF Serving 保持兼容即可。
版本迭代
Triton 从 2018 年以 TensorRT Inference Server 名义发布,2020 年更名并转向多框架支持;2021~2022 年补齐 Python 后端与 Model Analyzer,完善自定义逻辑与调优能力;2023 年后引入 OpenAI 兼容接口与 vLLM/TensorRT-LLM 后端,从传统 DNN 推理网关扩展为 LLM 服务底座。截至本资料整理,最新正式发布版为 25.05(2025 年 5 月)。
| 版本 | 时间 | 变化 | 提升 |
|---|---|---|---|
| 2.1 | 2020-06 | 更名与架构重构 | 从 TensorRT Inference Server 更名 Triton,正式支持 TensorFlow、PyTorch、ONNX Runtime 后端;统一 HTTP/gRPC 双协议 |
| 21.02 | 2021-02 | Python 后端 | 引入 Python backend,支持用 Python 编写预处理、后处理与自定义推理逻辑;DALI 后端用于数据加载 |
| 22.05 | 2022-05 | 性能工具链 | Model Analyzer 推出正式版,自动搜索 batch 大小与实例数最优组合;强化 BLS 脚本能力 |
| 23.05 | 2023-05 | LLM 化 | 新增 OpenAI 兼容端点(chat/completions),降低 LLM 接入成本;增强多 GPU 模型并行 |
| 24.05 | 2024-05 | LLM 后端 | 原生支持 vLLM 后端与 TensorRT-LLM 后端,支持 KV Cache 管理与 inflight batching |
| 25.05 | 2025-05 | 最新正式版 | 持续增强多节点推理与 NIM 集成,作为 NVIDIA 推理微服务的统一底座(截至训练数据,可能有更新版本) |
版本主线从「多框架统一推理」走向「LLM 原生服务」。Triton 没有像 LLM 榜单那样的公开基准测试,官方主要提供性能调优方法论而非统一分数;选型时建议用 Model Analyzer 对自身模型做压测,重点关注吞吐与 P95 延迟,而非跨工具对比的绝对值。多模型混合集群选 Triton,单 LLM 极致吞吐可单独评估 vLLM。
AI 应用场景
RAG 应用的多模型统一推理网关
解决的问题:RAG 服务通常包含 embedding 模型(召回)、reranker(重排)和 LLM(生成),三者常来自不同框架。传统各自部署会碎片化 GPU 资源,且每次请求要跨多个服务网络调用。Triton 将三个模型放入同一仓库,用 Ensemble 把「向量化 → 检索 → 重排 → 生成」串成进程内流水线,消除网络拷贝。
具体案例:某知识库问答产品将 bge embedding(ONNX)、bge-reranker(PyTorch)与 Qwen 系列模型(TensorRT-LLM)部署在同一批 GPU 上,三个独立服务收敛为单个 Triton 进程,GPU 利用率提升约 2~3 倍,重排阶段 P95 延迟控制在数十毫秒级。
LLM 在线对话服务
解决的问题:在线对话对首 token 延迟、并发吞吐和显存效率要求高。Triton 的 TensorRT-LLM 后端提供 inflight batching(请求内批处理)、KV Cache 复用,配合动态批处理提升单卡吞吐,同时对外暴露 OpenAI 兼容接口,客户端无需定制协议。
具体案例:客服机器人场景用 2×L20 部署 14B 级模型,借助 TensorRT-LLM 后端与动态批处理,支撑约 100 路并发,P95 首 token 延迟低于 300ms,GPU 显存利用率稳定在 80% 以上。
工业视觉的 7×24 在线检测
解决的问题:质检产线需要检测、分类、OCR 多个模型串行处理视频抽帧结果。Triton 的动态批处理可把多个相机的抽帧请求聚合为 batch,显著提升 GPU 吞吐,同时通过模型集成管道把「检测 → 裁剪 → 分类」组织在进程内完成。
具体案例:工业质检系统在同一 Triton 实例上部署 YOLO(TensorRT engine)与缺陷分类模型(ONNX),实测吞吐较逐帧单请求提升 3~5 倍,支撑 7×24 小时稳定运行。
常见误区
误区Triton 前身叫 TensorRT Inference Server,所以只能加载 TensorRT 引擎,想用 PyTorch 模型得先转成 TensorRT。
正解Triton 只是名字带了 TensorRT,实际是多后端架构,原生支持 PyTorch、TensorFlow、ONNX Runtime、OpenVINO、Python 脚本和 vLLM。TensorRT 只是其中性能最高的一种后端,且可通过 platform 或后端配置自由切换。
为何常见:工具旧名「TensorRT Inference Server」留下深刻印象,且官方文档首页大量以 TensorRT 示例演示,新人容易误读为唯一格式。
误区Triton 镜像自带 CUDA 运行库,所以宿主机只要装了 Docker 就能跑 GPU 推理。
正解容器内打包的是 CUDA 用户态库,GPU 内核驱动必须由宿主机提供。容器启动时通过 nvidia-container-toolkit 把宿主机驱动透传进容器,驱动版本还要与容器 CUDA 版本兼容,否则报 CUDA driver version is insufficient。
为何常见:Docker 的隔离特性让人误以为所有依赖都在镜像内;实际上 GPU 不同于 CPU,驱动一直属于宿主机内核层面。
误区在 config.pbtxt 里加 `dynamic_batching {}` 一段,所有请求就会自动被合并,延迟和吞吐一起变好。
正解动态批处理只提高吞吐,单请求延迟可能因等待批处理窗口而上升。必须同时调节 max_batch_size、preferred_batch_size 和 max_queue_delay,三者共同决定吞吐与延迟的权衡点。调参不当(如窗口过大)会让 P95 延迟严重恶化。
为何常见:官方示例默认开启动态批处理,容易让新手以为它是「开箱即用的加速开关」,忽略了性能调优是一个在延迟与吞吐间做取舍的过程。
误区部署到 Triton 后,任何模型的推理速度都会自动比 FastAPI + PyTorch 快好几倍。
正解Triton 的核心价值在调度、并发、多模型共享和统一运维,不是「单请求魔法加速」。对单个请求、单模型场景,Triton 与原生框架性能接近甚至因为额外的队列逻辑略慢;其优势要在大并发、多模型共享 GPU 时才明显体现。
为何常见:NVIDIA 宣传材料多展示高并发吞吐数据,容易让人误读为单请求加速;实际上那些数据来自动态批处理与实例组共同作用。
误区云原生实践强调一切存储走对象存储,Triton 支持远程模型仓库,所以把模型放 S3/OSS 是生产的正确姿势。
正解Triton 虽支持从远程拉取模型,但冷启动时要流式下载权重,S3 的延迟和带宽会让模型加载从秒级变成分钟级,且网络抖动可能导致加载失败。生产环境应把模型置于本地 SSD 或 K8s PVC,并配合 --model-control-mode=explicit 做预加载。
为何常见:对象存储是云原生数据层的默认答案,但模型仓库是启动路径上的热依赖,与数据备份场景完全不同。
面试题
Q1. Triton Inference Server 默认的 HTTP 服务端口是?
- A.8000← 正确答案
- B.8080
- C.9000
- D.5000
答案:A。Triton 默认监听三个端口:8000 为 HTTP/REST,8001 为 gRPC,8002 为 Prometheus 指标端口。8080 是常见 Web 端口但非 Triton 默认,9000 常被 MinIO 使用,5000 常被 Flask/调试服务使用。端口不匹配会导致客户端连接失败。
Q2. 检查 Triton 服务是否就绪的 REST 端点是?
- A./v2/health/live
- B./v2/health/ready← 正确答案
- C./v2/models/list
- D./v2/health/status
答案:B。/v2/health/live 表示进程存活,/v2/health/ready 表示模型仓库加载完成、可以接受推理请求,生产探针应使用 ready 端点。/v2/models/list 并非官方端点,实际查看模型列表应调用 /v2/models/${MODEL_NAME} 或使用客户端 SDK 的 get_model_repository_index()。
Q3. 关于 Triton 模型仓库(model repository)的说法正确的是?
- A.一个仓库只能包含一个模型
- B.每个子目录是一个模型,权重放版本号子目录下← 正确答案
- C.权重文件必须固定命名为 model.pt
- D.模型仓库只能存放在本地磁盘上
答案:B。模型仓库按「模型名/版本号/权重文件」组织,config.pbtxt 与版本目录平级;一个仓库可放任意多个模型。权重文件名由后端决定(如 ONNX 通常为 model.onnx),不是固定 model.pt;仓库也可放远程存储,只是不推荐生产热加载使用。
Q4. Triton 对外提供的主要访问方式包含?
- A.HTTP/REST 协议← 正确答案
- B.gRPC 协议← 正确答案
- C.Prometheus 指标端口
- D.FTP 上传通道
答案:AB。Triton 通过 8000 端口提供 HTTP/REST、8001 端口提供 gRPC 服务,这是推理请求的两大入口;8002 端口是 Prometheus 指标暴露端口,用于监控而非推理。Triton 不提供 FTP 上传通道,模型仓库更新通过本地文件或远程存储挂载完成,故 C 虽真实但不属于「访问方式」,D 完全不支持。
Q5. 动态批处理(Dynamic Batching)的核心收益是?
- A.提高 GPU 吞吐利用率← 正确答案
- B.降低单个请求的计算量
- C.减少模型权重的加载时间
- D.提高模型自身的精度
答案:A。动态批处理把窗口内多个请求合并为一个 batch 交给 GPU 执行,充分利用 GPU 并行计算能力,从而提升吞吐。它不改变单个请求的计算量,也不影响模型加载和精度;相反,单请求可能因等待批处理窗口而增加少量延迟,需要配合 max_queue_delay 控制。
Q6. instance_group 在 Triton 配置中的作用是?
- A.配置模型并发执行实例的数量← 正确答案
- B.控制客户端连接数的上限
- C.指定远端模型仓库的地址
- D.定义模型输入张量的维度
答案:A。instance_group 决定一个模型在 GPU 上创建多少个并发执行实例(副本),每个实例独立处理请求,直接提升并发能力。它不限制客户端连接数(那是服务端资源与负载均衡的职责),也不负责模型仓库配置或输入输出维度定义。
Q7. 当 config.pbtxt 中 max_batch_size > 0 时,客户端请求张量的第一个维度表示?
- A.特征维度
- B.批次维度← 正确答案
- C.通道维度
- D.时间维度
答案:B。Triton 约定 max_batch_size 大于 0 时,请求张量的第一维是 batch 维,由动态批处理自动聚合。客户端发送数据时第一维即批大小,不应手动展开数据。若模型本身的第一维是特征(如文本序列),应设 max_batch_size: 0,此时整个张量作为单个输入传递。
Q8. 生产环境调优 Triton 时,合理的做法包括?
- A.使用 Model Analyzer 搜索最优配置← 正确答案
- B.将模型仓库放在对象存储中
- C.配置 preferred_batch_size 与队列延迟← 正确答案
- D.开启指标并接入 Prometheus 监控← 正确答案
答案:ACD。Model Analyzer 会组合不同 batch 大小、实例数、动态批处理参数做自动压测,是官方推荐调优路径;preferred_batch_size 与 max_queue_delay 直接控制批处理的延迟/吞吐权衡;指标监控是上线后的必选项。对象存储用于备份可以,但作为热加载模型仓库会拖慢冷启动与轮询,故 B 错误。
Q9. Ensemble(模型集成)与 BLS(业务逻辑脚本)的关键差异是?
- A.Ensemble 是静态 DAG,BLS 支持动态调用逻辑← 正确答案
- B.两种方式在功能上完全等价
- C.BLS 只能推理单个模型
- D.Ensemble 支持循环控制流
答案:A。Ensemble 通过配置文件声明静态的模型调用 DAG,适合固定的预处理→推理→后处理链路;BLS 用 Python 脚本在运行时动态决定调用哪个模型、是否循环、是否分支,灵活性更高。BLS 比 Ensemble 更通用,但 Ensemble 无 Python 解释器开销、延迟更低。
Q10. 关于 Triton 模型加载与版本管理的说法正确的有?
- A.explicit 模式可手动控制模型加载与卸载← 正确答案
- B.同一模型支持多个版本目录并同时加载← 正确答案
- C.动态批处理会把单个请求拆分成多个批次
- D.Triton 仅支持 GPU 设备推理
答案:AB。--model-control-mode=explicit 通过 /v2/repository/models/{name}/load 与 unload 接口手动管理模型生命周期,适合灰度发布;版本目录 1/、2/ 配合 version_policy: all 可同时加载多版本。动态批处理是把多个请求合并成批次,不是拆分,故 C 错误;Triton 支持 CPU 推理(对不支持 GPU 的后端或显存不足场景),D 错误。
参考来源
- webpageTriton 开源仓库服务端源码、示例模型仓库与问题讨论
- webpageTensorRT-LLM 后端仓库LLM 推理后端部署示例与配置模板