Rumah > Peranti teknologi > AI > Bahasa pengaturcaraan OpenAI mempercepatkan penaakulan Bert 12 kali, dan enjin menarik perhatian

Bahasa pengaturcaraan OpenAI mempercepatkan penaakulan Bert 12 kali, dan enjin menarik perhatian

WBOY
Lepaskan: 2023-04-23 15:19:07
ke hadapan
1350 orang telah melayarinya

Sejauh manakah kuasa satu baris kod? Pustaka Kernl yang akan kami perkenalkan hari ini membolehkan pengguna menjalankan model pengubah Pytorch beberapa kali lebih pantas pada GPU dengan hanya satu baris kod, sekali gus mempercepatkan inferens model tersebut. ​

Secara khusus, dengan restu Kernl, kelajuan inferens Bert adalah 12 kali lebih pantas daripada garis dasar Memeluk Wajah. Pencapaian ini disebabkan terutamanya oleh Kernl menulis kernel GPU tersuai dalam bahasa pengaturcaraan OpenAI baharu Triton dan TorchDynamo. Pengarang projek adalah dari Lefebvre Sarrut.

Bahasa pengaturcaraan OpenAI mempercepatkan penaakulan Bert 12 kali, dan enjin menarik perhatian

Alamat GitHub: https://github.com/ELS-RD/kernl/

Berikut ialah perbandingan antara Kernl dan enjin inferens lain Nombor dalam kurungan dalam absis masing-masing mewakili saiz kelompok dan panjang jujukan, dan ordinat ialah pecutan inferens.

Bahasa pengaturcaraan OpenAI mempercepatkan penaakulan Bert 12 kali, dan enjin menarik perhatian

Tanda aras dijalankan pada GPU 3090 RTX dan CPU Intel 12 teras.

Daripada keputusan di atas, Kernl boleh dikatakan sebagai enjin inferens terpantas apabila melibatkan input jujukan panjang (betul-betul dalam gambar di atas ) separuh), hampir dengan TensorRT NVIDIA (separuh kiri dalam rajah di atas) pada jujukan input pendek. Jika tidak, kod kernel Kernl adalah sangat pendek dan mudah difahami serta diubah suai. Projek ini juga menambah penyahpepijat dan alat Triton (berdasarkan Fx) untuk memudahkan penggantian kernel, jadi tiada pengubahsuaian pada kod sumber model PyTorch diperlukan. ​

Pengarang projek Michaël Benesty meringkaskan penyelidikan ini Kernl yang mereka keluarkan adalah perpustakaan untuk mempercepatkan penaakulan transformer .

Mereka juga mengujinya pada T5 dan ia adalah 6 kali lebih pantas, dan Benesty berkata ini hanyalah permulaan.

Mengapa Kernl dicipta? ​

Di Lefebvre Sarrut, pengarang projek menjalankan beberapa model transformer dalam pengeluaran, beberapa daripadanya sensitif kependaman, terutamanya carian dan recsys. Mereka juga menggunakan OnnxRuntime dan TensorRT, malah mencipta perpustakaan OSS yang menggunakan transformer untuk berkongsi pengetahuan mereka dengan komuniti. ​

Baru-baru ini, pengarang telah menguji bahasa generatif dan bekerja keras untuk mempercepatkannya. Walau bagaimanapun, melakukan ini menggunakan alat tradisional telah terbukti sangat sukar. Pada pandangan mereka, Onnx adalah satu lagi format yang menarik Ia adalah format fail terbuka yang direka untuk pembelajaran mesin Ia digunakan untuk menyimpan model terlatih dan mempunyai sokongan perkakasan yang luas.

Walau bagaimanapun, ekosistem Onnx (terutamanya enjin inferens) mempunyai beberapa batasan semasa mereka berurusan dengan seni bina LLM baharu: ​

  • Mengeksport model tanpa aliran kawalan ke Onnx adalah mudah kerana penjejakan boleh dipercayai. Tetapi tingkah laku dinamik adalah lebih sukar untuk diperoleh; >TensorRT tidak boleh mengurus 2 paksi dinamik untuk model pengubah dengan fail konfigurasi yang sama. Tetapi kerana anda biasanya ingin dapat memberikan input dengan panjang yang berbeza, anda perlu membina 1 model setiap saiz kelompok; ) dalam fail Terdapat beberapa batasan dari segi saiz dan perlu diselesaikan dengan menyimpan pemberat di luar model. ​
  • Fakta yang sangat menjengkelkan ialah model baharu tidak akan dipercepatkan, anda perlu menunggu orang lain menulis kernel CUDA tersuai untuk ini. Bukannya penyelesaian sedia ada adalah buruk, salah satu perkara hebat tentang OnnxRuntime ialah sokongan berbilang perkakasannya, dan TensorRT diketahui sangat pantas.
  • Jadi, pengarang projek mahu mempunyai pengoptimum sepantas TensorRT pada Python/PyTorch, itulah sebabnya mereka mencipta Kernl.
  • Bagaimana untuk melakukannya? ​

    Jalur lebar memori biasanya merupakan hambatan pembelajaran mendalam Untuk mempercepatkan inferens, mengurangkan akses memori selalunya merupakan strategi yang baik. Pada urutan input pendek, kesesakan biasanya berkaitan dengan overhed CPU, yang mesti dihapuskan. Pengarang projek terutamanya menggunakan 3 teknologi berikut: ​

    Yang pertama ialah OpenAI Triton, iaitu bahasa untuk menulis kernel GPU seperti CUDA. Jangan kelirukan dengan inferens Nvidia Triton pelayan lebih cekap. Penambahbaikan dicapai dengan gabungan beberapa operasi supaya pengiraan rantaian tanpa mengekalkan hasil perantaraan dalam memori GPU. Pengarang menggunakannya untuk menulis semula perhatian (digantikan dengan Flash Attention), lapisan linear dan pengaktifan, dan Layernorm/Rmsnorm. ​

    Yang kedua ialah graf CUDA. Semasa langkah pemanasan, ia menyimpan setiap teras yang dilancarkan dan parameternya. Pengarang projek kemudian membina semula keseluruhan proses penaakulan. ​

    Akhir sekali, terdapat TorchDynamo, prototaip yang dicadangkan oleh Meta untuk membantu pengarang projek menangani tingkah laku dinamik. Semasa langkah memanaskan badan, ia menjejaki model dan menyediakan graf Fx (graf pengiraan statik). Mereka menggantikan beberapa operasi graf Fx dengan kernel mereka sendiri, yang disusun semula dalam Python.

    Pada masa hadapan, pelan hala tuju projek akan merangkumi pemanasan badan yang lebih pantas, inferens lusuh (tiada pengiraan kerugian dalam padding), sokongan latihan (sokongan jujukan panjang), sokongan berbilang GPU (berbilang -mod penyejajaran), kuantisasi (PTQ), ujian kernel Cutlass bagi kelompok baharu, dan sokongan perkakasan yang dipertingkatkan, dsb.

    Sila rujuk projek asal untuk butiran lanjut.

Atas ialah kandungan terperinci Bahasa pengaturcaraan OpenAI mempercepatkan penaakulan Bert 12 kali, dan enjin menarik perhatian. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:51cto.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan