host / 辅助段:固定开销优化
定位
本技能是优化域的 host(辅助段)模块:输入是已定位且达门限的 host 固定开销(标签 非DiT-host段),
输出是可复验的固定开销下降。范围两块,二者的生命周期不同,必须分开记账、分开验收:
| 段 | 含 | 典型形态 |
|---|
| 交付与搬运(每请求) | 媒体编码(mp4 / 图片)、worker→API 通路(进程内拷贝 / 队列 / 共享内存 / HTTP 分片)、落盘与回读、异步化 | 生成结果在返回给调用方之前被编码 / 搬运 / 写盘,串在关键路径上 |
| 装载与预热(每进程 / 首启) | 权重加载(读盘 → 宿主内存 → 设备)、编译与图下发预热、镜像与容器预热 | 服务首启或首个请求时才付这些成本,之后每次请求都省不到 |
不含(near-miss):并发 / 吞吐 / 批处理调度 / 队列与限流(不属本技能);
VAE / TAE 解码段(→ vae-opt);DiT 计算(→ dit-perf-opt);
DiT 步内的 host / 下发(发起次数、host 阻塞型回读、下引发的设备空转 → dit-perf-opt;
本技能只管非 DiT 段的固定开销);
多卡并行与通信(→ dit-parallel-opt);装库 / 权重下载 / 镜像构建 / 容器创建(→ env-install)。
不做的事:不定位瓶颈(阶段账、占比与标签归编排层 model-auto-optimization)、
不定义门限(非DiT-host段 的占比判据、分母、测点、步数档要求单点在
model-auto-optimization/references/bottleneck-labels.md §2)、
不定义测量纪律(同窗 A/B 口径单点在 perf-gate)、
不实现编译 / 图下发 / 通信 / 算子能力(归能力供给层)。
入口判据:先出固定开销账,再动手
按标签 非DiT-host段 进入(达门限才做;未达门限的登记方式归编排层)。动手前必须先有固定开销账:
把 host 段拆成可测量的行(编解码 / 传输 / 落盘 / 加载 / 预热),每行给测点、口径、占比与证据。
字段定义、测点写法、固定 vs 每请求的区分与常见错账见 references/host-overhead-account.md。
三条纪律:
- 分母口径统一:占比一律按同一口径的 e2e(服务端口径;
交付开销 = e2e − forward 并继续分解,
取法单点在 perf-gate/references/evidence-toolbox.md);
- profiler 看不见 host 段:profiler 只覆盖设备侧 kernel —— 编码 / 传输 / 落盘 / 加载 / 预热
必须靠进程内计时点或服务端计时 + 日志行来证;没有计时点就等于没有账,也就无法判断优化是否生效;
- 固定与每请求分开报:装载与预热是每进程一次的成本,交付是每请求的成本。
把首启成本摊进每请求 e2e 会得出错误的优化优先级(反之亦然)。
交付与搬运(每请求)
按“先分解 → 逐段判定 → 最后才改”的顺序,四段各有判据:
- 编码:编码是否在关键路径上(编码完成才返回)、编码参数(码率 / 预设 / 线程数 / 是否硬件编码器)、
是否对同一内容重复编码;判据是“该段耗时 ÷ 同口径 e2e”与它能否与下一段重叠;
- 通路:worker→API 有几跳(进程内张量传递 / 队列 / 共享内存 / HTTP 分片),每跳有没有整份拷贝或
序列化(大张量走 pickle / JSON 是常见隐形大头);判据是逐跳字节数 × 跳数;
- 落盘:是否每请求都写、写盘是否在关键路径、是否落两份(临时 + 最终)、并发写入是否互相拖慢;
判据是写入 / 读取字节数与等待时间;
- 异步化:把“不必等”的部分移出关键路径(编码 / 落盘 / 回调 / 日志),但必须在能证明
返回语义不变时才做——返回时机、错误传播、超时与重试语义都要交代清楚。
交付搬运改动的复核:交付产物应字节级一致(或按一致性判据说明为何允许变化,判据口径引
accuracy-gate),再按同窗 A/B 取收益。
装载与预热(首启 / 常驻)
- 权重加载:加载路径(网络盘 / 本地盘 / 内存缓存)、格式(逐张读 vs 单大文件)、
dtype 与设备放置(先宿主再上卡 vs 直接设备读)、是否被重复加载(多进程 / 多实例各加载一遍);
与
env-install 的分工:它负责把权重装到位(下载 / 挂载 / 路径核对),
本技能负责装载过程本身(少读、少拷、能并行就并行、可复用就复用);
- 编译与图下发预热:机制本体不在此重做 —— 图 pool、lazy capture、按 shape 缓存的图条目、
max_entries 驱逐规则见 aclgraph-dev;pattern 与 compile 后端路径见 pattern-dev。
本技能只做“把已存在的缓存预热到稳态”:用真实会出现的 shape / dtype 与请求形态各跑一次,
覆盖首请求路径,使稳态指标不把首请求的 capture / 编译成本算进去。
预热输入形状与生产不一致时,预热出的是另一批缓存条目(shape 一变就重新 capture / 重新编译)——
这是预热最常见的静默失效,必须用命中判据(缓存条目数 / 图命中 / 日志行)验证,而不是看总耗时;
- 镜像与容器预热:只在部署形态本身需要时做(基础镜像层顺序、依赖预取、挂载与目录就位、
容器内首次读盘的冷缓存)。构建与安装动作本身归
env-install,本技能只负责压缩“起服务的等待时间”这一面。
预热类改动的验收约定:报数分稳态与首启两栏,并给出预热命中判据;只报一个总耗时的结果不可入库。
判定“优化是否生效”(host 段同样会静默)
host 优化的失效形态与设备侧不同,但同样静默,判定方式也不同:
- 改了但没生效:开关读取点落在分支判定之后、启动脚本
unset 了变量、默认值覆盖了配置 ——
产物与耗时都不变,最容易被读成“优化没用”。判定方式是打印实读值(环境变量实际读到的值、
编码参数的实际生效值、预热命中的缓存条目数),不是看日志字符串;
- 产物变了(不是无损):改编码 / 封装参数会改变交付产物字节。声称“只是搬运、结果没变”时,
必须给出产物字节一致(或质量门)的证据,判据口径引
accuracy-gate;
- 测点漂移:把计时点移出或移入关键路径会改变结论 —— 改测点即视为改了口径,必须重测基线;
- 分母变了:优化顺带改变了请求形态(分辨率 / 帧数 / 步数档),该轮账与上轮不可比。
复验与入库
- 收益按 同窗 A/B(必要时 A/B/A 修正漂移)判定,口径与噪声地板单点在
perf-gate;
跨窗口绝对值不可比;
- 固定开销账一起报:优化前后各出一份同口径的账(每行占比 + 证据),并说明变化落在哪一行;
- 只有通过验收的结果才写入报表(报表列契约与门限口径归编排层)。
与相邻模块的边界
| 情形 | 去向 |
|---|
| 并发 / 吞吐 / 批处理调度 / 队列与限流 | 不属本技能(未来独立立项) |
| VAE / TAE 解码段(计算或通信) | vae-opt |
| DiT 计算侧选档与实施 | dit-perf-opt |
| 多卡并行形态 / 通信掩盖 / 通信账 | dit-parallel-opt |
| 装库 / 权重下载 / 镜像构建 / 容器创建 | env-install |
| pattern / compile / 图 pool / 缓存机制本体 | pattern-dev / aclgraph-dev |
| 产物一致性与精度判据 | accuracy-gate |
| 收益口径与同窗 A/B | perf-gate |
| 瓶颈未定位 / 占比与标签 | model-auto-optimization |
Reference Files
references/host-overhead-account.md — 加载时机: 要出或复核固定开销账(编解码 / 传输 / 落盘 /
加载 / 预热各一行 + 占比)时(字段、测点写法、固定 vs 每请求的区分、常见错账)
../model-auto-optimization/references/bottleneck-labels.md(跨技能,单一真源)— 加载时机: 判断是否
达门限、确认 非DiT-host段 标签口径与步数档要求时(不在本技能重定义)
../perf-gate/SKILL.md 与其 perf-gate/references/evidence-toolbox.md(跨技能)— 加载时机:
报数 / 入库 / 取“交付开销 = e2e − forward”的服务端口径时
../aclgraph-dev/SKILL.md(跨技能)— 加载时机: 做图下发预热、需要图 pool / lazy capture /
按 shape 缓存条目与驱逐规则时
../pattern-dev/SKILL.md(跨技能)— 加载时机: 做编译预热、需要确认 pattern / Inductor
路径与缓存归属时
../env-install/SKILL.md(跨技能)— 加载时机: 权重装载策略涉及下载 / 挂载 / 容器创建 / 镜像构建时
(分工:它装,本技能优化装载过程)
../accuracy-gate/SKILL.md(跨技能)— 加载时机: 交付产物字节发生变化、需要一致性判据时
维护与更新
- 触发:交付链路形态变化(新增通路 / 换编码器 / 换落盘策略)、部署形态变化(镜像 / 容器 / 权重布局)、
编译或图下发机制升级、
非DiT-host段 标签或门限口径调整时,按 dev-workflow 的复盘流程更新本技能。
- 如何判定记录仍存在(先复核、再套用):
- 占比类:按当前口径重出一份固定开销账,核对“步数档 + 各段占比 + 门限”是否仍能复现;
换模型 / 步数档 / 硬件 / 部署形态必须重测;
- 预热类:核对预热命中判据(缓存条目数 / 图命中 / 日志行)是否仍成立;若机制已改变
(例如缓存改为默认开启),对应条目应删除或改写为“无需显式预热”;
- 通路 / 编码类:按当前代码路径重新数跳数与字节数,不沿用旧结论(多一跳 / 少一跳都改变算式)。
- 失效信号:换部署形态后某段占比落进噪声地板;预热后首请求仍付全量成本(说明预热形状与实际不符);
优化前后账的分母发生变化(该轮不可比,须重做同窗基线)。
- 删除纪律:编译 / 图下发 / 通信 / 算子等机理性内容只引用不搬入;确认已被机制默认覆盖或
已修复的条目直接删除,不留“以防万一”。