You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker部署VLLM后,如何获取单请求的TTFT与TPOT指标?

获取VLLM单个请求的TTFT和TPOT指标(Docker部署场景)

以下是几种在Docker部署的VLLM中获取单个请求的TTFT(首令牌生成时间)和TPOT(每输出令牌耗时)的可行方案:

方案1:启用DEBUG日志并提取计时信息

VLLM在DEBUG日志级别下会输出每个请求的详细计时数据,无需修改代码,适合快速验证:

  • 启动Docker容器时,添加日志级别参数或环境变量:
    docker run -p 8000:8000 vllm/vllm:latest --model your-model-name --log-level debug
    
    或者通过环境变量设置:
    docker run -p 8000:8000 -e LOG_LEVEL=DEBUG vllm/vllm:latest --model your-model-name
    
  • 容器日志中会包含每个请求的TTFT(格式类似First token generated in X seconds),TPOT可通过相邻令牌日志的时间差计算,直接从日志中提取对应请求的数值即可。

方案2:客户端侧计时(OpenAI兼容API场景)

如果使用VLLM的OpenAI兼容API,可在客户端代码中自行记录时间,实现简单但会包含网络延迟:

import time
from openai import OpenAI

client = OpenAI(base_url="http://localhost:8000/v1", api_key="dummy")

prompt = "Your test prompt here"
start_time = time.time()
first_token_received = False
tpot_times = []

# 流式请求模式下捕获每个令牌的时间
stream = client.chat.completions.create(
    model="your-model-name",
    messages=[{"role": "user", "content": prompt}],
    stream=True
)

for chunk in stream:
    if not first_token_received:
        ttft = time.time() - start_time
        print(f"TTFT: {ttft:.4f}s")
        first_token_received = True
        last_token_time = time.time()
    else:
        current_time = time.time()
        tpot = current_time - last_token_time
        tpot_times.append(tpot)
        print(f"TPOT: {tpot:.4f}s")
        last_token_time = current_time

# 可选:计算该请求的平均TPOT
if tpot_times:
    avg_tpot = sum(tpot_times)/len(tpot_times)
    print(f"Average TPOT: {avg_tpot:.4f}s")

方案3:自定义VLLM服务端代码(最准确)

如果需要服务端原生返回TTFT和TPOT,可修改VLLM的API服务代码并构建自定义Docker镜像:

  1. 复制官方VLLM的openai/api_server.py文件,找到处理生成请求的逻辑(如create_chat_completion函数)。
  2. 在请求处理流程中添加计时逻辑:记录请求开始时间、首令牌生成时间,以及每个后续令牌的生成时间,将这些数据添加到响应JSON中。
  3. 编写自定义Dockerfile:
    FROM vllm/vllm:latest
    COPY ./modified_api_server.py /usr/local/lib/python3.10/site-packages/vllm/openai/api_server.py
    
  4. 构建并运行自定义镜像:
    docker build -t custom-vllm .
    docker run -p 8000:8000 custom-vllm --model your-model-name
    
    此时调用API时,响应结果中会包含该请求的TTFT和每个令牌的TPOT数据。

内容的提问来源于stack exchange,提问作者Carter Wang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 08:47:24