Tutorial SGLang: Serving LLM Cepat dan Pemrograman Structured Generation

# SGLang: Serving LLM yang Cepat dan Model Pemrograman untuk Generasi Terstruktur SGLang adalah dua hal dalam satu paket: sebuah runtime serving berthroughput tinggi dan sebuah bahasa frontend untuk...

By Ruby Abdullah · · tutorial
SGLangLLM ServingRadixAttentionStructured GenerationInferencePython

SGLang: Serving LLM yang Cepat dan Model Pemrograman untuk Generasi Terstruktur

SGLang adalah dua hal dalam satu paket: sebuah runtime serving berthroughput tinggi dan sebuah bahasa frontend untuk menulis program LLM yang terstruktur dan multi-langkah. Runtime-nya menarik karena RadixAttention, yang secara otomatis menggunakan ulang key-value cache antar request yang berbagi prefix, dan frontend-nya memungkinkan Anda mengekspresikan fork, output terbatas, dan alur kendali tanpa menjahit prompt secara manual. Tutorial ini membahas kedua pilar tersebut dengan satu contoh ekstraksi-dan-penalaran yang koheren dan dapat Anda adaptasi untuk beban kerja nyata.

Apa Itu SGLang

Memisahkan kedua lapisan ini sejak awal akan membantu, karena kebanyakan kebingungan tentang SGLang berasal dari mencampuradukkan keduanya.

Runtime adalah server yang Anda jalankan sekali lalu Anda query melalui HTTP. Ia menangani batching, penjadwalan, dan pengelolaan KV-cache di GPU. Anda bisa menggunakannya lewat API yang kompatibel dengan OpenAI tanpa pernah menyentuh bahasa frontend sama sekali. Bahasa frontend adalah DSL Python (tertanam sebagai decorator dan fungsi pembantu) untuk mendeskripsikan program generasi. Ia mengompilasi program Anda menjadi serangkaian panggilan terhadap sebuah backend, yang bisa berupa runtime SGLang lokal, atau penyedia eksternal seperti OpenAI. Di frontend inilah fitur seperti fork paralel dan decoding terbatas menjadi nyaman digunakan.

Dua pilar

Pilar 1 — runtime dengan RadixAttention. Continuous batching menjaga GPU tetap sibuk dengan menambah dan mengeluarkan request dari batch yang berjalan pada level token, alih-alih menunggu seluruh batch selesai. RadixAttention menambahkan penggunaan ulang prefix-cache secara otomatis: runtime memelihara sebuah radix tree berisi urutan token yang pernah dilihat beserta KV cache-nya, sehingga ketika sebuah request baru berbagi prefix (prompt sistem, blok few-shot, dokumen bersama) runtime melewati komputasi ulangnya. Pilar 2 — bahasa frontend. Alih-alih membangun satu string besar lalu mem-parsing respons, Anda menyusun sebuah program: menambahkan pesan, memanggil sgl.gen untuk mengisi slot, bercabang dengan s.fork, dan membatasi output dengan pilihan, regex, atau skema JSON. Frontend melacak state dan dapat menjalankan cabang-cabang independen secara paralel.

Bedanya dengan vLLM

Jika Anda pernah memakai vLLM, runtime ini akan terasa akrab: keduanya melakukan continuous batching, tensor parallelism, dan menyediakan API yang kompatibel dengan OpenAI. Perbedaan praktisnya adalah RadixAttention pada SGLang membuat beban kerja dengan prefix bersama (prompting few-shot, agen yang memakai ulang prompt sistem panjang, percabangan gaya tree-of-thought) menjadi lebih murah secara nyata, dan SGLang menyertakan bahasa frontend untuk mengorkestrasi program multi-langkah. vLLM fokus menjadi mesin serving; SGLang adalah mesin serving plus sebuah model pemrograman. Kami tidak akan menjelaskan ulang PagedAttention di sini.

Instalasi dan Catatan Perangkat Keras

Instalasi paling sederhana menarik runtime, frontend, dan dependensi umum.

# Disarankan: instal semuanya (runtime + frontend + ekstra)

pip install "sglang[all]"

Hanya frontend, jika Anda hanya ingin DSL terhadap backend remote

pip install "sglang[openai]"

Verifikasi

python -c "import sglang as sgl; print(sgl.version)"

Catatan perangkat keras yang perlu diingat:

  • Runtime menargetkan GPU NVIDIA dengan CUDA terkini. Ampere (A100) dan yang lebih baru (L4, L40S, H100) adalah jalur mulus; sebagian kernel mengasumsikan sm80 atau lebih tinggi.
  • Memori menentukan seberapa banyak KV cache yang bisa Anda tampung dan dengan demikian seberapa banyak RadixAttention dapat menggunakan ulang. Lebih banyak VRAM bebas berarti radix tree lebih besar dan tingkat cache-hit lebih tinggi.
  • Dukungan AMD ROCm ada tetapi kurang teruji; periksa matriks dukungan terkini sebelum berkomitmen.
  • Untuk multi-GPU, tensor parallelism (--tp) memecah bobot model antar GPU pada satu node.

# Pemeriksaan kewarasan lingkungan secara cepat

python -c "import torch; print('cuda', torch.cuda.isavailable(), 'gpus', torch.cuda.devicecount())"

nvidia-smi --query-gpu=name,memory.total,memory.used --format=csv

Menjalankan Server

Server cukup satu perintah. Mulailah dengan model kecil untuk memastikan instalasi, lalu naikkan skalanya.

python -m sglang.launchserver \

--model-path meta-llama/Llama-3.1-8B-Instruct \

Artikel Terkait

Tutorial Text Generation Inference (TGI): Serving LLM untuk Produksi

Menyajikan LLM di Produksi dengan Text Generation Inference (TGI) Text Generation Inference (TGI) adalah toolkit buatan ...

Outlines: Structured Generation dari LLM dengan Constrained Decoding

Outlines: Structured Generation dari LLM dengan Constrained Decoding Salah satu tantangan terbesar saat bekerja dengan L...

Tutorial Lengkap vLLM: High-Performance LLM Serving

Tutorial Lengkap vLLM: High-Performance LLM Serving vLLM adalah library Python untuk inference dan serving LLM dengan pe...

Tutorial Reflex: Membangun Web App Full-Stack dengan Python Murni

Reflex: Membangun Aplikasi Web Full-Stack dengan Python Murni Reflex memungkinkan Anda membangun aplikasi web lengkap — ...