Model dan platform AI

SGLang: Eksekusi Efisien dari Program Bahasa Model Terstruktur

mm
Tambahkan Unite.AI ke sumber pilihan Anda di Google

Model bahasa besar (LLM) semakin banyak digunakan untuk tugas-tugas kompleks yang memerlukan beberapa panggilan generasi, teknik prompting lanjutan, aliran kontrol, dan input/output terstruktur. Namun, sistem yang efisien untuk programming dan eksekusi aplikasi ini masih kurang. SGLang, sebuah sistem baru, bertujuan untuk mengatasi ini dengan menyediakan eksekusi efisien dari program bahasa model kompleks. SGLang terdiri dari bahasa frontend dan runtime. Bahasa frontend mempermudah programming dengan primitif untuk generasi dan kontrol paralelisme, sedangkan runtime mempercepat eksekusi melalui optimasi baru seperti RadixAttention untuk penggunaan kembali cache KV dan mesin keadaan terbatas yang dikompresi untuk decoding output terstruktur yang lebih cepat. Eksperimen menunjukkan bahwa SGLang mencapai hingga 6,4× throughput yang lebih tinggi dibandingkan dengan sistem inferensi state-of-the-art pada berbagai model bahasa besar dan multimodal, menangani tugas-tugas seperti kontrol agen, penalaran logis, benchmark pembelajaran sedikit, decoding JSON, pipeline generasi yang ditingkatkan, dan obrolan multi-giliran.

Pengembangan terbaru dalam kemampuan LLM telah memperluas utilitasnya, memungkinkan mereka untuk menangani berbagai tugas umum dan berfungsi sebagai agen otonom. Dalam aplikasi ini, LLM terlibat dalam perencanaan multi-rond, penalaran, dan interaksi dengan lingkungan eksternal. Ini difasilitasi melalui penggunaan alat, modalitas input multiple, dan berbagai teknik prompting, seperti pembelajaran sedikit, konsistensi diri, kerangka pemikiran, dan pohon pemikiran. Kasus penggunaan baru ini memerlukan beberapa panggilan LLM yang bergantung, menunjukkan tren menggunakan struktur multi-panggilan untuk menyelesaikan tugas kompleks.

Perubahan ini menandai transisi dari penggunaan chatting sederhana ke penggunaan programmatik yang lebih canggih dari LLM, di mana program mengatur dan mengontrol proses generasi LLM. Program ini disebut “Program Bahasa Model” (LM Program). Teknik prompting lanjutan dan aliran kerja agen jatuh dalam ruang lingkup program LM. Ada dua sifat umum dari program LM: (1) Program LM biasanya melibatkan beberapa panggilan LLM yang diantarai dengan aliran kontrol untuk menyelesaikan tugas kompleks dan meningkatkan kualitas secara keseluruhan. (2) Program LM menerima input terstruktur dan menghasilkan output terstruktur, memungkinkan komposisi program LM dan integrasi ke dalam sistem perangkat lunak yang ada.

Dalam artikel ini, kita akan membahas framework SGLang, mengexplorasi arsitektur, menganalisis kinerja, dan membandingkannya dengan framework state-of-the-art. Jadi, mari kita mulai.

Pengenalan SGLang

Meskipun penggunaan program LM yang luas, sistem saat ini untuk mengekspresikan dan mengeksekusi mereka masih tidak efisien. SGLang mengidentifikasi dua tantangan utama yang terkait dengan penggunaan efisien program LM:

  • Kesulitan Programming: Mengembangkan program LM sangat sulit karena sifat non-deterministik LLM. Ini melibatkan manipulasi string yang luas, penyetelan prompt yang ekstensif, parsing output yang rapuh, penanganan modalitas input multiple, dan implementasi paralelisme.
  • Inefisiensi Eksekusi: Mengeksekusi program LM tidak efisien karena perhitungan yang berlebihan dan penggunaan memori. Sistem inferensi state-of-the-art, yang dioptimalkan untuk mengurangi latency dan meningkatkan throughput, tidak memiliki pengetahuan langsung tentang workload, menghasilkan inefisiensi yang signifikan.

Untuk mengatasi tantangan ini, SGLang memperkenalkan Bahasa Generasi Terstruktur untuk LLM. Ide utama adalah untuk memanfaatkan struktur multi-panggilan dalam program LM untuk eksekusi yang efisien. SGLang memiliki dua bagian: bahasa frontend dan runtime. Bahasa frontend mempermudah programming program LM, sedangkan runtime mempercepat eksekusi.

Bahasa frontend menyediakan primitif untuk generasi dan kontrol paralelisme, memungkinkan pengguna untuk mengembangkan aliran kerja prompting yang canggih dengan sintaks Python asli. SGLang juga memiliki interpreter dan compiler. Interpreter mengelola state prompt sebagai stream dan mengirimkan operasi primitif ke stream untuk eksekusi asinkron, memastikan kontrol yang tepat atas sinkronisasi dan paralelisme intra-program.

Runtime SGLang memperkenalkan beberapa optimasi baru untuk mempercepat eksekusi program LM:

  • RadixAttention: Teknik ini memungkinkan penggunaan kembali cache KV secara otomatis di seluruh panggilan generasi. Dalam sistem inferensi yang ada, cache KV dari sebuah permintaan dibuang setelah diproses, mencegah penggunaan kembali di seluruh panggilan dan memperlambat eksekusi.
  • Mesin Keadaan Terbatas yang Dikompresi: Teknik ini memungkinkan decoding output terstruktur yang lebih cepat. Sistem yang ada mengikuti konstrain hanya untuk token berikutnya, memungkinkan decoding satu token pada satu waktu. SGLang menganalisis konstrain dan membangun mesin keadaan terbatas yang dikompresi untuk mewakili konstrain, mengompresi jalur multi-token menjadi satu langkah, memungkinkan decoding beberapa token sekaligus untuk kecepatan yang lebih cepat.
  • Eksekusi Spekulatif API: Untuk model API seperti OpenAI, SGLang memperkenalkan eksekusi spekulatif API untuk mengoptimalkan program multi-panggilan.

Dengan menggunakan SGLang, berbagai aplikasi LLM dapat diimplementasikan, termasuk kontrol agen, penalaran logis, benchmark pembelajaran sedikit, decoding JSON, pipeline generasi yang ditingkatkan, obrolan multi-giliran, dan pemrosesan multi-modal. Kinerja diuji pada model seperti Llama-7B/70B, Mistral-8x7B, LLaVA-v1.5-7B (gambar), dan LLaVA-NeXT-34B (video) pada NVIDIA (NVDA ) A10G dan A100 GPUs. Hasil eksperimen menunjukkan bahwa SGLang mencapai hingga 6,4× throughput yang lebih tinggi pada berbagai beban kerja, model, dan konfigurasi perangkat keras, dibandingkan dengan sistem programming dan inferensi yang ada.

SGLang: Model Programming dan Metodologi

Model programming SGLang diperkenalkan melalui contoh yang berjalan, menjelaskan primitif bahasa dan mode eksekusi, dan menggarisbawahi kesempatan optimasi runtime. Model ini mempermudah operasi yang membosankan dalam aliran kerja multi-panggilan dengan menyediakan primitif yang fleksibel dan komposabel. SGLang adalah bahasa domain-spesifik yang disematkan dalam Python.

Fungsi multi_dimensional_judge mengambil tiga argumen: `s`, `path`, dan `essay`. s mengelola state prompt, path adalah jalur file gambar, dan essay adalah teks esai. String baru dan primitif SGLang dapat ditambahkan ke state s untuk eksekusi menggunakan operator +=. Pertama, fungsi menambahkan gambar dan esai ke prompt. Kemudian, ia memeriksa apakah esai terkait dengan gambar menggunakan select, menyimpan hasilnya di s[“related”]. Jika terkait, prompt difork menjadi tiga salinan untuk evaluasi paralel dari dimensi yang berbeda, menggunakan gen untuk menyimpan hasil di f[“judgment”]. Selanjutnya, ia menggabungkan penilaian, menghasilkan ringkasan, dan menetapkan nilai huruf. Akhirnya, ia mengembalikan hasil dalam format JSON, mengikuti skema yang didefinisikan oleh konstrain regex regex. SGLang sangat mempermudah program ini, karena program yang setara dengan antarmuka OpenAI akan memerlukan 2,1× lebih banyak baris kode karena manipulasi string manual dan kontrol paralelisme.

SGLang menyediakan primitif untuk mengontrol state prompt, generasi, dan paralelisme, yang dapat digunakan dengan sintaks Python dan perpustakaan. Berikut adalah primitif-primitif tersebut:

gen: Memanggil model untuk menghasilkan dan menyimpan hasilnya dalam variabel dengan nama yang ditentukan dalam argumen pertamanya. Ia mendukung argumen `regex` untuk mengkonstrain output untuk mengikuti gramatika yang didefinisikan oleh ekspresi reguler (misalnya, skema JSON).

  • select: Memanggil model untuk memilih opsi dengan probabilitas tertinggi dari daftar.
  • += atau extend: Menambahkan string ke prompt.
  • [nama_variabel]: Mengambil hasil generasi.
  • fork: Membuat fork paralel dari state prompt.
  • join: Menggabungkan kembali state prompt.
  • gambar dan video: Mengambil input gambar dan video.

Cara termudah untuk mengeksekusi program SGLang adalah melalui interpreter, di mana prompt dianggap sebagai stream asinkron. Primitif seperti extend, gen, dan select dikirim ke stream untuk eksekusi asinkron. Panggilan non-blokir ini memungkinkan kode Python untuk terus berjalan tanpa menunggu generasi selesai, mirip dengan meluncurkan kernel CUDA secara asinkron. Setiap prompt dikelola oleh executor stream di thread latar, memungkinkan paralelisme intra-program. Mengambil hasil generasi akan memblokir hingga hasilnya siap, memastikan sinkronisasi yang tepat. Alternatifnya, program SGLang dapat dikompilasi sebagai graf komputasi dan dieksekusi dengan executor graf, memungkinkan optimasi lebih lanjut.

Sistem programming untuk LLM dapat diklasifikasikan sebagai tingkat tinggi (misalnya, LangChain, DSPy) dan tingkat rendah (misalnya, LMQL, Guidance, SGLang). Sistem tingkat tinggi menyediakan prompt yang telah ditentukan atau dihasilkan secara otomatis, sedangkan sistem tingkat rendah tidak mengubah prompt tetapi memungkinkan manipulasi langsung prompt dan primitif. SGLang adalah sistem tingkat rendah yang serupa dengan LMQL dan Guidance.

SGLang fokus lebih pada efisiensi runtime dan datang dengan runtime yang dirancang bersama, memungkinkan optimasi baru. Bahasa tingkat tinggi (misalnya, DSPy) dapat dikompilasi ke bahasa tingkat rendah (misalnya, SGLang). Integrasi SGLang sebagai backend di DSPy untuk efisiensi runtime yang lebih baik ditunjukkan kemudian.

Contoh di atas mengilustrasikan operasi RadixAttention dengan kebijakan pengusiran LRU di seluruh sembilan titik waktu, menunjukkan evolusi dinamis dari radix tree dalam menanggapi berbagai permintaan. Permintaan ini termasuk dua sesi obrolan, batch pertanyaan pembelajaran sedikit, dan sampling konsistensi diri.

SGLang: Evaluasi dan Hasil

Hasil pada Model Open-Weight

Hasil latency dan throughput ditunjukkan pada gambar berikut. SGLang meningkatkan throughput hingga 6,4× dan mengurangi latency hingga 3,7×. Peningkatan ini disebabkan oleh penggunaan kembali cache KV, eksploitasi paralelisme dalam program tunggal, dan decoding output terstruktur yang lebih cepat.

Pada benchmark ini, tingkat hit cache berkisar dari 50% hingga 99%. Tabel 13 (Lampiran) mencantumkan tingkat hit cache yang dicapai dan optimal untuk semua benchmark, menunjukkan bahwa pendekatan penjadwalan cache-aware SGLang mendekati 96% dari tingkat hit cache optimal rata-rata.

Hasil pada Model yang Lebih Besar dengan Paralelisme Tensor

Model yang lebih besar, Mixtral-8x7B dan Llama-70B, diuji dengan paralelisme tensor pada set benchmark yang sama, dan hasilnya dilaporkan pada gambar berikut. Peningkatan kecepatan pada model yang lebih besar menunjukkan tren yang serupa dengan yang diamati pada model yang lebih kecil, menunjukkan bahwa optimasi SGLang umumnya berlaku untuk model yang lebih besar.

Hasil pada Model Multi-Modal

SGLang memiliki dukungan asli untuk model multi-modal dengan primitif gambar dan video. Optimasi dalam makalah ini kompatibel dengan model multi-modal. Untuk RadixAttention, hash dari input gambar dihitung dan digunakan sebagai kunci dalam radix tree, memungkinkan penggunaan kembali cache KV dari token gambar yang sama.

Penyebaran Produksi

SGLang telah diterapkan di Chatbot Arena untuk melayani model open-weight. Karena lalu lintas yang rendah untuk beberapa model, hanya satu pekerja SGLang yang melayani setiap model. Setelah satu bulan, tingkat hit cache RadixAttention sebesar 52,4% untuk LLaVA-Next-34B dan 74,1% untuk Vicuna-33B diamati. Hit cache berasal dari pesan sistem umum, gambar contoh yang sering digunakan, dan riwayat obrolan multi-giliran. Ini mengurangi latency token pertama rata-rata sebesar 1,7× untuk Vicuna-33B.

Pemikiran Akhir

Dalam artikel ini, kita telah membahas SGLang, sebuah sistem baru yang bertujuan untuk menyediakan eksekusi efisien dari program bahasa model kompleks. SGLang terdiri dari bahasa frontend dan runtime. Bahasa frontend mempermudah programming dengan primitif untuk generasi dan kontrol paralelisme, sedangkan runtime mempercepat eksekusi melalui optimasi baru seperti RadixAttention untuk penggunaan kembali cache KV dan mesin keadaan terbatas yang dikompresi untuk decoding output terstruktur yang lebih cepat. Eksperimen menunjukkan bahwa SGLang mencapai hingga 6,4× throughput yang lebih tinggi dibandingkan dengan sistem inferensi state-of-the-art pada berbagai model bahasa besar dan multimodal, menangani tugas-tugas seperti kontrol agen, penalaran logis, benchmark pembelajaran sedikit, decoding JSON, pipeline generasi yang ditingkatkan, dan obrolan multi-giliran.

Seorang insinyur oleh profesi, seorang penulis oleh hati. Kunal adalah seorang penulis teknis dengan cinta yang mendalam & pemahaman tentang AI dan ML, yang didedikasikan untuk menyederhanakan konsep-konsep kompleks dalam bidang ini melalui dokumentasi yang menarik dan informatif.