返回首頁

GitHub Repo

PyTorch 社群回報 CPU 變異數溢位,大數值常數張量可能回傳無限大

10 月 8 日的 PyTorch 開發版回報指出,CPU 上對大數值常數張量計算變異數與標準差,可能錯誤回傳無限大。案例附有最小重現與演算法分析,但正式版本影響範圍及上游修補仍待確認。

Pytorch Deepdream (https://github.com/gordicaleksa/pytorch-deepdream) by gordicaleksa (https://github.com/gordicaleksa/pytorch-deepdream/commits?author=gordicaleksa) · MIT · Image source
zh-Hant

PyTorch 社群於 10 月 8 日提出數值穩定性問題:在 CPU 上,不指定維度而直接呼叫 torch.var 或 torch.std,部分大數值常數張量會得到 inf。回報者列出的環境包括兩個 2.15 開發版,以及 aarch64 macOS 與 x86_64 Linux;截至查核時,議題仍開放,未列出關聯修補。社群回報

最小案例只需建立六個值皆為 1e200 的 float64 元素。回報顯示,torch.var(x) 得到無限大,同一輸入的 torch.var_mean(x)[0] 卻得到零。官方文件定義兩者採用相同的變異數公式,預設修正值均為 correction=1;六個完全相同的樣本應有零變異數,因此不能用自由度設定解釋差異。var 文件、var_mean 文件

依回報者的程式路徑分析,差異來自底層歸約演算法。全張量 var 的 CPU 快速路徑先求平均,再累加偏差平方;平均值的捨入誤差留下巨大殘差,平方後便超出 float64 可表示範圍。var_mean 則走 Welford 更新路徑,在該案例避免了這次溢位。這項根因分析目前仍屬回報者判讀。技術分析與重現

對工程團隊而言,這提供了一個排查統計異常的具體方向:資料前處理或研究程式若出現無限大的變異數,可先比對兩個 API,並固定輸入尺寸、精度與執行環境。這是從案例推導的診斷建議,尚無證據顯示一般模型訓練廣泛受影響,也不能將替換 API 視為通用修復。

後續應關注維護者能否確認正式版範圍,以及修補是否在保留快速路徑效能的同時處理極端量級。驗證也應涵蓋不同張量尺寸與指定維度的歸約,避免單一案例恢復正常,就被解讀為整類數值問題已解決。

來源

  1. PyTorch issue #200235:CPU 全張量變異數與標準差溢位回報
  2. torch.var — PyTorch 2.14 documentation
  3. torch.var_mean — PyTorch 2.14 documentation