AizuDemy

Tutorial Speculative Decoding LLM: Akselerasi Inference Ollama di Python

Tutorial Speculative Decoding LLM: Akselerasi Inference Ollama di Python
IKLAN
IDCloudHost
๐ŸŽง
Dengarkan Artikel Ini
Suara AI Otomatis โ€ข 3 mnt baca baca
โšก TL;DR

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.
๐Ÿ“‹ Daftar Isi Materi Tutup โ–ด

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 torch

2. 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 8000

Parameter --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:1b

2. 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-tokens optimal 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.

A
Aizu Dev

Tim penulis AizuDemy yang menyajikan tutorial teknologi, cloud, dan pengembangan perangkat lunak dalam Bahasa Indonesia.

๐Ÿ“– Artikel Terkait