Pada 2 Disember, PyTorch 2.0 telah dikeluarkan secara rasmi!
Kemas kini ini bukan sahaja mendorong prestasi PyTorch ke tahap yang lebih tinggi, tetapi juga menambah sokongan untuk bentuk dan pengedaran dinamik.
Selain itu, siri 2.0 juga akan mengalihkan beberapa kod PyTorch dari C++ kembali ke Python.
Pada masa ini, PyTorch 2.0 masih dalam fasa ujian, dan versi stabil pertama dijangka tersedia pada awal Mac 2023.
Sejak beberapa tahun kebelakangan ini, PyTorch telah membuat inovasi dan lelaran daripada 1.0 kepada 1.13 baru-baru ini, dan berpindah ke Yayasan PyTorch yang baru dibentuk untuk menjadi sebahagian daripada Yayasan Linux.
Cabaran dengan versi semasa PyTorch ialah mod eager-mode menghadapi kesukaran untuk mengikuti jalur lebar GPU yang sentiasa meningkat dan seni bina model yang lebih gila.
Kelahiran PyTorch 2.0 secara asasnya akan mengubah dan menambah baik cara PyTorch berjalan pada peringkat pengkompil.
Seperti yang kita sedia maklum, (Py) dalam PyTorch berasal daripada bahasa pengaturcaraan Python sumber terbuka yang digunakan secara meluas dalam sains data.
Walau bagaimanapun, kod PyTorch tidak sepenuhnya menggunakan Python, tetapi memberikan sebahagian daripadanya kepada C++.
Walau bagaimanapun, dalam siri 2.x akan datang, pasukan projek PyTorch merancang untuk mengalihkan kod yang berkaitan dengan torch.nn kembali kepada Python.
Selain itu, memandangkan PyTorch 2.0 ialah ciri tambahan (dan pilihan) sepenuhnya, 2.0 adalah 100% serasi ke belakang.
Dalam erti kata lain, asas kod adalah sama, API adalah sama dan cara menulis model adalah sama.
Tangkap dengan selamat menggunakan cangkuk penilaian rangka kerja Python Program PyTorch ialah inovasi utama yang dibangunkan oleh pasukan dalam tangkapan graf sepanjang lima tahun yang lalu.
membebankan enjin autograd PyTorch sebagai autodiff pengesanan untuk menjana jejak belakang pandang ke hadapan.
Mengurangkan ~2000+ pengendali PyTorch menjadi set tertutup ~250 pengendali primitif yang pembangun boleh menyasarkan pengendali untuk membina PyTorch yang lengkap hujung belakang. Halangan untuk menulis kefungsian atau bahagian belakang PyTorch sangat dikurangkan.
Pengkompil pembelajaran mendalam yang boleh menjana kod pantas untuk berbilang pemecut dan hujung belakang. Untuk GPU Nvidia, ia menggunakan OpenAI Triton sebagai blok binaan utama.
Perlu diperhatikan bahawa TorchDynamo, AOTautograd, PrimTorch dan TorchInductor semuanya ditulis dalam Python dan menyokong bentuk dinamik.
Dengan memperkenalkan mod kompilasi baharu "torch.compile", PyTorch 2.0 boleh dipercepatkan dengan hanya satu baris kod Latihan model.
Tiada helah diperlukan di sini, cuma jalankan torch.compile() dan itu sahaja:
opt_module = torch.compile(module)
Untuk mengesahkan teknologi ini, pasukan membuat penanda aras ujian dengan teliti, termasuk klasifikasi imej, pengesanan objek, penjanaan imej dan tugas lain, serta pelbagai tugas NLP, seperti pemodelan bahasa, menjawab soalan , klasifikasi jujukan, Sistem pengesyoran dan pembelajaran pengukuhan. Antaranya, penanda aras ini boleh dibahagikan kepada tiga kategori:
Hasil ujian menunjukkan bahawa antara 163 model ini merangkumi penglihatan, NLP dan lain-lain medan Pada model sumber terbuka, kelajuan latihan telah dipertingkatkan sebanyak 38%-76%.
Perbandingan pada NVIDIA A100 GPU
Selain itu, pasukan juga Penanda aras telah dijalankan pada beberapa model PyTorch sumber terbuka yang popular dan peningkatan yang ketara daripada 30% kepada 2x telah diperolehi.
Pembangun Sylvain Gugger berkata: "Dengan hanya satu baris kod, PyTorch 2.0 boleh mencapai kelajuan 1.5x hingga 2.0x apabila melatih model Transformers. Ini adalah latihan ketepatan pencampuran sendiri yang paling perkara yang menarik sejak kemunculannya! 》
Penyusun PyTorch boleh dipecahkan kepada tiga bahagian:
Antaranya, apabila membina pengkompil PyTorch, pemerolehan graf adalah lebih Sukar cabaran.
Pada awal tahun ini, pasukan mula mengusahakan TorchDynamo kaedah ini telah digunakan Ciri CPython yang diperkenalkan dalam PEP-0523, dipanggil API Penilaian Rangka Kerja.
Untuk tujuan ini, pasukan mengambil pendekatan dipacu data untuk mengesahkan keberkesanan TorchDynamo pada tangkapan graf - dengan menggunakan lebih daripada 7,000 projek Github yang ditulis dalam PyTorch sebagai set pengesahan.
Hasilnya menunjukkan bahawa TorchDynamo boleh melakukan penangkapan graf dengan betul dan selamat 99% sepanjang masa, dengan overhed yang boleh diabaikan.
Untuk bahagian belakang pengkompil baharu PyTorch 2.0, pasukan mengambil inspirasi daripada cara pengguna menulis kernel tersuai berprestasi tinggi : Meningkatkan penggunaan daripada bahasa Triton.
TorchInductor menggunakan IR peringkat gelung demi gelung yang ditentukan Pythonic untuk memetakan model PyTorch secara automatik kepada kod Triton yang dihasilkan pada GPU dan C++/OpenMP pada CPU.
IR peringkat gelung teras TorchInductor hanya mengandungi kira-kira 50 operator, dan ia dilaksanakan dalam Python, yang menjadikannya mudah untuk dilanjutkan.
Untuk mempercepatkan latihan, anda perlu menangkap bukan sahaja kod peringkat pengguna, tetapi juga penyebaran balik.
AOTautograd boleh menggunakan mekanisme lanjutan torch_dispatch PyTorch untuk menjejak enjin Autograd, menangkap rambatan belakang "lebih awal", dan kemudian menggunakan TorchInductor untuk mempercepatkan saluran ke hadapan dan ke belakang.
PyTorch mempunyai lebih daripada 1200 operator, lebih daripada 2000 jika anda mengambil kira pelbagai beban berlebihan setiap operator secara individu. Oleh itu, menulis fungsi back-end atau merentas domain menjadi tugas yang memakan tenaga.
Dalam projek PrimTorch, pasukan menentukan dua set operator yang lebih kecil dan lebih stabil:
Keperluan utama apabila melihat perkara yang diperlukan untuk menyokong fleksibiliti kod dalam PyTorch ialah sokongan untuk bentuk dinamik dan membolehkan model menerima tensor saiz yang berbeza tanpa menyebabkan penyusunan semula setiap kali bentuk berubah.
Apabila bentuk dinamik tidak disokong, penyelesaian yang biasa adalah dengan mengalasnya kepada kuasa 2 terdekat. Walau bagaimanapun, seperti yang dapat kita lihat daripada carta di bawah, ia menanggung overhed prestasi yang ketara dan juga menghasilkan masa penyusunan yang lebih lama dengan ketara.
Kini, dengan sokongan untuk bentuk dinamik, PyTorch 2.0 telah mencapai prestasi sehingga 40% lebih tinggi daripada Eager.
Akhir sekali, dalam pelan hala tuju untuk PyTorch 2.x, pasukan berharap untuk terus memajukan model kompilasi dari segi prestasi dan kebolehskalaan.
Atas ialah kandungan terperinci Satu baris kod, membuat elixir dua kali lebih cepat! PyTorch 2.0 keluar dengan mengejutkan, LeCun dengan bersemangat memajukannya. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!