GitHub Repo
PyTorch 社群回報 CTC 損失異常,特定 CUDA 輸入可能產生錯誤損失與梯度
10 月 28 日的 PyTorch 社群回報指出,特定整數型別與非連續張量組合,可能讓 CTC 損失在 CUDA 上出現不一致結果。回報附有 CPU 對照與最小重現,但截至查核時尚無維護者確認或正式修補。

PyTorch 新增一份涉及序列辨識訓練正確性的問題回報:當 F.ctc_loss 使用 int32 標籤與長度參數,且批次內輸入長度不同時,回報者觀察到非連續 log_probs 產生錯誤、甚至每次呼叫不同的損失;部分設定下,有效輸入長度之外也出現非零梯度。問題回報
重現環境為 Windows、RTX 4060 Laptop GPU 與 PyTorch 2.14.1+cu130。測試先將模型輸出經 log_softmax 與 permute 轉為 CTC 所需排列;相同數值改成連續張量後,前向損失便與 CPU 對齊,停用 cuDNN 也得到一致結果。不過,單加 .contiguous() 並未涵蓋回報中的梯度問題,不能直接視為完整解法。重現程式與輸出
官方文件說明,CTC 會加總輸入與目標序列之間可能的對齊,並以各樣本長度遮罩補齊部分。文件另明訂 cuDNN 路徑要求所有 input_lengths 等於時間維度 T,整數參數須為 int32;一般實作使用 torch.long。此次回報卻稱變長輸入仍走入 cuDNN,因此值得追查後端選擇是否完整檢查限制,目前根因仍未確認。CTCLoss 文件
對序列辨識工程師而言,這提示訓練排錯需要同時檢查前向損失與補齊區域的梯度。文件雖提醒 cuDNN 可能採用非確定性演算法,但不能據此判定此次差異屬正常行為。依現有證據,受影響團隊可先用自身批次比較 CPU、停用 cuDNN,以及改用 int64 參數的結果;後續應觀察維護者能否重現、其他平台是否受影響,以及修補是否加入損失與梯度的回歸測試。文件限制 回報狀態