ADR 0013: 比赛规则解读 + dev/bench 命令区分
日期: 2026-06-25 状态: Accepted Owner: 队长 recoletas 关联: ADR 0006b (容器服务, 附录 A 启动命令), Plan P5 (提交材料) 来源: 先导杯 2026 大模型推理服务优化赛技术方案 PDF (2026-06-25 拿到)
Context
2026-06-25 读到官方《先导杯 2026 大模型推理服务优化赛技术方案》, 跟我们之前 plan/spec 假设有几条关键冲突 (主要在 vllm serve 锁定参数 + 量化边界 + 完成率熔断). 这条 ADR 收齐解读, 同时定下 dev vs bench 两条命令路径, 避免 P5 提交时踩雷.
与之前认知的关键差异
| 项 | 我们旧认知 | 比赛规则实际 | 行动 |
|---|---|---|---|
| PyTorch 版本 | 2.7.1 (推 6.3 wheel) | 2.10.0 (官方镜像预装, 不能改) | 实跑 python3 -c "import torch; print(torch.__version__)" 确认, 不一致则 INT8 path 调试时注意版本差异 |
--max-num-seqs |
dev 用 128 | LOCKED (§9 (8)) | dev 可以用, bench 提交用 default |
--max-num-batched-tokens |
dev 用 4096 | LOCKED (§9 (8)) | 同上 |
--default-chat-template-kwargs '{"enable_thinking": false}' |
我们用过 | chat template LOCKED (§9 (8)) | dev 也建议去掉, 不然跟官方 baseline 不公平 (官方 baseline 默认 thinking on/off 不一致) |
| transformers 版本 | 没明说 | 5.5.0 | 锁版本, INT8 quant 用到 transformers 工具时注意 |
| 投机解码 | 没计划 | 严禁 (§7) | 已对齐 |
| 模型结构 / 权重 | 不动 Qwen | 严禁修改 (§7) | 已对齐 |
| 持久化权重量化 | 没计划 | 严禁 (§7) | 已对齐 |
| KV cache 量化 | Stream B 计划 | 明确允许 (§7) ✓ | 路径合规 |
量化边界 (最重要, §7)
严禁: - 权重加载前后对模型权重进行持久化量化 - 结构化剪枝 / 权重重排压缩 / 模型图重构 / 模型格式转换 - 生成可复用的量化权重缓存
允许 (这是我们的全部优化空间): - 推理过程中非持久化、算子级低精度计算优化 - 激活值动态量化 - KV cache 量化 ← Stream B 主路 - kernel 内部临时类型转换 - 低精度矩阵乘法 - Attention 内核优化
关键: INT8 KV cache 我们是 per-request 动态量化, 不写持久化权重, 合规. 但要确保: - 量化 scale tensor 不持久化 - 量化后的 KV 不写盘 (除了 vllm 必要的 paging, 那是 vllm 内部行为) - 服务重启不缓存量化结果
服务可用性熔断 (§8)
- 完成率 ≥ 99% (失败 ≤ 1%) — 失败超 1% 该档得分清零
- TTFT/TPOT P99 × 1.5 SLA 违反 → 该档清零
- 双熔断: 即使吞吐提升明显, 完成率不达标也清零
影响: Stream B INT8 KV cache 必须鲁棒. 任何精度塌方 → 立即 revert, 不能硬撑 (双熔断下, 1% 完成率损失 = 该档清零, 比吞吐提升更亏).
Dev vs Bench 命令路径
重要: bench 时 vllm serve 命令跟 dev 不一样. 我们内部 baseline 是用 dev 命令测的 (含锁定参数). 官方 bench 会用纯命令测. 相对提升 = (方案 - Baseline) / Baseline, 都用 bench 命令测, 公平. 我们的 baseline 数字仅作内部对照 (知道大致在哪), 不作为评测基准.
Dev 命令 (scripts/start_vllm_dev.sh — 已存, 复制自 ADR 0006b 附录 A)
vllm serve /public/home/xdzs2026_c087/Qwen3.5-27B \
--port 8001 \
--trust-remote-code \
--dtype bfloat16 \
--served-model-name Qwen3.5-27B \
--gpu-memory-utilization 0.95 \
--max-num-batched-tokens 4096 \
--max-num-seqs 128 \
--enable-auto-tool-choice \
--tool-call-parser qwen3_coder \
--reasoning-parser qwen3 \
--default-chat-template-kwargs '{"enable_thinking": false}'
用途: 内部 dev / baseline / P3 调参. 锁定参数可加, 加速试错.
Bench 命令 (scripts/start_vllm_bench.sh — 新建, 严格对齐规则 §9)
用途: 官方评测 + 提交时 + P3 任何"对比基线"评测. 严格匹配规则 §9 (7) 的命令模板. 我们的 vllm wheel 必须在这个命令下工作, 不能假设 --max-num-seqs / --max-num-batched-tokens / --default-chat-template-kwargs 存在.
P3 关键约束: 任何 patch (INT8 KV cache / Triton kernel / torch.compile config) 必须 default 行为对:
- 不传 --max-num-seqs 时, 默认就是 1 (符合 spec §3 并发=1)
- 不传 --max-num-batched-tokens 时, 默认走 vllm 调度, 不能因为我们没传就崩
- 不传 --default-chat-template-kwargs 时, 模型走官方 chat template 默认行为 (Qwen3 可能有 thinking, 不能假设 enable_thinking=false)
提交材料 (§12-15) 影响
§13 env vars 文档 (reports/env-vars.md)
我们用过的 env var:
- MODEL_DIR=/public/home/xdzs2026_c087/Qwen3.5-27B — bench 脚本用来找 tokenizer / model path
后续 P3 可能加的 env var:
- VLLM_USE_V1=1
- VLLM_ATTENTION_BACKEND=TRITON_ATTN / ROCM_AITER_FA
- TORCH_COMPILE_DEBUG=0
- ...
所有这些都要写进 reports/env-vars.md (P5 必交付).
§14 优化方案说明 (reports/optimization-plan.md)
按官方要求: - 优化方法 + 技术路线 - 各项优化对性能提升的贡献分析 - 优化点汇总表 (含关键代码路径 + 性能对比数据)
已有 P0 末调研 (docs/learning.md + 3 ADR) 凑素材, P3 / P4 阶段补完后整理.
§15 第三方库标头 (README.md 头部)
当前 README 已有:
本项目使用 vLLM(Apache-2.0)、PyTorch、Transformers、Qwen3.5-27B(Apache-2.0 权重) 等开源项目
合规, 不用改. 但 P5 提交前再 check 一次 §15 列名 (HIP / ROCm-DTK / aiter 等是否也要列).
Action items
- ADR 0013 写完 (本文)
-
scripts/start_vllm_bench.sh建好 - Memory
competition_rules.md写好 (新规则) - 容器内
python3 -c "import torch; print(torch.__version__)"+import transformers; print(transformers.__version__)— 确认实际版本 - P3 启动前: 验证 INT8 KV cache patch + bench 命令兼容 (没有 --max-num-seqs 等能跑)
- Plan P5: 提前起稿
reports/env-vars.md+reports/optimization-plan.md - README.md 头部第三方 attribution check (确认 HIP / DTK / aiter 是否要列)