TorchFix adalah alat analisis statis kode python - linter dengan kemampuan autofix - untuk pengguna pytorch. Ini dapat digunakan untuk menemukan dan memperbaiki masalah seperti penggunaan fungsi Pytorch yang sudah usang dan simbol non-publik, dan untuk mengadopsi praktik terbaik Pytorch secara umum.
Torchfix dibangun di atas https://github.com/instagram/libcst - perpustakaan untuk memanipulasi pohon sintaks beton python. LibCST memungkinkan "codemods" (autofixes) di samping masalah pelaporan.
Torchfix dapat digunakan sebagai plugin Flake8 (hanya linting) atau sebagai program mandiri (dengan AutoFix tersedia untuk subset dari pelanggaran serat).
Peringatan
Saat ini Torchfix berada dalam tahap versi beta , jadi masih ada banyak tepi kasar dan banyak hal yang dapat dan akan berubah.
Untuk menginstal kode terbaru dari GitHub, klon/unduh https://github.com/pytorch-labs/Torchfix dan jalankan pip install . di dalam direktori.
Untuk menginstal versi rilis dari PYPI, jalankan pip install torchfix .
Setelah instalasi, TorchFix akan tersedia sebagai plugin Flake8, sehingga menjalankan Flake8 biasanya akan menjalankan linter torchfix.
Untuk hanya melihat peringatan torchfix tanpa sisa serpihan 8, Anda dapat menjalankan flake8 --isolated --select=TOR0,TOR1,TOR2
Torchfix juga dapat dijalankan sebagai program mandiri: torchfix . Tambahkan --fix Parameter Untuk mencoba secara otomatis beberapa masalah (file akan ditimpa!) Untuk melihat beberapa info debug tambahan, tambahkan-parameter --show-stderr .
Peringatan
Harap diingat bahwa AutoFix adalah mekanisme upaya terbaik. Mengingat sifat dinamis Python, dan terutama status versi beta dari torchfix, sangat sulit untuk memiliki kepastian ketika membuat perubahan pada kode, bahkan untuk perbaikan yang tampaknya sepele.
Peringatan untuk masalah dengan kode yang dimulai dengan TOR0, TOR1, dan TOR2 diaktifkan secara default. Peringatan dengan kode lain mungkin terlalu berisik, jadi tidak diaktifkan secara default. Untuk mengaktifkannya, gunakan opsi konfigurasi flake8 standar untuk mode plugin atau gunakan torchfix --select=ALL . untuk mode mandiri.
Jika Anda menemukan bug atau masalah lain dengan TorchFix, silakan ajukan masalah di https://github.com/pytorch-labs/torchfix/issues.
Kode aturan baru ditugaskan secara bertahap di seluruh kategori berikut:
torch tujuan umum.pytorch/pytorch , pengguna lain tidak boleh menggunakannya.TOR0, TOR1 dan TOR2 diaktifkan secara default.
Fungsi ini sudah usang karena Pytorch versi 1.9 dan sekarang dihapus.
torch.solve sudah usang mendukung torch.linalg.solve . torch.linalg.solve memiliki argumennya terbalik dan tidak mengembalikan faktorisasi LU.
Untuk mendapatkan faktorisasi LU lihat torch.lu , yang dapat digunakan dengan torch.lu_solve atau torch.lu_unpack .
X = torch.solve(B, A).solution X = torch.linalg.solve(A, B)
Fungsi ini sudah usang karena Pytorch versi 1.9 dan sekarang dihapus.
torch.symeig sudah usang mendukung torch.linalg.eigh .
Perilaku default telah berubah dari menggunakan bagian segitiga atas matriks secara default menjadi menggunakan bagian segitiga bawah.
L , _ = torch . symeig ( A , upper = upper )harus diganti dengan
L = torch . linalg . eigvalsh ( A , UPLO = 'U' if upper else 'L' )Dan
L , V = torch . symeig ( A , eigenvectors = True )harus diganti dengan
L , V = torch . linalg . eigh ( A , UPLO = 'U' if upper else 'L' )require_grad . Apakah maksud Anda requires_grad ?Ini adalah kesalahan ejaan yang dapat menyebabkan masalah kinerja yang diam.
use_reentrant secara eksplisit ke checkpoint Nilai default dari parameter use_reentrant di torch.utils.checkpoint sedang diubah dari True menjadi False . Sementara itu, nilai perlu diteruskan secara eksplisit.
Lihat posting forum ini untuk detailnya.
Lihat TOR001 .
Fungsi ini sudah usang. Gunakan torch.nn.utils.parametrizations.weight_norm yang menggunakan API parametrization modern. weight_norm baru kompatibel dengan state_dict yang dihasilkan dari Old weight_norm .
Panduan Migrasi:
Besarnya ( weight_g ) dan arah ( weight_v ) sekarang dinyatakan sebagai parametrizations.weight.original0 dan parametrizations.weight.original1 masing -masing.
Untuk menghilangkan reparametrization normalisasi berat, gunakan torch.nn.utils.parametrize.remove_parametrizations .
Berat tidak lagi dihitung ulang sekali di modul ke depan; Sebaliknya, itu akan dihitung ulang pada setiap akses. Untuk mengembalikan perilaku lama, gunakan torch.nn.utils.parametrize.cached sebelum memohon modul yang dimaksud.
Fungsi ini sudah usang. Gunakan torch.nn.attention.sdpa_kernel Context Manager sebagai gantinya.
Panduan Migrasi: Setiap parameter input boolean (default ke true kecuali ditentukan) dari sdp_kernel sesuai dengan SDPBackened . Jika parameter input benar, backend yang sesuai harus ditambahkan ke daftar input sdpa_kernel .
Fungsi ini sudah usang mendukung torch.linalg.multi_dot .
Panduan Migrasi: multi_dot menerima daftar dua atau lebih tensor sedangkan chain_matmul menerima beberapa tensor sebagai argumen input. Untuk migrasi, konversi beberapa tensor dalam argumen chain_matmul menjadi daftar dua atau lebih tensor untuk multi_dot .
Contoh: Ganti torch.chain_matmul(a, b, c) dengan torch.linalg.multi_dot([a, b, c]) .
torch.cholesky() sudah usang mendukung torch.linalg.cholesky() .
Panduan Migrasi:
L = torch.cholesky(A) harus diganti dengan L = torch.linalg.cholesky(A) .L = torch.cholesky(A, upper=True) harus diganti dengan L = torch.linalg.cholesky(A).mH torch.qr() sudah usang mendukung torch.linalg.qr() .
Panduan Migrasi:
Q, R = torch.qr(A) harus diganti dengan Q, R = torch.linalg.qr(A) .some dari torch.qr diganti dengan mode parameter string di torch.linalg.qr . Perubahan penggunaan yang sesuai adalah dari Q, R = torch.qr(A, some=False) ke Q, R = torch.linalg.qr(A, mode="complete") . Fungsi torch.range() sudah usang karena penggunaannya tidak sesuai dengan rentang builtin Python. Sebaliknya, gunakan torch.arange() karena menghasilkan nilai di [start, end) .
Panduan Migrasi:
torch.range(start, end) menghasilkan nilai dalam kisaran [start, end] . Tapi torch.arange(start, end) menghasilkan nilai di [start, end) . Untuk ukuran langkah 1, migrasi penggunaan dari torch.range(start, end, 1) ke torch.arange(start, end+1, 1) .torch.load Tanpa weights_only Parameter tidak aman. Setel secara eksplisit weights_only ke false hanya jika Anda mempercayai data yang Anda muat dan fungsi acar penuh diperlukan, jika tidak atur weights_only=True .
Lihat TOR101 .
Torchfix dilisensikan lisensi BSD, seperti yang ditemukan dalam file lisensi.