TensorRT-LLM 推理服务实战指南

简介: `trtllm-serve` 是 TensorRT-LLM 官方推理服务工具,支持一键部署兼容 OpenAI API 的生产级服务,提供模型查询、文本与对话补全等接口,并兼容多模态及分布式部署,助力高效推理。

简介

trtllm-serve 是 TensorRT-LLM 官方提供的推理服务启动工具,让你能快速将优化后的模型部署成生产级服务。无需复杂的框架搭建,一条命令就能启动与 OpenAI API 完全兼容的服务接口,是从本地开发到线上部署的最直接通道。

它支持以下核心接口:

  • /v1/models - 模型查询
  • /v1/completions - 文本补全
  • /v1/chat/completions - 对话补全

更多接口详情请参考 OpenAI API 参考文档

此外还提供以下实用接口:

  • /health - 服务健康状态
  • /metrics - 运行时性能指标
  • /version - 版本信息

其中 /metrics 接口提供 GPU 显存占用、KV 缓存统计、动态批处理等运行时数据。

快速开始

基本启动命令:

trtllm-serve <model> [--tp_size <tp> --pp_size <pp> --ep_size <ep> --host <host> --port <port>]

完整的命令参数说明请参考 命令行参考

推理请求示例

服务启动后可通过推理接口发送请求。以下示例采用 TinyLlama-1.1B-Chat-v1.0 模型。

Chat 补全接口

使用 OpenAI Python 客户端调用:

from openai import OpenAI

client = OpenAI(api_key="任意字符串", base_url="http://localhost:8000/v1")

completion = client.chat.completions.create(
    model="TinyLlama-1.1B-Chat-v1.0",
    messages=[
        {
   "role": "system", "content": "You are a helpful assistant."},
        {
   "role": "user", "content": "Hello!"}
    ]
)
print(completion.choices[0].message.content)

或使用 curl:

curl http://localhost:8000/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "TinyLlama-1.1B-Chat-v1.0",
    "messages": [
      {"role": "user", "content": "Hello!"}
    ],
    "temperature": 0.7
  }'

文本补全接口

使用 Python 客户端:

from openai import OpenAI

client = OpenAI(api_key="任意字符串", base_url="http://localhost:8000/v1")

completion = client.completions.create(
    model="TinyLlama-1.1B-Chat-v1.0",
    prompt="从前有座山,"
)
print(completion.choices[0].text)

或使用 curl:

curl http://localhost:8000/v1/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "TinyLlama-1.1B-Chat-v1.0",
    "prompt": "从前有座山,",
    "temperature": 0.7
  }'

多模态服务

多模态模型部署有以下限制:

  • TRT-LLM 多模态暂不支持 kv_cache_reuse
  • 多模态模型需要 chat_template,仅支持 Chat API

配置步骤

创建配置文件:

cat > ./extra-llm-api-config.yml << EOF
kv_cache_config:
    enable_block_reuse: false
EOF

启动服务:

trtllm-serve Qwen/Qwen2-VL-7B-Instruct \
    --extra_llm_api_options ./extra-llm-api-config.yml

多模态请求示例

多模态模型支持文本、图片、视频和音频混合输入。

使用 Python 客户端:

from openai import OpenAI

client = OpenAI(api_key="任意字符串", base_url="http://localhost:8000/v1")

completion = client.chat.completions.create(
    model="Qwen/Qwen2-VL-7B-Instruct",
    messages=[
        {
   
            "role": "user",
            "content": [
                {
   "type": "text", "text": "这张图片里有什么?"},
                {
   "type": "image_url", "image_url": {
   "url": "https://example.com/image.png"}}
            ]
        }
    ]
)
print(completion.choices[0].message.content)

或使用 curl:

curl http://localhost:8000/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "Qwen/Qwen2-VL-7B-Instruct",
    "messages": [
      {
        "role": "user",
        "content": [
          {"type": "text", "text": "这张图片里有什么?"},
          {"type": "image_url", "image_url": {"url": "https://example.com/image.png"}}
        ]
      }
    ]
  }'

支持的模态类型

TRT-LLM 多模态支持的数据格式如下(具体支持情况取决于模型):

文本

基础格式:

{
   "role": "user", "content": "韩国的首都是哪儿?"}

显式类型:

{
   "role": "user", "content": [{
   "type": "text", "text": "韩国的首都是哪儿?"}]}

图片

URL 引入:

{
   
  "role": "user",
  "content": [
    {
   "type": "text", "text": "图片里有什么?"},
    {
   "type": "image_url", "image_url": {
   "url": "https://example.com/image.png"}}
  ]
}

Base64 编码:

{
   
  "role": "user",
  "content": [
    {
   "type": "text", "text": "图片里有什么?"},
    {
   "type": "image_url", "image_url": {
   "url": "data:image/jpeg;base64,{image_base64}"}}
  ]
}

提示: TensorRT-LLM 提供 load_base64_image 工具函数用于图片编码,详见 源码

视频

{
   
  "role": "user",
  "content": [
    {
   "type": "text", "text": "视频里有什么?"},
    {
   "type": "video_url", "video_url": {
   "url": "https://example.com/video.mp4"}}
  ]
}

音频

{
   
  "role": "user",
  "content": [
    {
   "type": "text", "text": "这段音频说的是什么?"},
    {
   "type": "audio_url", "audio_url": {
   "url": "https://example.com/audio.mp3"}}
  ]
}

多节点分布式部署

TRT-LLM 支持通过 Slurm 在多节点上部署大规模模型。以 DeepSeek-V3 为例:

# 创建配置文件,启用注意力数据并行和调度优化
echo -e "enable_attention_dp: true\npytorch_backend_config:\n  enable_overlap_scheduler: true" > extra-llm-api-config.yml

# 通过 Slurm 启动多节点服务
srun -N 2 -w [NODES] \
    --output=benchmark_2node.log \
    --ntasks 16 --ntasks-per-node=8 \
    --mpi=pmix --gres=gpu:8 \
    --container-image=<CONTAINER_IMG> \
    --container-mounts=/workspace:/workspace \
    --container-workdir /workspace \
    bash -c "trtllm-llmapi-launch trtllm-serve deepseek-ai/DeepSeek-V3 \
      --max_batch_size 161 \
      --max_num_tokens 1160 \
      --tp_size 16 \
      --ep_size 4 \
      --kv_cache_free_gpu_memory_fraction 0.95 \
      --extra_llm_api_options ./extra-llm-api-config.yml"

详见 trtllm-llmapi-launch 源码

性能指标接口

注意:

  • PyTorch 后端的性能指标功能仍在完善中,数据完整度不如 TensorRT 后端
  • CPU 显存占用等字段暂不支持 PyTorch 后端
  • 启用 enable_iter_perf_stats 会引入轻微的性能开销

/metrics 接口提供 GPU 显存、KV 缓存等实时性能数据。

启用指标收集

PyTorch 后端通过配置文件启用性能统计:

# extra_llm_config.yaml
enable_iter_perf_stats: true

启动服务时指定配置文件:

trtllm-serve "TinyLlama/TinyLlama-1.1B-Chat-v1.0" \
    --extra_llm_api_options extra_llm_config.yaml

查询指标

发送推理请求后可查询性能指标。由于数据在队列中且被取出后即删除,建议在请求后立即轮询:

curl -X GET http://localhost:8000/metrics

典型响应示例:

[
    {
   
        "gpuMemUsage": 76665782272,
        "iter": 154,
        "iterLatencyMS": 7.00688362121582,
        "kvCacheStats": {
   
            "allocNewBlocks": 3126,
            "allocTotalBlocks": 3126,
            "cacheHitRate": 0.00128,
            "freeNumBlocks": 101253,
            "maxNumBlocks": 101256,
            "missedBlocks": 3121,
            "reusedBlocks": 4,
            "tokensPerBlock": 32,
            "usedNumBlocks": 3
        },
        "numActiveRequests": 1
    }
]

返回数据包含 GPU 显存占用、KV 缓存命中率、活跃请求数等关键指标,用于性能分析和优化。

命令行参考

完整参数说明:

trtllm-serve --help
目录
相关文章
|
2月前
|
并行计算 测试技术 异构计算
Qwen3 Next 在 TensorRT LLM 上的部署指南
本指南介绍如何在TensorRT LLM框架上部署Qwen3-Next-80B-A3B-Thinking模型,基于默认配置实现快速部署。涵盖环境准备、Docker容器启动、服务器配置与性能测试,支持BF16精度及MoE模型优化,适用于NVIDIA Hopper/Blackwell架构GPU。
690 154
|
2月前
|
存储 缓存 负载均衡
TensorRT LLM 中的并行策略
TensorRT LLM提供多种GPU并行策略,支持大模型在显存与性能受限时的高效部署。涵盖张量、流水线、数据、专家及上下文并行,并推出宽专家并行(Wide-EP)应对大规模MoE模型的负载不均与通信挑战,结合智能负载均衡与优化通信核心,提升推理效率与可扩展性。
443 154
|
2月前
|
人工智能 文字识别 监控
|
2月前
|
云安全 人工智能 安全
Dify平台集成阿里云AI安全护栏,构建AI Runtime安全防线
阿里云 AI 安全护栏加入Dify平台,打造可信赖的 AI
2729 166
|
2月前
|
SQL 人工智能 关系型数据库
AI Agent的未来之争:任务规划,该由人主导还是AI自主?——阿里云RDS AI助手的最佳实践
AI Agent的规划能力需权衡自主与人工。阿里云RDS AI助手实践表明:开放场景可由大模型自主规划,高频垂直场景则宜采用人工SOP驱动,结合案例库与混合架构,实现稳定、可解释的企业级应用,推动AI从“能聊”走向“能用”。
870 39
AI Agent的未来之争:任务规划,该由人主导还是AI自主?——阿里云RDS AI助手的最佳实践
|
2月前
|
存储 缓存 PyTorch
如何优雅地为 TensorRT-LLM 添加新模型
本指南详细介绍如何在TensorRT-LLM中优雅集成新大语言模型,涵盖模型配置、定义、权重加载与注册全流程,支持作为核心模块或独立扩展集成,助力高效推理部署。(238字)
187 1
|
2月前
|
存储 消息中间件 Kafka
Confluent 首席架构师万字剖析 Apache Fluss(三):湖流一体
原文:https://jack-vanlightly.com/blog/2025/9/2/understanding-apache-fluss 作者:Jack Vanlightly 翻译:Wayne Wang@腾讯 译注:Jack Vanlightly 是一位专注于数据系统底层架构的知名技术博主,他的文章以篇幅长、细节丰富而闻名。目前 Jack 就职于 Confluent,担任首席技术架构师,因此这篇 Fluss 深度分析文章,具备一定的客观参考意义。译文拆成了三篇文章,本文是第二篇。
419 25
Confluent 首席架构师万字剖析 Apache Fluss(三):湖流一体
|
2月前
|
缓存 物联网 PyTorch
使用TensorRT LLM构建和运行Qwen模型
本文档介绍如何在单GPU和单节点多GPU上使用TensorRT LLM构建和运行Qwen模型,涵盖模型转换、引擎构建、量化推理及LoRA微调等操作,并提供详细的代码示例与支持矩阵。
579 2