trtllm-serve#

关于#

trtllm-serve 命令启动一个与 OpenAI 兼容的服务器,该服务器支持以下端点

  • /v1/models

  • /v1/completions

  • /v1/chat/completions

有关推理端点的信息,请参阅 OpenAI API 参考

该服务器还支持以下端点

  • /health

  • /metrics

  • /version

metrics 端点提供运行时迭代统计信息,例如 GPU 内存使用情况和 inflight-batching 详细信息。

启动服务器#

以下简写命令语法显示了启动服务器的常用参数

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

有关完整语法和参数说明,请参阅 语法

推理端点#

启动服务器后,您可以通过 completions API 和 Chat API 发送推理请求,它们与相应的 OpenAI API 兼容。 在以下部分中,我们使用 TinyLlama-1.1B-Chat-v1.0 作为示例。

Chat API#

您可以使用任何 http 客户端查询 Chat API,一个典型的示例是 OpenAI Python 客户端

 1### OpenAI Chat Client
 2
 3from openai import OpenAI
 4
 5client = OpenAI(
 6    base_url="http://localhost:8000/v1",
 7    api_key="tensorrt_llm",
 8)
 9
10response = client.chat.completions.create(
11    model="TinyLlama-1.1B-Chat-v1.0",
12    messages=[{
13        "role": "system",
14        "content": "you are a helpful assistant"
15    }, {
16        "role": "user",
17        "content": "Where is New York?"
18    }],
19    max_tokens=20,
20)
21print(response)

另一个示例使用 curl

 1#! /usr/bin/env bash
 2
 3curl http://localhost:8000/v1/chat/completions \
 4    -H "Content-Type: application/json" \
 5    -d '{
 6        "model": "TinyLlama-1.1B-Chat-v1.0",
 7        "messages":[{"role": "system", "content": "You are a helpful assistant."},
 8                    {"role": "user", "content": "Where is New York?"}],
 9        "max_tokens": 16,
10        "temperature": 0
11    }'

Completions API#

您可以使用任何 http 客户端查询 Completions API,一个典型的示例是 OpenAI Python 客户端

 1### OpenAI Completion Client
 2
 3from openai import OpenAI
 4
 5client = OpenAI(
 6    base_url="http://localhost:8000/v1",
 7    api_key="tensorrt_llm",
 8)
 9
10response = client.completions.create(
11    model="TinyLlama-1.1B-Chat-v1.0",
12    prompt="Where is New York?",
13    max_tokens=20,
14)
15print(response)

另一个示例使用 curl

 1#! /usr/bin/env bash
 2
 3curl http://localhost:8000/v1/completions \
 4    -H "Content-Type: application/json" \
 5    -d '{
 6        "model": "TinyLlama-1.1B-Chat-v1.0",
 7        "prompt": "Where is New York?",
 8        "max_tokens": 16,
 9        "temperature": 0
10    }'

多模态服务#

对于多模态模型(例如,Qwen2-VL),您需要创建一个配置文件并使用其他选项启动服务器

首先,创建一个配置文件

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 \
    --backend pytorch

Completions API#

您可以使用任何 http 客户端查询 Completions API,一个典型的示例是 OpenAI Python 客户端

另一个示例使用 curl

基准测试#

您可以使用任何与 OpenAI API 兼容的基准测试客户端来测试 trtllm_serve 的服务性能,我们推荐使用 genai-perf,这是一个基准测试方法。

首先,使用 pip 安装 genai-perf

pip install genai-perf

然后,使用 trtllm-serveTinyLlama-1.1B-Chat-v1.0 启动服务器

最后,使用以下命令测试性能

 1#! /usr/bin/env bash
 2
 3genai-perf profile \
 4    -m TinyLlama-1.1B-Chat-v1.0 \
 5    --tokenizer TinyLlama/TinyLlama-1.1B-Chat-v1.0 \
 6    --service-kind openai \
 7    --endpoint-type chat \
 8    --random-seed 123 \
 9    --synthetic-input-tokens-mean 128 \
10    --synthetic-input-tokens-stddev 0 \
11    --output-tokens-mean 128 \
12    --output-tokens-stddev 0 \
13    --request-count 100 \
14    --request-rate 10 \
15    --profile-export-file my_profile_export.json \
16    --url localhost:8000 \
17    --streaming

有关更多指导,请参阅 genai-perfREADME

使用 Slurm 进行多节点服务#

您可以使用 Slurm 和 trtllm-serve 在两个节点上部署 DeepSeek-V3 模型

echo -e "enable_attention_dp: true\npytorch_backend_config:\n  enable_overlap_scheduler: true" > extra-llm-api-config.yml

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 --backend pytorch --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源代码

指标端点#

注意

此端点处于 Beta 成熟度。

PyTorch 后端的统计信息处于 Beta 阶段,不如 TensorRT 后端的统计信息全面。

某些字段(例如 CPU 内存使用情况)不适用于 PyTorch 后端。

在 PyTorch 后端中启用 enable_iter_perf_stats 可能会略微影响性能,具体取决于服务配置。

/metrics 端点提供运行时迭代统计信息,例如 GPU 内存使用情况和 inflight-batching 详细信息。 对于 TensorRT 后端,默认情况下启用这些统计信息。 但是,对于 PyTorch 后端,使用 --backend pytorch 参数指定,您必须通过在 YAML 配置文件中设置 enable_iter_perf_stats 字段来显式启用迭代统计信息日志记录,如以下示例所示

# extra-llm-api-config.yml
pytorch_backend_config:
 enable_iter_perf_stats: true

然后启动服务器,并使用指向 YAML 文件路径的 --extra_llm_api_options 参数,如以下示例所示

trtllm-serve <model> \
  --extra_llm_api_options <path-to-extra-llm-api-config.yml> \
  [--backend pytorch --tp_size <tp> --pp_size <pp> --ep_size <ep> --host <host> --port <port>]

向服务器发送至少一个推理请求后,您可以通过轮询 /metrics 端点来获取运行时迭代统计信息

curl -X GET http://<host>:<port>/metrics

示例输出

[
    {
        "gpuMemUsage": 56401920000,
     "inflightBatchingStats": {
         ...
     },
     "iter": 1,
     "iterLatencyMS": 16.505143404006958,
     "kvCacheStats": {
         ...
     },
     "newActiveRequestsQueueLatencyMS": 0.0007503032684326172
 }

]

语法#

trtllm-serve#

trtllm-serve [OPTIONS] COMMAND [ARGS]...

分离式#

在分离式模式下运行服务器

trtllm-serve disaggregated [OPTIONS]

选项

-c, --config_file <config_file>#

分离式模式的特定选项。

-t, --server_start_timeout <server_start_timeout>#

服务器启动超时

-r, --request_timeout <request_timeout>#

请求超时

disaggregated_mpi_worker#

启动分离式 MPI worker

trtllm-serve disaggregated_mpi_worker [OPTIONS]

选项

-c, --config_file <config_file>#

分离式模式的特定选项。

--log_level <log_level>#

日志级别。

选项:

internal_error | error | warning | info | verbose | debug

serve#

运行一个与 OpenAI API 兼容的服务器

MODEL: 模型名称 | HF 检查点路径 | TensorRT 引擎路径

trtllm-serve serve [OPTIONS] MODEL

选项

--tokenizer <tokenizer>#

分词器的路径 | 名称。只有在使用 TensorRT 引擎作为模型时才指定此值。

--host <host>#

服务器的主机名。

--port <port>#

服务器的端口。

--backend <backend>#

对于 pytorch 路径,设置为 ‘pytorch’。默认为 cpp 路径。

选项:

pytorch

--log_level <log_level>#

日志级别。

选项:

internal_error | error | warning | info | verbose | debug

--max_beam_width <max_beam_width>#

集束搜索解码的最大集束数。

--max_batch_size <max_batch_size>#

引擎可以调度的最大请求数。

--max_num_tokens <max_num_tokens>#

在每个批次中移除填充后,批量输入 token 的最大数量。

--max_seq_len <max_seq_len>#

一个请求的最大总长度,包括提示和输出。 如果未指定,则该值从模型配置中推断。

--tp_size <tp_size>#

张量并行大小。

--pp_size <pp_size>#

流水线并行大小。

--ep_size <ep_size>#

专家并行大小

--gpus_per_node <gpus_per_node>#

每个节点的 GPU 数量。 默认为 None,它将被自动检测。

--kv_cache_free_gpu_memory_fraction <kv_cache_free_gpu_memory_fraction>#

在分配模型权重和缓冲区之后,为 KV 缓存保留的可用 GPU 内存比例。

--num_postprocess_workers <num_postprocess_workers>#

[实验性] 将原始响应后处理为符合 OpenAI 协议的工作线程数。

--trust_remote_code#

HF transformers 的标志。

--extra_llm_api_options <extra_llm_api_options>#

指向 YAML 文件的路径,该文件覆盖由 trtllm-serve 指定的参数。

参数

MODEL#

必需参数