本仓库实现了基于 HuggingFace(Transformers Cache API)的 StreamingLLM(Start+Recent)推理加速评测,并在其上提出并验证了一个主要改进:Lazy Pruning(延迟触发 KV compaction 与 RoPE re-alignment,以摊销 cache-management 开销)。仓库同时保留了大量“失败/不稳定尝试”的证据链与分析,用于解释为什么在 batch-1、bounded-attention 的长上下文流式解码设定下,很多常见加速并不直接适用。
开源地址:https://github.com/hopecommon/CS3602
- 跑“论文/主结果”实验:
- Linux:
run_paper_experiments.sh - Windows:
run_paper_experiments.ps1 - 输出
results/paper_experiments/并生成NeurIPS/generated/*.tex
- Linux:
- 构建 PDF:
build_paper_pdf.sh(输出NeurIPS/neurips_2025_compressed.pdf) - 关键日志:
docs/探索日志.md
本仓库由 Jifan Lin 创建并维护。个人项目阶段实现了一套基于 HuggingFace Transformers Cache API 的 StreamingLLM 工程化评测版本(不修改 attention forward),与 MIT 官方实现采用不同的技术路线,并在此基础上进行了系统性实验与误差分析。
- Lazy Pruning 算法改进:在原始 StreamingLLM(Start+Recent)基础上提出并实现了 Lazy Pruning 优化方法,通过延迟触发 KV compaction 与 RoPE re-alignment 来摊销 cache-management 开销。实验结果表明该方法显著提升了推理速度,同时 PPL 未出现显著恶化
- 系统性探索与消融实验:
- 尝试并评估了多种优化方向:量化、投机解码、算子融合、overlap、refresh、slack、max_drop、bridge 等
- 虽然上述方法在当前场景(batch-1、bounded-attention 长上下文流式解码)下未能带来正收益,但通过实验分析识别了不可行的原因、系统瓶颈以及未来改进方向
- 产出了详细的探索日志与证据链(见
docs/探索日志.md)
- 实验框架与结果整理:负责构建完整的实验脚本体系(
run_paper_experiments.sh等)、大量消融实验执行,以及结果输出流程(results/paper_experiments/、NeurIPS/生成物等)
- FlashAttention 与 StreamingLLM 的融合探索:在 StreamingLLM 框架下尝试引入 FlashAttention,对其与 KV 裁剪、RoPE 对齐机制的兼容性进行实现与评估。实验表明,在 batch-1 的流式解码场景中两者可共存,但整体加速效果受限。
- Prefill 与 Forward 阶段加速评估:系统分析 FlashAttention 在 prefill 与 forward 阶段的实际收益。结果显示 prefill 在总时间中占比过小,而 forward 阶段虽存在一定加速潜力,但伴随较大的 PPL 波动,综合权衡后未作为最终方案采用。
- Windows 平台实验流程建设:负责整理并实现 Windows 环境下的完整实验与复现流程,编写 run_paper_experiments.ps1 等脚本,统一模型评估与结果产出,保障实验在跨平台条件下的可重复性。
详见 QUICKSTART.md(包含 Linux/Bash 与 Windows/PowerShell 双版本指南)。
最小步骤 (Linux):
source kvpress/.venv/bin/activate
cp .env.example .env
chmod +x run_paper_experiments.sh build_paper_pdf.sh
./run_paper_experiments.sh
./build_paper_pdf.sh最小步骤 (Windows PowerShell):
.\kvpress\.venv\Scripts\Activate.ps1
Copy-Item .env.example .env
.\run_paper_experiments.ps1PG19 的 PPL 对“选了哪一本书/哪个段落”非常敏感;因此我们默认固定到同一个长文本文件,并通过 --max-eval-tokens 控制评测长度。
推荐在 .env 固定(与当前默认脚本一致):
PG19_SAMPLE_FILE=data/pg19/long_context_50000.jsonPG19_SAMPLE_LENGTH=50000WIKITEXT_SAMPLE_FILE=data/wikitext/long_context_4096.jsonWIKITEXT_SAMPLE_LENGTH=4096
run_paper_experiments.sh (Linux) / run_paper_experiments.ps1 (Windows) 使用 Auto-cap:给定总预算 CAP_TOTAL=2048,根据 sink/slack/overlap/refresh 自动推导 window_size(避免“手动设置 window 导致 budget 不一致”的混杂)。
chmod +x run_paper_experiments.sh
./run_paper_experiments.sh # 默认跳过已有结果
./run_paper_experiments.sh -n # 只打印命令(dry-run)
./run_paper_experiments.sh -f # 强制重跑.\run_paper_experiments.ps1 # 默认跳过已有结果
.\run_paper_experiments.ps1 -Force # 强制重跑产物:
- 结果 JSON:
results/paper_experiments/*.json - 更细粒度结果:
results/paper_experiments/*_runs/ - 论文表格/图的生成物:
NeurIPS/generated/*.tex
chmod +x build_paper_pdf.sh
./build_paper_pdf.sh输出:NeurIPS/neurips_2025_compressed.pdf
- 论文(主结论与附录证据):
NeurIPS/neurips_2025_compressed.pdf - 探索日志(大量失败尝试与原因):
docs/探索日志.md - 论文实验 JSON:
results/paper_experiments/ - Probes(profiling/诊断):
results/probes/
CS3602/
├── run_paper_experiments.sh # 论文主实验脚本(Auto-cap + 生成 LaTeX)
├── build_paper_pdf.sh # 构建 NeurIPS PDF(会生成 NeurIPS/generated)
├── NeurIPS/ # 论文源码与生成 PDF
├── streaming_llm/ # 我们的 StreamingLLM 实现(HF Cache API + RoPE re-align)
├── experiments/ # 评测脚本与 paper 生成脚本
├── results/ # paper_experiments / probes / baselines / legacy 等
└── docs/ # 探索日志与额外报告
仓库仍保留早期脚本与结果(例如 run_fixed_evaluation.sh、results/fixed_eval/、run_comprehensive_comparisons.sh),用于对比/回溯;但当前主线请以 run_paper_experiments.sh + NeurIPS/ 为准。