0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

TorchFix:基于PyTorch的代碼靜態(tài)分析

jf_pmFSk4VX ? 來源:GiantPandaCV ? 2023-12-18 15:20 ? 次閱讀

我們推出了一個(gè)新的系列,對(duì)PytorchConference2023 的博客進(jìn)行中文編譯,會(huì)陸續(xù)在公眾號(hào)發(fā)表。

你好,我叫塞爾吉。我在Meta公司負(fù)責(zé)PyTorch的開發(fā)者體驗(yàn)。今天我想要談?wù)凾orchFix。

TorchFix是我們最近開發(fā)的一個(gè)新工具,旨在幫助PyTorch用戶維護(hù)健康的代碼庫并遵循PyTorch的最佳實(shí)踐。首先,我想要展示一些我們努力解決的問題的示例。

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

首先是第一個(gè)示例。最近,PyTorch的API中計(jì)算Cholesky分解的函數(shù)發(fā)生了改變。將該函數(shù)從torch.shalesky移動(dòng)到torch.linauk.shalesky,并且參數(shù)也進(jìn)行了變更。在舊的API中,您可以提供upper equals true參數(shù),但在新的API中,您只需計(jì)算一個(gè)聯(lián)合。我們希望更新我們的代碼以使用這個(gè)新的API。但是手動(dòng)操作這個(gè)過程非常繁瑣。

- 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

有時(shí),出于性能原因,您不想為參數(shù)計(jì)算梯度。要告訴PyTorch您不需要梯度,只需將requires grad屬性設(shè)置為false。不幸的是,人們會(huì)經(jīng)常會(huì)輸入require gradient, requiregrad false。又因?yàn)檫@個(gè)是python,屬性動(dòng)態(tài)創(chuàng)建沒有錯(cuò)誤,你的程序繼續(xù)工作但沒有執(zhí)行預(yù)期的操作,這可能會(huì)導(dǎo)致性能下降。這實(shí)際上很難注意到,我們?cè)诙鄠€(gè)流行的大型開源庫發(fā)現(xiàn)了這個(gè)問題。

- 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)

關(guān)于數(shù)據(jù)加載器的另一個(gè)問題是,如果你沒有為數(shù)據(jù)加載器提供"numWorkers"參數(shù),那么默認(rèn)值為零。這意味著數(shù)據(jù)加載將在與計(jì)算相同的進(jìn)程中進(jìn)行。數(shù)據(jù)加載可能會(huì)阻塞計(jì)算。因此,出于效率原因,您希望在生產(chǎn)環(huán)境中提供"numWorkers"參數(shù),并將其設(shè)置為大于零的值。具體的數(shù)字可能取決于您擁有的CPU數(shù)量或其他因素。但這個(gè)問題不一定是一個(gè)錯(cuò)誤。根據(jù)您的目標(biāo)和代碼的運(yùn)行方式,默認(rèn)值0可能是完全有效的。但是,我們?nèi)匀幌M蛴脩魳?biāo)記此問題,以便用戶可以檢查和理解它是否對(duì)他們?cè)斐闪藢?shí)際問題。

TorchVision introduced new
Multi-weight support API
Replace
models.resnet101(pretrained=True)
with
models.resnet101(weights=models.ResNetl01_Weights.IMAGENET1K_V1)

這個(gè)例子與核心PyTorch無關(guān),而是與一種流行的領(lǐng)域庫TorchVision有關(guān)。

最近,TorchVision中加載預(yù)訓(xùn)練權(quán)重的API發(fā)生了變化。所以以前你提供的是Pretend等于true或等于false。但是使用新的API,你需要提供weight參數(shù),并明確指定要加載的權(quán)重。這個(gè)新的API更加靈活,我們希望更新我們的代碼來使用它。實(shí)際上,我們希望全世界的代碼都能更新使用這個(gè)新的API。在那之后,TorchVision可以完全停止支持舊的API。再次強(qiáng)調(diào),手動(dòng)做這個(gè)過程非常繁瑣。特別是考慮到TorchVIsion不只有一個(gè)模型,TorchVision有許多模型和許多權(quán)重,這個(gè)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是一個(gè)專門為PyTorch設(shè)計(jì)的靜態(tài)分析工具。他們使用了Lipcea ST這個(gè)流行的庫。Lipcea ST允許TorchFix加載、獲取語法樹、更新語法樹,然后將修改后的語法樹寫回。關(guān)于如何運(yùn)行TorchFix,有兩種模式。一種是作為Flake8插件,另一種是獨(dú)立模式。在Flake 8插件模式中,你只需要安裝Torchfix,然后基本上使用Flake 8. 如果你的項(xiàng)目中已經(jīng)使用了Flake 8,這種模式非常方便。如果你的CI正在運(yùn)行Flake 8,你只需要安裝并指定你想要處理的額外警告。但是在這種模式下,沒有自動(dòng)修復(fù),只有代碼檢查和錯(cuò)誤提示。

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

另一種模式是獨(dú)立運(yùn)行,你可以將TorchFix作為腳本運(yùn)行,并提供相應(yīng)的參數(shù)。這張幻燈片的最后一行顯示,并不是所有規(guī)則都默認(rèn)啟用。這是因?yàn)橛行┮?guī)則太過繁雜,不能默認(rèn)啟用。若要查看所有規(guī)則和結(jié)果,你可以提供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克隆倉庫并進(jìn)行安裝。目前的階段是早期測(cè)試版(early beta),但已經(jīng)非常有用。TorchFix已經(jīng)擁有查找和修復(fù)我之前提到的所有示例的規(guī)則。它在Meta內(nèi)部和開源項(xiàng)目中已經(jīng)被使用來查找問題并更新代碼。

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

并且我們已經(jīng)在幾個(gè)GitHub上的元開源項(xiàng)目的CI中運(yùn)行了它。將來我們希望為更多類別的問題添加更多的規(guī)則。而這項(xiàng)工作將根據(jù)我們?cè)谡鎸?shí)代碼庫中發(fā)現(xiàn)的實(shí)際問題進(jìn)行引導(dǎo)。此外,我們還希望增加更多的配置選項(xiàng)。

目前TorchFix假設(shè)您使用最新版本的PyTorch,但實(shí)際上這未必是正確的。我們還希望將其與PyTorch CI和PyTorch文檔生成集成。因此,例如,當(dāng)您在PyTorch中棄用一個(gè)函數(shù)時(shí),我們希望能夠檢查是否存在TorchFix的規(guī)則,以標(biāo)記并更新棄用的函數(shù)...當(dāng)然,我們還希望看到TorchFix在更多項(xiàng)目的CI中使用。希望這是有機(jī)地發(fā)生的,當(dāng)人們嘗試TorchFix并發(fā)現(xiàn)它很有用時(shí)。以及如何參與進(jìn)來。首先,只需嘗試在您的代碼庫上運(yùn)行它。如果它發(fā)現(xiàn)任何問題,或者您可以發(fā)現(xiàn)TorchFix本身出現(xiàn)了一些問題。可以在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]

審核編輯:湯梓紅
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4256

    瀏覽量

    62223
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4694

    瀏覽量

    68075
  • pytorch
    +關(guān)注

    關(guān)注

    2

    文章

    795

    瀏覽量

    13076

原文標(biāo)題:《PytorchConference2023 翻譯系列》3- TorchFix

文章出處:【微信號(hào):GiantPandaCV,微信公眾號(hào):GiantPandaCV】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    基于數(shù)據(jù)融合的源代碼靜態(tài)分析

    采用數(shù)據(jù)融合技術(shù)對(duì)源代碼進(jìn)行靜態(tài)分析,實(shí)現(xiàn)可擴(kuò)展的原型系統(tǒng)。對(duì)現(xiàn)有靜態(tài)分析工具的分析結(jié)果進(jìn)行解析
    發(fā)表于 04-13 08:57 ?9次下載

    全面、深入的軟件源代碼靜態(tài)分析方案

    KLOCWORK INSIGHT是業(yè)內(nèi)唯一桌面源代碼分析的快速高效性與系統(tǒng)分析的強(qiáng)大功能及準(zhǔn)確性優(yōu)點(diǎn)相結(jié)合的軟件靜態(tài)分析解決方案。在桌面開發(fā)
    發(fā)表于 04-04 22:53 ?27次下載

    靜態(tài)代碼分析

    Fortify的靜態(tài)代碼分析器(Static Code Analyzer,SCA)是組成Fortify 360的三個(gè)分析器之一。SCA工作在開發(fā)階段,以用于
    發(fā)表于 04-07 20:32 ?22次下載

    IAR靜態(tài)代碼分析工具

    前言IAR集成了C-STAT靜態(tài)分析工具,主要通過對(duì)源代碼等級(jí)進(jìn)行分析來發(fā)現(xiàn)代碼中的潛在問題,除了提高
    發(fā)表于 12-03 10:36 ?2次下載
    IAR<b class='flag-5'>靜態(tài)</b><b class='flag-5'>代碼</b><b class='flag-5'>分析</b>工具

    利用正確的靜態(tài)分析實(shí)現(xiàn)應(yīng)用

      一些靜態(tài)分析模式可以在運(yùn)行時(shí)檢測(cè)缺陷。如果嵌入式目標(biāo)可以容納開銷,則組織應(yīng)執(zhí)行運(yùn)行時(shí)靜態(tài)分析以完善其預(yù)防策略。運(yùn)行時(shí)靜態(tài)
    的頭像 發(fā)表于 06-19 07:23 ?910次閱讀
    利用正確的<b class='flag-5'>靜態(tài)</b><b class='flag-5'>分析</b>實(shí)現(xiàn)應(yīng)用

    利用醫(yī)療設(shè)備軟件的靜態(tài)代碼分析

      如果使用得當(dāng),靜態(tài)分析已被證明在提高安全關(guān)鍵代碼的軟件質(zhì)量方面非常有效。盡管不嚴(yán)格要求批準(zhǔn),但 FDA 承認(rèn)其有效性。
    的頭像 發(fā)表于 06-19 10:07 ?1020次閱讀
    利用醫(yī)療設(shè)備軟件的<b class='flag-5'>靜態(tài)</b><b class='flag-5'>代碼</b><b class='flag-5'>分析</b>

    利用醫(yī)療設(shè)備軟件的靜態(tài)代碼分析

      靜態(tài)分析將提供各種類型的錯(cuò)誤,從必須解決的關(guān)鍵問題到警告。一些組織希望投機(jī)取巧,只為可證明的錯(cuò)誤更改代碼。其他人則主動(dòng)清理代碼并提高質(zhì)量,甚至“修復(fù)”警告。團(tuán)隊(duì)?wèi)?yīng)該在處理
    發(fā)表于 07-09 07:13 ?579次閱讀
    利用醫(yī)療設(shè)備軟件的<b class='flag-5'>靜態(tài)</b><b class='flag-5'>代碼</b><b class='flag-5'>分析</b>

    靜態(tài)分析:對(duì)代碼質(zhì)量至關(guān)重要

      讓我們從顯而易見的事情開始:靜態(tài)分析本身并不是靈丹妙藥。它不能保證復(fù)雜的軍事嵌入式應(yīng)用程序中的高代碼質(zhì)量、安全性或安全性。靜態(tài)分析也不能
    的頭像 發(fā)表于 11-01 09:30 ?527次閱讀

    什么是靜態(tài)分析?如何管理早期靜態(tài)分析報(bào)告

    簡單來說,靜態(tài)分析是在不執(zhí)行代碼的情況下檢查源代碼和二進(jìn)制代碼的過程,通常用于查找bug的前期準(zhǔn)備或評(píng)估
    的頭像 發(fā)表于 11-01 11:35 ?5809次閱讀

    靜態(tài)分析:對(duì)代碼質(zhì)量至關(guān)重要

      讓我們從顯而易見的事情開始:靜態(tài)分析本身并不是靈丹妙藥。它不能保證復(fù)雜的軍事嵌入式應(yīng)用程序中的高代碼質(zhì)量、安全性或安全性。靜態(tài)分析也不能
    的頭像 發(fā)表于 11-08 14:10 ?614次閱讀

    靜態(tài)分析工具

    Analyzer`:Clang Static Analyzer是一款靜態(tài)代碼掃描工具,專門用于針對(duì)C,C++和Objective-C的程序進(jìn)行分析。已經(jīng)被Xcode集成,可以直接使用Xcode進(jìn)行
    的頭像 發(fā)表于 03-02 17:53 ?2425次閱讀
    <b class='flag-5'>靜態(tài)</b><b class='flag-5'>分析</b>工具

    【技術(shù)分享】代碼可以靜態(tài)分析,PCB可以嗎?

    軟件代碼有bug,可以通過人工查找,也可以通過編譯發(fā)現(xiàn),同時(shí)也可以通過代碼靜態(tài)分析工具找到錯(cuò)誤或警告。人工查找代碼bug,顯然不合理,除非只
    的頭像 發(fā)表于 03-21 09:34 ?455次閱讀
    【技術(shù)分享】<b class='flag-5'>代碼</b>可以<b class='flag-5'>靜態(tài)</b><b class='flag-5'>分析</b>,PCB可以嗎?

    Harmony系統(tǒng)代碼靜態(tài)測(cè)試

    本文通過使用靜態(tài)分析工具QAC,來分析測(cè)試Harmony系統(tǒng)代碼對(duì)汽車行業(yè)內(nèi)常用編碼規(guī)范的遵循情況。
    的頭像 發(fā)表于 08-01 14:22 ?1066次閱讀
    Harmony系統(tǒng)<b class='flag-5'>代碼</b>的<b class='flag-5'>靜態(tài)</b>測(cè)試

    什么是完備靜態(tài)分析?

    在開發(fā)安全、可靠和合規(guī)的軟件時(shí),完備靜態(tài)分析是一種有益的實(shí)踐。本篇文章中,我們將討論完備分析靜態(tài)分析的不同之處,為什么它很重要,以及完備
    的頭像 發(fā)表于 11-11 10:16 ?613次閱讀
    什么是完備<b class='flag-5'>靜態(tài)</b><b class='flag-5'>分析</b>?

    什么是靜態(tài)代碼分析?靜態(tài)代碼分析概述

    靜態(tài)分析可幫助面臨壓力的開發(fā)團(tuán)隊(duì)。高質(zhì)量的版本需要按時(shí)交付。需要滿足編碼和合規(guī)性標(biāo)準(zhǔn)。錯(cuò)誤不是一種選擇。 這就是開發(fā)團(tuán)隊(duì)使用靜態(tài)分析工具/源代碼
    的頭像 發(fā)表于 07-19 12:09 ?1489次閱讀
    什么是<b class='flag-5'>靜態(tài)</b><b class='flag-5'>代碼</b><b class='flag-5'>分析</b>?<b class='flag-5'>靜態(tài)</b><b class='flag-5'>代碼</b><b class='flag-5'>分析</b>概述