我们推出了一个新的系列,对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 dataloadertorch.utils.data.dataloader(dataset,batch_size=10)- for efficiency in productiontorch.utils.data.dataloader(dataset,batch_size=10,num_workers=n)
关于数据加载器的另一个问题是,如果你没有为数据加载器提供numworkers参数,那么默认值为零。这意味着数据加载将在与计算相同的进程中进行。数据加载可能会阻塞计算。因此,出于效率原因,您希望在生产环境中提供numworkers参数,并将其设置为大于零的值。具体的数字可能取决于您拥有的cpu数量或其他因素。但这个问题不一定是一个错误。根据您的目标和代码的运行方式,默认值0可能是完全有效的。但是,我们仍然希望向用户标记此问题,以便用户可以检查和理解它是否对他们造成了实际问题。
torchvision introduced newmulti-weight support apireplacemodels.resnet101(pretrained=true)withmodels.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 pythoncodeuses 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 standaloneflake8-plugin: linting only- flake8 --select=tor0,tor1,tor2standalone: linting and autofixing- torchfix- torchfix . --fix- torchfix --select=all
另一种模式是独立运行,你可以将torchfix作为脚本运行,并提供相应的参数。这张幻灯片的最后一行显示,并不是所有规则都默认启用。这是因为有些规则太过繁杂,不能默认启用。若要查看所有规则和结果,你可以提供select等命令
get a release from pypipip install torchfixlatest code from github clonehttps://github.com/pytorch/test-infra/tree/main/tools/torchfixpip 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]
苹果的AR工具包_ARKit 1.5增强现实功能
用SPHRINT为新型药物输送系统打印3D微观结构
广东推行的人工智能产业集群,给人工智能企业带来了哪些启示?
晶闸管投切电力电容对比传统静态电容的优势在哪里?
5G牌照发放后该怎么搞?3个月100万用户,韩国发展带来的启示!
TorchFix:基于PyTorch的代码静态分析
软启动柜分高低压,它们之间有什么不同呢?
三星智能手机发展畸形 bada前途存疑
VK2C23取代兼容替代HT16C23 LQFP48/64 存储器映射和多功能 LCD控制/驱动IC 的引脚图/应用电路及中文资料
摩尔线程全功能GPU芯片“苏堤”和“春晓”已实现量产
“景东120m脉冲星射电望远镜(JRT)研制”启动仪式成功举行
特斯拉欲在夏威夷部署世界上最大的电池系统 将为夏威夷这个洲直接供电
逆变器开不了机的原因 逆变器不输出高压怎么修 逆变器输出电压不足220v
JVM进阶知识(一):初识 JAVA 栈
5G干扰问题与分析方法
中国钢丝绳标准
GaN氮化镓材料,主要适用于哪些领域
基于深度学习的新一代智能隐身器件
贴片电感中电流不可突变的原因是什么
REASUNOS瑞森半导体碳化硅二极管在大功率电源上的应用