GitHub Repo
PyTorch 社群回報編譯快取正確性問題,保留計算圖後重複反向傳播可能算錯梯度
10 月 25 日的 PyTorch 社群回報附上重現程式,指出特定快取與重新編譯流程可能讓第二次反向傳播無警告地產生錯誤梯度。問題仍待維護者確認,回報中的根因分析由 AI 協助產生。

PyTorch 社群於 10 月 25 日提交問題 #201970,回報 torch.compile 在特定編譯快取狀態下,對保留的計算圖重複執行反向傳播,可能產生錯誤梯度而不拋出例外。截至查核時,議題仍開啟,未列出修補 PR;提交者表示已確認重現現象,但尚不確定診斷是否正確。問題回報
最小案例先編譯平方函式並執行一般反向傳播,再重設 Dynamo、重新編譯,接著以 retain_graph=True 求兩次梯度。回報顯示,應連續得到 4 的結果變成 4、8;直接執行模式或冷快取則得到兩次 4。文中的 AI 分析懷疑,快取鍵未區分可被覆寫的中間緩衝區,導致後續呼叫重用不合適的反向程式碼。這項機制仍屬待驗證假說。重現程式與分析
官方文件說明,FXGraphCache 與 AOTAutogradCache 可將編譯成果存到磁碟,讓不同程序遇到相同圖與設定時省去重新編譯;兩者也共用指定的快取根目錄。因此,工程上的查核重點應包含快取狀態與執行順序,只測首次編譯未必足夠;這是依文件與回報推導的驗證建議。快取設定文件
另一個判讀重點是梯度累加。官方 API 說明指出,backward 會累加葉節點的梯度;上述案例每次求導前都清空 .grad,因此回報中的數值差異不能直接用一般累加行為解釋。文件也區分保留原圖的 retain_graph 與建立導數圖的 create_graph,測試時應分別記錄。反向傳播文件
使用保留計算圖與編譯訓練的團隊,可先比較直接執行、冷快取及重用快取三種結果。後續值得追蹤維護者的獨立重現、受影響版本與回歸測試;目前證據不足以推論一般訓練流程普遍受影響。