Perkongsian ini akan menganalisis secara sistematik kesesakan prestasi utama dalam proses latihan model AI, serta penyelesaian pecutan utama semasa dan prinsip teknikal untuk kesesakan ini, dan memperkenalkan beberapa hasil praktikal Baidu Intelligent Cloud dalam hal ini.
Perkongsian hari ini terutamanya terdiri daripada tiga bahagian:
Perkenalkan dahulu mengapa kita perlu mempercepatkan latihan AI, iaitu, apakah latar belakang keseluruhan dan titik permulaan
Bahagian 2 Kami akan menganalisis secara sistematik kesesakan prestasi yang mungkin dihadapi semasa proses latihan sebenar, dan kemudian memperkenalkan penyelesaian pecutan utama semasa untuk menangani masalah ini
Bahagian ketiga memperkenalkan pecutan latihan AI platform Baidu Baige; Kesan praktikal pakej AIAK-Training pada beberapa pecutan latihan model.
Dalam sistem AI, proses daripada pengeluaran kepada penggunaan model secara amnya merangkumi dua peringkat: latihan luar talian dan penggunaan inferens.
Fasa latihan luar talian ialah proses menjana model Pengguna perlu menyediakan set data dan algoritma rangkaian saraf yang diperlukan untuk melatih model mengikut senario tugas mereka sendiri.
Algoritma boleh difahami sebagai fungsi matematik bukan cembung yang sangat kompleks, yang merangkumi banyak pembolehubah dan parameter. Proses latihan model sebenarnya mempelajari parameter dalam model rangkaian saraf.
Selepas latihan model bermula, data akan dibaca, kemudian dihantar ke model untuk pengiraan hadapan, dan ralat dengan nilai sebenar akan dikira. Kemudian lakukan pengiraan terbalik untuk mendapatkan kecerunan parameter, dan akhirnya mengemas kini parameter. Latihan melibatkan berbilang pusingan lelaran data.
Selepas latihan selesai, kami akan menyimpan model terlatih, kemudian menggunakan model dalam talian, menerima input sebenar pengguna dan melengkapkan inferens melalui pengiraan hadapan.
Oleh itu, sama ada latihan atau inferens, terasnya ialah pengiraan data. Untuk mempercepatkan kecekapan pengkomputeran, latihan dan inferens biasanya dilakukan melalui cip pecutan heterogen seperti GPU.
Selain itu, berdasarkan sejarah perkembangan model pembelajaran mendalam, untuk terus menembusi had atas ketepatan model, bilangan parameter model sebenarnya semakin berkembang dengan pantas. Walau bagaimanapun, bilangan parameter yang lebih besar akan membawa kerumitan pengiraan yang lebih besar.
Sebelah kiri rajah di bawah diambil daripada kertas awam Daripada ringkasan ini, kita melihat bahawa sebelum 2010, jumlah pengiraan model itu meningkat dua kali ganda dalam masa kira-kira 20 bulan. Dari 2010 hingga 2015, pengiraan model konvensional meningkat dua kali ganda setiap 5-6 bulan. Selepas 2015, trend latihan model besar muncul, dan jumlah pengiraan meningkat sebanyak 10 hingga 100 kali ganda.
Latihan model mempunyai keperluan yang semakin tinggi untuk kuasa dan infrastruktur pengkomputeran Latihan memerlukan lebih banyak kuasa pengkomputeran dan mengambil masa yang lebih lama, yang juga membawa kepada lebih banyak kos sumber. Di sini kami menyenaraikan data kos yang didedahkan dalam beberapa kertas kerja atau kajian, yang menggambarkan bahawa kos latihan model adalah sangat tinggi.
Oleh itu, cara menjalankan latihan model secara stabil dan cara mengurangkan kos secara berterusan dan meningkatkan kecekapan sebenarnya adalah penting.
Dalam konteks ini, Baidu Intelligent Cloud melancarkan platform pengkomputeran heterogen Baidu Baige·AI, dengan matlamat menyediakan penyelesaian perisian dan perkakasan bersepadu untuk senario AI. Melalui susunan teknologi empat lapisan pengkomputeran AI, storan AI, pecutan AI dan bekas AI, ia memenuhi keperluan senario perniagaan peringkat atasan.
Apabila kita memikirkan tentang pecutan prestasi, perkara pertama yang terlintas di fikiran mungkin ialah menggunakan perkakasan yang lebih baik.
Ini akan membawa peningkatan prestasi tertentu, tetapi dalam kebanyakan kes ia mungkin tidak menggunakan sepenuhnya kuasa pengkomputeran perkakasan Sebab utama ialah kecekapan pelaksanaan kod latihan belum dilaraskan kepada optimum atau lebih baik negeri.
Oleh itu, apabila kami memutuskan untuk menggunakan algoritma model tertentu, untuk mencapai kecekapan sumber dan kecekapan latihan yang lebih baik, kami perlu mengoptimumkannya secara sedar. Walau bagaimanapun, terdapat juga banyak cabaran teknikal di sini:
2. Analisis overhed prestasi latihan dan penyelesaian pecutan
Sebelum memperkenalkan kesan khusus Latihan AIAK, kami mula-mula memperkenalkan isu utama di bawah topik pecutan latihan Apakah idea teknikal dan prinsip program? Oleh kerana pengoptimuman latihan model itu sendiri ialah kerja perisian dan perkakasan yang komprehensif, dan susunan teknologinya agak rumit, kandungan hari ini pasti tidak akan dapat merangkumi semua butirannya idea. Pertama, mari kita lihat penyelesaian latihan model semasa. Dalam peringkat pembangunan yang lalu, terdapat dua perubahan utama dalam penyelesaian latihan model Satu ialah perubahan daripada latihan kad tunggal kepada latihan teragih, dan satu lagi ialah perubahan daripada latihan selari data kepada latihan selari hibrid berbilang dimensi. Titik pemanduan teras di sini ialah jumlah data latihan dan jumlah parameter model.Kaedah latihan kad tunggal: Apabila sebenarnya menggunakan mod ini, jumlah parameter dan data model secara amnya agak kecil, dan masa latihan bagi satu kad boleh diterima. Skala parameter model perlu memastikan bahawa memori video satu kad boleh memenuhi had atas storan semasa proses latihan. Mengikut konfigurasi kapasiti memori video kad GPU baharu, saiz maksimum yang boleh diletakkan secara amnya ialah 1 bilion parameter
Kami mula-mula memahami overhed prestasi yang wujud semasa latihan kad tunggal dari perspektif keseluruhan perisian dan perkakasan.
Sebelah kiri gambar di bawah ialah proses latihan kami dari perspektif perisian. Proses latihan kad tunggal terutamanya merangkumi pembacaan data, prapemprosesan data, output pengiraan hadapan dan pengiraan kerugian, pengiraan terbalik mengikut fungsi kehilangan untuk mendapatkan kecerunan setiap parameter lapisan, dan akhirnya mengemas kini parameter model mengikut kecerunan. Teruskan proses ini sehingga latihan berkumpul. Sebelah kanan rajah di bawah ialah rajah topologi perkakasan nod yang dipermudahkan. Bahagian atas ialah storan data, yang boleh menjadi storan tempatan atau storan rangkaian. Kemudian terdapat CPU dan memori Terdapat 8 kad GPU yang disambungkan ke CPU melalui berbilang Suis PCIe, bernombor dari 0 hingga 7, dan 8 kad disambungkan melalui NVSwitch. Contoh pengkomputeran yang berbeza mempunyai topologi perkakasan yang berbeza.Oleh itu, dari satu perspektif kad, terdapat terutamanya overhed dalam I/O, prapemprosesan CPU, penyalinan data antara CPU dan GPU, pengiraan GPU, dsb.
Kemudian mari kita lihat proses selari data.
Sebelah kiri rajah di bawah masih merupakan proses utama latihan, dan bahagian kanan menunjukkan topologi perkakasan gugusan latihan 3-mesin 24-kad 3 mesin saling bersambung melalui rangkaian.
Kami juga memperkenalkan pada bahagian sebelumnya bahawa dalam keselarian data, setiap peranti melakukan proses pengiraan ke hadapan dan ke belakang secara selari dan bebas Oleh itu, setiap proses latihan juga akan menghadapi latihan kad tunggal yang dinyatakan di atas isu.
Kesejajaran data memastikan bahawa ia adalah setara secara matematik dengan latihan kad tunggal Ia adalah perlu untuk memastikan bahawa parameter model setiap kad kekal konsisten semasa proses lelaran. Di satu pihak, adalah perlu untuk menjadikan status permulaan parameter model setiap kad GPU konsisten Ini biasanya dilakukan dengan menyiarkan status parameter pada kad pertama ke kad lain sebelum memulakan latihan.
Semasa latihan, disebabkan oleh data yang berbeza yang diproses oleh setiap peranti, nilai kehilangan model yang diperoleh melalui pengiraan hadapan juga berbeza. Oleh itu, ia juga perlu untuk mengira kecerunan selepas setiap peranti mengira kecerunan secara terbalik , kemas kini parameter model dengan nilai kecerunan purata untuk memastikan parameter model setiap kad kekal konsisten semasa proses lelaran.
Purata kecerunan melibatkan proses komunikasi, termasuk komunikasi antara kad dalam nod, serta overhed komunikasi rangkaian merentas nod. Komunikasi di sini termasuk komunikasi segerak dan komunikasi tak segerak Walau bagaimanapun, untuk memastikan penumpuan latihan model, penyelesaian komunikasi segerak biasanya digunakan, dan kerja pengoptimuman seterusnya juga dijalankan berdasarkan komunikasi segerak.
Seperti yang dapat dilihat daripada di atas, keselarian data terutamanya menambah overhed komunikasi tambahan berbanding latihan kad tunggal.
Melalui analisis di atas, kita tahu bahawa mempercepatkan latihan AI bukan sekadar aspek kerja tertentu, tetapi memerlukan pertimbangan menyeluruh daripada dimensi sistem seperti pemuatan data, pengiraan model, dan komunikasi teragih. Pemuatan data yang dinyatakan di sini termasuk data I/O, prapemprosesan, salinan memori dan proses lain.
Dalam amalan pengoptimuman khusus, memandangkan model yang akan dioptimumkan, latihan model yang mempercepatkan bermakna terus meningkatkan daya pemprosesan keseluruhan latihan (bilangan sampel yang boleh dilatih sesaat). Dalam proses ini, secara amnya kita boleh terlebih dahulu menganalisis daya tampung latihan satu kad Apabila daya tampung latihan satu kad bertambah baik, kita kemudiannya boleh melihat mengembangkan daripada satu kad kepada berbilang kad untuk melihat cara meningkatkan nisbah pecutan latihan. berbilang kad.
Pertama sekali, pengoptimuman latihan kad tunggal, matlamat pengoptimuman muktamad adalah untuk menghabiskan sepanjang masa pada pengkomputeran GPU dan kadar penggunaan pemecut ialah 100%. Sudah tentu, sukar untuk mencapai keadaan ini sepenuhnya dalam amalan, tetapi kita boleh membimbing atau mengukur kerja kita mengikut penunjuk ini.
Kunci kepada pengoptimuman prestasi kad tunggal termasuk dua bahagian:
Kemudian kembangkan daripada satu kad kepada berbilang kad, matlamatnya ialah bagaimana untuk mencapai nisbah pecutan linear. Penunjuk nisbah pecutan linear hanya bermaksud sama ada prestasi latihan adalah dua kali ganda daripada satu kad apabila latihan dikembangkan daripada 1 kad kepada 2 kad.
Inti di sini adalah untuk mengoptimumkan kecekapan komunikasi teragih Di satu pihak, ia adalah pengoptimuman tahap perkakasan Sebaliknya, dalam komunikasi sebenar, kita perlu mempertimbangkan cara menggunakan yang baik sumber jalur lebar rangkaian, atau sama ada proses komunikasi boleh disembunyikan.
Di bawah ini kami akan mengembangkan aspek ini secara terperinci.
Yang pertama ialah pengoptimuman pemuatan data.
Selepas kami membuat instantiate pemuat data, kami akan terus mengulang pemuat data untuk membaca kumpulan data untuk latihan model.
Jika tiada pengoptimuman dilakukan di sini, seperti yang ditunjukkan di bahagian atas rajah di bawah, proses pemuatan data setiap kelompok dan proses latihan model setiap kelompok sebenarnya dijalankan secara bersiri. Dari perspektif GPU, akan terdapat jurang pengiraan yang disebabkan oleh pemuatan data, dan akan terdapat pembaziran masa dalam sumber pengkomputeran.
Selain menggunakan perkakasan yang lebih baik untuk terus meningkatkan kecekapan pembacaan data seperti yang dinyatakan sebelum ini, bagaimana lagi kita boleh mengoptimumkannya?
Malah, semasa proses latihan AI, terdapat dua ciri utama dalam akses data:
Oleh itu, apabila kami tidak bergantung pada perubahan peringkat perkakasan, satu kerja pengoptimuman yang boleh kami lakukan ialah pengambilan data semasa melatih kumpulan pertama data, kami boleh memuatkan kumpulan data seterusnya terlebih dahulu . Biarkan proses I/O dan pengiraan pada GPU selari sepenuhnya.
Pertama sekali, kita perlu menggunakan penyelesaian pengoptimuman sedia ada dalam pemuat data Mula-mula, tetapkan hiperparameter num_workers secara munasabah dan baca data melalui pelbagai proses boleh mencapai data Prefetch daripada sistem storan ke memori hos. Yang kedua ialah menyalin dari memori hos ke memori GPU, yang boleh dipercepatkan melalui mekanisme memori yang disematkan.
Pengenalan ringkas kepada prinsip utama pecutan memori yang disematkan: Terdapat dua jenis data memori: memori boleh halaman dan memori yang disematkan Data dalam memori boleh halaman mungkin ditukar kepada cakera. Dalam kes ini, apabila melaksanakan H2D, mungkin perlu terlebih dahulu membaca dari cakera ke memori, dan kemudian menyalin dari memori ke memori video. Di samping itu, apabila menyalin data memori boleh halaman ke memori GPU, anda perlu mencipta penimbal memori yang disematkan sementara dahulu, menyalin data daripada memori boleh halaman ke memori yang disematkan, dan kemudian memindahkannya ke GPU, yang juga memerlukan operasi pemindahan data tambahan.
Walau bagaimanapun, apabila kami mendayakan penyelesaian di atas, kami hanya melaksanakan prefetching daripada sistem storan ke memori hos, mempercepatkan kelajuan penyalinan data daripada hos ke peranti. Walau bagaimanapun, salinan memori dari hos ke peranti dan kernel pengiraan sebenar masih dilaksanakan secara bersiri pada GPU, iaitu, masih terdapat jurang masa yang kecil pada GPU.
AIAK telah membuat pengoptimuman lanjut untuk menangani masalah ini, yang boleh merealisasikan pertindihan pengiraan H2D dan hadapan.
Dalam senario selari data, satu perkara yang perlu diberi perhatian ialah data perlu dibahagikan sama rata.
Sekiranya data yang diperuntukkan untuk setiap proses latihan tidak seimbang, jumlah pengiraan akan berbeza, yang akan mengakibatkan masa siap pengiraan ke hadapan dan pengiraan terbalik bagi setiap proses adalah berbeza pengiraan pertama akan berakhir dalam pengiraan terbalik Semasa proses, ia akan terlebih dahulu memasuki pautan komunikasi kecerunan Walau bagaimanapun, kerana komunikasi Allreduce adalah operasi komunikasi segerak, semua proses perlu bermula dan berakhir pada masa yang sama memulakan komunikasi terlebih dahulu akan menunggu semua proses lain untuk turut sama memulakan operasi komunikasi yang lengkap. Akan ada masalah terbiar sumber yang disebabkan oleh kelajuan yang berbeza.
Untuk menyelesaikan masalah ini, setiap proses perlu menggunakan saiz kelompok yang sama untuk membaca data, dan jumlah data dalam setiap kelompok mesti seimbang. Data imej biasanya bersaiz tetap untuk latihan, manakala model NLP perlu memproses penyataan panjang berubah-ubah, yang mungkin memerlukan pemprosesan khas Sebagai contoh, data boleh dipadatkan dengan panjang yang sama, atau diedarkan secara sama rata dengan menyusun panjang sampel, dsb.
Pengoptimuman kecekapan pengiraan diperkenalkan di bawah.
Pengiraan termasuk kemas kini ke hadapan, belakang dan parameter. Matlamat mengoptimumkan pengiraan adalah untuk menggunakan sepenuhnya kuasa pengkomputeran perkakasan heterogen Keadaan yang ideal adalah untuk membolehkan prestasi pengkomputeran sebenar cip GPU mencapai kemuncak teori.
Mari kita menganalisisnya terlebih dahulu dari perspektif operator tunggal Apabila kita bersedia untuk melakukan operasi pengiraan pada GPU, terdapat empat langkah dalam proses yang dipermudahkan.
Berdasarkan perkadaran pengkomputeran dan overhed akses memori, pengendali biasanya diklasifikasikan sebagai kesesakan pengkomputeran atau kesesakan akses memori.
Apabila berkembang daripada operator kepada latihan model yang lengkap, kerana banyak pengiraan Kernel perlu dilakukan secara berterusan, akan terdapat banyak ralat antara pengiraan Kernel yang disebabkan oleh Pelancaran Kernel dan membaca dan menulis hasil perantaraan masalah jurang.
Seperti yang dapat dilihat daripada di atas, pengoptimuman kecekapan pengiraan model memerlukan pertimbangan komprehensif pengoptimuman akses memori, pengoptimuman pengiraan dan pengoptimuman overhed lain.
Yang pertama ialah gabungan operator. Apabila pengendali dilaksanakan pada GPU asas, satu atau lebih Pelancaran Kernel akan dimulakan dan data interaktif antara Kernel juga perlu melalui memori video gabungan Operator adalah untuk menggabungkan berbilang Kernel GPU menjadi satu Kernel besar untuk permulaan bersatu dan perlaksanaan.
Bagaimana untuk melaksanakan gabungan operator secara khusus?
Satu cara untuk menganalisis operasi yang tidak cekap dalam model, operator gabungan tulisan tangan berdasarkan pengalaman pakar. Pada GPU, ini terutamanya mengenai penyelidikan dan pembangunan pengendali CUDA, dan terdapat ambang tertentu di sini. AIAK-Training akan menyediakan pelaksanaan operator yang cekap dan dioptimumkan berdasarkan struktur model biasa atau keperluan pelanggan.
Cara lain ialah menyusun dan mengoptimumkan penyelesaian. Pengoptimuman pengiraan dilakukan melalui penyusunan, dan kod dijana secara automatik, dengan itu mengurangkan kos pengoptimuman manual pada perkakasan yang berbeza. Walau bagaimanapun, banyak penyelesaian kompilasi semasa lebih dioptimumkan untuk inferens, dan penyelesaian latihan masih dalam proses evolusi pesat. Walau bagaimanapun, dari perspektif prestasi muktamad, kerja operator gabungan tulisan tangan masih tidak dapat dipisahkan pada masa hadapan.
Berikut memperkenalkan beberapa kes praktikal gabungan operator. Yang pertama ialah pengoptimuman struktur rangkaian model biasa.
Rajah di bawah menunjukkan pengoptimuman gabungan pengiraan kami untuk modul teras WindowAttention dalam model SwinTransformer.
Struktur WindowAttention, formula operasi teras ditunjukkan dalam rajah di bawah. Semasa proses pengiraan, 7 kernel pengiraan perlu dilaksanakan mengikut urutan. Ditambah dengan beberapa bentuk semula dan operasi penukaran lain, sejumlah 10 Kernel diperlukan untuk dilancarkan. Melalui analisis prestasi, didapati bahawa overhed redundansi selang bagi kernel pelancaran menyumbang lebih daripada 80% daripada masa hujung ke hujung semasa proses pelaksanaan sebenar, menghasilkan ruang pengoptimuman yang besar untuk modul ini.
Dengan menggabungkan Kernel ini menjadi satu, masa pelaksanaan keseluruhan modul dikurangkan daripada 392 mikrosaat kepada 13 mikrosaat dan satu operator dipercepatkan sebanyak 30 kali. Kecekapan latihan keseluruhan model telah dipercepatkan lebih daripada 20% hujung ke hujung.
Idea teras pengoptimuman ini terutamanya mempunyai tiga perkara:
Rajah berikut ialah contoh gabungan operasi data, yang merupakan pengoptimuman operasi mampatan koordinat dalam model FCOS3D.
Melalui analisis prestasi, didapati terdapat sejumlah besar jurang GPU semasa operasi ini dan penggunaan GPU adalah rendah. Fungsi utama operasi ini adalah untuk memampatkan 3D-Tensor menjadi 2D-Tensor berdasarkan indeks. Dalam pelaksanaan asli, indeks mula-mula dijana pada bahagian hos, kemudian salinan H2D dilakukan, dan akhirnya pemampatan Tensor selesai, yang akan menyebabkan salinan tambahan dan menunggu overhed.
Untuk tujuan ini, kami melaksanakan semula bahagian operasi ini Idea teras adalah untuk memindahkan semua operasi ke GPU, melengkapkan penjanaan indeks dan pemampatan Tensor pada GPU secara langsung, mengurangkan penglibatan CPU dan mengelakkan perkara yang tidak perlu. Salinan memori antara CPU-GPU.
Masa pelaksanaan operator tunggal dikurangkan daripada 9.69 milisaat kepada 32 mikrosaat, pecutan 300 kali dan latihan hujung ke hujung keseluruhan model dipertingkatkan lebih daripada 10%.
Seterusnya kami memperkenalkan satu lagi idea pengoptimuman pengkomputeran, iaitu untuk meningkatkan keselarian pengiraan dan menggunakan sepenuhnya kelebihan pengkomputeran selari GPU juga memperkenalkannya dengan bantuan beberapa kes praktikal.
Kami mendapati bahawa dalam sesetengah model, beberapa operasi dilakukan secara bersiri. Sebagai contoh, dalam beberapa model pengesanan sasaran, semasa proses pengiraan kerugian, beberapa operasi tidak dilakukan mengikut kumpulan, tetapi untuk gelung setiap gambar atau sampel Dalam kes ini, apabila kita meningkatkan saiz kelompok, kerana Pensirian di sini mungkin tidak mencapai prestasi yang kita inginkan.
Ambil operasi SimOTA dalam YOLOv7 sebagai contoh Dalam pelaksanaan asli, setiap imej kumpulan dilalui melalui gelung untuk, dan kemudian penetapan label SimOTA dilakukan untuk gtbox imej. Pelaksanaan bersiri ini menghasilkan penggunaan GPU yang sangat tidak cekap untuk bahagian operasi ini.
Tiada pergantungan antara data semasa memproses setiap gambar. Oleh itu, salah satu tugas yang telah kami lakukan ialah menukar pengiraan bersiri kepada pengiraan selari kelompok, dan mempercepatkan kecekapan bahagian pengiraan ini dengan menyelaraskan peruntukan label untuk kumpulan data.
Dalam kesan akhir, masa operasi SimOTA menurun daripada 384 milisaat kepada 69 milisaat, kecekapan pengkomputeran meningkat sebanyak 5.5 kali, dan kecekapan latihan hujung ke hujung bagi keseluruhan model meningkat sebanyak 18% di atas.
Terdapat senario lain yang serupa semasa proses latihan model, seperti kemas kini parameter. Apabila parameter dikemas kini, secara lalai, setiap parameter dilalui melalui gelung, dan kemudian setiap parameter akan memulakan Cuda Kernel untuk kemas kini parameter, dan kemudian melaksanakannya dalam urutan.
Memandangkan situasi ini, AIAK juga telah menambah pengoptimuman FusedOptimizer Dengan menggabungkan pengendali kemas kini parameter, ia boleh mengemas kini parameter dalam kelompok dan mengurangkan bilangan Pelancaran Inti.
Berikut memperkenalkan satu lagi kaedah pengoptimuman Graf CUDA, terutamanya untuk mengurangkan overhed Kernel Pelancaran CPU.
Graf CUDA ialah ciri yang diperkenalkan dalam versi CUDA 10 Ia boleh merangkumkan satu siri Kernel CUDA ke dalam satu unit Berbilang GPU Kernel boleh dilancarkan melalui satu operasi Pelancaran CPU, sekali gus mengurangkan overhead Kernel Pelancaran CPU.
Seperti yang ditunjukkan dalam rajah di bawah, secara lalai, CPU perlu melancarkan berbilang Kernel dalam urutan Jika masa pengiraan Kernel agak pendek, jurang Pelancaran antara Kernel mungkin menjadi hambatan prestasi. Dengan Graf CUDA, anda hanya perlu meluangkan sedikit masa tambahan untuk membina Graf, dan pelepasan Graf seterusnya boleh memendekkan jurang antara Kernel semasa pelaksanaan sebenar.
Kini banyak rangka kerja turut menambah sokongan untuk Graf CUDA, dan K boleh mendayakan fungsi ini dengan memasukkan beberapa kod. Walau bagaimanapun, terdapat beberapa sekatan penggunaan, seperti tidak menyokong bentuk dinamik, tidak menyokong aliran kawalan dinamik, tidak dapat menangkap operasi CPU semasa proses, dsb. Anda boleh cuba menggunakan keupayaan pengoptimuman ini berdasarkan situasi model.
Berikut ialah kaedah pengoptimuman pengiraan terakhir untuk menggunakan sepenuhnya unit pengkomputeran Tensor Core.
GPU biasanya mengandungi berbilang SM, dan setiap SM termasuk teras pengkomputeran jenis data yang berbeza, serta pelbagai sumber storan. Ditunjukkan di sebelah kiri rajah di bawah ialah gambar rajah skema NVIDIA A100 SM Sebuah SM mengandungi 64 Teras CUDA FP32 dan 4 Teras Tensor.
Semasa latihan model, FP32 CUDA Core digunakan terutamanya untuk pengiraan secara lalai, dan Tensor Core ialah unit pelaksanaan perkakasan khas yang diperkenalkan daripada siri Volta GPU Ia digunakan terutamanya untuk mempercepatkan kecekapan Operasi .
Berbanding dengan Teras CUDA FP32 yang hanya boleh melakukan pengiraan pada dua skalar pada satu masa, Teras Tensor boleh melakukan pengiraan pada dua matriks pada satu masa, jadi daya pemprosesan pengiraan Tensor Core jauh lebih tinggi daripada FP32 CUDA teras.
Dalam A100, Tensor Core menyokong pelbagai jenis data titik terapung Untuk latihan pembelajaran mendalam, ia mungkin melibatkan mod FP16, BF16 dan TF32.
TF32 digunakan terutamanya dalam senario latihan ketepatan tunggal Berbanding dengan latihan FP32, daya pengkomputeran teori meningkat sebanyak 8 kali sambil mengekalkan keperluan jalur lebar akses memori yang sama.
FP16/BF16 digunakan terutamanya dalam senario latihan ketepatan campuran Berbanding dengan latihan FP32, keperluan akses memori dikurangkan separuh, dan daya pengkomputeran teori meningkat sebanyak 16 kali.
Menggunakan Tensor Core, anda boleh menggunakan antara muka cublas atau cuda yang mendasari untuk pengaturcaraan Bagi pembangun algoritma, adalah lebih mudah untuk menggunakan latihan TF32 atau penyelesaian latihan ketepatan campuran yang disediakan dalam rangka kerja.
Yang pertama ialah mod latihan TF32, TF32 telah diperkenalkan oleh Ampere.
TF32 mempunyai 8 bit eksponen, 10 bit mantissa dan 1 bit tanda dalam ungkapan nombor titik terapung. Bit eksponen adalah sama dengan FP32, iaitu julat perwakilan data adalah sama, tetapi bit mantissa lebih rendah daripada FP32 dan sama dengan FP16.
Perlu diambil perhatian bahawa TF32 bukanlah jenis berangka terbuka, tetapi mod pengiraan Tensor Core Iaitu, pengguna tidak boleh terus mencipta nombor titik terapung jenis TF32.
Apabila TF32 didayakan, Tensor Core akan menukar FP32 kepada TF32 secara automatik apabila mengira matriks atau operasi lilitan Selepas pengiraan selesai, jenis data output masih jenis FP32.
Latihan TF32 didayakan secara lalai dalam sesetengah versi rangka kerja, ia mungkin perlu didayakan secara manual melalui pembolehubah persekitaran atau konfigurasi parameter untuk butiran, sila rujuk manual pengguna rangka kerja.
Namun, memandangkan julat ketepatan TF32 dikurangkan berbanding FP32, anda perlu memberi perhatian kepada kesan ke atas ketepatan penumpuan model semasa latihan sebenar.
Latihan ketepatan campuran merujuk kepada latihan menggunakan ketepatan campuran FP32 dan FP16 sambil meminimumkan kehilangan ketepatan model.
Faedah utama latihan ketepatan campuran ialah: berbanding dengan latihan FP32, keperluan memori dikurangkan dan rangkaian yang lebih besar boleh dilatih atau saiz kelompok yang lebih besar boleh digunakan. Menggunakan jalur lebar memori yang kurang boleh mempercepatkan penghantaran data, dan pengiraan separuh ketepatan juga boleh menjadikan operasi matematik lebih pantas
Namun, kerana julat bit eksponen dan bit mantissa FP16 adalah lebih kecil daripada FP32, nilai berangka Julat perwakilan dan ketepatan akan dikurangkan Dalam penggunaan sebenar, masalah limpahan berangka mungkin berlaku disebabkan oleh julat perwakilan yang sempit, atau ralat pembundaran mungkin berlaku kerana ketepatan yang tidak mencukupi.
Untuk mengoptimumkan masalah yang sama, terdapat beberapa tugas teknikal utama dalam penyelesaian latihan ketepatan campuran:
Pada masa ini semua rangka kerja menyokong ketepatan campuran. Komponen AIAK-Training seterusnya memperkenalkan mod ketepatan campuran AMP O2 dalam NVIDIA Apex, yang akan memindahkan lebih banyak pengiraan kepada FP16 secara lebih agresif untuk mempercepatkan latihan. Berbanding dengan mod O1 lalai, kelajuan akan dipertingkatkan lagi, tetapi ketepatan mungkin terjejas dan perlu disahkan dengan model tertentu.
AIAK-Training menyediakan kaedah penggunaan yang serasi dengan penggunaan asli amp torch, menjadikannya mudah untuk mendayakan mod O2.
Berikut adalah mengenai pengoptimuman komunikasi Ini juga merupakan topik yang sangat besar dan melibatkan banyak kandungan.
Seperti yang dinyatakan sebelum ini, komunikasi terutamanya diperkenalkan dalam latihan yang diedarkan, kerana mengembangkan daripada satu kad kepada berbilang kad memerlukan beberapa penyegerakan data antara berbilang kad ini dilaksanakan melalui komunikasi.
Angka berikut menyenaraikan seni bina keseluruhan untuk pengoptimuman komunikasi:
Mula-mula kita lihat idea pengoptimuman di peringkat strategi komunikasi Yang pertama ialah pengoptimuman tersembunyi komunikasi.
Dalam selari data, komunikasi penyegerakan kecerunan dilakukan semasa proses latihan terbalik Selepas kecerunan dikira secara terbalik, purata kecerunan global boleh dilakukan.
Jika tiada pengoptimuman mekanisme dilakukan, pengiraan terbalik dan komunikasi akan dijalankan secara bersiri, dan akan terdapat jurang masa dalam pengiraan.
Memandangkan tiada pergantungan data antara komunikasi kecerunan sebelumnya dan pengiraan kecerunan seterusnya semasa proses terbalik, komunikasi kecerunan sebelumnya dan pengiraan kecerunan seterusnya boleh diselaraskan, membenarkan dua hingga Memakan masa pengguna bertindih antara satu sama lain, dengan itu menyembunyikan sebahagian daripada memakan masa komunikasi.
Di peringkat pelaksanaan, operator komunikasi dan pengiraan biasanya dijadualkan ke aliran cuda yang berbeza Operator komunikasi dijadualkan ke aliran komunikasi, operator pengiraan dijadualkan ke aliran pengiraan, dan pengiraan pada aliran berbeza adalah Sub-langkah boleh. dilancarkan dan dilaksanakan secara selari, dengan itu mencapai pertindihan selari komunikasi kecerunan dan pengiraan dalam arah songsang.
Pada masa ini, keupayaan pengoptimuman ini didayakan secara lalai dalam rangka kerja.
Kedua, pengoptimuman penyepaduan komunikasi.
Secara lalai, setiap kecerunan dalam model perlu memulakan operasi komunikasi. Jika saiz kecerunan tunggal agak kecil, maka apabila paket data kecil sebenarnya dikomunikasikan, penggunaan lebar jalur rangkaian akan menjadi sangat rendah dan prestasi komunikasi akan menjadi lemah.
Penyatuan komunikasi adalah untuk menggabungkan berbilang kecerunan bersama-sama untuk satu komunikasi Daripada analisis model overhed komunikasi, ia bukan sahaja dapat meningkatkan penggunaan lebar jalur, tetapi juga mengurangkan tempoh kelewatan permulaan komunikasi.
Banyak rangka kerja latihan yang diedarkan kini turut menyokong strategi gabungan kecerunan secara lalai Terdapat perbezaan tertentu dalam kaedah pelaksanaan rangka kerja yang berbeza memerlukan rundingan kecerunan untuk menentukan jujukan komunikasi terlebih dahulu, manakala yang lain menggunakan baldi statik.
Walaupun rangka kerja menyokong gabungan komunikasi secara lalai, saiz gabungan kecerunan secara amnya boleh dikonfigurasikan melalui parameter Pengguna boleh melaraskan ambang gabungan yang sesuai mengikut keperluan persekitaran dan model fizikal, dan seharusnya boleh mencapai faedah yang lebih baik.
Jika anda berada dalam senario latihan dengan lebar jalur rangkaian rendah, seperti persekitaran TCP lebar jalur rendah, kelewatan dalam penyegerakan kecerunan mungkin menjadi hambatan prestasi utama latihan.
Pengoptimuman pengurangan frekuensi komunikasi, idea paling mudah ialah meningkatkan saiz kelompok, setiap lelaran lebih banyak data, mengurangkan bilangan lelaran, iaitu mengurangkan kuantiti komunikasi .
Walau bagaimanapun, lebih besar saiz kelompok, lebih baik saiz kelompok yang lebih besar boleh menyebabkan ketepatan penumpuan model berkurangan atau kelajuan penumpuan menjadi perlahan. Sebagai tindak balas kepada masalah yang sama, industri juga telah mencadangkan algoritma pengoptimuman seperti LARS dan LAMB, yang boleh mengurangkan masalah yang sama dengan menyesuaikan kadar pembelajaran melalui lapisan AIAK-Training juga telah menambah sokongan.
Untuk meningkatkan saiz kelompok, jika memori video mencukupi, anda boleh terus melaraskan parameter super saiz kelompok. Jika ingatan video ketat, anda juga boleh melangkau beberapa komunikasi kecerunan melalui pengumpulan kecerunan, yang sebenarnya bersamaan dengan meningkatkan saiz kelompok.
Berikut memperkenalkan penyelesaian pengoptimuman untuk topologi komunikasi - komunikasi topologi hierarki, yang juga bertujuan untuk situasi di mana lebar jalur rangkaian antara mesin agak rendah.
Melalui komunikasi hierarki, lebar jalur interkoneksi yang tinggi dalam mesin boleh digunakan sepenuhnya, manakala kesan jalur lebar rangkaian rendah antara mesin boleh dilemahkan.
Penyelesaian komunikasi ini juga dilaksanakan dalam AIAK Dalam persekitaran TCP 25Gbps, 4 mesin dan 32 kad telah diuji untuk latihan SwinTransformer Melalui allreduce berlapis, prestasi boleh dipercepatkan sebanyak 85%.
Akhir sekali, kami memperkenalkan pengoptimuman di peringkat perpustakaan komunikasi asas, teknologi komunikasi GPU Direct RDMA Teknologi ini memerlukan persekitaran perkakasan untuk menyokong rangkaian RDMA.
Komunikasi RDMA membolehkan aplikasi tempatan membaca dan menulis secara terus memori maya mod pengguna bagi aplikasi jauh Keseluruhan proses komunikasi, kecuali untuk langkah awal menghantar permintaan penghantaran, yang memerlukan penyertaan CPU, adalah dilengkapkan oleh perkakasan kad rangkaian Ia tidak memerlukan penyalinan memori, gangguan sistem dan pemprosesan perisian, jadi ia boleh mencapai kependaman yang sangat rendah dan lebar jalur yang tinggi.
Dalam senario GPU, teknologi GPU Direct RDMA menambahkan lagi sokongan untuk RDMA untuk mengakses terus memori GPU, yang mengelakkan penyalinan data berulang-alik antara memori GPU dan memori hos semasa komunikasi, dan seterusnya mengurangkan silang -kelewatan komunikasi mesin.
Walau bagaimanapun, dalam kes sebenar, kami mendapati bahawa sesetengah pengguna membeli persekitaran RDMA, tetapi sebenarnya tidak menggunakan teknologi GDR, menyebabkan kecekapan komunikasi yang rendah. Beberapa item konfigurasi utama disenaraikan di sini Jika anda mempunyai masalah yang sama, anda boleh menyelesaikan masalah dan menetapkannya mengikut urutan.
Saya telah memperkenalkan beberapa idea dan penyelesaian pengoptimuman prestasi utama semasa Secara keseluruhannya, tidak kira pengoptimuman I/O, pengoptimuman pengkomputeran dan pengoptimuman komunikasi, idea pengoptimuman yang paling mudah adalah terutamanya cara untuk. Optimumkan operasi itu sendiri, atau sama ada bilangan kali operasi boleh dikurangkan, atau sama ada operasi boleh selari dengan proses lain untuk menyembunyikan overhed, dsb.
Banyak kerja pengoptimuman telah diperkenalkan sebelum ini, setiap pengguna perlu mempunyai pemahaman yang jelas tentang prinsip pelaksanaan kejuruteraan rangka kerja. Untuk memudahkan kos pengoptimuman latihan, kami membina pakej pecutan AIAK-Training.
Latihan AIAK akan membina keupayaan pengoptimuman pautan penuh di sekitar pemuatan data, pengiraan model, komunikasi, dll. Pada masa yang sama, kami akan merangkum keupayaan pengoptimuman ini ke dalam antara muka yang ringkas dan mudah digunakan, dan pengguna boleh memasukkan beberapa baris kod, yang boleh menjadi lebih mudah untuk kegunaan bersepadu. Pada masa yang sama, kami juga sedang membina mekanisme untuk pengoptimuman gabungan strategi automatik untuk membantu pengguna memilih strategi pengoptimuman yang berkesan secara automatik.
Apabila digunakan secara khusus, komponen perpustakaan pecutan boleh dipasang dan digunakan secara bebas, atau anda boleh terus menggunakan imej bekas yang kami sediakan.
Berikut ialah beberapa kes aplikasi khusus.
Seperti yang ditunjukkan dalam rajah di bawah, ia adalah terutamanya untuk pengoptimuman pemuat data. Dalam senario ini, modelnya agak kecil, saiz set data juga agak kecil, dan kelajuan pengiraan tulen sebenarnya lebih cepat Walau bagaimanapun, masa memuatkan data merentas EPOCH adalah agak lama, menyebabkan I/O memakan masa kesesakan utama.
Dengan menggunakan proses guna semula dan mekanisme prefetch penuh yang disediakan dalam AIAK, keseluruhan latihan model dipercepatkan sebanyak 166%.
Gambar di bawah ialah kes pengoptimuman pengiraan model.
Dalam senario latihan model kelas Transformer, semasa latihan sebenar, skalabiliti komunikasi adalah hampir kepada linear, nisbah penggunaan masa I/O juga sangat rendah, dan pengiraan adalah kesesakan prestasi utama.
Untuk model ini, AIAK-Training telah menjalankan satu siri pengoptimuman peringkat pengiraan, termasuk gabungan operator bagi struktur utama, ketepatan campuran, penalaan kelompok besar, dsb., dan kecekapan latihan keseluruhan model mempunyai meningkat sebanyak 169%.
Kes dalam rajah di bawah terutamanya menggunakan pengoptimuman pada tahap komunikasi, yang membolehkan strategi pengoptimuman untuk rangkaian jalur lebar rendah dalam persekitaran TCP awan pada beberapa model klasik, seperti resnet50, bert, vgg16 boleh mempercepatkan 26%~78%.
Dalam senario pemanduan autonomi, kami juga telah menjalankan satu siri ujian prestasi latihan model pada penglihatan 2D, penglihatan 3D, lidar dan model pra-gabungan biasa prestasi dipercepatkan sebanyak 49%~391%.
Atas ialah kandungan terperinci Analisis prinsip pecutan latihan AI dan perkongsian amalan kejuruteraan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!