Torchfix는 Pytorch 사용자를위한 Python Code 정적 분석 도구 (AutoFix 기능이있는 Linter)입니다. 더 이상 사용되지 않은 Pytorch 기능 및 비공개 기호 사용과 같은 문제를 찾고 수정하는 데 사용될 수 있으며 일반적으로 Pytorch 모범 사례를 채택하는 데 사용할 수 있습니다.
Torchfix는 https://github.com/instagram/libcst- 파이썬 콘크리트 구문 트리를 조작하는 라이브러리를 기반으로합니다. LIBCST는보고 문제 외에도 "CodeMods"(AutoFixes)를 활성화합니다.
Torchfix는 Flake8 플러그인 (Linting Only) 또는 독립형 프로그램 (보풀 위반의 하위 집합에 사용할 수 있음)으로 사용할 수 있습니다.
경고
현재 Torchfix는 베타 버전 단계에 있으므로 여전히 많은 거친 가장자리가 있으며 많은 것들이 변경 될 수 있습니다.
github에서 최신 코드를 설치하려면 복제/다운로드 https://github.com/pytorch-labs/torchfix 및 run pip install . 디렉토리 내부.
PYPI에서 릴리스 버전을 설치하려면 pip install torchfix 실행하십시오.
설치 후 Torchfix가 Flake8 플러그인으로 제공되므로 Flake8을 실행하면 일반적으로 Torchfix Linter가 실행됩니다.
나머지 Flake8 Linters가없는 Torchfix 경고 만 보려면 flake8 --isolated --select=TOR0,TOR1,TOR2 실행할 수 있습니다.
Torchfix는 독립형 프로그램 인 torchfix . --fix 매개 변수를 추가하여 일부 문제 (파일을 덮어 쓸 것입니다!)를 자동화하려면 추가 디버그 정보를 확인하려면 --show-stderr 매개 변수를 추가하십시오.
주의
AutoFix는 최고의 효과적인 메커니즘임을 명심하십시오. 파이썬의 역동적 인 특성, 특히 Torchfix의 베타 버전 상태를 고려할 때, 겉보기에 사소한 수정을 위해 코드를 변경할 때 확실성을 갖는 것은 매우 어렵습니다.
Tor0, Tor1 및 Tor2로 시작하는 코드 문제에 대한 경고는 기본적으로 활성화됩니다. 다른 코드에 대한 경고는 너무 시끄러울 수 있으므로 기본적으로 활성화되지 않습니다. 이를 활성화하려면 플러그인 모드에 표준 Flake8 구성 옵션을 사용하거나 torchfix --select=ALL . 독립형 모드의 경우.
Torchfix에 버그 나 다른 문제가 발생하면 https://github.com/pytorch-labs/torchfix/issues에 문제를 제기하십시오.
새로운 규칙 코드는 다음 범주에 따라 점차 할당됩니다.
torch 기능.pytorch/pytorch Repo의 내부 규칙에 따라 다른 사용자는이를 사용해서는 안됩니다.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 참조하십시오.
이 기능은 더 이상 사용되지 않습니다. torch.nn.utils.parametrizations.weight_norm 사용하여 최신 매개 변수화 API를 사용하십시오. 새로운 weight_norm Old weight_norm 에서 생성 된 state_dict 와 호환됩니다.
마이그레이션 가이드 :
크기 ( weight_g ) 및 방향 ( weight_v )은 이제 각각 parametrizations.weight.original0 parametrizations.weight.original1 표현됩니다.
중량 정규화 리파 라트레이션을 제거하려면 torch.nn.utils.parametrize.remove_parametrizations 를 사용하십시오.
무게는 더 이상 모듈 전방에서 한 번 다시 계산되지 않습니다. 대신 모든 액세스에 다시 계산됩니다. 오래된 동작을 복원하려면 torch.nn.utils.parametrize.cached 사용하여 해당 모듈을 호출하기 전에 Cached를 사용하십시오.
이 기능은 더 이상 사용되지 않습니다. torch.nn.attention.sdpa_kernel 컨텍스트 관리자를 대신 사용하십시오.
마이그레이션 안내서 : sdp_kernel 의 각 부울 입력 매개 변수 (지정되지 않은 경우)는 SDPBackened 에 해당합니다. 입력 매개 변수가 true 인 경우 해당 백엔드가 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) 로 대체되어야합니다.some torch.qr 의 일부는 torch.linalg.qr 의 문자열 매개 변수 mode 로 대체됩니다. 사용량의 해당 변경은 Q, R = torch.qr(A, some=False) 에서 Q, R = torch.linalg.qr(A, mode="complete") 입니다. 기능 torch.range() 는 사용이 Python의 내장 범위와 호환되지 않으므로 더 이상 사용되지 않습니다. 대신 [start, end) 에서 값을 생성하므로 torch.arange() 사용하십시오.
마이그레이션 가이드 :
torch.range(start, end) [start, end] 범위에서 값을 생성합니다. 그러나 torch.arange(start, end) [start, end) 에서 값을 생성합니다. 스텝 크기 1의 경우 torch.range(start, end, 1) 에서 torch.arange(start, end+1, 1) 로 사용량을 마이그레이션하십시오.weights_only 매개 변수가없는 Tor102 torch.load 안전하지 않습니다. 로드하고 전체 피클 기능이 필요한 경우에만 weights_only 거짓으로 명시 적으로 설정하십시오. 그렇지 않으면 weights_only=True 설정하십시오.
TOR101 참조하십시오.
Torchfix는 라이센스 파일에있는대로 BSD 라이센스 라이센스입니다.