Torchfix ist für Benutzer von Pytorch ein Tool für statische Analyse von Python -Code - ein Linter mit Autofix -Funktionen. Es kann verwendet werden, um Probleme wie die Verwendung von veralteten Pytorch-Funktionen und nicht öffentlichen Symbolen zu finden und zu beheben und die besten Pytorch-Best Practices im Allgemeinen zu übernehmen.
Torchfix basiert auf https://github.com/instagram/libcst - einer Bibliothek zur Manipulation von Python -Betonsyntaxbäumen. LIBCST ermöglicht "Codemods" (Autofixe) zusätzlich zu den Meldungen.
Torchfix kann als Flake8 -Plugin (nur Linie) oder als eigenständiges Programm (mit Autofix für eine Teilmenge der FINT -Verstöße verfügbar) verwendet werden.
Warnung
Derzeit befindet sich Torchfix in einer Beta -Versionsphase , sodass es immer noch viele grobe Kanten gibt und viele Dinge können und werden sich ändern.
So installieren Sie den neuesten Code von GitHub, klone/laden Sie https://github.com/pytorch-labs-abs-abs-bs-/torchfix herunter und führen Sie pip install . im Verzeichnis.
Um eine Release -Version von PYPI zu installieren, führen Sie pip install torchfix aus.
Nach der Installation ist Torchfix als Flake8 -Plugin erhältlich, sodass das Ausführen von Flake8 normalerweise den Torchfix -Strubter ausführt.
Um nur Torchfix -Warnungen ohne den Rest der Flake8 -Linter zu sehen, können Sie flake8 --isolated --select=TOR0,TOR1,TOR2
Torchfix kann auch als eigenständiges Programm ausgeführt werden: torchfix . Fügen Sie einen Parameter hinzu --fix Sie den Parameter, um zu versuchen, einige der Probleme (die Dateien werden überschrieben!) AutoFix zu automatisieren, um einige zusätzliche Debug-Informationen --show-stderr .
Vorsicht
Bitte beachten Sie, dass Autofix ein Mechanismus für den besten Effort ist. Angesichts der dynamischen Natur von Python und insbesondere des Beta -Versionsstatus von Torchfix ist es sehr schwierig, bei Änderungen des Code Änderungen zu haben, selbst für die scheinbar trivialen Korrekturen.
Warnungen für Probleme mit Codes, die mit Tor0, Tor1 und Tor2 beginnen, sind standardmäßig aktiviert. Warnungen mit anderen Codes können zu laut sein, daher standardmäßig nicht aktiviert. Verwenden Sie für den Plugin -Modus Standard -Flake8 -Konfigurationsoptionen oder verwenden Sie torchfix --select=ALL . Für den eigenständigen Modus.
Wenn Sie auf einen Fehler oder ein anderes Problem mit Torchfix stoßen, stellen Sie bitte ein Problem unter https://github.com/pytorch-lab-biS/torchfix/issues ein.
Neue Regelcodes werden in den folgenden Kategorien schrittweise zugewiesen:
torch .pytorch/pytorch Repo spezifisch, andere Benutzer sollten diese nicht verwenden.Tor0, Tor1 und Tor2 sind standardmäßig aktiviert.
Diese Funktion wurde seit Pytorch Version 1.9 veraltet und ist jetzt entfernt.
torch.solve ist zugunsten von torch.linalg.solve veraltet. torch.linalg.solve hat seine Argumente umgekehrt und gibt die LU -Faktorisierung nicht zurück.
Um die Lu -Faktorisierung zu erhalten, siehe torch.lu , der mit torch.lu_solve oder torch.lu_unpack verwendet werden kann.
X = torch.solve(B, A).solution X = torch.linalg.solve(A, B) .
Diese Funktion wurde seit Pytorch Version 1.9 veraltet und ist jetzt entfernt.
torch.symeig ist zugunsten von torch.linalg.eigh veraltet.
Das Standardverhalten hat sich von der Verwendung des oberen dreieckigen Teils der Matrix standardmäßig zur Verwendung des unteren dreieckigen Teils geändert.
L , _ = torch . symeig ( A , upper = upper )sollte durch ersetzt werden durch
L = torch . linalg . eigvalsh ( A , UPLO = 'U' if upper else 'L' )Und
L , V = torch . symeig ( A , eigenvectors = True )sollte durch ersetzt werden durch
L , V = torch . linalg . eigh ( A , UPLO = 'U' if upper else 'L' )require_grad In der Zuordnung. Meinten Sie requires_grad ?Dies ist eine häufige Rechtschreibfehler, die zu stillen Leistungsproblemen führen kann.
checkpoint use_reentrant Der Standardwert des Parameters use_reentrant in torch.utils.checkpoint wird von True zu False geändert. In der Zwischenzeit muss der Wert explizit übergeben werden.
Weitere Informationen finden Sie in diesem Forum -Beitrag.
Siehe TOR001 .
Diese Funktion ist veraltet. Verwenden Sie torch.nn.utils.parametrizations.weight_norm , der die moderne Parametrisiko -API verwendet. Das neue weight_norm ist mit state_dict kompatibel, das aus Old weight_norm erzeugt wird.
Migrationsleitfaden:
parametrizations.weight.original1 Größe ( weight_g ) und die Richtung ( weight_v ) werden nun als parametrizations.weight.original0 ausgedrückt.
Verwenden Sie die Gewichtsnormalisierung der Reparametrisierung, verwenden Sie torch.nn.utils.parametrize.remove_parametrizations .
Das Gewicht wird beim Modul vorwärts nicht mehr neu berechnet. Stattdessen wird es bei jedem Zugang neu berechnet. Verwenden Sie, um das alte Verhalten wiederherzustellen, und verwenden Sie torch.nn.utils.parametrize.cached bevor Sie das fragliche Modul aufrufen.
Diese Funktion ist veraltet. Verwenden Sie stattdessen den Context Manager torch.nn.attention.sdpa_kernel .
Migrationshandbuch: Jeder boolesche Eingabeparameter (defauf zu true, sofern nicht angegeben) von sdp_kernel entspricht einem SDPBackened . Wenn der Eingabeparameter wahr ist, sollte das entsprechende Backend zur Eingabeliste von sdpa_kernel hinzugefügt werden.
Diese Funktion wird zugunsten von torch.linalg.multi_dot veraltet.
Migrationshandbuch: multi_dot akzeptiert eine Liste von zwei oder mehr Tensoren, während chain_matmul mehrere Tensoren als Eingabemittel akzeptiert hat. Um die Migration zu migrieren, konvertieren Sie die mehreren Tensoren in Argument von chain_matmul in eine Liste von zwei oder mehr Tensoren für multi_dot .
Beispiel: Ersetzen Sie torch.chain_matmul(a, b, c) torch.linalg.multi_dot([a, b, c])
torch.cholesky() ist zugunsten von torch.linalg.cholesky() veraltet.
Migrationsleitfaden:
L = torch.cholesky(A) sollte durch L = torch.linalg.cholesky(A) ersetzt werden.L = torch.cholesky(A, upper=True) sollte durch L = torch.linalg.cholesky(A).mH ersetzt werden torch.qr() wird zugunsten von torch.linalg.qr() veraltet.
Migrationsleitfaden:
Q, R = torch.qr(A) sollte durch Q, R = torch.linalg.qr(A) ersetzt werden.some von torch.qr wird durch einen String mode in torch.linalg.qr ersetzt. Die entsprechende Änderung der Nutzung erfolgt von Q, R = torch.qr(A, some=False) zu Q, R = torch.linalg.qr(A, mode="complete") . Die torch.range() Verwenden Sie stattdessen torch.arange() wie es Werte in [start, end) erzeugt.
Migrationsleitfaden:
torch.range(start, end) erzeugt Werte im Bereich von [start, end] . Aber torch.arange(start, end) erzeugt Werte in [start, end) . Für die Schrittgröße von 1 migrieren Sie die Verwendung von torch.range(start, end, 1) bis torch.arange(start, end+1, 1) .torch.load Ohne weights_only ist unsicher. Setzen Sie explizit weights_only auf False, wenn Sie den von Ihnen geladenen Daten vertrauen und die vollständige Gurkenfunktionen benötigt werden. Andernfalls setzen Sie weights_only=True .
Siehe TOR101 .
Torchfix ist BSD -Lizenz lizenziert, wie in der Lizenzdatei zu finden.