PROJECT · 02

EdgeSched

单 GPU 上的 LLM 常驻、图像突发与 CPU 回填调度

在 GitHub 上看 →研究原型 · 论文进行中

EdgeSched 研究一块 GPU 上多种本地模型怎么共存。LLM 常驻以维持首句延迟,图像生成按请求突发,CPU 任务在 GPU 空闲的间隙回填;三者抢同一份显存和算力,调度器要决定谁先执行、谁排队、谁降级到 CPU。

实现分成控制面和执行面。Python 侧的 GlobalTaskScheduler 管理请求生命周期、准入控制、背压与取消,任务状态写入 mmap 背板,进程崩溃后可以恢复;C++ 侧的 ResourceIsolationScheduler 通过 pybind11 接入,负责原生队列、worker、监控和 llama.cpp 的 KV cache。C++ 扩展未编译时,整条链路退回 Python。

调度按阶段区分任务:常驻的 LLM、突发的图像生成、可以共享 GPU 的阶段各有 lease。迁移代价模型会比较换出、等待和旁路三种选择,再决定是否把模型在 GPU 与 CPU 之间搬动;GPU 被独占期间,CPU 亲和的任务进入回填队列。

实验产物是显存与利用率随时间变化的驻留曲线,结论要写进论文,所以测量本身先过有效性门:样本年龄上限 750 毫秒、遥测直连 NVML、超时补采并计数;一次运行的 failures.jsonl 只要非空,就永远不能成为通过记录,修完必须换 run id 重跑。站内《样本年龄、补采与测量有效性》和《失败的批次不能补跑》两篇写的就是这套门。

目前是研究原型,论文进行中。混合驻留与纯串行的正式比较完成了一轮,混合方案在首句就绪时间和应用层供给缺口上占优;但输出文本、句数和 token 尚未受控,设备时钟仍在核对,所以结论保持收缩,没有提前写成定论。

01技术要点

控制面准入控制、背压、取消和请求生命周期;任务状态写入 mmap 背板,进程崩溃后可恢复
执行面C++ 原生队列、worker 与监控,llama.cpp worker 带 KV cache;未编译时回退 Python
Phase-Aware常驻、突发、共享三类 GPU lease,迁移代价模型在换出、等待和旁路之间做选择
回填GPU 被独占时执行 CPU 亲和任务,把等待时间利用起来
测量驻留曲线带样本年龄门与 direct NVML 校验;失败批次整批作废,换 run id 重跑
复现每次运行产出固定产物、manifest 和源码 provenance,证据达到晋升条件才进入论文

02技术栈

PythonC++CUDAPyTorchFastAPIWebSocketllama.cpp