vLLM自建API的调用成本核算方法

围绕 vLLM 提供的 OpenAI 兼容接口,把自建 API 拆成固定资源、请求和能耗账,用请求量、GPU 占用时长及实际输入输出令牌核算单位成本,并保留端点、模型、配置版本和重试记录。

用 vllm 启动的自建 API,调用成本不能只用请求条数相除:先归集账期内的固定支出,以及随调用发生的 GPU、存储、网络、电费和运维成本,再除以你定义的可计费请求数。若网关实际记录了输入、输出 token,还可建立内部 token 成本;vLLM 的 OpenAI 兼容服务器文档说明其 HTTP 服务实现 OpenAI Completions API 和 Chat API,因此端点、模型和资源占用应分列记录。

命令行 vllm 启动前要准备哪些账?

先查看供应商自己的价格页、报价单和账单。OpenAI 接口兼容不等于存在统一调用单价,模型和部署条件不同,费用口径也可能不同。

  • 资源账:记录 GPU 租金或购置成本分摊、存储、网络流量、电力、备份、维护和技术支持。报价已包含的项目不要重复加入。
  • 请求账:记录端点、模型、时间、状态和重试;输入、输出 token 只填写系统实际取得的值。
  • 配置账:保存模型、GPU 数量、上下文限制和批处理设置,避免把不同配置下的调用混在一起。

这些名称应作为字段保存,而不是直接照抄为配置文件:

CUDA_VISIBLE_DEVICES
tensor_parallel_size
max_model_len
max_num_seqs

vLLM 的内存配置说明指出,tensor_parallel_size 可以把模型拆到多块 GPU,但每个进程都会读取完整检查点,磁盘读取时间会随并行规模增加。因此,模型下载、加载和启动所占用的时间也应进入资源账。

按官方示例启动并核验 API

官方 OpenAI 兼容服务器文档给出的启动示例使用以下命令:

vllm serve NousResearch/Meta-Llama-3-8B-Instruct \
  --dtype auto \
  --api-key token-abc123

示例值不能直接作为生产密钥,实际部署应通过自己的密钥管理方式注入。文档同时列出文本补全和聊天调用路径:

/v1/completions
/v1/chat/completions

其 在线服务文档还列出了基础运维端点:

/version
/load
/v1/models
/health

分别用于版本信息、服务器负载指标、可用模型列表和健康检查。核验后保存原始响应 JSON,只把响应中实际存在的字段写入请求账,不要预设所有端点都会返回同一种 token 用量字段。

固定成本、调用量与单位成本怎样分开算?

下列大写名称是计算字段,不是默认数值;逐项用 YOUR_VALUE 替换后再求和。

PERIOD_COST =
  FIXED_INFRA_COST
  + PROVIDER_VARIABLE_CHARGE
  + GPU_ACTIVE_COST
  + STORAGE_COST
  + NETWORK_COST
  + ELECTRICITY_COST
  + OPERATIONS_COST

GPU_ACTIVE_COST =
  SUM(GPU_HOURLY_RATE * GPU_ACTIVE_HOURS)

COST_PER_BILLABLE_REQUEST =
  PERIOD_COST / BILLABLE_REQUEST_COUNT

BILLABLE_REQUEST_COUNT 必须先写清口径:按成功业务请求统计,还是按所有实际尝试统计。失败或重试只要占用了 GPU,就应保留在资源记录中,同时另行统计成功请求,避免平均成本被低估。调用量增加时,固定成本分摊到每次请求的金额通常会下降,但实际资源费用和按 token 计算的费用不会因此消失。

输入输出 token 怎样进入成本表

只有网关日志或响应 JSON 已提供可靠计数时,才使用 token 口径:

INTERNAL_INPUT_TOKEN_COST =
  INPUT_ALLOCATABLE_COST / INPUT_TOKEN_TOTAL

INTERNAL_OUTPUT_TOKEN_COST =
  OUTPUT_ALLOCATABLE_COST / OUTPUT_TOKEN_TOTAL

REQUEST_ALLOCATED_COST =
  INTERNAL_INPUT_TOKEN_COST * INPUT_TOKENS
  + INTERNAL_OUTPUT_TOKEN_COST * OUTPUT_TOKENS

输入和输出应分配多少成本,由你自己的资源记录和内部政策决定;官方接口兼容说明本身不是统一价目表。如果无法取得一致的 token 计数,就继续使用请求数、GPU 占用时长和账单项目核算,不要把估算值填入“实际 token”列。

电费和碳成本如何处理

Google 对 PUE 的说明将其用于表示数据中心非计算开销与 IT 能耗之间的关系。采用相同边界时,可以计算:

FACILITY_ENERGY = IT_ENERGY * PUE

如果租用报价已经包含设施用电,不要再次加入相同电费。GHG Protocol 的 Scope 2 指南覆盖外购电力、蒸汽、热量和制冷等间接排放。组织如果使用内部碳价,可另设管理成本:

INTERNAL_CARBON_COST =
  REPORTED_EMISSIONS * ORGANIZATIONAL_CARBON_PRICE

这项计算属于内部管理口径,不代表供应商一定向你收取了同额费用。

结算时最常漏掉什么

  • 模型加载、服务空闲、失败请求和重试占用的时间。
  • 已包含在租用报价中的存储、网络或电力项目。
  • 不同模型、端点和配置版本产生的调用。
  • 请求账与 GPU 活跃时间、供应商账单之间的差额。

官方内存说明指出,降低 max_model_len 或 max_num_seqs 可以减少内存使用,因此不同参数应分别标记配置版本。优化与调优文档还说明,KV cache 空间耗尽时可能发生请求抢占并重新计算;频繁出现时,文档列出的处理包括提高 gpu_memory_utilization,或降低 max_num_seqs、max_num_batched_tokens。--enforce-eager 可跳过编译和 CUDA graph 捕获以加快启动,但会牺牲稳定解码阶段的性能;按占用时间计费时,应分别记录启动和持续运行时间。

最终用请求账核对调用量,用资源账核对 GPU 活跃时间,再用供应商账单核对费用;差额应单独留痕,不要直接混入平均值。本文步骤依据正文所链接的官方文档整理,未运行或测量;使用前请按当前版本复核。

资料来源