vLLM 与 Replicate 部署路径及成本核算
梳理 vLLM 自托管与 Replicate 托管的部署步骤,按公开、私有和部署模式拆分费用,并用 TTFT、TPOT 与吞吐建立可复核的比较口径。
vLLM 自托管路径是在满足官方环境要求后,用 vllm serve 启动模型 API(vLLM 快速入门);Replicate 托管路径则要先区分 public、private、deployment 与 fast-booting fine-tune,因为可计费时段不同(Replicate 计费说明)。部署后,用 TTFT、TPOT 和吞吐验证服务,再把基础设施、实例在线、活跃处理与下游模型费用按同一周期相加,才能得到可复核的总拥有成本。
vLLM 自托管部署:从环境到 API
若使用 NVIDIA GPU,vLLM GPU 安装文档要求 compute capability 不低于 7.5;B200、GB200 需要使用至少 CUDA 12.8 的 PyTorch wheels,预编译包则包含 C++ 与 CUDA 12.9 二进制。
按 vLLM 快速入门,运行环境应为 Linux 与 Python 3.10 至 3.13;推荐创建全新的 Python 3.12 环境,--torch-backend=auto 会依据已安装的 CUDA driver 选择 PyTorch index。服务默认监听 http://localhost:8000,可用 --host 和 --port 修改地址;一个服务进程当前只托管一个模型。
uv venv --python 3.12 --seed
source .venv/bin/activate
uv pip install vllm --torch-backend=auto
vllm serve Qwen/Qwen2.5-1.5B-Instruct
服务启动后,用同一地址请求模型列表。这个请求只验证 API 路径能否访问;要判断生成性能,还需要另行固定请求与统计口径。
curl http://localhost:8000/v1/models
启动参数:先明确资源与上下文边界
以下参数以 vLLM serve CLI Reference为准:
--gpu-memory-utilization是当前实例中 model executor 使用的 GPU 内存比例,默认值为0.92。它是单实例限制;如果同时设置--kv-cache-memory-bytes,后者会覆盖gpu_memory_utilization的作用。--max-model-len表示 prompt 与 output 合计的上下文长度。未设置时从模型配置推导;设为-1或auto时,会选择 GPU 内存能够容纳的最大长度。--max-num-seqs限制单次迭代处理的 sequences 数量,--max-num-batched-tokens限制单次迭代处理的 tokens 数量。它们是处理上限,不等于已经测得的并发能力或吞吐量。--tensor-parallel-size(-tp)和--pipeline-parallel-size(-pp)分别指定 tensor parallel groups 与 pipeline parallel groups,默认值均为1。
Replicate 托管路径:先识别计费类型
按 Replicate 的计费说明,先在目标模型页的 Run time and cost 下确认硬件,再决定哪些时段应进入账单:
| 类型 | 需要记录的计费边界 |
|---|---|
| public model | setup 和 idle 免费,只对 active processing 收费;默认与其他客户共享硬件池和队列,可能出现冷启动或扩缩容限制 |
| private model | setup、idle、active 全程计费;多数 private models 使用专用硬件,不共享队列 |
| fast-booting fine-tune | 无论 public 还是 private,只对模型 active processing 的时间收费 |
| deployment | setup、idle、active 全程计费 |
失败与取消也不能统一处理:普通 failed run 不收费,但取消 official model 仍可能收费;按时间计费的 run 算到取消时刻,private model 与 deployment 的失败或取消 run 则按实例实际 active 时间计费。模型调用其他模型时,还要加入 downstream models 的计算时间。
如果要创建 deployment,应从目标模型页核对当前操作入口、请求字段和硬件选择,不应照搬其他模型的命令。
性能验证:不要混用延迟与吞吐口径
依据 MLPerf Inference Rules,先明确 system under test 包含的硬件和软件资源;所有提交都要使用 LoadGen。LLM 测试记录 time to first token(TTFT)和 time per output token(TPOT),整体 latency 则从 LoadGen 调度 query 到收到回复计算。
不同场景的指标不能直接混为一谈:
- Server 按 Poisson distribution 发送 query,并在 benchmark-specific latency constraint 下报告可支持的最大 Poisson throughput。
- Offline 在开始时发送全部 samples,不设 latency constraint,报告 measured throughput。
- Single stream 在上一请求完成后发送下一请求,报告第 90 百分位 latency estimate。
因此,应选择与实际服务模式相符的场景,并同时记录模型、vLLM 参数、请求口径、延迟指标和吞吐指标。
成本核算:把费用按触发条件拆开
Replicate 的 official models 说明指出,official models 按可预测的输出指标计价,例如输出图像数量、视频输出秒数以及输入和输出 tokens,而不是直接按硬件与运行时间计价。
核算时先从模型页或报价单填写当前计费量和单价,再把占位值代入:
private/deployment 在线秒数 = YOUR_VALUE + YOUR_VALUE + YOUR_VALUE
按时间计费 = YOUR_VALUE × YOUR_VALUE
指标计费 = (YOUR_VALUE × YOUR_VALUE) + (YOUR_VALUE × YOUR_VALUE)
周期总成本 = YOUR_VALUE + YOUR_VALUE + YOUR_VALUE + YOUR_VALUE
第一式的三个值依次代表 setup、idle 和 active 秒数;第二式依次填写计费秒数与对应单价;第三式为“指标数量 × 单价”,每个 official 计费指标增加一组。最后一式的四个值依次填写自托管基础设施、运维、Replicate 费用和 downstream model 费用,并统一统计周期。
常见出错点
最常见的错误是把 public model 的 idle 免费规则套到 private model 或 deployment,漏算启动与空闲时间;只记录根模型费用而忽略 downstream models;以及把 Server 的最大 Poisson throughput 与 Offline 的 measured throughput 直接比较。核对表至少应同时包含模型类型、实例计费时段、启动参数、测试场景、指标定义和统计周期。
本文步骤均依据正文所链接的官方文档整理,未运行或测量任何环境;使用前请按当前版本核对。