Rumah  >  Artikel  >  Peranti teknologi  >  Satu baris kod, membuat elixir dua kali lebih cepat! PyTorch 2.0 keluar dengan mengejutkan, LeCun dengan bersemangat memajukannya

Satu baris kod, membuat elixir dua kali lebih cepat! PyTorch 2.0 keluar dengan mengejutkan, LeCun dengan bersemangat memajukannya

王林
王林ke hadapan
2023-04-13 08:49:021462semak imbas

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.

Satu baris kod, membuat elixir dua kali lebih cepat! PyTorch 2.0 keluar dengan mengejutkan, LeCun dengan bersemangat memajukannya

Pada masa ini, PyTorch 2.0 masih dalam fasa ujian, dan versi stabil pertama dijangka tersedia pada awal Mac 2023.

Satu baris kod, membuat elixir dua kali lebih cepat! PyTorch 2.0 keluar dengan mengejutkan, LeCun dengan bersemangat memajukannya

PyTorch 2.x: Lebih pantas, lebih Pythonic!

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.

Satu baris kod, membuat elixir dua kali lebih cepat! PyTorch 2.0 keluar dengan mengejutkan, LeCun dengan bersemangat memajukannya

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.

Lebih banyak sokongan teknikal

  • TorchDynamo

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.

  • AOTautograd

membebankan enjin autograd PyTorch sebagai autodiff pengesanan untuk menjana jejak belakang pandang ke hadapan.

  • PrimTorch

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.

  • TorchInductor

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.

Kelajuan latihan yang lebih pantas

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:

  • 46 model daripada HuggingFace Transformers
  • 61 model daripada TIMM: koleksi PyTorch yang canggih oleh Ross Wightman Model imej
  • 56 model daripada TorchBench: satu set pangkalan kod popular daripada github

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%.

Satu baris kod, membuat elixir dua kali lebih cepat! PyTorch 2.0 keluar dengan mengejutkan, LeCun dengan bersemangat memajukannya

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! 》

Tinjauan Teknikal

Penyusun PyTorch boleh dipecahkan kepada tiga bahagian:

  • Graf pemerolehan
  • Pengurangan graf
  • Kompilasi graf

Antaranya, apabila membina pengkompil PyTorch, pemerolehan graf adalah lebih Sukar cabaran.

Satu baris kod, membuat elixir dua kali lebih cepat! PyTorch 2.0 keluar dengan mengejutkan, LeCun dengan bersemangat memajukannya

TorchDynamo

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.

TorchInductor

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.

AOTautograd

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.

PrimTorch

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:

  • Ops prim mempunyai kira-kira ~250 operator, sesuai untuk penyusun. Memandangkan cukup tahap rendah, ia hanya perlu menggabungkannya untuk mendapatkan prestasi yang baik.
  • Ops ATen mempunyai kira-kira ~750 operator biasa yang sesuai untuk output apa adanya. Ini sesuai untuk hujung belakang yang sudah disepadukan pada peringkat ATen, atau yang tidak disusun, sekali gus memulihkan prestasi set operator peringkat rendah seperti Prim ops.

Satu baris kod, membuat elixir dua kali lebih cepat! PyTorch 2.0 keluar dengan mengejutkan, LeCun dengan bersemangat memajukannya

Bentuk Dinamik

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.

Satu baris kod, membuat elixir dua kali lebih cepat! PyTorch 2.0 keluar dengan mengejutkan, LeCun dengan bersemangat memajukannya

Akhir sekali, dalam pelan hala tuju untuk PyTorch 2.x, pasukan berharap untuk terus memajukan model kompilasi dari segi prestasi dan kebolehskalaan.

Satu baris kod, membuat elixir dua kali lebih cepat! PyTorch 2.0 keluar dengan mengejutkan, LeCun dengan bersemangat memajukannya

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!

Kenyataan:
Artikel ini dikembalikan pada:51cto.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam