目录

面向 RISC-V Vector 扩展的大语言模型推理并发调度优化

本项目面向真实 RISC-V RVV 1.0 硬件上的 LLM 推理并发调度问题,围绕 llama.cpp server 高并发请求下的 V-state 上下文切换、线程迁移和 TTFT 尾延迟退化,构建了可复现的观测工具链,并实现了基于 sched_ext 的 V 状态感知调度优化。

项目完成了三项核心工作:

  • 量化 RVV V-state save/restore 在多并发 LLM 推理场景下的事件次数与开销;
  • 实现 scx_llama_prev_shadow conservative V-shadow 调度器,并结合 llama.cpp PREFILL 批处理上限优化;
  • 在 BananaPi BPI-F3 / SpacemiT X60 真实 RVV 1.0 硬件上完成 2/4/8 并发、每组 3 次重复实验。

最终方案:cap512 + conservative V-shadow

用户态:llama.cpp PREFILL 批处理上限调整为 512 token(max_prefill_tokens_per_slot = 512

内核态:基于 sched_ext BPF 的 scx_llama_prev_shadow 调度器(prev-first conservative V-shadow)

正式结果(Llama-3.2-3B, 24请求, repeats=3)

并发 TPS 提升 P95 TTFT 变化 Avg latency 变化
2 +2.0% ~持平 -2.0%
4 +5.7% -42.0% -5.3%
8 +11.3% -8.2% -10.1%

四方案消融对比(c8 单次)

方案 TPS P95 TTFT V-state 事件
CFS baseline 5.184 28.94s 89,278
仅 cap=512 5.561 28.85s 46,921
仅 conservative vshadow 5.601 29.06s 46,075
cap512 + conservative vshadow 5.950 27.25s 45,079

调度方案演进

第一阶段:用户态绑核(已排除 - 缩核导致 TPS 大幅下降)
  ├── affinity(静态绑核)
  ├── cpuset(cgroup v2)
  └── adaptive(动态热/冷线程)

第二阶段:sched_ext BPF 调度器
  ├── scx_llama_select         — 最保守,仅证明 sched_ext 可行
  ├── scx_llama_sticky         — enqueue 粘性(太激进,c8 变慢)
  ├── scx_llama_percpu         — per-CPU 专用 DSQ(V-state -12%,迁移 +563%)
  ├── scx_llama_privileged     — 5倍时间片(1B c8 早期正收益)
  ├── owner-first V-shadow     — 迁移暴增 385%,TPS 下降(被废弃)
  ├── scx_llama_ttft_fair      — phase bridge + TTFT 分流(探索分支)
  └── scx_llama_prev_shadow    — conservative V-shadow(← 最终采用)

第三阶段:用户态 + 内核态协同
  └── cap512 + conservative V-shadow(← 最终方案)

提交材料

材料 文件
作品简介与运行说明 README.md
项目说明书 / 技术报告与设计文档 PDF / Markdown
原创承诺书 原创承诺书.pdf
作品介绍 PPT 作品介绍 .pptx
板端演示视频 演示视频.mp4

文档导航

文档 用途
技术报告 正式报告:问题分析、方案设计、相关工作、正式数据和消融实验
快速复现 复现总入口,区分 QEMU 功能验证与真板正式评测
开发过程与团队分工 成员分工、提交节奏和关键里程碑
调度器代码说明 sched_ext 主线代码、构建方式和关键参数
QEMU 快速启动 QEMU 功能验证步骤
板端快速启动 BPI-F3 / SpacemiT 真板复现步骤
llama.cpp 改造说明 llama-server 应用层改造设计
大文件获取说明 rootfs、GGUF 模型、内核源码和二进制准备

探索阶段的过期方案与赛题原文统一保存在 历史调度方案与实现,不作为最终结论引用。


方案与源码对照

代码评分主轴

主轴 代码入口 评分用途
量化观测 scripts/collect/, scripts/analysis/ 统计 V save/restore、sched_switch、迁移和 V-state 开销
调度优化 scx_llama_prev_shadow.bpf.c, scx_llama_prev_shadow.c 最终 V 状态感知 sched_ext 调度器
性能评测 scripts/benchmark/, benchmark_client.py 统一 baseline/scx 测试,输出 TPS、Avg TTFT、P95 TTFT
复现说明 scheduler/scx/README.md, repro/cap512-conservative/README.md 构建、加载、运行和复现实验

最终方案(cap512 + conservative V-shadow)

组件 源码 说明
llama.cpp cap=512 补丁 scripts/patch/patch_llama_prefill_priority.py server-context.cppmax_prefill_tokens_per_slot
conservative V-shadow 调度器 scx_llama_prev_shadow.bpf.c, scx_llama_prev_shadow.c BPF 内核态 + 用户态 loader
可复现配置 repro/cap512-conservative/ 实验复现脚本
应用层设计文档 docs/llama.cpp 改造/README.md PREFILL 优先批处理方案

历史方案

仓库仅保留两个关键对照:无 V-shadow 的 per-CPU stealingno-vhot 消融。其他用户态绑核、phase-aware、TTFT fair 和 RVV window 实现已移除;设计过程和淘汰原因见技术报告第六章,阶段性文档保存在 历史调度方案与实现


实验环境

项目 配置
硬件 BananaPi BPI-F3 / SpacemiT X60, 8核
VLEN 256 bit
内核 Linux 6.18.33-rvvscx+(自编译,sched_ext + V-state 计数)
模型 Llama-3.2-3B-Instruct-Q4_K_M.gguf
框架 llama.cpp server mode(自编译 llama-server,板端路径 /root/llama.cpp/build/bin/llama-server
基准 24 请求,n_predict=32,performance governor

数据

results/README.md

关于
368.7 MB
邀请码
    Gitlink(确实开源)
  • 加入我们
  • 官网邮箱:gitlink@ccf.org.cn
  • QQ群
  • QQ群
  • 公众号
  • 公众号

版权所有:中国计算机学会技术支持:开源发展技术委员会
京ICP备13000930号-9 京公网安备 11010802047560号