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许可证。