Rumah > Artikel > Peranti teknologi > OpenAI: Empat kaedah asas untuk melatih rangkaian saraf yang besar
Artikel ini diterbitkan semula daripada Lei Feng.com Jika anda perlu mencetak semula, sila pergi ke tapak web rasmi Lei Feng.com untuk memohon kebenaran.
Rangkaian saraf berskala besar merupakan salah satu topik hangat dalam bidang kecerdasan buatan semasa. Jadi, bagaimana untuk melatih model besar?
Baru-baru ini, OpenAI, yang telah melancarkan model pra-latihan berskala besar GPT-3, menerbitkan catatan blog yang memperkenalkan empat kaedah latihan selari penjimatan memori berdasarkan GPU, iaitu:
Pencampuran Pakar (MOE) - Proses setiap sampel melalui hanya sebahagian kecil daripada setiap lapisan.Kesejajaran data sahaja memerlukan model untuk dimuatkan ke dalam memori GPU tunggal, tetapi apabila anda memanfaatkan berbilang GPU untuk pengiraan, kos menyimpan berbilang salinan parameter. Walau bagaimanapun, bagaimanapun, terdapat strategi untuk meningkatkan RAM berkesan yang tersedia untuk GPU, seperti memunggah sementara parameter ke memori CPU antara penggunaan. Apabila setiap pekerja selari data mengemas kini salinan parameternya, mereka perlu menyelaras antara satu sama lain untuk memastikan setiap pekerja terus mempunyai parameter yang serupa. Kaedah paling mudah ialah memperkenalkan "komunikasi menyekat" antara pekerja:
Langkah 3: Kira parameter baharu yang sama secara bebas pada setiap pekerja.
Langkah 2 ialah purata penyekatan yang memerlukan pemindahan sejumlah besar data (berkadar dengan bilangan pekerja kali ganda saiz parameter), yang mungkin menjejaskan daya pemprosesan latihan. Terdapat pelbagai skim penyegerakan tak segerak yang boleh menghapuskan kerugian ini, tetapi dengan mengorbankan kecekapan pembelajaran, jadi dalam amalan, orang biasanya berpegang kepada kaedah segerak.
2
Paralelisme saluran paipDalam latihan selari saluran paip, penyelidik akan membahagikan blok berjujukan model kepada GPU, dan setiap GPU hanya Sedikit set parameter disimpan, jadi setiap GPU menggunakan lebih sedikit memori secara proporsional untuk model yang sama.
Memisahkan model besar kepada ketulan lapisan berturut-turut adalah mudah, tetapi memandangkan terdapat kebergantungan berurutan antara input dan output lapisan, pekerja menunggu output mesin A sebelumnya pelaksanaan naif boleh mengakibatkan banyak masa terbiar apabila digunakan sebagai inputnya. Blok masa menunggu ini dipanggil "buih" dan merupakan pengiraan sia-sia yang boleh diselesaikan oleh mesin terbiar.
Kapsyen: Ilustrasi persediaan selari saluran paip mudah di mana model dibahagikan secara menegak kepada 4 partition. Pekerja 1 mengehoskan parameter model lapisan 1 (paling hampir dengan input), manakala pekerja 4 mengehoskan lapisan 4 (paling hampir dengan output). "F", "B" dan "U" masing-masing mewakili operasi ke hadapan, ke belakang dan kemas kini. Subskrip menunjukkan pekerja yang mana operasi akan dijalankan. Disebabkan kebergantungan berjujukan, data diproses oleh seorang pekerja pada satu masa, mengakibatkan "gelembung" masa terbiar yang besar.
Kami boleh menggunakan semula idea keselarian data untuk mengurangkan kos mencipta buih masa dengan meminta setiap pekerja memproses hanya subset elemen data pada satu masa, membolehkan kami bertindih pengiraan baharu dengan masa menunggu dengan bijak. Idea terasnya ialah dengan membahagikan satu kelompok kepada beberapa kelompok mikro, setiap kelompok mikro harus diproses secara berkadar lebih cepat dan setiap pekerja mula bekerja sebaik sahaja kumpulan mikro seterusnya tersedia, sekali gus mempercepatkan pelaksanaan saluran paip. Dengan kumpulan mikro yang mencukupi, pekerja boleh digunakan pada kebanyakan masa, dengan "gelembung" minimum pada permulaan dan penghujung langkah. Kecerunan dipuratakan merentas kumpulan mikro dan parameter dikemas kini hanya selepas semua kumpulan mikro selesai.
Bilangan pekerja yang dibahagikan kepada model sering dipanggil "kedalaman saluran paip".
Semasa hantaran ke hadapan, pekerja hanya menghantar output blok lapisannya (dipanggil "pengaktifan") kepada pekerja seterusnya semasa hantaran ke belakang, ia hanya menghantar kecerunan yang diaktifkan ini; dihantar kepada pekerja terdahulu. Terdapat ruang reka bentuk yang besar dalam cara mengatur saluran ini dan cara mengagregat kecerunan merentas kelompok mikro. Sebagai contoh, kaedah GPipe mempunyai setiap proses pekerja melepasi ke hadapan dan ke belakang secara berterusan, dan kemudian mengagregatkan kecerunan secara serentak daripada berbilang kelompok mikro pada penghujung manakala PipeDream mengatur agar setiap pekerja memproses hantaran ke hadapan dan ke belakang secara bergilir-gilir.
Ilustrasi: Perbandingan penyelesaian saluran paip GPipe dan PipeDream, menggunakan 4 mikro setiap kelompok kelompok. Microbatch 1-8 sepadan dengan dua kelompok data berturut-turut. "Nombor" dalam rajah menunjukkan kumpulan mikro yang dikendalikan dan subskrip menandakan ID pekerja. Ambil perhatian bahawa PipeDream mencapai kecekapan yang lebih tinggi dengan melakukan beberapa pengiraan menggunakan parameter lapuk.
Keselarian saluran paip membelah model "menegak" lapisan demi lapisan, atau dalam lapisan Membahagikan operasi tertentu " secara mendatar" sering dipanggil latihan tensor.
Bagi kebanyakan model moden (cth. Transformer), kesesakan pengiraan adalah mendarabkan matriks kelompok pengaktifan dengan matriks berat yang besar. Pendaraban matriks boleh dianggap sebagai hasil darab titik antara pasangan baris dan lajur; produk titik boleh dikira secara bebas pada GPU berbeza, atau setiap bahagian produk titik boleh dikira pada GPU berbeza dan hasil dijumlahkan. Tanpa mengira strategi, kita boleh membahagikan matriks berat kepada "serpihan" bersaiz sama rata, mengehoskan setiap serpihan pada GPU yang berbeza dan menggunakan serpihan itu untuk mengira bahagian yang berkaitan bagi keseluruhan produk matriks sebelum menyampaikannya untuk menggabungkan hasil.
Salah satu contoh ialah Megatron-LM, yang menyelaraskan pendaraban matriks dalam lapisan perhatian kendiri Transformer dan MLP. PTD-P menggunakan selari tensor, data dan saluran paip, dan penjadualan saluran paipnya memperuntukkan berbilang lapisan diskret kepada setiap peranti untuk mengurangkan kehilangan gelembung dengan mengorbankan peningkatan komunikasi rangkaian.
Kadangkala input rangkaian boleh diselaraskan merentas dimensi, dengan pengiraan selari yang tinggi berbanding dengan komunikasi silang. Keselarian jujukan ialah idea di mana jujukan input dibahagikan mengikut masa kepada beberapa sub-contoh, secara berkadar mengurangkan penggunaan memori puncak dengan membenarkan pengiraan diteruskan pada contoh yang lebih terperinci.
Menggunakan kaedah Campuran Pakar (KPM), hanya sebahagian kecil rangkaian digunakan untuk mengira keluaran mana-mana satu input .
Pendekatan contoh adalah dengan mempunyai beberapa set pemberat dan rangkaian boleh memilih set pemberat yang mana untuk digunakan pada masa inferens melalui mekanisme gating, yang membolehkan lebih banyak parameter Berbilang. Setiap set pemberat dipanggil "pakar," dan harapannya ialah rangkaian akan belajar untuk memberikan pengiraan dan kemahiran khusus kepada setiap pakar. Pakar yang berbeza boleh mengehoskan GPU yang berbeza, memberikan cara yang jelas untuk menskalakan bilangan GPU yang digunakan untuk model.
Ilustrasi: Rangkaian berpagar hanya memilih 2 daripada n pakar.
GShard memanjangkan parameter MoE Transformer kepada 600 bilion parameter, di mana hanya lapisan MoE dipecah merentas berbilang peranti TPU dan lapisan lain direplikasi sepenuhnya. Switch Transformer menskalakan saiz model kepada bertrilion parameter dengan kejimatan yang lebih tinggi dengan menghalakan satu input kepada seorang pakar.
Terdapat banyak strategi pengiraan lain yang boleh menjadikan latihan rangkaian saraf yang semakin besar lebih mudah ditangani. Contohnya:
Untuk mengira kecerunan, pengaktifan asal perlu disimpan, yang menggunakan banyak RAM peranti. Checkpointing (juga dipanggil pengiraan semula pengaktifan) menyimpan sebarang subset pengaktifan dan, semasa hantaran ke belakang, mengira semula pengaktifan perantaraan dalam masa, menjimatkan memori yang ketara pada kos pengiraan paling banyak satu pas ke hadapan penuh tambahan. Seseorang juga boleh terus menukar kos pengiraan dan ingatan dengan mengaktifkan pengiraan semula secara terpilih, iaitu menyemak subset pengaktifan yang mana kos penyimpanannya agak tinggi tetapi kos pengiraan adalah rendah.
Latihan ketepatan campuran ialah melatih model menggunakan nombor ketepatan yang lebih rendah (kebiasaannya FP16). Pemecut moden boleh mencapai kiraan FLOP yang lebih tinggi menggunakan nombor ketepatan yang lebih rendah dan juga menjimatkan RAM peranti. Dengan penjagaan yang betul, model yang terhasil boleh dihasilkan dengan hampir tiada kehilangan ketepatan.
Pemunggahan ialah pemunggahan sementara data yang tidak digunakan ke CPU atau antara peranti yang berbeza dan membacanya semula apabila diperlukan. Pelaksanaan yang naif akan melambatkan latihan dengan ketara, tetapi pelaksanaan yang canggih akan pra-mengambil data supaya peranti tidak perlu menunggu. Salah satu pelaksanaan idea ini ialah ZeRO, yang membahagikan parameter, kecerunan dan pengoptimum merentasi semua perkakasan yang tersedia dan memperkemaskannya semula mengikut keperluan.
Pengoptimum Cekap Memori telah dicadangkan untuk mengurangkan jejak memori keadaan berjalan yang dikekalkan oleh pengoptimum, seperti Adafactor.
Mampatan juga boleh digunakan untuk menyimpan hasil perantaraan dalam rangkaian. Contohnya, Gist memampatkan pengaktifan yang disimpan untuk hantaran ke belakang; DALL-E memampatkan kecerunan sebelum menyegerakkannya.
Atas ialah kandungan terperinci OpenAI: Empat kaedah asas untuk melatih rangkaian saraf yang besar. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!