cari
Rumahpembangunan bahagian belakangTutorial PythonMenyahpepijat isu kebocoran memori Pytorch menggunakan penghias konteks

Menyahpepijat isu kebocoran memori Pytorch menggunakan penghias konteks

Apr 10, 2023 am 11:31 AM
pythonPenghiaskebocoran ingatan

Penghias ialah pelaksanaan khusus pengurus konteks python. Artikel ini akan menggambarkan cara menggunakannya melalui contoh penyahpepijatan GPU pytorch. Walaupun ia mungkin tidak berfungsi dalam setiap keadaan, saya dapati ia sangat berguna.

Menyahpepijat isu kebocoran memori Pytorch menggunakan penghias konteks

Menyahpepijat Isu Kebocoran Memori

Terdapat banyak cara untuk nyahpepijat kebocoran memori. Artikel ini akan menunjukkan kaedah yang berguna untuk mengenal pasti baris bermasalah dalam kod anda. Kaedah ini boleh membantu mencari lokasi tertentu dengan cara yang ringkas.

Penyahpepijat manual baris demi baris

Jika anda menghadapi masalah, kaedah klasik dan biasa digunakan ialah menggunakan penyahpepijat untuk menyemak baris demi baris, seperti contoh berikut:

  • Cari coretan kod tentang cara mengira jumlah bilangan semua tensor dalam pytorch dalam enjin carian, seperti: tensor-counter-snippet
  • Tetapkan titik putus dalam kod
  • Gunakan tensor-counter -snippet untuk mendapatkan jumlah kiraan tensor
  • Gunakan penyahpepijat untuk melakukan langkah seterusnya
  • Jalankan semula tensor-counter-snippet dan semak sama ada kiraan tensor meningkat
  • Ulangi Langkah di atas

Ia berfungsi, tetapi ia kelihatan seperti banyak masalah. Kita boleh merangkumnya ke dalam fungsi, yang boleh dipanggil apabila diperlukan, jadi hampir tidak perlu mengubah suai kod sedia ada, yang membawa kita untuk memperkenalkan fungsi penghias.

Python Decorators

Dekorator boleh dibungkus dalam mana-mana bahagian kod. Di sini kita menggunakan alat penghias untuk memeriksa sama ada terdapat tensor tambahan Selain itu, kita juga memerlukan pembilang kerana bilangan tensor perlu dikira sebelum dan selepas pelaksanaan. Coraknya kelihatan seperti ini:

def memleak_wrapper(func):
def wrap(*args, **kwargs):
print("num tensors start is ...")
out = func(*args, **kwargs)
print("num tensors end is ...")
return out
return wrap@memleak_wrapper
 def function_to_debug(x):
print(f"put line(s) of code here. Input is {x}")
out = x + 10
return outout = function_to_debug(x=1000)
 print(f"out is {out}")
 
 #输入类似这样
 #num tensors start is ...
 #put line(s) of code here. Input is 1000
 #num tensors end is ...
 #outis 1010

Untuk menjalankan kod ini, kita perlu meletakkan baris kod yang ingin kita semak ke dalam fungsi (function_to_debug). Tetapi ini bukanlah yang terbaik kerana kita masih perlu memasukkan banyak kod secara manual. Perkara lain ialah jika blok kod menjana lebih daripada satu pembolehubah, anda perlu mencari penyelesaian tambahan untuk menggunakan pembolehubah hiliran ini.

Penghias konteks

Untuk menyelesaikan masalah di atas, kita boleh menggunakan pengurus konteks dan bukannya penghias fungsi. Contoh pengurus konteks yang paling banyak digunakan ialah membuat konteks menggunakan pernyataan dengan. Yang paling biasa digunakan ialah:

with open("file") as f:
…

Menggunakan perpustakaan contextlib Python, pengguna Python boleh membuat pengurus konteks mereka sendiri dengan mudah. Jadi dalam artikel ini kami akan menggunakan ContextDecorator untuk menyelesaikan kerja yang kami cuba gunakan penghias di atas. Kerana ia lebih mudah untuk dibangunkan dan lebih mudah digunakan:

 from contextlib import ContextDecorator
 
 class check_memory_leak_context(ContextDecorator):
def __enter__(self):
print('Starting')
return self
 
def __exit__(self, *exc):
print('Finishing')
return False

ContextDecorator mempunyai 2 kaedah: enter() dan exit() , yang dipanggil apabila kita masuk atau keluar dari konteks. Parameter *exc dalam __exit__ mewakili sebarang pengecualian masuk.

Sekarang mari gunakannya untuk menyelesaikan masalah yang dinyatakan di atas.

Gunakan ContextDecorator untuk mencari kebocoran memori

Oleh kerana kita perlu mengira jumlah bilangan tensor, kita merangkum proses pengiraan ke dalam fungsi get_n_tensors(), supaya tensor boleh dikira pada permulaan dan akhir konteks Kuantiti amaun:

class check_memory_leak_context(ContextDecorator):
def __enter__(self):
self.start = get_n_tensors()
return self def __exit__(self, *exc):
self.end = get_n_tensors()
increase = self.end — self.start
 
if increase > 0:
print(f”num tensors increased with"
f"{self.end — self.start} !”)
else:
print(”no added tensors”)
return False

Jika terdapat peningkatan, cetak ke konsol.

get_n_tensor() menggunakan pemungut sampah (gc) dan disesuaikan untuk pytorch, tetapi boleh diubah suai dengan mudah untuk perpustakaan lain:

 import gc
 def get_n_tensors():
tensors= []
for obj in gc.get_objects():
try:
if (torch.is_tensor(obj) or
(hasattr(obj, ‘data’) and
torch.is_tensor(obj.data))):
tensors.append(obj)
except:
pass
return len(tensors)

Ia sedia untuk digunakan sekarang, kami Gunakan ini konteks untuk mana-mana baris (atau blok) kod:

 x = arbitrary_operation(x)
 ...
 with check_memory_leak_context():
y = x[0].permute(1, 2, 0).cpu().detach().numpy()
x = some_harmless_operation()
 ...
 x = another_arbitrary_operation(x)

Jika tensor baharu dicipta dalam baris yang dibalut oleh penghias konteks, ia akan dicetak.

Ringkasan

Ini adalah coretan kod yang sangat bagus yang boleh anda letakkan dalam fail berasingan semasa pembangunan Berikut ialah kod lengkap untuk artikel ini:

https://. gist.github.com/MarkTension/4783697ebd5212ba500cdd829b364338

Akhir sekali, saya harap artikel kecil ini dapat membantu anda memahami maksud pengurus konteks, cara menggunakan penghias konteks dan cara menggunakannya untuk menyahpepijat pytorch .

Atas ialah kandungan terperinci Menyahpepijat isu kebocoran memori Pytorch menggunakan penghias konteks. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan
Artikel ini dikembalikan pada:51CTO.COM. Jika ada pelanggaran, sila hubungi admin@php.cn Padam
Python vs C: Memahami perbezaan utamaPython vs C: Memahami perbezaan utamaApr 21, 2025 am 12:18 AM

Python dan C masing -masing mempunyai kelebihan sendiri, dan pilihannya harus berdasarkan keperluan projek. 1) Python sesuai untuk pembangunan pesat dan pemprosesan data kerana sintaks ringkas dan menaip dinamik. 2) C sesuai untuk prestasi tinggi dan pengaturcaraan sistem kerana menaip statik dan pengurusan memori manual.

Python vs C: Bahasa mana yang harus dipilih untuk projek anda?Python vs C: Bahasa mana yang harus dipilih untuk projek anda?Apr 21, 2025 am 12:17 AM

Memilih Python atau C bergantung kepada keperluan projek: 1) Jika anda memerlukan pembangunan pesat, pemprosesan data dan reka bentuk prototaip, pilih Python; 2) Jika anda memerlukan prestasi tinggi, latensi rendah dan kawalan perkakasan yang rapat, pilih C.

Mencapai matlamat python anda: kekuatan 2 jam sehariMencapai matlamat python anda: kekuatan 2 jam sehariApr 20, 2025 am 12:21 AM

Dengan melabur 2 jam pembelajaran python setiap hari, anda dapat meningkatkan kemahiran pengaturcaraan anda dengan berkesan. 1. Ketahui Pengetahuan Baru: Baca dokumen atau tutorial menonton. 2. Amalan: Tulis kod dan latihan lengkap. 3. Kajian: Menyatukan kandungan yang telah anda pelajari. 4. Amalan Projek: Sapukan apa yang telah anda pelajari dalam projek sebenar. Pelan pembelajaran berstruktur seperti ini dapat membantu anda menguasai Python secara sistematik dan mencapai matlamat kerjaya.

Memaksimumkan 2 Jam: Strategi Pembelajaran Python BerkesanMemaksimumkan 2 Jam: Strategi Pembelajaran Python BerkesanApr 20, 2025 am 12:20 AM

Kaedah untuk belajar python dengan cekap dalam masa dua jam termasuk: 1. Semak pengetahuan asas dan pastikan anda sudah biasa dengan pemasangan Python dan sintaks asas; 2. Memahami konsep teras python, seperti pembolehubah, senarai, fungsi, dan lain -lain; 3. Menguasai penggunaan asas dan lanjutan dengan menggunakan contoh; 4. Belajar kesilapan biasa dan teknik debugging; 5. Memohon pengoptimuman prestasi dan amalan terbaik, seperti menggunakan komprehensif senarai dan mengikuti panduan gaya PEP8.

Memilih antara python dan c: bahasa yang sesuai untuk andaMemilih antara python dan c: bahasa yang sesuai untuk andaApr 20, 2025 am 12:20 AM

Python sesuai untuk pemula dan sains data, dan C sesuai untuk pengaturcaraan sistem dan pembangunan permainan. 1. Python adalah mudah dan mudah digunakan, sesuai untuk sains data dan pembangunan web. 2.C menyediakan prestasi dan kawalan yang tinggi, sesuai untuk pembangunan permainan dan pengaturcaraan sistem. Pilihan harus berdasarkan keperluan projek dan kepentingan peribadi.

Python vs C: Analisis perbandingan bahasa pengaturcaraanPython vs C: Analisis perbandingan bahasa pengaturcaraanApr 20, 2025 am 12:14 AM

Python lebih sesuai untuk sains data dan perkembangan pesat, manakala C lebih sesuai untuk prestasi tinggi dan pengaturcaraan sistem. 1. Sintaks Python adalah ringkas dan mudah dipelajari, sesuai untuk pemprosesan data dan pengkomputeran saintifik. 2.C mempunyai sintaks kompleks tetapi prestasi yang sangat baik dan sering digunakan dalam pembangunan permainan dan pengaturcaraan sistem.

2 jam sehari: potensi pembelajaran python2 jam sehari: potensi pembelajaran pythonApr 20, 2025 am 12:14 AM

Adalah mungkin untuk melabur dua jam sehari untuk belajar Python. 1. Belajar Pengetahuan Baru: Ketahui konsep baru dalam satu jam, seperti senarai dan kamus. 2. Amalan dan Amalan: Gunakan satu jam untuk melakukan latihan pengaturcaraan, seperti menulis program kecil. Melalui perancangan dan ketekunan yang munasabah, anda boleh menguasai konsep teras Python dalam masa yang singkat.

Python vs C: Lengkung pembelajaran dan kemudahan penggunaanPython vs C: Lengkung pembelajaran dan kemudahan penggunaanApr 19, 2025 am 12:20 AM

Python lebih mudah dipelajari dan digunakan, manakala C lebih kuat tetapi kompleks. 1. Sintaks Python adalah ringkas dan sesuai untuk pemula. Penaipan dinamik dan pengurusan memori automatik menjadikannya mudah digunakan, tetapi boleh menyebabkan kesilapan runtime. 2.C menyediakan kawalan peringkat rendah dan ciri-ciri canggih, sesuai untuk aplikasi berprestasi tinggi, tetapi mempunyai ambang pembelajaran yang tinggi dan memerlukan memori manual dan pengurusan keselamatan jenis.

See all articles

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

MantisBT

MantisBT

Mantis ialah alat pengesan kecacatan berasaskan web yang mudah digunakan yang direka untuk membantu dalam pengesanan kecacatan produk. Ia memerlukan PHP, MySQL dan pelayan web. Lihat perkhidmatan demo dan pengehosan kami.

EditPlus versi Cina retak

EditPlus versi Cina retak

Saiz kecil, penyerlahan sintaks, tidak menyokong fungsi gesaan kod

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

Persekitaran pembangunan bersepadu PHP yang berkuasa

Pelayar Peperiksaan Selamat

Pelayar Peperiksaan Selamat

Pelayar Peperiksaan Selamat ialah persekitaran pelayar selamat untuk mengambil peperiksaan dalam talian dengan selamat. Perisian ini menukar mana-mana komputer menjadi stesen kerja yang selamat. Ia mengawal akses kepada mana-mana utiliti dan menghalang pelajar daripada menggunakan sumber yang tidak dibenarkan.

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)