Tutorial SGLang & RadixAttention: Optimasi High-Throughput LLM di VPS
Poin Kunci Artikel Ini:
- Balasan cepat, respon halus, dan VRAM GPU terasa aman.
- Namun, begitu aplikasi dibuka untuk umum dan pengguna mulai melakukan percakapan panjang (multi-turn chat), masalah besar tiba-tiba muncul.
- Pada pesan pertama balasan butuh 1 detik, tetapi memasuki pesan kelima atau keenam, waktu tunggu melonjak jadi 7 detik.
Kenapa Chatbot LLM Sering Lemot dan Bikin GPU VPS Kehabisan VRAM?
Pernahkah Anda membuat aplikasi chatbot AI, mengujinya sendiri, dan semuanya berjalan lancar tanpa kendala? Balasan cepat, respon halus, dan VRAM GPU terasa aman. Namun, begitu aplikasi dibuka untuk umum dan pengguna mulai melakukan percakapan panjang (multi-turn chat), masalah besar tiba-tiba muncul. Pada pesan pertama balasan butuh 1 detik, tetapi memasuki pesan kelima atau keenam, waktu tunggu melonjak jadi 7 detik. Tidak lama kemudian, server tumbang terkena error CUDA out of memory.
Masalah utama dari fenomena ini bukan terletak pada spesifikasi GPU Anda yang kurang mahal, melainkan cara mesin inference konvensional menangani riwayat percakapan. Bayangkan seorang koki restoran yang menerima pesanan dari meja pelanggan. Setiap kali pelanggan menambah pesanan minuman, koki tersebut harus membaca ulang seluruh daftar menu dari halaman pertama, menghafal ulang pesanan makanan sebelumnya, baru kemudian memproses pesanan minuman baru. Metode ini sangat tidak efisien dan membuang waktu serta tenaga.
Dalam dunia Large Language Model (LLM), proses membaca ulang riwayat dari awal ini disebut pemrosesan ulang prompt. Setiap kali pengguna mengirim pesan baru dalam sesi obrolan, model harus memproses kembali seluruh token dari pesan-pesan sebelumnya untuk membangun matriks Key-Value Cache (KV Cache). Tanpa mekanisme pengelolaan memori yang cerdas, VPS GPU seharga belasan juta Rupiah per bulan akan kehabisan VRAM hanya untuk melayani puluhan pengguna aktif secara bersamaan.
Mengapa vLLM Saja Belum Cukup? Mengenal RadixAttention di SGLang
Beberapa tahun terakhir, vLLM menjadi pilihan utama para pengembang untuk mempercepat inference berkat inovasi PagedAttention. Konsep ini membagi memori KV cache menjadi blok-blok kecil yang fleksibel, mirip dengan konsep paged memory pada sistem operasi. PagedAttention terbukti ampuh mengatasi masalah fragmentasi memori fisik pada VRAM GPU.
Meski PagedAttention menyelesaikan masalah fragmentasi memori, teknologi ini kurang optimal pada skenario aplikasi yang memiliki banyak kesamaan awalan teks (prefix). Contoh nyata dari skenario ini adalah percakapan multi-turn, aplikasi Retrieval-Augmented Generation (RAG) yang memuat dokumen referensi panjang, serta arsitektur agen AI yang bercabang.
Di situlah framework SGLang hadir membawa pendekatan baru bernama RadixAttention. Bukannya mengelola KV cache sebagai blok terpisah biasa, SGLang mengorganisir seluruh token pemrosesan ke dalam struktur data pohon yang disebut Radix Tree.
Cara kerjanya cukup intuitif. Setiap kali ada token prompt yang selesai diproses oleh GPU, token tersebut disimpan sebagai simpul (node) dalam pohon RadixAttention. Ketika pesan baru masukβbaik dari pengguna yang sama maupun pengguna lain yang menggunakan instruksi sistem (system prompt) serupaβSGLang tidak perlu menghitung ulang token tersebut. SGLang cukup menelusuri cabang pohon yang sudah ada dan langsung menggunakan kembali (reuse) KV cache dari memori. Hasilnya, waktu pemrosesan prompt (prefill phase) berkurang drastis dan pemakaian VRAM menjadi sangat hemat.
Berikut adalah perbandingan ringkas antara pendekatan vLLM dan SGLang:
- vLLM (PagedAttention): Berfokus pada eliminasi fragmentasi memori GPU secara fisik dengan alokasi blok statis. Pembagian cache prefix antar percakapan masih terbatas dan membutuhkan penyesuaian kode tambahan.
- SGLang (RadixAttention): Mengintegrasikan struktur data pohon Radix Tree secara otomatis di dalam runtime. Cache prefix dibagikan secara hirarkis antar request secara real-time tanpa perlu konfigurasi manual di sisi aplikasi.
Langkah Setup SGLang dan RadixAttention di VPS GPU
Mari kita langsung mempraktikkan konfigurasi SGLang di VPS GPU. Tutorial ini bisa diterapkan pada server dengan GPU NVIDIA seperti RTX 3090, RTX 4090, A100, atau L4. Pastikan VPS Anda menggunakan sistem operasi Ubuntu 22.04 LTS, sudah terpasang driver NVIDIA terbaru, serta memiliki CUDA Toolkit 12.1 atau yang lebih baru.
1. Menyiapkan Lingkungan Python
Langkah pertama adalah membuat isolasi lingkungan Python agar dependensi project tidak bentrok dengan paket sistem dasar. Buka terminal VPS Anda dan jalankan perintah berikut:
sudo apt update && sudo apt install -y python3-venv python3-pip git
python3 -m venv sglang-env
source sglang-env/bin/activate
pip install --upgrade pip2. Menginstal SGLang dan FlashInfer
SGLang mengandalkan pustaka bernama FlashInfer untuk mengakselerasi kernel RadixAttention dan eksekusi matriks perhatian (attention mechanism). Instal SGLang beserta seluruh dependensinya menggunakan perintah berikut:
pip install "sglang[all]>=0.2.0" --find-links https://flashinfer.ai/whl/cu121/torch2.4/flashinfer/Proses instalasi ini akan mengunduh paket PyTorch, FlashInfer, dan pustaka pendukung komputasi GPU lainnya. Tunggu hingga proses instalasi selesai.
3. Menjalankan SGLang Server
Pada tutorial ini, kita akan menggunakan model Qwen/Qwen2.5-7B-Instruct yang memiliki performa tinggi dan efisien. Jalankan server SGLang dengan perintah berikut:
python3 -m sglang.launch_server \
--model-path Qwen/Qwen2.5-7B-Instruct \
--port 30000 \
--host 0.0.0.0 \
--mem-fraction-static 0.85 \
--enable-radix-cacheBerikut adalah penjelasan dari beberapa parameter penting yang kita gunakan di atas:
--model-path: Menentukan nama model dari Hugging Face yang akan diunduh dan dijalankan.--portdan--host: Menentukan port dan IP binding untuk akses API server SGLang.--mem-fraction-static 0.85: Memerintahkan SGLang untuk mengalokasikan 85% dari total VRAM GPU khusus untuk bobot model dan ruang KV cache statis. Sisa 15% disiapkan untuk alokasi dinamis.--enable-radix-cache: Mengaktifkan mesin RadixAttention agar pencadangan cache prefix berjalan secara otomatis.
Saat server pertama kali dijalankan, SGLang akan mengunduh bobot model dari Hugging Face. Setelah proses muat selesai, Anda akan melihat log yang menandakan server siap menerima request di port 30000.
4. Pengujian Endpoint API dengan Python
SGLang secara bawaan menyediakan interface API yang sepenuhnya kompatibel dengan format REST API OpenAI. Artinya, Anda bisa menggunakan SDK openai standar di Python untuk berkomunikasi dengan server SGLang Anda.
Buat berkas baru bernama test_chat.py dan masukkan kode berikut:
import openai
# Hubungkan SDK ke server SGLang lokal
client = openai.Client(
base_url="http://localhost:30000/v1",
api_key="EMPTY"
)
# Simulasi percakapan multi-turn
messages = [
{"role": "system", "content": "Anda adalah asisten teknis AI yang ahli di bidang cloud computing dan software engineering.



