評價此頁

釋出說明#

建立日期:2025年4月24日 | 最後更新日期:2025年4月24日

當用戶將一個或多個張量傳遞給 out= 時,約定如下:

  • 如果 out 張量沒有元素,它將被調整為計算輸出的形狀、步幅和記憶體格式。

  • 如果 out 張量的形狀與計算結果不同,則會引發錯誤,或者 out 張量將被調整為與計算輸出相同的形狀、步幅和記憶體格式,就像沒有元素的張量一樣。(此調整行為已被棄用,PyTorch 正在更新其運算元以一致地丟擲錯誤。)

  • 傳遞具有正確形狀的 out= 張量在數值上等同於執行計算並將結果“安全複製”到(可能已調整大小的)out 張量中。在這種情況下,步幅和記憶體格式會被保留。

  • 不支援傳遞 grad 需要的 out= 張量。

  • 如果將多個張量傳遞給 out=,則上述行為獨立適用於每個張量。

“安全複製”與 PyTorch 的常規復制不同。對於不參與型別提升的運算,源張量和目標張量的裝置和 dtype 必須匹配。對於參與型別提升的運算,複製可以到不同的 dtype,但複製的目標不能是比源張量更低的“型別種類”。PyTorch 有四種類型種類:布林型、整型、浮點型和複數型,按此順序。因此,例如,像 add 這樣的運算(它參與型別提升)如果輸入為浮點型但 out= 張量為整型,則會引發執行時錯誤。

請注意,雖然正確形狀張量的 out= 的數值表現是執行運算然後“安全複製”其結果,但在後臺,運算可能會重用 out= 張量的儲存並融合複製操作以提高效率。許多運算,如 add,都會執行這些最佳化。此外,儘管上述指定了 PyTorch 的“out= 約定”,但 PyTorch 中的許多運算並未正確實現該約定,需要進行更新。