Tutorial Speculative Decoding LLM: Akselerasi Inference Ollama di Python
Poin Kunci Artikel Ini:
- Model 70B di GPU lokal sering cuma dapat 4 token per detik.
- VRAM penuh, memory bandwidth tersumbat.
- Teknik ini dorong kecepatan inferensi 2-3x tanpa ubah kualitas output.Masalah Latensi Inferensi LLM dan Konsep UtamaLLM sifatnya autoregressive.
LLM besar lambat. Model 70B di GPU lokal sering cuma dapat 4 token per detik. VRAM penuh, memory bandwidth tersumbat. Solusi bukan beli GPU mahal. Pakai Speculative Decoding. Teknik ini dorong kecepatan inferensi 2-3x tanpa ubah kualitas output.
Masalah Latensi Inferensi LLM dan Konsep Utama
LLM sifatnya autoregressive. Satu forward pass cuma hasilkan satu token. GPU harus muat gigabyte bobot model dari VRAM ke core komputasi tiap token. Bottleneck utama pada memory bandwidth, bukan daya FLOPS.
Speculative Decoding bagi tugas ke dua model:
- Draft Model: Model kecil (1B-3B parameter). Cepat, hemat VRAM. Tugas buat draf K token sekaligus.
- Target Model: Model besar (70B parameter). Pintar, akurat. Tugas verifikasi draf token dalam satu forward pass.
Analogi Kerja: Asisten Draf dan Editor Senior
Draft Model seperti asisten cepat. Tulis kalimat draf kasar dalam beberapa detik. Target Model seperti editor senior. Cek draf sekaligus dalam satu bacaan. Terima kata benar, ganti kata salah. Verifikasi banyak token sekaligus lebih cepat daripada tulis dari nol.
Penjaminan Akurasi: Rejection Sampling
Speculative Decoding tidak ubah kualitas output. Algoritma pakai rejection sampling. Token draf diterima jika distribusi probabilitas Draft Model cocok dengan Target Model. Jika ditolak, Target Model koreksi dan sampel token baru. Hasil akhir 100% identik dengan Target Model yang jalan sendirian.
Step-by-Step Akselerasi vLLM dan Python
Gunakan Llama-3.1-70B-Instruct sebagai Target Model dan Llama-3.2-1B-Instruct sebagai Draft Model.
1. Persiapan Environment
Jalankan perintah berikut di terminal:
pip install vllm openai torch2. Jalankan Engine vLLM dengan Speculative Decoding
Eksekusi perintah terminal untuk aktifkan server OpenAI-compatible:
python3 -m vllm.entrypoints.openai.api_server \
--model meta-llama/Meta-Llama-3.1-70B-Instruct \
--speculative-model meta-llama/Llama-3.2-1B-Instruct \
--num-speculative-tokens 5 \
--port 8000Parameter --num-speculative-tokens 5 minta Draft Model buat 5 token draf sebelum diverifikasi Target Model.
3. Skrip Python Client dan Benchmark
Buat file benchmark.py dan jalankan kode berikut:
import time
from openai import OpenAI
client = OpenAI(
base_url="http://localhost:8000/v1",
api_key="token-lokal"
)
prompt = "Jelaskan arsitektur microservices vs monolith dan kapan harus migrasi."
start_time = time.time()
response = client.chat.completions.create(
model="meta-llama/Meta-Llama-3.1-70B-Instruct",
messages=[
{"role": "system", "content": "Anda pakar arsitektur perangkat lunak."},
{"role": "user", "content": prompt}
],
max_tokens=400
)
elapsed = time.time() - start_time
text = response.choices[0].message.content
tokens = response.usage.completion_tokens
print(f"Output:\n{text}\n")
print(f"Total Token: {tokens}")
print(f"Waktu: {elapsed:.2f} detik")
print(f"Kecepatan: {tokens / elapsed:.2f} token/detik")Integrasi Ollama Lokal
Ollama dukung akselerasi serupa via backend llama.cpp.
1. Unduh Model Target dan Draft
ollama pull llama3.1:70b
ollama pull llama3.2:1b2. Jalankan Inference dengan Flag Draft
Jalankan Ollama via API atau skrip Python dengan memuat kedua model ke memori GPU.
Faktor Optimalisasi Performa
- Rasio Ukuran Model: Target dan Draft idealnya punya rasio parameter 20:1 sampai 50:1 (misal 70B Target dengan 1B Draft).
- Tokenizer Sama: Target dan Draft wajib pakai vocabulary dan tokenizer identik.
- Jumlah Token Draf: Nilai
num-speculative-tokensoptimal biasanya 4 sampai 6. Nilai terlalu tinggi turunkan acceptance rate.
Langkah Lanjutan
1. Install vLLM dan PyTorch terbaru.
2. Unduh pasangan model Target dan Draft dengan tokenizer sama.
3. Jalankan server vLLM dengan flag --speculative-model.
4. Ukur kenaikan token per detik pada inferensi lokal.



