← 文章

样本年龄、补采与测量有效性

约 3 分钟#实验方法#GPU#调度研究

周期采样里,探针自身耗时会侵占采样窗口。756 毫秒的样本间隔意味着这条曲线描述的是探针,不是 GPU。

除了 Autarkia,我还在做一个调度研究原型 EdgeSched:一块显卡上,LLM 要常驻,图像生成会突发,CPU 任务在空隙里回填,研究的是它们怎么共存。实验的主要产物是显存和利用率随时间变化的驻留曲线,结论要写进论文,所以每条曲线先得证明自己可信。

EdgeSched 仓库

GPU 驻留曲线按固定周期采样显存与利用率。判断一条曲线是否可信,第一件事不是看数值是否平滑,而是看每个样本离它声称的时刻有多远。这套实验链路把这个距离称为样本年龄,上限 750 毫秒;任何一条样本超龄,整批测量判为无效。

这个门来自一次实际测得的失真。早期 GPU 遥测通过 nvidia-smi 命令行子进程轮询。在档位 × 上下文 × 轮次的长矩阵里,4096 token 上下文的那一档配置下的驱动查询长尾达到 512 毫秒,已经接近采样周期本身。采样器在查询完成后继续等待下一个固定网格点,把实际样本间隔放大到 756 毫秒。曲线看起来还是完整、平滑的,但里面已经混进了探针自己的耗时。

01三层修复

修复分三层,缺任何一层门禁都还会失效。第一层是换后端:ctypes 直接调用 NVML,不再启动子进程;manifest、summary 与逐轮验收强制记录 gpu_telemetry_backend=direct_nvml 与 gpu_cli_subprocess_used=false,并禁止静默回退到命令行。

第二层是补采。周期探针一旦越过下一个采样点,完成后立即补采,而不是等下一个网格;每次补采计入 gpu_deadline_recovery_count,让观测者效应本身成为被审计的量。

第三层是字段排序。显存读数安排在利用率、功耗、温度之后查询,让样本时间戳尽可能贴近显存数值,其余字段带来的系统性偏移随之缩小。

有效性判定还有一条容易被漏掉的细则:样本数量足够、后端也正确,只要窗口内的样本年龄超限,整批仍然无效。direct NVML 与样本数都通过、但没有新鲜样本的批次,同样判失败。后端正确与数据有效是两个独立的判定。

测量基础设施自身也按同一套门验收。首个 GPU 样本就绪之前,资源时间线不开始;首个 CPU 样本被标记为无效并从聚合中排除。一次两秒的验收运行要求 41/41 个采样点可用,实测最大样本年龄 422.719 毫秒,低于 750 毫秒的门限,这套基础设施才算通过验证。

这些门证明的东西很窄:时间线上的每个数值都确实发生在它声称的时刻附近。它们不证明某个配置性能更好,也不声称捕获了快于采样间隔的波动。750 毫秒是测量有效性与采样成本之间的折中,不是对 GPU 行为的断言。