O Torchfix é uma ferramenta de análise estática do código Python - um linhador com recursos do AutoFix - para usuários do Pytorch. Ele pode ser usado para encontrar e corrigir problemas como o uso de funções de pytorch depreciadas e símbolos não públicos e para adotar as melhores práticas de Pytorch em geral.
O Torchfix é construído em https://github.com/instagram/libcst - uma biblioteca para manipular árvores de sintaxe de concreto python. O LIBCST permite "CodEmods" (Autofixes), além de relatar problemas.
O Torchfix pode ser usado como um plug -in Flake8 (somente de linha) ou como um programa independente (com Autofix disponível para um subconjunto das violações de fiapos).
Aviso
Atualmente, a Torchfix está em um estágio de versão beta , então ainda existem muitas arestas e muitas coisas podem e mudarão.
Para instalar o código mais recente no github, clone/download https://github.com/pytorch-labs/torchfix e execute pip install . dentro do diretório.
Para instalar uma versão de liberação do Pypi, execute pip install torchfix .
Após a instalação, o Torchfix estará disponível como um plug -in Flake8; portanto, a execução do Flake8 normalmente executará o Torchfix Linter.
Para ver apenas avisos de Torchfix sem o restante dos linheiros Flake8, você pode executar flake8 --isolated --select=TOR0,TOR1,TOR2
Torchfix também pode ser executado como um programa independente: torchfix . Adicionar --fix Parâmetro para tentar autofixar alguns dos problemas (os arquivos serão substituídos!) Para ver algumas informações de depuração adicionais, adicione --show-stderr Parâmetro.
Cuidado
Lembre-se de que o Autofix é um mecanismo de melhor efeito. Dada a natureza dinâmica do Python, e especialmente o status da versão beta do Torchfix, é muito difícil ter certeza ao fazer alterações para codificar, mesmo para as correções aparentemente triviais.
Os avisos para questões com códigos que começam com TOR0, TOR1 e TOR2 são ativados por padrão. Os avisos com outros códigos podem ser muito barulhentos, portanto, não ativado por padrão. Para habilitá -los, use opções de configuração padrão do Flake8 para o modo de plug -in ou use torchfix --select=ALL . Para o modo independente.
Se você encontrar um bug ou algum outro problema com a Torchfix, arquive um problema em https://github.com/pytorch-labs/torchfix/issues.
Novos códigos de regra são atribuídos incrementalmente nas seguintes categorias:
torch uso geral.pytorch/pytorch , outros usuários não devem usá -los.TOR0, TOR1 e TOR2 são ativados por padrão.
Esta função foi descontinuada desde o Pytorch versão 1.9 e agora foi removida.
torch.solve é obsoleto em favor de torch.linalg.solve . torch.linalg.solve tem seus argumentos revertidos e não retornam a fatoração da LU.
Para obter a faturização da LU, consulte torch.lu , que pode ser usado com torch.lu_solve ou torch.lu_unpack .
X = torch.solve(B, A).solution deve ser substituída por X = torch.linalg.solve(A, B) .
Esta função foi descontinuada desde o Pytorch versão 1.9 e agora foi removida.
torch.symeig é descontinuado em favor de torch.linalg.eigh .
O comportamento padrão mudou do uso da porção triangular superior da matriz por padrão para usar a porção triangular inferior.
L , _ = torch . symeig ( A , upper = upper )deve ser substituído por
L = torch . linalg . eigvalsh ( A , UPLO = 'U' if upper else 'L' )e
L , V = torch . symeig ( A , eigenvectors = True )deve ser substituído por
L , V = torch . linalg . eigh ( A , UPLO = 'U' if upper else 'L' )require_grad na atribuição. Você quis dizer requires_grad ?Este é um erro de ortografia comum que pode levar a problemas silenciosos de desempenho.
use_reentrant explicitamente para checkpoint O valor padrão do parâmetro use_reentrant em torch.utils.checkpoint está sendo alterado de True para False . Enquanto isso, o valor precisa ser aprovado explicitamente.
Veja este post do fórum para obter detalhes.
Veja TOR001 .
Esta função está preterida. Use torch.nn.utils.parametrizations.weight_norm que usa a API de parametrização moderna. O novo weight_norm é compatível com state_dict gerado a partir do antigo weight_norm .
Guia de migração:
A magnitude ( weight_g ) e a direção ( weight_v ) agora são expressas como parametrizations.weight.original0 e parametrizations.weight.original1 , respectivamente.
Para remover a reparetrização de normalização do peso, use torch.nn.utils.parametrize.remove_parametrizations .
O peso não é mais recomputado uma vez no módulo para a frente; Em vez disso, será recalculado em todo acesso. Para restaurar o comportamento antigo, use torch.nn.utils.parametrize.cached antes de invocar o módulo em questão.
Esta função está preterida. Use o gerenciador de contexto torch.nn.attention.sdpa_kernel .
Guia de migração: cada parâmetro de entrada booleano (inadimplente para true, a menos que especificado) de sdp_kernel , corresponde a um SDPBackened . Se o parâmetro de entrada for verdadeiro, o back -end correspondente deverá ser adicionado à lista de entrada do sdpa_kernel .
Esta função é descontinuada em favor de torch.linalg.multi_dot .
Guia de migração: multi_dot aceita uma lista de dois ou mais tensores, enquanto chain_matmul aceitou vários tensores como argumentos de entrada. Para migração, converta os múltiplos tensores no argumento de chain_matmul em uma lista de dois ou mais tensores para multi_dot .
Exemplo: Substitua torch.chain_matmul(a, b, c) por torch.linalg.multi_dot([a, b, c]) .
torch.cholesky() é descontinuado em favor de torch.linalg.cholesky() .
Guia de migração:
L = torch.cholesky(A) deve ser substituído por L = torch.linalg.cholesky(A) .L = torch.cholesky(A, upper=True) deve ser substituído por L = torch.linalg.cholesky(A).mH torch.qr() é descontinuado em favor de torch.linalg.qr() .
Guia de migração:
Q, R = torch.qr(A) deve ser substituído por Q, R = torch.linalg.qr(A) .some da torch.qr é substituída por um mode de parâmetro de sequência em torch.linalg.qr . A alteração correspondente no uso é de Q, R = torch.qr(A, some=False) para Q, R = torch.linalg.qr(A, mode="complete") . A função torch.range() é descontinuada, pois seu uso é incompatível com o alcance construído do Python. Em vez disso, use torch.arange() , pois produz valores em [start, end) .
Guia de migração:
torch.range(start, end) produz valores na faixa de [start, end] . Mas torch.arange(start, end) produz valores em [start, end) . Para o tamanho da etapa de 1, migre o uso da torch.range(start, end, 1) para torch.arange(start, end+1, 1) .torch.load sem weights_only O parâmetro é inseguro. Defina explicitamente weights_only como false somente se você confiar nos dados que carrega e a funcionalidade completa de picles for necessária, caso contrário, defina weights_only=True .
Veja TOR101 .
A Torchfix é licenciada por licença BSD, conforme encontrado no arquivo de licença.