viable/strict/1790789324: Fix _int_mm CPU corner case (#194682)
PyTorch 合并 PR #194682,修复 _mkldnn_gemm_i8i8i32_with_blas 的 CPU 边界情况。该函数从输入 strides 取 leading dimensions,但 size-1 维度的 stride 是任意的,inductor 在某些情况下会发出 0;而 oneDNN 的 row-major gemm 要求 lda >= K,因此会静默拒绝调用,导致 int8 量化 LLM 解码等工作负载出现精度失败。PR 同时检查 oneDNN gemm 状态以便抛出异常。
Development
- First Reportviable/strict/1790789324: Fix _int_mm CPU corner case (#194682)PyTorch Core
- Current Assessmentint8 量化推理是 CPU 侧降低 LLM 解码成本的主要路径之一,而这类问题出在框架与 oneDNN 的接口契约上,不在模型本身。它说明推理栈的稳定性仍依赖对底层库约束的显式校验,而非默认其行为。可观察的下一信号是同类 oneDNN 调用点是否被批量补上状态检查。Agent Pulse · analysis
PyTorch 仓库合并了 PR #194682,针对 _mkldnn_gemm_i8i8i32_with_blas 的 CPU 边界情况做修复。问题根源是 leading dimensions 取自输入 strides,而 size-1 维度的 stride 本身任意,inductor 在某些情况下会发出 0;oneDNN 的 row-major gemm 要求 lda >= K,于是静默拒绝该调用,造成 int8 量化 LLM 解码等负载的精度失败。修复覆盖这一边界情况,并增加对 oneDNN gemm 状态的检查,使异常可以被抛出。PR 由 Claude Code 协助编写,已获 frost-intel、aditew01、Skylion007 批准。
这是一次典型的静默失败修复:底层库以约束拒绝调用而不报错,上层因此表现为精度异常而非崩溃。把状态检查补上后,同类问题会以异常形式暴露,便于定位。可验证的下一信号是后续 PyTorch release note 或相关 issue 中是否出现该异常路径的回归测试与更多 stride 边界用例。
int8 量化推理是 CPU 侧降低 LLM 解码成本的主要路径之一,而这类问题出在框架与 oneDNN 的接口契约上,不在模型本身。它说明推理栈的稳定性仍依赖对底层库约束的显式校验,而非默认其行为。可观察的下一信号是同类 oneDNN 调用点是否被批量补上状态检查。
对依赖 CPU 做 int8 量化 LLM 解码的服务而言,静默拒绝会直接表现为输出质量下降且难以归因,修复降低了这类线上精度事故的排查成本。价值大小取决于该路径在实际推理流量中的占比,可通过后续版本是否附带回归测试来验证。
若状态检查被系统性补齐,CPU 量化推理的失败模式会从难以复现的精度漂移转为可捕获异常,调试成本下降。需要观察后续版本是否把该检查推广到其他 gemm 调用路径。