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-serve
和 TinyLlama-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-perf
的 README。
使用 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#
必需参数