Torchfix是Python代碼靜態分析工具 - 具有自動框功能的襯裡 - 適用於Pytorch的用戶。它可用於查找和修復諸如使用折衷的Pytorch功能和非公共符號的問題,並通常採用Pytorch最佳實踐。
Torchfix建立在https://github.com/instagram/libcst基於操縱Python混凝土語法樹的庫。除報告問題外,LIBCST還啟用了“ CodeMods”(自動框架)。
Torchfix可以用作flake8插件(僅覆蓋)或獨立程序(可用於侵略的子集)。
警告
目前,Torchfix處於Beta版本階段,因此仍然有很多粗糙的邊緣,許多事情可以並且會改變。
要從Github安裝最新代碼,請克隆/下載https://github.com/pytorch-labs/torchfix並運行pip install .在目錄內。
要安裝PYPI的發布版本,請運行pip install torchfix 。
安裝後,TorchFix將作為Flake8插件提供,因此運行Flake8通常會運行Torchfix Linter。
要查看沒有片狀Linter的其餘部分的TorchFix警告,您可以運行flake8 --isolated --select=TOR0,TOR1,TOR2
Torchfix也可以作為獨立程序運行: torchfix .添加--fix參數,以嘗試自動化某些問題(文件將被覆蓋!),以查看一些其他調試信息,add --show-stderr參數。
警告
請記住,Autofix是一種最佳及時機制。鑑於Python的動態性質,尤其是Torchfix的Beta版本狀態,即使是看似微不足道的修復程序,也很難確定地確定。
默認情況下,啟用了從TOR0,TOR1和TOR2開始的代碼問題的警告。帶有其他代碼的警告可能太嘈雜了,因此默認情況下無法啟用。要啟用它們,請在插件模式下使用標準的Flake8配置選項,或使用torchfix --select=ALL .對於獨立模式。
如果您遇到了torchfix的錯誤或其他問題,請在https://github.com/pytorch-labs/torchfix/issues上提交問題。
新規則代碼將在以下類別中逐漸分配:
torch功能。pytorch/pytorch存儲庫的內部規則,其他用戶不應使用這些。默認情況下啟用了TOR0,TOR1和TOR2。
自Pytorch版本1.9以來,此功能已被貶低,現在已刪除。
torch.solve被棄用,支持torch.linalg.solve 。 torch.linalg.solve的參數逆轉,不會返回LU分解。
要獲得LU分解,請參見torch.lu ,可以與torch.lu_solve或torch.lu_unpack一起使用。
X = torch.solve(B, A).solution應替換為X = torch.linalg.solve(A, B) 。
自Pytorch版本1.9以來,此功能已被貶低,現在已刪除。
將torch.symeig拒絕以支持torch.linalg.eigh 。
默認行為已從默認情況下使用矩陣的上部三角形部分轉變為使用下部三角形部分。
L , _ = torch . symeig ( A , upper = upper )應該替換
L = torch . linalg . eigvalsh ( A , UPLO = 'U' if upper else 'L' )和
L , V = torch . symeig ( A , eigenvectors = True )應該替換
L , V = torch . linalg . eigh ( A , UPLO = 'U' if upper else 'L' )require_grad 。您的意思是requires_grad嗎?這是一個常見的拼寫,可能導致沉默的性能問題。
use_reentrant checkpoint torch.utils.checkpoint中use_reentrant參數的默認值正在從True變為False 。同時,需要明確傳遞該值。
有關詳細信息,請參閱此論壇帖子。
請參閱TOR001 。
此功能被棄用。使用使用現代參數化API的torch.nn.utils.parametrizations.weight_norm 。新的weight_norm與從舊weight_norm生成的state_dict兼容。
遷移指南:
幅度( weight_g )和方向( weight_v )現在分別表示parametrizations.weight.original1 parametrizations.weight.original0 。
要刪除重量歸一化的重新驗證,請使用torch.nn.utils.parametrize.remove_parametrizations 。
重量不再在模塊前進一次。相反,它將在每個訪問中重新計算。要恢復舊行為,請在調用相關模塊之前使用torch.nn.utils.parametrize.cached 。
此功能被棄用。改用torch.nn.attention.sdpa_kernel上下文管理器。
遷移指南: sdp_kernel的每個布爾輸入參數(除非指定為true)對應於SDPBackened 。如果輸入參數為真,則應將相應的後端添加到sdpa_kernel的輸入列表中。
將此功能棄用,以支持torch.linalg.multi_dot 。
遷移指南: multi_dot接受兩個或多個張量的列表,而chain_matmul接受多個張量作為輸入參數。對於遷移,將chain_matmul參數中的多個張量轉換為兩個或多個multi_dot的元音列表。
示例:用torch.chain_matmul(a, b, c)替換torch.linalg.multi_dot([a, b, c]) 。
torch.cholesky()被棄用,以torch.linalg.cholesky() 。
遷移指南:
L = torch.cholesky(A)應替換為L = torch.linalg.cholesky(A) 。L = torch.cholesky(A, upper=True)應替換為L = torch.linalg.cholesky(A).mH torch.qr()被棄用以torch.linalg.qr() 。
遷移指南:
Q, R = torch.qr(A)應替換為Q, R = torch.linalg.qr(A) 。torch.qr的some torch.linalg.qr中的字符串參數mode代替。用法的相應變化來自Q, R = torch.qr(A, some=False)到Q, R = torch.linalg.qr(A, mode="complete") 。 函數torch.range()被棄用,因為其用法與Python的內置範圍不兼容。而是使用torch.arange()在[start, end)中產生值。
遷移指南:
torch.range(start, end)在[start, end]的範圍內產生值。但是torch.arange(start, end)在[start, end)中產生值。對於1個步驟1,將用法從torch.range(start, end, 1) torch.arange(start, end+1, 1) 。torch.load沒有weights_only參數是不安全的。僅當您信任加載的數據並且需要完整的泡菜功能時,明確將weights_only設置為false,否則將weights_only=True設置。
參見TOR101 。
TORCHFIX是許可文件中發現的BSD許可證。