📎 配套脚本附件正文未内嵌 · 共 4 个 · 点开可在线查看
📂 查看全部 761 个脚本附件 →
⚠️ 脚本内含明文凭据(与本页正文一致),请勿在公网环境直接运行。
本周实战

作业13 · 虚拟模型主备与压测 Runbook

测试 LiteLLM 主备、加压到 429、安全并发建议、值班 Runbook。

作业13:虚拟模型主备 + 压测到 429 + 值班 Runbook(动手 + Cursor)

作业目标:在测试环境起 LiteLLM(或等价网关)并接模拟 upstream;配置虚拟模型 primary / backup;用 Cursor 生成「逐步加压直到 429」的压测脚本并输出安全并发建议;写一页值班 Runbook(429 / 5xx / 超时)。

验收标准:

1. 两个模拟上游可探活;经 LiteLLM(推荐 :4010)或直连可分别调用 primary / backup

2. 压测脚本跑出 CSV/JSON,并打印 safe_concurrency=…

3. Runbook 一页可读、可照着值班处理

环境:本机或 192.168.110.207;勿压生产 vLLM,本作业默认打模拟上游。

HTML:docs/html_cursor/作业13_虚拟模型主备与压测Runbook_cursor.html

Runbook 单页:docs/md_cursor/作业13_值班Runbook_上游429_5xx_超时_cursor.md

路径:scripts_cursor/作业13_虚拟模型主备与压测Runbook/

配置:patches_cursor/作业13_虚拟模型主备/config.yaml

结果:data/homework13/


目录

  1. 做完长什么样
  2. 学习路线
  3. 原理
  4. 详细步骤
  5. Cursor 提示词(可复制)
  6. 完整程序
  7. Runbook
  8. 验收清单

做完长什么样

项值
模拟 primaryhttp://127.0.0.1:18101/v1(默认 max_concurrent=4,易出 429)
模拟 backuphttp://127.0.0.1:18102/v1(默认 max_concurrent=20)
测试 LiteLLMhttp://127.0.0.1:4010(Master Key sk-hw13-test-4010)
虚拟模型primary / backup
压测产物data/homework13/ramp_*.csv + ramp_*.json(含安全并发建议)
Runbook一页:429 / 5xx / 超时

学习路线

text
A  启动双模拟上游(primary/backup)
B  (推荐)启动测试 LiteLLM :4010,加载主备虚拟模型
C  curl 分别打 primary / backup
D  用 Cursor 生成或直接跑「加压到 429」脚本 → 得到安全并发
E  对照 Runbook 演示:X-Mock-Fail / X-Mock-Sleep
F  勾验收清单

与作业12区别:12 打真实推理看延迟;13 用模拟上游专门练主备、429 与值班,不伤 GPU。


原理

text
客户端
  │  model=primary / backup
  ▼
测试 LiteLLM :4010(虚拟模型名)
  ├─ primary → mock:18101(低并发上限 → 易 429)
  └─ backup  → mock:18102(较高上限)
可选:fallbacks: primary → backup

详细步骤

A. 启动双模拟上游

开一个终端:

bash
cd D:\workbuddy\192.168.110.207
python scripts_cursor/作业13_虚拟模型主备与压测Runbook/hw13_02_启动双上游.py

或分两个终端手动:

bash
python scripts_cursor/作业13_虚拟模型主备与压测Runbook/hw13_01_模拟上游.py --port 18101 --name primary --max-concurrent 4
python scripts_cursor/作业13_虚拟模型主备与压测Runbook/hw13_01_模拟上游.py --port 18102 --name backup --max-concurrent 20

探活:

bash
curl -sS http://127.0.0.1:18101/health
curl -sS http://127.0.0.1:18102/health

B. 启动测试 LiteLLM(推荐,独立 :4010)

不要改生产 :4000 的 systemd,除非你明确要合并配置。

已安装 litellm 时:

bash
# 207 示例(按实际 venv 调整)
litellm --config /opt/workbuddy/patches_cursor/作业13_虚拟模型主备/config.yaml --port 4010

Windows 本机若已 pip install litellm:

bash
python -m litellm --config patches_cursor/作业13_虚拟模型主备/config.yaml --port 4010

配置要点(完整见 patches_cursor/作业13_虚拟模型主备/config.yaml):

若暂时起不了 LiteLLM:步骤 C/D 可先直连模拟上游,仍能完成压测与 Runbook;虚拟模型概念对照配置文件学习即可。

C. 验收主备可调用

经 LiteLLM:

bash
curl -sS http://127.0.0.1:4010/v1/chat/completions \
  -H "Authorization: Bearer sk-hw13-test-4010" \
  -H "Content-Type: application/json" \
  -d '{"model":"primary","messages":[{"role":"user","content":"hi"}],"max_tokens":8}'

curl -sS http://127.0.0.1:4010/v1/chat/completions \
  -H "Authorization: Bearer sk-hw13-test-4010" \
  -H "Content-Type: application/json" \
  -d '{"model":"backup","messages":[{"role":"user","content":"hi"}],"max_tokens":8}'

直连模拟:

bash
curl -sS http://127.0.0.1:18101/v1/chat/completions \
  -H "Authorization: Bearer sk-mock" \
  -H "Content-Type: application/json" \
  -d '{"model":"mock-primary","messages":[{"role":"user","content":"hi"}],"max_tokens":8}'

D. 压测:逐步加压直到 429

bash
# 直打 primary 模拟上游(最稳妥完成作业)
python scripts_cursor/作业13_虚拟模型主备与压测Runbook/hw13_03_压测到429.py \
  --url http://127.0.0.1:18101/v1/chat/completions \
  --model mock-primary \
  --key sk-mock

# 若 LiteLLM :4010 已起
python scripts_cursor/作业13_虚拟模型主备与压测Runbook/hw13_03_压测到429.py \
  --url http://127.0.0.1:4010/v1/chat/completions \
  --model primary \
  --key sk-hw13-test-4010

期望输出含:

text
========== 安全并发建议 ==========
safe_concurrency = N
说明:最大稳定并发=…;安全建议= floor(…*0.7)=N …

并生成 data/homework13/ramp_*.csv / ramp_*.json。

E. Runbook 演示(可选)

bash
# 5xx
curl -sS -o - -w "\nhttp=%{http_code}\n" http://127.0.0.1:18101/v1/chat/completions \
  -H "Authorization: Bearer sk-mock" \
  -H "Content-Type: application/json" \
  -H "X-Mock-Fail: 500" \
  -d '{"model":"x","messages":[{"role":"user","content":"x"}],"max_tokens":8}'

# 超时(客户端 --max-time 3)
curl -sS --max-time 3 http://127.0.0.1:18101/v1/chat/completions \
  -H "Authorization: Bearer sk-mock" \
  -H "Content-Type: application/json" \
  -H "X-Mock-Sleep: 10" \
  -d '{"model":"x","messages":[{"role":"user","content":"x"}],"max_tokens":8}'

对照 Runbook 单页 走一遍处理顺序。


Cursor 提示词(可复制)

把下面整段发给 Cursor,用于「自己生成压测脚本」练习(仓库已有参考实现 hw13_03):

text
请写一个 Python3 压测脚本(仅用标准库):
1) POST OpenAI 兼容 /v1/chat/completions
2) 并发阶梯 1,2,4,6,8,12,16,每档固定 N 个请求
3) 统计每档 http 200/429/5xx 比例与平均延迟
4) 出现 429 可停止继续加压
5) 计算安全并发:取「429=0 且成功率>=95%」的最大并发,再乘 0.7 向下取整
6) 打印 safe_concurrency,并写出 CSV + JSON 到 data/homework13/
参数:--url --model --key --levels --requests-per-level

完整程序

文件作用
scripts_cursor/作业13_虚拟模型主备与压测Runbook/hw13_01_模拟上游.py模拟上游(429/5xx/超时)
scripts_cursor/作业13_虚拟模型主备与压测Runbook/hw13_02_启动双上游.py一键 primary+backup
scripts_cursor/作业13_虚拟模型主备与压测Runbook/hw13_03_压测到429.py加压到 429 + 安全并发
patches_cursor/作业13_虚拟模型主备/config.yaml测试 LiteLLM 主备配置

(源码以仓库文件为准;下文不重复全文以免漂移。)


Runbook

完整一页见:

摘要:

故障立刻做根因方向
429降并发、切 backup、停批跑过载/限流;下调常态并发
5xx切 backup、查进程/变更崩溃、错误发布
超时降并发/降 max_tokens、核对超时链排队、网络、阈值过短

验收清单


与其它作业关系

作业关系
作业12真实推理延迟与健康检查
作业13测试环境主备、429 压测、值班 Runbook
LiteLLM 部署生产网关;本作业用独立 :4010 配置,避免误伤