02 路线B 卖Token
Plan B · v2 · Full 版本
Plan B · v2 · Full 版本
目标:从"3 个模型 + vLLM"进化为"多引擎 + 精细计费 + 抢占实例"。
时间:v1 上线后 2-3 个月开始。
1. 相比 v1 的关键升级
| 维度 | v1 | v2 |
|---|---|---|
| 推理引擎 | 仅 vLLM | vLLM + SGLang + TensorRT-LLM |
| 模型数 | 3-5 | 15-25 |
| 路由 | 简单 hash | 智能路由(按延迟/成本/命中率) |
| 计费 | 按 token 平价 | 差异化定价(模型/引擎/优先级) |
| Cache | vLLM 内建 | 跨请求 KV Cache 池 + 分层 |
| 抢占 | 无 | 抢占实例 3 折 |
| 结构化输出 | 无 | JSON Schema / Regex / Grammar |
| 函数调用 | 基础 | 完整 + 并发 |
| 长上下文 | 32K | 128K+(chunked prefill) |
| 批量 API | 无 | 异步批处理 50% 折扣 |
2. 新推理架构
客户请求
│
┌─────────▼─────────┐
│ API 网关 │
│ OpenAI + Anthropic 兼容
└─────────┬─────────┘
│
┌─────────▼─────────┐
│ 智能路由引擎 │
│ 决策: │
│ - 请求特征分析 │
│ - 模型 x 引擎选择 │
│ - 优先级排队 │
└─────────┬─────────┘
│
┌─────────────────┼─────────────────┐
│ │ │
┌────▼────┐ ┌────▼─────┐ ┌────▼────┐
│ vLLM │ │ SGLang │ │TRT-LLM │
│ 主力对话 │ │ 长上下文 │ │低延迟 │
│ 高吞吐 │ │ 结构化 │ │小模型 │
└─────────┘ └──────────┘ └─────────┘
│ │ │
└─────────────────┼─────────────────┘
│
┌─────────▼─────────┐
│ 跨引擎 KV Cache │
│ (Redis + NVMe) │
└────────────────────┘3. 引擎选型矩阵
| 场景 | 引擎 | 理由 |
|---|---|---|
| 通用对话 30B 内 | vLLM | 吞吐高、社区稳 |
| 通用对话 100B+ | vLLM + FP8 + TP=8 | H800 原生 FP8 |
| 长上下文 128K | SGLang | RadixAttention 命中率高 |
| 结构化 JSON | SGLang | Grammar-guided decoding 快 |
| 低延迟小模型 | TensorRT-LLM | INT8 + 强 kernel 融合 |
| 嵌入模型 | vLLM 或 Text-Embeddings-Inference | 简单场景 |
| 语音 / 视觉 | 单独部署 | 走独立管线 |
路由决策示例:
def route(request):
if request.model == "qwen3-embed":
return "vllm-embed"
if request.context_length > 32000:
return "sglang"
if request.want_json_schema:
return "sglang"
if request.model.startswith("small-") and request.want_low_latency:
return "trt-llm"
return "vllm" # 默认4. 跨请求 KV Cache 池
问题:单机 vLLM prefix cache 只在本机命中。多客户共享的系统提示、多轮对话很浪费。
方案:
- 客户 System Prompt → 提取哈希 → 全局共享 KV
- 多轮对话 → 按 session_id 绑定实例(sticky routing)
- 冷启动 KV → NVMe 缓存池,命中率 30% 时可省 40% 显存
收益:
- 多轮对话客户成本降 30-50%
- 高并发客户 TTFT 降 40%
5. 差异化定价(v2 核心创新)
| 优先级 | SLA | 价格 | 说明 |
|---|---|---|---|
| 保障型 | P99 800ms | 1.0× | 默认 |
| 标准型 | P99 2s | 0.7× | 混批可能延迟 |
| 抢占型 | 无 SLA、可被打断 | 0.35× | 客户异步任务、批处理 |
| 批量型 | 24 小时内完成 | 0.5× | 客户提交后异步跑 |
客户配额:
- 免费用户:仅标准型 + 抢占型
- 付费用户:所有类型
- 企业合约:保障型独占容量
6. 高级功能
6.1 函数调用 / Tool Use
- 支持 OpenAI function call + Anthropic tool use 双协议
- 并发工具调用
- 结构化返回强制约束
6.2 JSON Schema 强制
- 客户传 schema → 引擎 grammar-guided decoding
- 100% 保证输出合法 JSON
- SGLang 天然支持,vLLM 通过 outlines 支持
6.3 长上下文优化
- Chunked prefill(把 128K prompt 分 8K 块)
- YARN / NTK 上下文外推(可选)
- 首 token 延迟目标 <2s(128K 场景)
6.4 批量推理 API
- POST
/v1/batches提交 JSONL - 异步处理,24 小时内完成
- 半价、优先级最低
- 结果存 S3 / MinIO
6.5 微调(v2 后期)
- LoRA 训练托管
- 训完自动上架为客户私有模型
- 推理复用底座 + 加载 LoRA adapter(零成本模型切换)
7. 计费系统升级
多维度组合:
- 模型 × 优先级 × 缓存命中率
- 缓存命中的 token 打 3 折(vLLM 已支持标注)
- 结构化输出 grammar 生成打 8 折(因为速度快)
发票 / 对账:
- 客户可拉自己所有请求原始数据(30 天)
- 月度对账单 CSV 自动发送
- 支持发票开票 API
8. 关键难点
| 难点 | 应对 |
|---|---|
| 多引擎运维复杂 | 一份统一 Helm Chart,每个引擎独立 values.yaml |
| KV Cache 一致性 | 强 sticky routing,避免跨实例 cache 混乱 |
| 抢占实例回收公平性 | 提前 30s 通知,未完成 token 免费 |
| grammar-guided 精度损失 | 提供开关,客户可关 |
| 多协议兼容 | 单独维护 protocol adapter 层 |
9. 里程碑(12 周)
| 周次 | 交付 |
|---|---|
| W1-W2 | SGLang 部署 + 长上下文验证 |
| W3-W4 | TensorRT-LLM 部署 + 小模型低延迟 |
| W5-W6 | 智能路由 + 引擎切换 |
| W7-W8 | 跨请求 KV Cache 池 |
| W9-W10 | 抢占实例 + 差异化定价 |
| W11-W12 | 批量 API + 微调 MVP |
10. v2 单机经济模型
同样 8×H800 单机,v2 后:
| 场景 | 引擎 | 有效吞吐(tok/s) | 月理论营收 |
|---|---|---|---|
| v1 纯 vLLM | vLLM | 480 | 6.2 万 |
| v2 + FP8 + prefix cache 40% | vLLM | 750 | 9.7 万 |
| v2 + 多客户共享 system prompt | vLLM | 950 | 12.3 万 |
| v2 + 抢占实例填空 | 混合 | 1200 | 15.5 万 |
| v2 极限 | 混合 | 1500 | 19.3 万 |
同一台机器,v2 vs v1 营收提升 3 倍,靠的全是软件工程。
11. 组件对比(详见 comparison-engines.md)
主要选型判断:
- vLLM 是 must-have:占 70% 请求
- SGLang 是 nice-to-have:占 20% 请求,但覆盖高价值场景
- TensorRT-LLM 谨慎选:H100 上有优势,运维复杂
- TGI 别用:v1 已不推荐
12. v2 之后往 v3 演进的钩子
- 微调 → 模型市场 → 客户互相买卖 LoRA
- 客户可发布模型到平台,走分成模式
- 加多模态:图像 / 音频 / 视频生成
- 加 Agent / RAG 托管:一键部署 AI 应用