Serving: vLLM, Ollama, endpoint
M10 — AI Engineering di Production
Sistem Serving LLM & Bottleneck Hardware
Menjalankan LLM di production berbeda total dengan web server tradisional karena karakteristik komputasi GPU dan transfer memory.
1. Mengapa Model Dibagi ke Banyak GPU? (Pipeline Parallelism)
Saat model terlalu besar untuk satu perangkat, layernya harus dipecah ke beberapa GPU secara sekuensial:
Misal model 10 Layer (1 Layer = 4 GB VRAM):
- GPU 0 (12/12 GB): Layer 1, Layer 2, Layer 3
- GPU 1 (12/12 GB): Layer 4, Layer 5, Layer 6
- GPU 2 (12/12 GB): Layer 7, Layer 8, Layer 9
- GPU 3 (4/12 GB): Layer 10 + [Sisa 8 GB Kosong]
Untuk apa sisa VRAM kosong di GPU 3? Ruang sisa ini dialokasikan untuk menampung hasil perhitungan (Query, Key, Value) cache dan aktivasi sementara selama proses inferensi berlangsung!
Jaringan pemrosesan tetap berjalan berurutan dari Layer 1 Layer 10, tetapi beban memorinya terdistribusi tanpa menyebabkan satu GPU mengalami Out-Of-Memory (OOM).
2. Bottleneck Hardware: Compute vs Memory Bandwidth
Pada fase decoding token-by-token, performa LLM bersifat Memory Bandwidth Bound (bukan compute bound).
- GPU Compute Chip sangat cepat, tetapi harus menunggu pemindahan data bobot model dari VRAM ke core komputasi.
- Inilah mengapa server sering kali dapat melayani concurrency 4–8 pengguna secara bersamaan dengan kecepatan tok/s per user yang hampir sama — karena kapasitas komputasi GPU masih melimpah saat menunggu aliran data memory bus.
- Sebagai contoh, perangkat komputasi monster yang memiliki memory bandwidth sempit (misalnya 273 GB/s) akan mengalami bottleneck parah saat menjalankan model besar.
3. Inovasi Serving Modern (vLLM & PagedAttention)
- PagedAttention: Mengalokasikan memori KV Cache dalam bentuk halaman-halaman virtual non-kontigu (seperti virtual memory OS), mengeliminasi fragmentasi memori VRAM hingga 96%.
- Continuous Batching: Memasukkan request baru ke batch yang sedang berjalan segera setelah satu request selesai menghasilkan token, melipatgandakan throughput (tok/s).