Beberapa trik pytorch
Changelog
- 29 November 2019: Memperbarui beberapa teknik desain model dan konten akselerasi penalaran, dan menambahkan tautan pengantar ke puncak,
Juga, saya menghapus tfrecord, dapatkah pytorch digunakan? Saya ingat bahwa saya tidak bisa, jadi saya menghapusnya (Menunjukkan penghapusan: <) - 30 November 2019: Makna Mac Tambahan, Tautan Tambahan Tambahan Shufflenetv2
- 2 Desember 2019: Pytorch yang saya sebutkan sebelumnya tidak dapat menggunakan Tfrecord. Hari ini saya melihat jawaban dari https://www.zhihu.com/question/358632497, dan saya dalam posisi yang meningkat.
- 23 Desember 2019: Menambahkan beberapa artikel ilmiah populer tentang kuantifikasi kompresi model
- 7 Februari 2020: Beberapa hal yang perlu diperhatikan dikutip dari artikel dan ditambahkan ke bagian Level Kode
- 30 April 2020:
- Menambahkan cadangan dokumen github
- Tautan ditambah dengan pengenalan lapisan konvolusional dan fusi lapisan bn
- Ini penjelasan lain. Untuk artikel dan jawaban banyak teman yang telah saya rujuk sebelumnya, tautan dan ringkasan konten yang sesuai tidak ditautkan bersama. Diperkirakan beberapa teman akan mengajukan pertanyaan saat membaca konten terkait, dan mereka tidak dapat bertanya kepada penulis asli. Saya sangat menyesal di sini.
- Sesuaikan beberapa konten dan coba sesuai dengan tautan referensi
- 18 Mei 2020: Tambahkan beberapa tips di Pytorch untuk menyimpan memori video. Pada saat yang sama, cukup sesuaikan format. Saya juga menemukan kesalahan sebelumnya:
non_blocking=False harus non_blocking=True . - 6 Januari 2021: Sesuaikan beberapa perkenalan tentang data gambar membaca.
- 13 Januari 2021: Menambahkan strategi untuk penalaran yang dipercepat. Saya pikir saya harus memperbarui dokumen GitHub terlebih dahulu. Pembaruan Jawaban Zhihu sedikit merepotkan, dan tidak mungkin untuk membandingkan perubahan informasi, jadi sangat sulit.
- 26 Juni 2022: Format dan pengaturan konten berikut telah disesuaikan kembali, sementara referensi tambahan dan beberapa penemuan terbaru telah ditambahkan.
- 20 Juni 2024: Penyesuaian format sederhana dilengkapi dengan ide untuk mempercepat pembacaan data berdasarkan format
tar dan IterableDataset .
Pytorch mempercepat
Catatan
Dokumen Asli: https://www.yuque.com/lart/ugkv9f/ugysgn
Pernyataan: Sebagian besar konten berasal dari berbagi di Zhihu dan blog lainnya, dan hanya tercantum di sini sebagai koleksi. Lebih banyak saran dipersilakan.
Jawaban Zhihu (Selamat datang di Like):
- Penguat data PyTorch Dataloader memakan waktu sebagian besar waktu. Bagaimana kalian menyelesaikannya? - Jawaban Artis Rakyat - Zhihu
- Saat menggunakan pytorch, ada terlalu banyak data yang ditetapkan untuk mencapai puluhan juta, dan apa yang harus saya lakukan jika dataloader memuat dengan sangat lambat? - Jawaban Artis Rakyat - Zhihu
Pretreatment mempercepat
- Untuk meminimalkan operasi preprocessing setiap kali Anda membaca data, Anda dapat mempertimbangkan untuk menggunakan beberapa operasi tetap, seperti
resize , dan menyimpannya terlebih dahulu, dan menggunakannya langsung selama pelatihan. - Pindahkan preprocessing ke GPU untuk mempercepat.
- Linux dapat menggunakan
NVIDIA/DALI . - Gunakan operasi pemrosesan gambar berbasis tensor.
IO mempercepat
- MMCV memberikan dukungan yang relatif efisien dan komprehensif untuk pembacaan data: OpenMMLAB: Analisis Komponen Inti MMCV (III): FileClient
Gunakan pemrosesan gambar yang lebih cepat
-
opencv umumnya lebih cepat dari PIL .- Perhatikan bahwa strategi pemuatan
PIL yang malas membuatnya terlihat open daripada imread of opencv , tetapi sebenarnya tidak sepenuhnya memuat data. Anda dapat menghubungi metode load() pada objek yang dikembalikan secara open untuk memuat data secara manual. Kecepatannya masuk akal saat ini.
- Untuk pembacaan
jpeg , Anda dapat mencoba jpeg4py . - Simpan grafik
bmp (kurangi waktu decoding). - Diskusi tentang kecepatan perpustakaan pemrosesan gambar yang berbeda: Apa perbedaan antara metode implementasi dan kecepatan membaca berbagai fungsi Imread Python? - Zhihu
Mengintegrasikan data ke dalam satu file kontinu (kurangi jumlah bacaan)
Untuk pembacaan file kecil skala besar, dapat disimpan sebagai format file berkelanjutan yang dapat dibaca terus menerus. Anda dapat memilih untuk mempertimbangkan TFRecord (Tensorflow) , recordIO , hdf5 , pth , n5 , lmdb , dll.
-
TFRecord : https://github.com/vahidk/tfrecord - Database
lmdb :- https://github.com/fangyh09/image2lmdb
- https://blog.csdn.net/p_lart/article/details/103208405
- https://github.com/lartpang/pysodtoolbox/blob/master/forbigdataset/imagefolder2lmdb.py
- Implementasi berdasarkan file
Tar dan IterableDataset
Data pra-baca
Pra-baca data yang diperlukan untuk iterasi berikutnya. Gunakan kasus:
- Cara memberi Anda artikel dataloader di pytorch - mkfmiku - zhihu
- Akselerasi Membaca Data ke Pytorch - Artikel di HI - Zhihu
Dengan ingatan
- Muat langsung ke memori.
- Baca gambar dan simpan ke objek wadah tetap.
- Memetakan memori ke disk.
Dengan solid state
Hard disk mekanis diganti dengan keadaan padat NVME. Lihat Cara Memberi Anda Darah Ayam di Dataloader di Pytorch - Artikel MKFMIKU - Zhihu
Strategi pelatihan
Pelatihan presisi rendah
Dalam pelatihan, representasi presisi rendah ( FP16 atau bahkan INT8 , jaringan biner, dan jaringan tiga nilai) digunakan sebagai pengganti representasi akurasi asli ( FP32 ).
Ini dapat menyimpan sejumlah memori video dan mempercepat, tetapi hati -hati terhadap operasi yang tidak aman seperti rata -rata dan jumlah.
- Pengantar Pelatihan Presisi Campuran:
- Tutorial pelatihan presisi campuran dari dangkal ke dalam
- Dukungan akurasi campuran yang disediakan oleh
NVIDIA/Apex .- Pytorch Must-Have Artefact | Bebas cepat: akselerasi presisi hibrida berbasis apex
- Instalasi Pytorch dari Apex Sulit dan Lain -lain Solusi Penyakit Lain -Lain - Artikel Chen Hanke - Zhihu
- Pytorch1.6 mulai menyediakan
torch.cuda.amp untuk mendukung presisi campuran.
Batch yang lebih besar
Batch yang lebih besar cenderung menyebabkan waktu pelatihan yang lebih singkat dalam kasus zaman tetap. Namun, batch besar menghadapi banyak pertimbangan seperti pengaturan hiperparameter dan penggunaan memori, yang merupakan area lain yang telah menarik banyak perhatian.
- Pengaturan Hyperparameter
- SGD minibatch yang akurat, pelatihan Imagenet dalam 1 jam, kertas
- Mengoptimalkan penggunaan memori video
- Akumulasi gradien
- CHECKPOINTING GRADIEN
- Melatih jaring dalam dengan biaya memori sublinear, kertas
- Operasi di tempat
- Batchnorm aktif di tempat untuk pelatihan DNN yang dioptimalkan memori, makalah, kode
Level Kode
Pengaturan Perpustakaan
- Pengaturan
torch.backends.cudnn.benchmark = True Sebelum Loop Pelatihan dapat mempercepat perhitungan. Karena kinerja algoritma CUDNN yang menghitung konvolusi dengan ukuran kernel yang berbeda berbeda, autotuner dapat menjalankan tolok ukur untuk menemukan algoritma terbaik. Disarankan untuk mengaktifkan pengaturan ini ketika ukuran input Anda tidak sering berubah. Jika ukuran input sering berubah, autotuner perlu terlalu sering dibandingkan, yang dapat merusak kinerja. Ini dapat meningkatkan kecepatan perambatan ke depan dan ke belakang sebesar 1,27x menjadi 1,70x. - Gunakan halaman untuk mengunci memori, yaitu, atur
pin_memory=True di dataloader. - Untuk
num_worker yang sesuai, diskusi terperinci dapat ditemukan di Pytorch Speedup Guide - Artikel Yunmeng - Zhihu. - pengoptimal.zero_grad (set_to_none = false di sini Anda dapat mengurangi jejak memori dengan mengatur
set_to_none=True dan dapat meningkatkan kinerja secara None . Tetapi ini juga akan mengubah beberapa perilaku, yang terlihat pada dokumentasi. memset dilakukan pada semua parameter melalui model.zero_grad() atau optimizer.zero_grad() memset , None gradien akan diperbarui menggunakan operasi "tulis saja". - Selama backpropagation, gunakan mode
eval dan gunakan torch.no_grad untuk mematikan perhitungan gradien. - Pertimbangkan untuk menggunakan format memori Channels_Last.
- Ganti
DataParallel dengan DistributedDataParallel . Untuk multi-GPU, bahkan jika hanya DataParallel satu node, DistributedDataParallel selalu lebih disukai karena DistributedDataParallel diterapkan pada banyak proses dan menciptakan satu untuk setiap GPU, melewati kunci interpreter python global (GIL) dan peningkatan kecepatan.
Model
- Jangan menginisialisasi variabel yang tidak digunakan, karena inisialisasi dan
forward Pytorch terpisah, dan itu tidak akan menginisialisasi karena Anda tidak menggunakannya. -
@torch.jit.script , gunakan pytroch jit untuk memadukan operasi titik demi titik ke satu kernel cuda. Pytorch mengoptimalkan pengoperasian tensor dengan dimensi besar. Sangat tidak efisien untuk melakukan terlalu banyak operasi pada tensor kecil di Pytorch. Jadi jika memungkinkan, menulis ulang semua operasi perhitungan menjadi batch dapat mengurangi konsumsi dan meningkatkan kinerja. Jika Anda tidak dapat secara manual menerapkan operasi batch, maka Torchscript dapat digunakan untuk meningkatkan kinerja kode Anda. Torchscript adalah subset dari fungsi Python, tetapi setelah Pytorch diverifikasi oleh Pytorch, Pytorch dapat secara otomatis mengoptimalkan kode Torchscript untuk meningkatkan kinerja melalui kompiler Just In Time (JTT). Tetapi pendekatan yang lebih baik adalah mengimplementasikan operasi batch secara manual. - Saat menggunakan FP16 dengan presisi campuran, atur beberapa ukuran 8 untuk semua desain arsitektur yang berbeda.
- Lapisan konvolusional sebelum BN dapat menghilangkan bias. Karena secara matematis, bias dapat diimbangi dengan pengurangan BN. Kami dapat menyimpan parameter model dan memori runtime.
data
- Atur ukuran batch ke kelipatan 8 untuk memaksimalkan penggunaan memori GPU.
- Lakukan operasi gaya numpy sebanyak mungkin pada GPU.
- Gunakan
del untuk membebaskan jejak memori. - Hindari transmisi data yang tidak perlu antara berbagai perangkat.
- Saat membuat tensor, tentukan perangkat secara langsung, alih -alih membuatnya dan kemudian mentransfernya ke perangkat target.
- Gunakan
torch.from_numpy(ndarray) atau torch.as_tensor(data, dtype=None, device=None) , yang dapat menghindari ruang aplikasi dengan berbagi memori. Untuk detail dan tindakan pencegahan, silakan merujuk ke dokumen yang sesuai. Jika perangkat sumber dan target adalah CPU, torch.from_numpy dan torch.as_tensor tidak akan menyalin data. Jika data sumbernya adalah array yang numpy, gunakan torch.from_numpy lebih cepat. Jika data sumber adalah tensor dengan tipe data dan jenis perangkat yang sama, torch.as_tensor dapat menghindari menyalin data, yang dapat berupa daftar, tuple, atau tenthon. - Gunakan transmisi non-blocking, yaitu, atur
non_blocking=True . Ini mencoba konversi asinkron jika memungkinkan, misalnya, mengubah tensor CPU dalam memori kunci halaman menjadi tensor CUDA.
Optimalisasi pengoptimal
- Simpan parameter model dalam bagian memori yang berkelanjutan, sehingga mengurangi waktu
optimizer.step() .-
contiguous_pytorch_params
- Menggunakan blok bangunan yang menyatu dalam apeks
Desain Model
CNN
- Shufflenetv2, kertas.
- Saluran input dan output dari lapisan konvolusi konsisten: ketika jumlah saluran fitur input dan output dari lapisan konvolusi sama, Mac (waktu konsumsi akses memori, singkatan
memory access cost adalah MAC ) adalah yang terkecil, dan kecepatan model adalah yang tercepat saat ini - Kurangi Pengelompokan Konvolusional: Terlalu banyak operasi kelompok akan meningkatkan Mac, yang akan memperlambat model
- Kurangi Cabang Model: Semakin sedikit cabang dalam model, semakin cepat modelnya
- Kurangi operasi
element-wise : Konsumsi waktu yang dibawa oleh operasi element-wise jauh lebih besar daripada nilai-nilai yang tercermin dalam kegagalan, sehingga operasi element-wise harus diminimalkan sebanyak mungkin. depthwise convolution juga memiliki karakteristik jepit rendah dan MAC tinggi.
Transformator Visi
- TRT-VIT: Transformator penglihatan yang berorientasi TENRTRT, kertas, interpretasi.
- Tingkat Panggung: Transformer Block cocok untuk tahap selanjutnya dari model, yang memaksimalkan trade-off antara efisiensi dan kinerja.
- Tingkat Panggung: Pola desain panggung dengan dangkal pertama dan kemudian dalam dapat meningkatkan kinerja.
- Level Blok: Blok hibrida transformator dan bottleneck lebih efektif daripada transformator terpisah.
- Level Blok: Pola desain blok global dan lokal membantu untuk mengkompensasi masalah kinerja.
Ide Umum
- Kurangi kompleksitas: misalnya, pemotongan dan pemangkasan model, mengurangi lapisan model dan skala parameter
- Ubah Struktur Model: Misalnya, model distilasi, dan dapatkan model kecil melalui metode distilasi pengetahuan
Mempercepat penalaran
Setengah presisi dan pembobotan
Gunakan representasi rendah presisi ( FP16 atau bahkan INT8 , jaringan biner, dan jaringan tiga-nilai) dalam inferensi untuk menggantikan representasi akurasi asli ( FP32 ).
-
TensorRT adalah mesin inferensi jaringan saraf yang diusulkan oleh NVIDIA, yang mendukung kuantisasi 8bit pasca-pelatihan. Ini menggunakan algoritma kuantisasi model berbasis entropi silang untuk meminimalkan tingkat perbedaan antara kedua distribusi. - PyTorch1.3 telah mendukung fungsi kuantisasi, berdasarkan implementasi QNNPack, dan mendukung kuantisasi pasca-pelatihan, pelatihan kuantisasi dinamis dan kuantisasi dan teknologi lainnya.
- Selain itu,
Distiller adalah alat optimisasi model open source berdasarkan Pytorch, dan secara alami mendukung teknologi kuantitatif di Pytorch. -
NNI Microsoft mengintegrasikan berbagai algoritma pelatihan persepsi kuantitatif dan mendukung beberapa kerangka kerja open source seperti PyTorch/TensorFlow/MXNet/Caffe2
Untuk detail lebih lanjut, silakan merujuk ke tiga AIS: [pembicaraan lain -lain] Apa alat open source yang tersedia untuk kuantifikasi model saat ini?
Fusi operasional
- Keterampilan Akselerasi Penalaran Model: Fusi BN dan Lapisan Konve - Artikel Xiaoxiaojiang - Zhihu
- Konvergensi Lapisan Konvensi dan Lapisan BN di Tahap Inferensi Jaringan - Artikel Autocyz - Zhihu
- Pytorch sendiri memberikan fungsi yang serupa
Parameterisasi ulang
- Repvgg
- Repvgg | Biarkan konvnet Anda sampai akhir, jaringan polos melebihi 80% Top1 untuk pertama kalinya
Analisis Waktu
- Python hadir dengan beberapa
profile analisis kinerja, cProfile dan hotshot . Metode penggunaan pada dasarnya sama. Tidak lebih dari apakah modulnya murni ular sanca atau ditulis dalam C. - Pytorch Profiler adalah alat yang mengumpulkan metrik kinerja selama pelatihan dan inferensi. API Manajer Konteks Profiler dapat digunakan untuk lebih memahami operator model mana yang paling mahal, periksa bentuk input dan catatan tumpukan, aktivitas kernel perangkat belajar, dan memvisualisasikan catatan eksekusi.
Rekomendasi Proyek
- Menerapkan kompresi model berdasarkan Pytorch:
- Kuantifikasi: 8/4/2 bit (DOREFA), nilai tiga-nilai/biner (TWN/Bnn/Xnor-net).
- Pemangkasan: Normal, reguler, saluran pemangkasan untuk struktur konvolusional yang dikelompokkan.
- Struktur konvolusional yang dikelompokkan.
- BN Fusion untuk kuantisasi biner fitur.
Bacaan yang diperpanjang
- Penguat data PyTorch Dataloader memakan waktu sebagian besar waktu. Bagaimana kalian menyelesaikannya? - Zhihu
- Saat menggunakan pytorch, ada terlalu banyak data yang ditetapkan untuk mencapai puluhan juta, dan apa yang harus saya lakukan jika dataloader memuat dengan sangat lambat? - Zhihu
- Apa jebakan/bug di Pytorch? - Zhihu
- Mengoptimalkan kode pelatihan pytorch
- 26 detik pelatihan GPU tunggal CIFAR10, Jeff Dean juga menyukai keterampilan optimasi pembelajaran yang mendalam - artikel di jantung mesin - Zhihu
- Setelah melatih beberapa fitur baru pada model online, mengapa waktu prediksi TensorFlow yang menyajikan lebih dari 20 kali lebih lambat dari yang asli? - Jawaban Tzesing - Zhihu
- Kompresi model pembelajaran mendalam
- Hari ini, apakah model Anda dipercepat? Berikut adalah 5 metode untuk referensi Anda (dengan analisis kode)
- Ringkasan Perangkap Umum di Pytorch - Artikel Yu Zhenbo - Zhihu
- Panduan Speedup Pytorch - Artikel Yunmeng - Zhihu
- Optimalkan kecepatan dan efisiensi memori Pytorch (2022)
Pytorch menyimpan memori video
Dokumen Asli: https://www.yuque.com/lart/ugkv9f/nvffyf
Dikumpulkan dari: Apa tips untuk menyimpan memori (memori video) di Pytorch? - Zhihu https://www.zhihu.com/question/274635237
Gunakan di tempat
- Cobalah untuk mengaktifkan operasi yang mendukung
inplace secara default. Misalnya, relu dapat menggunakan inplace=True . -
batchnorm dan beberapa fungsi aktivasi spesifik dapat dikemas ke dalam inplace_abn .
Fungsi kerugian
Menghapus kerugian di akhir setiap loop dapat menyimpan sangat sedikit memori video, tetapi lebih baik daripada tidak sama sekali. Tensor untuk Variabel dan Membebaskan Memori Praktik Terbaik
Akurasi pencampuran
Ini dapat menyimpan sejumlah memori video dan mempercepat, tetapi hati -hati terhadap operasi yang tidak aman seperti rata -rata dan jumlah.
- Pengantar Pelatihan Presisi Campuran:
- Tutorial pelatihan presisi campuran dari dangkal ke dalam
- Dukungan akurasi campuran yang disediakan oleh
NVIDIA/Apex .- Pytorch Must-Have Artefact | Bebas cepat: akselerasi presisi hibrida berbasis apex
- Instalasi Pytorch dari Apex Sulit dan Lain -lain Solusi Penyakit Lain -Lain - Artikel Chen Hanke - Zhihu
- Pytorch1.6 mulai menyediakan
torch.cuda.amp untuk mendukung presisi campuran.
Mengelola operasi yang tidak memerlukan backpropagation
- Untuk fase maju yang tidak memerlukan backpropagation, seperti periode verifikasi dan inferensi, gunakan
torch.no_grad untuk membungkus kode.- Perhatikan bahwa
model.eval() tidak sama dengan torch.no_grad() , silakan lihat diskusi berikut: 'model.eval ()' vs 'dengan torch.no_grad ()'
- Atur
requires_grad dari variabel yang tidak perlu menghitung gradien menjadi False , sehingga variabel tidak berpartisipasi dalam perambatan mundur dari gradien untuk mengurangi penggunaan memori dari gradien yang tidak perlu. - Lepaskan jalur gradien yang tidak perlu dihitung:
- Stochastic Backpropagation: Strategi efisien memori untuk melatih model video, interpretasi dapat dilihat:
- https://www.yuque.com/lart/papers/xu5t00
- https://blog.csdn.net/p_lart/article/details/124978961
Pembersihan memori video
-
torch.cuda.empty_cache() adalah versi canggih dari del . Menggunakan nvidia-smi akan menemukan bahwa memori video memiliki perubahan yang jelas. Namun, penggunaan memori video maksimum selama pelatihan tampaknya tidak berubah. Anda dapat mencoba: Bagaimana cara kami melepaskan cache memori GPU? - Anda dapat menggunakan
del untuk menghapus variabel menengah yang tidak perlu, atau menggunakan bentuk replacing variables untuk mengurangi hunian.
Akumulasi gradien
Bagilah batchsize=64 menjadi dua batch 32, dan setelah dua penerusan, mundur sekali. Tetapi akan mempengaruhi batchnorm dan lapisan lain yang terkait dengan batchsize .
Dalam dokumentasi Pytorch, contoh menggunakan akumulasi gradien dan presisi pencampuran disebutkan.
Gunakan teknologi akumulasi gradien untuk mempercepat pelatihan terdistribusi, yang dapat digunakan untuk merujuk pada: [asli] [Deep] [Pytorch] DDP Seri 3: Praktis dan Keterampilan - 996 Artikel dari Generasi Emas - Zhihu
CHECKPOINTING GRADIEN
torch.utils.checkpoint disediakan di Pytorch. Ini dicapai dengan mengeksekusi ulang perambatan ke depan di setiap lokasi pemeriksaan selama backpropagation.
Pelatihan kertas jaring dalam dengan biaya memori sublinear didasarkan pada teknologi gradien checkpoint untuk mengurangi memori video dari O (n) ke O (SQRT (n)). Untuk model yang lebih dalam, semakin banyak memori yang disimpan metode ini dan tidak melambat secara signifikan.
- Analisis mekanisme pos pemeriksaan Pytorch
- torch.utils.checkpoint Pendahuluan dan mudah digunakan
- Implementasi Pytorch dari biaya memori sublinear, direferensikan dari: Apa tips untuk menyimpan memori (memori video) di Pytorch? - Jawaban Lyken - Zhihu
Alat terkait
- Kode -kode ini dapat membantu Anda mendeteksi memori GPU Anda selama pelatihan dengan Pytorch. https://github.com/oldpan/pytorch-memory-utils
- Hanya kurang dari nvidia-smi? https://github.com/wookayin/gpustat
Referensi
- Apa tips untuk menyimpan memori (memori video) di Pytorch? - Jawaban Zheng Zhedong - Zhihu
- Diskusi singkat tentang pembelajaran mendalam: Cara menghitung jejak memori model dan variabel menengah
- Cara memanfaatkan memori video dengan halus di pytorch
- Apa tips untuk menyimpan memori video di Pytorch? - Jawaban Chen Hanke - Zhihu
- Analisis Mekanisme Memori Video Pytorch - Artikel Connolly - Zhihu
Tips lainnya
Mereproduksi
Anda dapat mengikuti bab yang relevan dalam dokumen.
Operasi deterministik wajib
Hindari menggunakan algoritma nondeterministik.
Dalam Pytorch, torch.use_deterministic_algorithms() dapat memaksa penggunaan algoritma deterministik alih -alih algoritma nondeterministik, dan kesalahan dilemparkan jika operasi diketahui nondeterministik (dan tidak ada alternatif deterministik).
Atur biji nomor acak
def seed_torch ( seed = 1029 ):
random . seed ( seed )
os . environ [ 'PYTHONHASHSEED' ] = str ( seed )
np . random . seed ( seed )
torch . manual_seed ( seed )
torch . cuda . manual_seed ( seed )
torch . cuda . manual_seed_all ( seed ) # if you are using multi-GPU.
torch . backends . cudnn . benchmark = False
torch . backends . cudnn . deterministic = True
seed_torch () Referensi dari https://www.zdaiot.com/mlframeworks/pytorch/pytorch%e9%9a%8f%e6%9c%BA%E7%A7%8D%E5%AD%90/
Bug tersembunyi di dataloader sebelum Pytorch versi 1.9
Detail spesifik menunjukkan bahwa 95% orang masih membuat kesalahan Pytorch - Artikel Serendipity - Zhihu
Untuk solusi, silakan merujuk ke dokumentasi:
def seed_worker ( worker_id ):
worker_seed = torch . initial_seed () % 2 ** 32
numpy . random . seed ( worker_seed )
random . seed ( worker_seed )
DataLoader (..., worker_init_fn = seed_worker )