GitHub Repo
Transformers 社群回報 ModernBERT 半精度溢位,長文本平均池化可能產生 NaN
11 月 1 日的 Transformers 社群回報指出,ModernBERT 分類模型以 float16 執行平均池化時,長輸入可能使加總溢位,輸出 NaN。作者提供 CPU 重現與提高累加精度的對照,但尚未見維護者確認或修補合併。

Transformers 社群於 11 月 1 日公開一項長文本分類的數值問題:ModernBertForSequenceClassification 設為 classifier_pooling="mean" 並以純 float16 執行時,可能在編碼器輸出仍正常的情況下,得到 NaN 分類分數。回報環境為 Transformers 5.22.1、PyTorch 2.15.0,實測使用 Apple 晶片電腦的 CPU。問題回報
觸發點在平均池化的運算順序:先將隱藏狀態乘上注意力遮罩、沿 token 維度加總,再除以有效 token 數。作者指出,中間加總超過 float16 可表示範圍後,後續除法無法恢復正常數值。公開測例中,mmBERT-small 在 2,048 token 出現 NaN,ModernBERT-base 則在 6,144 token 出現;這些長度是特定合成英文輸入的結果,不能當成所有文本的固定門檻。重現程式與輸出
這項回報對長文件工作流程有實際意義。官方文件列出 ModernBERT 支援最長 8,192 token,分類池化可選擇 cls 或 mean;因此,輸入未超過模型長度限制,仍需要另外驗證池化階段的數值穩定性。工程上可據此推論,僅檢查編碼器輸出是否有限,可能漏掉分類頭之前的異常。ModernBERT 文件
作者的對照將加總改用 float32,除法完成後再轉回原精度,測例便恢復有限輸出。PyTorch 文件也明確說明,torch.sum 的 dtype 參數會在運算前轉換輸入,可用來避免資料型別溢位;這提供了局部調整池化精度的途徑,但部署前仍應檢查效能與輸出誤差。PyTorch API 文件
截至查核,討論中只有其他參與者表達承接意願,尚無維護者確認或關聯修補。作者未測試 CUDA,分類頭也是新初始化,結果不代表既有分類任務的準確率評估。後續應關注正式回歸測試,以及純半精度與自動混合精度執行路徑的差異。討論狀態