test
团队: 麦辣鸡翅一队 日期: 2025年7月20日
随着大语言模型(LLM)在移动设备、智能终端等边端侧场景的应用日益广泛,推理服务的效率成为决定用户体验的关键瓶颈。边端环境通常面临 端到端延迟敏感 和 计算/显存资源受限 的双重挑战。尽管现有推理框架(如vLLM, llama.cpp)已通过PagedAttention、量化等技术进行了优化,但仍需更具针对性的系统级策略来解决边端部署的核心痛点。
vLLM
llama.cpp
PagedAttention
本项目旨在响应这一需求,基于主流开源框架vLLM,构建一个具备 系统级端到端优化能力 的大模型推理框架。核心目标是在不损失模型精度的前提下,通过先进的调度与管理策略,显著降低推理延迟、提升系统吞吐量和资源利用率。
我们设计并实现了一个功能完备、可扩展的LLM推理与评测框架。其主要技术贡献包括:
本方案基于Python和vLLM生态构建,整体架构清晰,主要由模型控制器、评测引擎和自适应调度器三大核心组件构成。
Python
在众多推理框架中,我们选择 vLLM 作为我们优化的基础,主要基于以下几点考虑:
综上,vLLM 提供了一个高性能、高效率且易于扩展的基座,使我们能将精力集中在解决赛题核心的系统级调度与优化问题上。
传统的推理服务通常采用朴素批处理(Naive Batching),即凑齐一个固定大小(batch_size)的请求批次再送入GPU。这种方式存在两个核心问题:
为了克服上述局限,我们设计了SLO感知与KV Cache保护调度器。其核心优势在于前瞻性的风险识别和主动的系统保护。它不再试图回答“最优的批次是多大?”,而是回答一个更关键的问题:“现在接纳新请求是否安全?”
基于实时状态的“三等级刹车”决策机制: 我们的调度器通过监控vLLM底层的KV Cache实时可用空间,实现了一套简单而高效的“红绿灯”系统,以决定是否接纳新的prefill请求:
硬刹车 (Hard Brake) - 系统生存优先:
软刹车 (Soft Brake) - 保障在途请求SLO:
通行 (Proceed) - 效率优先:
通过这套机制,我们的框架将推理系统从一个高负载下性能雪崩的“被动承受者”,转变为一个能够预见风险并主动规避的“智能管理者”。这正是实验中,尤其是在高负载场景下,系统延迟、吞吐量和SLO达成率全面提升的根本原因。
克隆项目
git clone https://www.gitlink.org.cn/HachiKnight/mxdyymxgxtlkjdxtjyhysx cd <repository-name>
安装依赖 项目依赖vLLM、PyTorch等库。请确保您的环境已正确安装NVIDIA驱动和CUDA。建议使用pip安装所有依赖:
PyTorch
pip
# 建议创建一个虚拟环境 # python -m venv venv # source venv/bin/activate # 从requirements.txt安装或手动安装 pip install torch==2.1 datasets transformers evaluate jieba numpy # 进入到vllm文件夹并以可编辑形式安装 cd vllm pip install -e .
下载模型 请从Hugging Face或ModelScope等平台下载所需的模型文件,包括目标模型(如MiniCPM4-8B)和用于推测解码的草稿模型(如MiniCPM4-1B)。将它们存放在服务器的任意位置。
MiniCPM4-8B
MiniCPM4-1B
配置模型路径 (configs/models.json) 修改此文件,告知框架您的模型存放路径。键名(如"MiniCPM-8B-Spec")是您在运行时用来指定模型的标识符。
configs/models.json
"MiniCPM-8B-Spec"
{ "MiniCPM-8B-Spec": { "model_path": "/path/to/your/MiniCPM4-8B", "speculative_decoding": { "draft_model_path": "/path/to/your/MiniCPM4-0.5B", "num_speculative_tokens": 5 } }, "MiniCPM-8B-Base": { "model_path": "/path/to/your/MiniCPM4-8B" }, "Qwen2.5-3B-Instruct": { "model_path": "/root/autodl-tmp/Qwen2.5-3B-Instruct" } }
准备或生成评测数据 (configs/benchmark_dataset_final.json) 您可以直接使用我们提供的评测集,或运行build_dataset.py(即您提供的脚本)从Hugging Face自动构建。详情请见 附录。
configs/benchmark_dataset_final.json
build_dataset.py
额外提供了run_evaluate.sh可在项目根目录直接运行以便一次执行多个实验。
通过main.py脚本启动评测。以下是一些示例命令:
main.py
运行基线模式 (Naive Mode) 此模式关闭所有优化,用于性能对比。
python main.py --models-to-test MiniCPM-8B-Base --use-slo-aware-policy --test_cases_path configs/benchmark_dataset_final.json
--use-slo-aware-policy会开启我们的自适应调度器。
--use-slo-aware-policy
仅运行自适应调度器优化
python main.py --models-to-test MiniCPM-8B-Base --test_cases_path configs/benchmark_dataset_final.json --use-slo-aware-policy
运行组合优化 (自适应调度 + 推测解码) 要启用推测解码,请确保models.json中已配置speculative_decoding字段,并且 不要 使用--disable-spec-decoding参数。
models.json
speculative_decoding
--disable-spec-decoding
python main.py --models-to-test MiniCPM-8B-Spec --test_cases_path configs/benchmark_dataset_final.json --use-slo-aware-policy
运行所有已配置的模型 若不指定--models-to-test,框架将依次评测configs/models.json中定义的所有模型。
--models-to-test
python main.py --test_cases_path configs/benchmark_dataset_final.json
评测完成后,详细的性能和精度报告将以JSON格式保存在 results/ 目录下。文件名会包含模型名、模式和时间戳,例如 eval_MiniCPM-8B-Spec_adaptive_1752956292.json。
results/
eval_MiniCPM-8B-Spec_adaptive_1752956292.json
您可以直接打开JSON文件查看各项指标,如 a|vg_latency (平均延迟), system_throughput_tokens_per_sec (系统吞吐量), 和 slo_attainment_rate (服务质量达成率)。
a|vg_latency
system_throughput_tokens_per_sec
slo_attainment_rate
PyTorch 2.1
CUDA 12.1
Qwen2.5-3B-Instruct
benchmark_dataset_final.json
os.environ['VLLM_USE_V1'] = '0'
我们设计了多组对比实验,层层递进地展示优化效果:
FP8 KV Cache
我们将三组核心实验在 MiniCPM4-8B 模型的指标进行对比:
解读: 在8B参数量级模型上,我们的组合优化策略也展现出巨大优势,**平均延迟降低51.7%**,SLO达成率提升至100%。
为了全面地检验优化策略的适用性,我们使用更轻量的Qwen2.5-3B-Instruct模型,在 低负载 和 高负载 两种压力下进行了对比测试。
现象分析: 在此场景,优化模式延迟略高。这不是算法失败,而是其设计理念的直接体现:
现象分析: 当负载提升后,保护策略的真正价值立刻显现:
为进一步探索vLLM后端优化技术,我们对FP8 KV Cache量化功能进行了专项测试。需要特别说明的是,根据我们测试的vLLM版本特性,启用FP8 KV Cache量化需要在使用特定Attention后端(如flashinfer)时才能获得稳定支持。
flashinfer
因此,本项测试在Qwen3-8B模型上进行,**对照组与实验组均开启--attention_backend flashinfer**,以保证对比的公平性。
Qwen3-8B
--attention_backend flashinfer
分析:
延迟: 启用FP8 KV Cache量化后,平均延迟获得了 约3%的轻微降低。这表明该技术通过减少数据搬运量和加速内存访问,带来了一定的性能收益。
显存: 在本次测试中,峰值显存占用 没有明显变化。我们分析这可能是因为对于当前模型和请求长度,KV Cache本身占总显存的比例还不够大,或者vLLM的内存管理机制产生的少量开销使得这部分优化在整体峰值中不显著。
结论: FP8 KV Cache量化是一项有用的后端优化技术,可在不影响精度的情况下带来微小的性能提升。其显存优化的效果可能在处理更长上下文或更大的批次的场景中更为突出,是应对极端内存压力场景的一个有效备选方案。
这一系列的对比实验,完整地刻画了我们优化策略的性能曲线,并充分验证了其鲁棒性:
本项目成功设计并实现了一个基于vLLM的高鲁棒性推理优化框架。其核心是一种创新的SLO感知与KV Cache保护调度器,它将系统优化的重心从“追求极限吞吐”转向“保障高压下的稳定性和低延迟”。通过与推测解码技术相结合,我们的最终方案在不牺牲模型精度的前提下,将平均延迟降低了超过一半,使服务等级目标(SLO)达成率达到100%,充分证明了主动风险管理在系统级优化中的巨大价值。
更重要的是,通过在高低不同负载下的对比测试,我们清晰地界定了该优化策略的适用边界,证明了它在应对中高压力、动态变化的真实世界负载时的卓越能力,为该技术在未来实际业务中的部署和应用提供了坚实的理论和数据支持。
为全面、公正地评估框架的性能,我们构建了一个多样化的评测数据集。
我们的评测集数据来源于以下三个高质量的开源数据集:
BELLE (BelleGroup/generated_chat_0.4M):
BelleGroup/generated_chat_0.4M
HC3-Chinese (Hello-SimpleAI/HC3-Chinese):
Hello-SimpleAI/HC3-Chinese
XL-Sum (csebuetnlp/xlsum):
csebuetnlp/xlsum
我们采用多源数据融合的方式构建评测集,主要有以下优点:
任务多样性与评估全面性: 数据集覆盖了通用对话、复杂问答、长文摘要三大核心场景。这避免了单一任务的片面性,能够更全面地检验优化框架在不同计算负载(短prompt vs 长prompt)和任务类型下的综合性能,而不是“偏科”地只对某种特定任务有效。
模拟真实世界负载: 真实的用户请求流是复杂多变的。通过将不同来源的样本随机混合,我们的评测集更好地模拟了这种异构、动态的真实世界负载,使得测试结果更能反映系统在实际部署中的表现。
降低数据集偏差: 任何单一数据集都可能存在其固有的偏差(如文风、领域、格式等)。融合多个高质量来源的数据可以有效中和这些偏差,使评估结果更加公允和鲁棒。
保证评估的可复现性: 我们通过固定的脚本和随机种子(seed=42)来构建数据集,确保了整个评测流程的透明与可复现性,这是衡量优化效果的科学基础。
seed=42
©Copyright 2023 CCF 开源发展委员会 Powered by Trustie& IntelliDE 京ICP备13000930号
项目报告:面向大语言模型高效推理框架的系统级优化与实现
团队: 麦辣鸡翅一队 日期: 2025年7月20日
1. 项目概述
1.1 赛题背景与挑战
随着大语言模型(LLM)在移动设备、智能终端等边端侧场景的应用日益广泛,推理服务的效率成为决定用户体验的关键瓶颈。边端环境通常面临 端到端延迟敏感 和 计算/显存资源受限 的双重挑战。尽管现有推理框架(如
vLLM,llama.cpp)已通过PagedAttention、量化等技术进行了优化,但仍需更具针对性的系统级策略来解决边端部署的核心痛点。本项目旨在响应这一需求,基于主流开源框架
vLLM,构建一个具备 系统级端到端优化能力 的大模型推理框架。核心目标是在不损失模型精度的前提下,通过先进的调度与管理策略,显著降低推理延迟、提升系统吞吐量和资源利用率。1.2 核心技术贡献
我们设计并实现了一个功能完备、可扩展的LLM推理与评测框架。其主要技术贡献包括:
2. 技术方案与框架设计
本方案基于
Python和vLLM生态构建,整体架构清晰,主要由模型控制器、评测引擎和自适应调度器三大核心组件构成。2.1 框架选型:为什么选择vLLM
在众多推理框架中,我们选择
vLLM作为我们优化的基础,主要基于以下几点考虑:vLLM以其业界领先的吞吐量和低延迟而闻名,为我们的上层优化提供了一个非常强大的性能起点。vLLM的关键创新。它借鉴了操作系统中虚拟内存和分页的思想来管理KV Cache,有效解决了传统方法中的显存内碎片问题,使得显存利用率接近理论上限,能够容纳更长的序列和更大的批次。vLLM能够在GPU处理完一个序列后,立即将其空间释放并调度新的序列填入,而非等待整个批次完成。这种流式的处理方式极大地提升了GPU的利用率,是降低延迟的关键。vLLM作为一个活跃的开源项目,内置了对推测解码、FP8量化等多种前沿优化的支持。这使得我们可以在其基础上,专注于更高层级的调度策略创新,而非重复造轮子。我们的框架也正是利用其扩展性,成功集成了多种优化技术。综上,
vLLM提供了一个高性能、高效率且易于扩展的基座,使我们能将精力集中在解决赛题核心的系统级调度与优化问题上。2.2 核心优化:从被动抢占到主动保护的智能准入控制
传统批处理的局限性
传统的推理服务通常采用朴素批处理(Naive Batching),即凑齐一个固定大小(batch_size)的请求批次再送入GPU。这种方式存在两个核心问题:
我们的解决方案:SLO感知与KV Cache保护调度器
为了克服上述局限,我们设计了SLO感知与KV Cache保护调度器。其核心优势在于前瞻性的风险识别和主动的系统保护。它不再试图回答“最优的批次是多大?”,而是回答一个更关键的问题:“现在接纳新请求是否安全?”
基于实时状态的“三等级刹车”决策机制: 我们的调度器通过监控vLLM底层的KV Cache实时可用空间,实现了一套简单而高效的“红绿灯”系统,以决定是否接纳新的prefill请求:
硬刹车 (Hard Brake) - 系统生存优先:
软刹车 (Soft Brake) - 保障在途请求SLO:
通行 (Proceed) - 效率优先:
通过这套机制,我们的框架将推理系统从一个高负载下性能雪崩的“被动承受者”,转变为一个能够预见风险并主动规避的“智能管理者”。这正是实验中,尤其是在高负载场景下,系统延迟、吞吐量和SLO达成率全面提升的根本原因。
3. 部署与运行指南
步骤一:环境准备
克隆项目
安装依赖 项目依赖
vLLM、PyTorch等库。请确保您的环境已正确安装NVIDIA驱动和CUDA。建议使用pip安装所有依赖:步骤二:模型与数据配置
下载模型 请从Hugging Face或ModelScope等平台下载所需的模型文件,包括目标模型(如
MiniCPM4-8B)和用于推测解码的草稿模型(如MiniCPM4-1B)。将它们存放在服务器的任意位置。配置模型路径 (
configs/models.json) 修改此文件,告知框架您的模型存放路径。键名(如"MiniCPM-8B-Spec")是您在运行时用来指定模型的标识符。准备或生成评测数据 (
configs/benchmark_dataset_final.json) 您可以直接使用我们提供的评测集,或运行build_dataset.py(即您提供的脚本)从Hugging Face自动构建。详情请见 附录。步骤三:运行评测
额外提供了run_evaluate.sh可在项目根目录直接运行以便一次执行多个实验。
通过
main.py脚本启动评测。以下是一些示例命令:运行基线模式 (Naive Mode) 此模式关闭所有优化,用于性能对比。
--use-slo-aware-policy会开启我们的自适应调度器。仅运行自适应调度器优化
运行组合优化 (自适应调度 + 推测解码) 要启用推测解码,请确保
models.json中已配置speculative_decoding字段,并且 不要 使用--disable-spec-decoding参数。运行所有已配置的模型 若不指定
--models-to-test,框架将依次评测configs/models.json中定义的所有模型。步骤四:查看结果
评测完成后,详细的性能和精度报告将以JSON格式保存在
results/目录下。文件名会包含模型名、模式和时间戳,例如eval_MiniCPM-8B-Spec_adaptive_1752956292.json。您可以直接打开JSON文件查看各项指标,如
a|vg_latency(平均延迟),system_throughput_tokens_per_sec(系统吞吐量), 和slo_attainment_rate(服务质量达成率)。4. 实验设置与结果分析
4.1 实验环境
vLLM,PyTorch 2.1,CUDA 12.1。MiniCPM4-8B(主要评测对象),Qwen2.5-3B-Instruct(用于鲁棒性验证)。benchmark_dataset_final.json(构建方法详见 附录)。os.environ['VLLM_USE_V1'] = '0') 运行,因我们测试的vLLM版本中,v1版本API尚不支持该特性。4.2 实验分组
我们设计了多组对比实验,层层递进地展示优化效果:
vLLM默认调度与固定批次。FP8 KV Cache量化的效果。4.3 主实验:MiniCPM4-8B 性能对比
我们将三组核心实验在
MiniCPM4-8B模型的指标进行对比:解读: 在8B参数量级模型上,我们的组合优化策略也展现出巨大优势,**平均延迟降低51.7%**,SLO达成率提升至100%。
4.4 技术讨论:优化策略的适用边界与鲁棒性验证
为了全面地检验优化策略的适用性,我们使用更轻量的
Qwen2.5-3B-Instruct模型,在 低负载 和 高负载 两种压力下进行了对比测试。场景一:低负载下的“负优化”现象
现象分析: 在此场景,优化模式延迟略高。这不是算法失败,而是其设计理念的直接体现:
场景二:高负载下的“正优化”效果
现象分析: 当负载提升后,保护策略的真正价值立刻显现:
技术探索:FP8 KV Cache量化效果分析
为进一步探索vLLM后端优化技术,我们对
FP8 KV Cache量化功能进行了专项测试。需要特别说明的是,根据我们测试的vLLM版本特性,启用FP8 KV Cache量化需要在使用特定Attention后端(如flashinfer)时才能获得稳定支持。因此,本项测试在
Qwen3-8B模型上进行,**对照组与实验组均开启--attention_backend flashinfer**,以保证对比的公平性。分析:
延迟: 启用FP8 KV Cache量化后,平均延迟获得了 约3%的轻微降低。这表明该技术通过减少数据搬运量和加速内存访问,带来了一定的性能收益。
显存: 在本次测试中,峰值显存占用 没有明显变化。我们分析这可能是因为对于当前模型和请求长度,KV Cache本身占总显存的比例还不够大,或者vLLM的内存管理机制产生的少量开销使得这部分优化在整体峰值中不显著。
结论: FP8 KV Cache量化是一项有用的后端优化技术,可在不影响精度的情况下带来微小的性能提升。其显存优化的效果可能在处理更长上下文或更大的批次的场景中更为突出,是应对极端内存压力场景的一个有效备选方案。
这一系列的对比实验,完整地刻画了我们优化策略的性能曲线,并充分验证了其鲁棒性:
5. 评分标准自评与总结
6. 总结与展望
本项目成功设计并实现了一个基于vLLM的高鲁棒性推理优化框架。其核心是一种创新的SLO感知与KV Cache保护调度器,它将系统优化的重心从“追求极限吞吐”转向“保障高压下的稳定性和低延迟”。通过与推测解码技术相结合,我们的最终方案在不牺牲模型精度的前提下,将平均延迟降低了超过一半,使服务等级目标(SLO)达成率达到100%,充分证明了主动风险管理在系统级优化中的巨大价值。
更重要的是,通过在高低不同负载下的对比测试,我们清晰地界定了该优化策略的适用边界,证明了它在应对中高压力、动态变化的真实世界负载时的卓越能力,为该技术在未来实际业务中的部署和应用提供了坚实的理论和数据支持。
附录:评测数据集构建
为全面、公正地评估框架的性能,我们构建了一个多样化的评测数据集。
数据集来源
我们的评测集数据来源于以下三个高质量的开源数据集:
BELLE (
BelleGroup/generated_chat_0.4M):HC3-Chinese (
Hello-SimpleAI/HC3-Chinese):XL-Sum (
csebuetnlp/xlsum):数据集构建优势分析
我们采用多源数据融合的方式构建评测集,主要有以下优点:
任务多样性与评估全面性: 数据集覆盖了通用对话、复杂问答、长文摘要三大核心场景。这避免了单一任务的片面性,能够更全面地检验优化框架在不同计算负载(短prompt vs 长prompt)和任务类型下的综合性能,而不是“偏科”地只对某种特定任务有效。
模拟真实世界负载: 真实的用户请求流是复杂多变的。通过将不同来源的样本随机混合,我们的评测集更好地模拟了这种异构、动态的真实世界负载,使得测试结果更能反映系统在实际部署中的表现。
降低数据集偏差: 任何单一数据集都可能存在其固有的偏差(如文风、领域、格式等)。融合多个高质量来源的数据可以有效中和这些偏差,使评估结果更加公允和鲁棒。
保证评估的可复现性: 我们通过固定的脚本和随机种子(
seed=42)来构建数据集,确保了整个评测流程的透明与可复现性,这是衡量优化效果的科学基础。