BAB 05

05 - MLOps & Production: Docker, vLLM, Kuantisasi, dan Model Serving

Estimasi Waktu: 50 menit
Level: Advanced


MLOps di Era LLM: Apa yang Berubah?

Di era Machine Learning klasik, MLOps berfokus pada melatih model secara berkala dan memantau penyimpangan data (data drift).

Di era LLM/GenAI, fokus bergeser ke LLMOps: bagaimana melayani (serving) model raksasa dengan latensi rendah, efisiensi GPU, penanganan input-output yang aman (guardrails), dan optimalisasi biaya operasional (inference cost).


1. Model Serving: vLLM vs. Standard API

Menjalankan LLM menggunakan library PyTorch standar (transformers pipeline) di produksi adalah kesalahan fatal karena model hanya bisa memproses sedikit request secara berurutan dan boros VRAM.

Industri menggunakan vLLM (versatile LLM), sebuah engine serving berkinerja tinggi yang memiliki teknologi PagedAttention. PagedAttention mengelola memori KV-Cache (memori konteks LLM) secara dinamis mirip virtual memory di OS, mengurangi pemborosan memori hingga 96% dan melipatgandakan throughput pemrosesan request.

┌─────────────────────────────────────────────────────────────┐
│                         vLLM SERVER                         │
│                                                             │
│   Incoming Requests ──► [ Continuous Batching ]             │
│                                │                            │
│                                ▼                            │
│                         [ PagedAttention ]                  │
│                                │                            │
│                                ▼                            │
│                         [ GPU KV Cache ]                    │
└─────────────────────────────────────────────────────────────┘

Alternatif serving engine:


2. Kuantisasi: Memperkecil Ukuran Model

Model LLM mentah biasanya disimpan dalam format presisi FP16 (16-bit float) atau BF16. Model 8 miliar parameter (8B) membutuhkan sekitar 16 GB VRAM hanya untuk dimuat ke memori.

Kuantisasi (Quantization) memetakan angka float presisi tinggi tersebut ke format presisi lebih rendah (misal 8-bit, 4-bit, bahkan 2-bit integer) dengan penurunan akurasi yang minimal.

Format KuantisasiPenggunaan UtamaEfek Memori
GGUFMenjalankan model di CPU/Mac M1/M2/M3 (lokal) via Llama.cpp/Ollama.Sangat hemat, bisa dibagi antara RAM & VRAM.
AWQ / GPTQMenjalankan model secara optimal di kartu GPU NVIDIA Enterprise.Mengurangi memori GPU hingga 75% tanpa kehilangan penalaran.

3. Optimasi Biaya: Prompt Caching

LLM memproses teks secara bertahap. Ketika Anda mengirim dokumen panjang (misal 50.000 token RAG) dan terus bertanya berulang kali, LLM biasanya memproses ulang seluruh dokumen tersebut.

Engine modern (seperti vLLM, Anthropic API, DeepSeek API) mendukung Prompt Caching. Konsep ini menyimpan representasi komputasi dari dokumen awal di memori. Request berikutnya yang menggunakan dokumen awal yang sama hanya akan dikenai biaya pemrosesan yang sangat murah (potongan harga hingga 90%) dan respons instan karena model tidak perlu membaca ulang dokumen dari nol.


4. Containerization & Deployment: Docker

Semua engine serving dan kode integrasi aplikasi harus dibungkus menggunakan Docker agar bisa berjalan secara identik di lokal maupun server cloud (AWS, GCP, Cloudflare).

Contoh Dockerfile Sederhana untuk App LLM:

FROM python:3.10-slim

WORKDIR /app

# Install system dependencies
RUN apt-get update && apt-get install -y \
    build-essential \
    curl \
    && rm -rf /var/lib/apt/lists/*

COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

COPY . .

EXPOSE 8000

CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]

Di tingkat produksi besar, container Docker ini diorkestrasi menggunakan Kubernetes dengan node pool khusus GPU, memanfaatkan scheduler GPU Nvidia (nvidia.com/gpu) untuk membagi resource kartu grafis secara efisien.


Latihan

  1. Jalankan server model LLM lokal menggunakan Ollama di komputer Anda.
  2. Buka terminal, gunakan curl untuk mengirim request API ke server Ollama lokal tersebut pada port 11434.
  3. Pelajari cara mengonversi model Hugging Face biasa ke format GGUF menggunakan modul script Python bawaan dari repository Llama.cpp.

Target: Memahami bagaimana meminimalkan resource hardware untuk menjalankan model besar secara efisien di level produksi.