我們推出了一個新的系列,對PytorchConference2023 的博客進行中文編譯,會陸續在公眾號發表。
你好,我叫塞爾吉。我在Meta公司負責PyTorch的開發者體驗。今天我想要談談TorchFix。
TorchFix是我們最近開發的一個新工具,旨在幫助PyTorch用戶維護健康的代碼庫并遵循PyTorch的最佳實踐。首先,我想要展示一些我們努力解決的問題的示例。
For Cholesky decomposition - torch.cholesky deprecated in favor of torch.linalg.cholesky - Replace torch.cholesky(A) with torch.linalg.cholesky(A) - Replace torch.cholesky(A,upper=True)with torch.linalg.ch
首先是第一個示例。最近,PyTorch的API中計算Cholesky分解的函數發生了改變。將該函數從torch.shalesky移動到torch.linauk.shalesky,并且參數也進行了變更。在舊的API中,您可以提供upper equals true參數,但在新的API中,您只需計算一個聯合。我們希望更新我們的代碼以使用這個新的API。但是手動操作這個過程非常繁瑣。
- Bad: param.require grad = False - Good: param.requires grad = False (notice 'requires') The bad code doesn't cause any explicit errors but doesn't do what it's supposed to do
有時,出于性能原因,您不想為參數計算梯度。要告訴PyTorch您不需要梯度,只需將requires grad屬性設置為false。不幸的是,人們會經常會輸入require gradient, requiregrad false。又因為這個是python,屬性動態創建沒有錯誤,你的程序繼續工作但沒有執行預期的操作,這可能會導致性能下降。這實際上很難注意到,我們在多個流行的大型開源庫發現了這個問題。
- Synchronized dataloader torch.utils.data.DataLoader(dataset,batch_size=10) - For efficiency in production torch.utils.data.DataLoader(dataset,batch_size=10,num_workers=n)
關于數據加載器的另一個問題是,如果你沒有為數據加載器提供"numWorkers"參數,那么默認值為零。這意味著數據加載將在與計算相同的進程中進行。數據加載可能會阻塞計算。因此,出于效率原因,您希望在生產環境中提供"numWorkers"參數,并將其設置為大于零的值。具體的數字可能取決于您擁有的CPU數量或其他因素。但這個問題不一定是一個錯誤。根據您的目標和代碼的運行方式,默認值0可能是完全有效的。但是,我們仍然希望向用戶標記此問題,以便用戶可以檢查和理解它是否對他們造成了實際問題。
TorchVision introduced new Multi-weight support API Replace models.resnet101(pretrained=True) with models.resnet101(weights=models.ResNetl01_Weights.IMAGENET1K_V1)
這個例子與核心PyTorch無關,而是與一種流行的領域庫TorchVision有關。
最近,TorchVision中加載預訓練權重的API發生了變化。所以以前你提供的是Pretend等于true或等于false。但是使用新的API,你需要提供weight參數,并明確指定要加載的權重。這個新的API更加靈活,我們希望更新我們的代碼來使用它。實際上,我們希望全世界的代碼都能更新使用這個新的API。在那之后,TorchVision可以完全停止支持舊的API。再次強調,手動做這個過程非常繁瑣。特別是考慮到TorchVIsion不只有一個模型,TorchVision有許多模型和許多權重,這個API的變化適用于所有模型。
: A specialized static analysis tool for Pythoncode Uses LibcsT - A concrete syntax tree parser and serializer library for Python - Similar to standard Python's ast, but.preserves things like comments and formatting - https://github.com/Instagram/LibCST
如果有什么是解決所有這些問題的方法,它就是TorchFix。TorchFix是一個專門為PyTorch設計的靜態分析工具。他們使用了Lipcea ST這個流行的庫。Lipcea ST允許TorchFix加載、獲取語法樹、更新語法樹,然后將修改后的語法樹寫回。關于如何運行TorchFix,有兩種模式。一種是作為Flake8插件,另一種是獨立模式。在Flake 8插件模式中,你只需要安裝Torchfix,然后基本上使用Flake 8. 如果你的項目中已經使用了Flake 8,這種模式非常方便。如果你的CI正在運行Flake 8,你只需要安裝并指定你想要處理的額外警告。但是在這種模式下,沒有自動修復,只有代碼檢查和錯誤提示。
Two modes: flake8-plugin and standalone flake8-plugin: linting only - flake8 --select=TOR0,TOR1,TOR2 standalone: linting and autofixing - torchfix - torchfix . --fix - torchfix --select=ALL
另一種模式是獨立運行,你可以將TorchFix作為腳本運行,并提供相應的參數。這張幻燈片的最后一行顯示,并不是所有規則都默認啟用。這是因為有些規則太過繁雜,不能默認啟用。若要查看所有規則和結果,你可以提供SELECT等命令
Get a release from PyPI pip install torchfix Latest code from GitHub Clone https://github.com/pytorch/test-infra/tree/main/tools/torchfix pip install .
獲取Torchfix也很簡單,你只需要從PyPy安裝Torchfix的最新版本,或者從GitHub克隆倉庫并進行安裝。目前的階段是早期測試版(early beta),但已經非常有用。TorchFix已經擁有查找和修復我之前提到的所有示例的規則。它在Meta內部和開源項目中已經被使用來查找問題并更新代碼。
Beta version stage, already useful - Rules for all the mentioned examples problems and more - Was used to find issues and update code of multiple projects both internally at Meta and in open source - Running in CI of several projects on GitHub
并且我們已經在幾個GitHub上的元開源項目的CI中運行了它。將來我們希望為更多類別的問題添加更多的規則。而這項工作將根據我們在真實代碼庫中發現的實際問題進行引導。此外,我們還希望增加更多的配置選項。
目前TorchFix假設您使用最新版本的PyTorch,但實際上這未必是正確的。我們還希望將其與PyTorch CI和PyTorch文檔生成集成。因此,例如,當您在PyTorch中棄用一個函數時,我們希望能夠檢查是否存在TorchFix的規則,以標記并更新棄用的函數...當然,我們還希望看到TorchFix在更多項目的CI中使用。希望這是有機地發生的,當人們嘗試TorchFix并發現它很有用時。以及如何參與進來。首先,只需嘗試在您的代碼庫上運行它。如果它發現任何問題,或者您可以發現TorchFix本身出現了一些問題。可以在github反饋。
https://github.com/pytorch/test-infra/tree/main/tools/torchfix - Bug reports, feature requests, and code contributions are very welcome - There are open "good first issues" -searchfor[TorchFix]
-
函數
+關注
關注
3文章
4327瀏覽量
62569 -
代碼
+關注
關注
30文章
4779瀏覽量
68521 -
pytorch
+關注
關注
2文章
807瀏覽量
13198
原文標題:《PytorchConference2023 翻譯系列》3- TorchFix
文章出處:【微信號:GiantPandaCV,微信公眾號:GiantPandaCV】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論