Skip to content

推理输入合同与资源生命周期 ​

语音模型故障不只发生在生成阶段。错误长度进入原生编码器、客户端断开后准备线程仍运行、关闭服务时提前释放设备上下文,都可能表现为 500、随机失败或内存增长。稳定实现需要把输入预检、任务所有权和底层执行范围连接起来。

在原生调用前验证整批输入 ​

特征合同不仅是 shape。每项特征应符合 [F,T] 的 rank,长度是真正的正整数且不超过 T,数值全部有限,dtype 属于支持集合。Python 中 bool 是 int 的子类,使用 isinstance(length, int) 会把 True 当作合法长度,需要显式排除布尔值。

python
def validate_length(length, frames):
    if isinstance(length, bool) or not isinstance(length, int):
        raise ValueError("length must be an integer")
    if length <= 0 or length > frames:
        raise ValueError("length is outside the feature range")

整批全部验证成功后才执行任何原生推理。边验证边执行会在最后一项非法时,留下前面已经运行的工作;只测第一项错误又发现不了这个问题。回归把坏成员放在批首、批中、批尾,并断言原生调用次数为零。WAV 入口还需校验字节对齐、帧块完整性和解码后的非空音频,把输入错误返回为明确的客户端错误。

取消请求不等于停止线程 ​

参考解析、特征投影和提示词装配也属于推理任务。若这些同步准备在断开监听器启动前执行,客户端离开时取消逻辑尚未接管;只给生成调用增加监听不能解决问题。准备阶段应进入有界线程执行器,并纳入同一个取消观察范围。

text
接收请求 -> 整批预检 -> 等待执行许可 -> 准备 -> 编码/生成 -> 返回
                           |              |
                       排队取消       已运行取消
                       不再派发       停止等待结果,线程继续持有许可

取消排队任务时不再派发;取消已经运行的原生任务时,HTTP 协程可以结束,执行许可必须由真实线程退出后释放。若在协程取消时立即归还许可,新任务会进入仍被旧线程占用的设备,实际并发突破上限。统计队列、活跃线程和取消后的未完成任务,比单看 HTTP 连接数更能发现泄漏。

原生资源关闭的顺序 ​

关闭顺序是停止接收新任务,处理或取消尚未派发的队列,等待活跃 prepare、encode、generate 退出,确认原生执行空闲,最后释放模型、ACL/context 和编译运行资源。线程仍使用资源时调用 close,可能造成释放后访问;线程没有抛错也不能证明时序正确。

验收在准备、编码、生成三个位置分别制造阻塞,再触发断开与服务关闭,检查新任务被拒绝、许可未提前释放、close 不早于最后一个活跃调用。涉及旧 Torch 实现的全局校验上下文时,需要独立互斥保护;解析原始输出的锁不能自动保护另一个全局状态。

批次形状与数值稳定性 ​

相同音频在固定完整输入、相同批次形状下可重复,并不证明改变执行形状后输出仍一致。投影、残差归一化和 MLP 的浮点差异可能改变接近的候选 token 排序,随后 greedy decode 分支逐步扩大差异。必须先固定 PCM、参考、提示词、有效长度、预热条件,再改变一个执行维度。

当前非量化、TP=1、PP=1 的 eager 路径采用 prefill query-range 隔离:对易受执行几何影响的投影、归一化和 logits 按查询范围计算,同时保留单 token decode 的批次执行。只隔离最先发现的组件会把分歧推迟到后续组件;所有时刻全部隔离又有过高性能代价。这是特定模型与执行路径的折中,不能外推到量化或其他并行配置。

对照保留 token 序列、原始模型文本、纠正后文字和最终 Final,并一起报告耗时。CPU 上也能复现差异可以排除“只由 NPU 导致”,却不能据此断言唯一根因。循环检测只能限制异常生成的资源消耗,不能恢复遗漏内容;当前短周期重复守卫默认关闭,启用前需验证正常复述不会被误截断。

排查闭环 ​

输入拒绝先检查合同及原生调用是否为零;取消后负载增长先检查许可归属和线程排空;关闭崩溃检查最后一次调用与资源释放时间;同输入不同文字检查执行几何及逐 token 分歧。容量配置见动态批处理与推理调度,质量与边界对照见音频回放与质量回归。

别急,先让缓存热一下。