TorchFixは、Pytorchのユーザー向けのPythonコード静的分析ツール(Autofix機能を備えたリナー)です。非難されたPytorch関数や非公開シンボルの使用などの問題を見つけて修正し、Pytorchのベストプラクティス全般を採用するために使用できます。
Torchfixはhttps://github.com/instagram/libcstに構築されています-Pythonコンクリート構文の木を操作するライブラリ。 LIBCSTは、問題の報告に加えて「CodeMods」(自動フィックス)を有効にします。
TorchFixは、Flake8プラグイン(糸くずのみ)またはスタンドアロンプログラム(Lint違反のサブセットでAutofixを使用できます)として使用できます。
警告
現在、Torchfixはベータ版の段階にあるため、まだ多くの荒いエッジがあり、多くのものが変更され、変更されます。
githubから最新のコードをインストールするには、https://github.com/pytorch-labs/torchfixをクローン/ダウンロードし、 pip install .ディレクトリ内。
PYPIからリリースバージョンをインストールするには、 pip install torchfix実行します。
インストール後、TorchfixはFlake8プラグインとして利用可能になるため、通常、Flake8を実行するとTorchfixリナーが実行されます。
残りのFlake8リナーのないTorchfixの警告のみを確認するには、 flake8 --isolated --select=TOR0,TOR1,TOR2実行できます。
Torchfixは、スタンドアロンプログラム: torchfix . --fix --show-stderrを追加して、いくつかの問題(ファイルが上書きされます!)の一部をAutofixを試みます。
注意
Autofixは最良のメカニズムであることに注意してください。 Pythonの動的な性質、特にTorchfixのベータ版ステータスを考えると、一見些細な修正であっても、コードを変更する際に確実になることは非常に困難です。
Tor0、Tor1、およびTor2から始まるコードの問題の警告は、デフォルトで有効になります。他のコードでの警告は騒がしい場合があるため、デフォルトでは有効になっていません。それらを有効にするには、プラグインモードに標準のFlake8構成オプションを使用するか、 torchfix --select=ALL .スタンドアロンモード用。
トーチフィックスのバグやその他の問題に遭遇した場合は、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_solveまたはtorch.lu_unpackで使用できるtorch.lu参照してください。
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 、古い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を使用してください。
この関数は非推奨です。代わりに、 torch.nn.attention.sdpa_kernelコンテキストマネージャーを使用します。
移行ガイド: sdp_kernelの各ブール入力パラメーター(指定されていない限りデフォルトは、デフォルトになります)はSDPBackenedに対応しています。入力パラメーターがtrueの場合、対応するバックエンドをsdpa_kernelの入力リストに追加する必要があります。
この関数は、 torch.linalg.multi_dotを支持して非推奨されています。
移行ガイド: multi_dot 2つ以上のテンソルのリストを受け入れますが、 chain_matmul複数のテンソルを入力引数として受け入れました。移行については、 chain_matmulの引数の複数のテンソルをmulti_dotの2つ以上のテンソルのリストに変換します。
例: 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の組み込み範囲と互換性がないため、非推奨です。代わりに、 [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)に使用します。torch.load withe weights_onlyパラメーターは安全ではありません。ロードされたデータとフルピクルス機能が必要なデータを信頼する場合にのみ、 weights_only=True weights_only falseに明示的に設定します。
TOR101を参照してください。
Torchfixは、ライセンスファイルにあるように、BSDライセンスライセンスです。