0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

TorchFix:基于PyTorch的代码静态分析

jf_pmFSk4VX 来源:GiantPandaCV 2023-12-18 15:20 次阅读

我们推出了一个新的系列,对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

    文章

    3868

    浏览量

    61308
  • 代码
    +关注

    关注

    30

    文章

    4555

    浏览量

    66766
  • pytorch
    +关注

    关注

    2

    文章

    761

    浏览量

    12831

原文标题:《PytorchConference2023 翻译系列》3- TorchFix

文章出处:【微信号:GiantPandaCV,微信公众号:GiantPandaCV】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    Pytorch代码移植嵌入式开发笔记,错过绝对后悔

    @[TOC]Pytorch 代码移植嵌入式开发笔记目前在做开发完成后的AI模型移植到前端的工作。 由于硬件设施简陋,需要把代码和算法翻译成基础加乘算法并输出每个环节参数。记录几点实用技巧以及项目
    发表于 11-08 08:24

    基于数据融合的源代码静态分析

    采用数据融合技术对源代码进行静态分析,实现可扩展的原型系统。对现有静态分析工具的分析结果进行解析
    发表于 04-13 08:57 9次下载

    静态代码分析

    Fortify的静态代码分析器(Static Code Analyzer,SCA)是组成Fortify 360的三个分析器之一。SCA工作在开发阶段,以用于
    发表于 04-07 20:32 22次下载

    IAR静态代码分析工具

    前言IAR集成了C-STAT静态分析工具,主要通过对源代码等级进行分析来发现代码中的潜在问题,除了提高
    发表于 12-03 10:36 2次下载
    IAR<b class='flag-5'>静态</b><b class='flag-5'>代码</b><b class='flag-5'>分析</b>工具

    利用医疗设备软件的静态代码分析

      如果使用得当,静态分析已被证明在提高安全关键代码的软件质量方面非常有效。尽管不严格要求批准,但 FDA 承认其有效性。
    的头像 发表于 06-19 10:07 863次阅读
    利用医疗设备软件的<b class='flag-5'>静态</b><b class='flag-5'>代码</b><b class='flag-5'>分析</b>

    利用医疗设备软件的静态代码分析

      静态分析将提供各种类型的错误,从必须解决的关键问题到警告。一些组织希望投机取巧,只为可证明的错误更改代码。其他人则主动清理代码并提高质量,甚至“修复”警告。团队应该在处理
    发表于 07-09 07:13 495次阅读
    利用医疗设备软件的<b class='flag-5'>静态</b><b class='flag-5'>代码</b><b class='flag-5'>分析</b>

    静态分析:对代码质量至关重要

      让我们从显而易见的事情开始:静态分析本身并不是灵丹妙药。它不能保证复杂的军事嵌入式应用程序中的高代码质量、安全性或安全性。静态分析也不能
    的头像 发表于 11-01 09:30 407次阅读

    什么是静态分析?如何管理早期静态分析报告

    简单来说,静态分析是在不执行代码的情况下检查源代码和二进制代码的过程,通常用于查找bug的前期准备或评估
    的头像 发表于 11-01 11:35 3024次阅读

    静态分析:对代码质量至关重要

      让我们从显而易见的事情开始:静态分析本身并不是灵丹妙药。它不能保证复杂的军事嵌入式应用程序中的高代码质量、安全性或安全性。静态分析也不能
    的头像 发表于 11-08 14:10 502次阅读

    静态分析工具

    Analyzer`:Clang Static Analyzer是一款静态代码扫描工具,专门用于针对C,C++和Objective-C的程序进行分析。已经被Xcode集成,可以直接使用Xcode进行
    的头像 发表于 03-02 17:53 2061次阅读
    <b class='flag-5'>静态</b><b class='flag-5'>分析</b>工具

    【技术分享】代码可以静态分析,PCB可以吗?

    软件代码有bug,可以通过人工查找,也可以通过编译发现,同时也可以通过代码静态分析工具找到错误或警告。人工查找代码bug,显然不合理,除非只
    的头像 发表于 03-21 09:34 269次阅读
    【技术分享】<b class='flag-5'>代码</b>可以<b class='flag-5'>静态</b><b class='flag-5'>分析</b>,PCB可以吗?

    Harmony系统代码静态测试

    本文通过使用静态分析工具QAC,来分析测试Harmony系统代码对汽车行业内常用编码规范的遵循情况。
    的头像 发表于 08-01 14:22 760次阅读
    Harmony系统<b class='flag-5'>代码</b>的<b class='flag-5'>静态</b>测试

    什么是完备静态分析

    在开发安全、可靠和合规的软件时,完备静态分析是一种有益的实践。本篇文章中,我们将讨论完备分析静态分析的不同之处,为什么它很重要,以及完备
    的头像 发表于 11-11 10:16 412次阅读
    什么是完备<b class='flag-5'>静态</b><b class='flag-5'>分析</b>?

    什么是静态代码分析静态代码分析概述

    静态分析可帮助面临压力的开发团队。高质量的版本需要按时交付。需要满足编码和合规性标准。错误不是一种选择。 这就是开发团队使用静态分析工具/源代码
    的头像 发表于 07-19 12:09 923次阅读
    什么是<b class='flag-5'>静态</b><b class='flag-5'>代码</b><b class='flag-5'>分析</b>?<b class='flag-5'>静态</b><b class='flag-5'>代码</b><b class='flag-5'>分析</b>概述

    静态代码块、构造代码块、构造函数及普通代码块的执行顺序

    在Java中,静态代码块、构造代码块、构造函数、普通代码块的执行顺序是一个笔试的考点,通过这篇文章希望大家能彻底了解它们之间的执行顺序。 1、静态
    的头像 发表于 10-09 15:40 432次阅读
    <b class='flag-5'>静态</b><b class='flag-5'>代码</b>块、构造<b class='flag-5'>代码</b>块、构造函数及普通<b class='flag-5'>代码</b>块的执行顺序