Menjalankan LLM secara lokal dulunya membutuhkan gelar doktor machine learning dan rak GPU. Ollama mengubah itu. Ini adalah binary tunggal yang mengelola unduhan model, kuantisasi, dan endpoint API lokal yang kompatibel dengan OpenAI. Saya mulai menggunakan Ollama untuk tooling internal di Commsult Indonesia di mana persyaratan privasi data membuat API LLM cloud menjadi rumit — mengirim data karyawan atau klien ke OpenAI atau Anthropic menimbulkan pertanyaan kepatuhan yang perlu dievaluasi tim legal kami.
Revolusi kuantisasi adalah alasan mengapa LLM lokal layak di tahun 2025. Model 70B parameter seperti Llama 3.1 70B, dikuantisasi ke 4-bit (Q4_K_M), membutuhkan sekitar 40GB RAM dan dapat berjalan di workstation dengan memori unified 64GB atau dua GPU konsumen. Model 8B seperti Llama 3.1 8B berjalan dengan nyaman di 8GB VRAM — satu RTX 3080 atau Apple M2 Pro.
Untuk inferensi lokal produksi, saya menggunakan: Llama 3.1 8B (Q4_K_M) untuk tugas cepat dan sensitif latensi — 2-4 token/detik di CPU, 20-40 token/detik di GPU. Llama 3.1 70B (Q4_K_M) untuk penalaran kompleks, pembuatan kode, dan analisis dokumen. Mistral NeMo 12B untuk tugas ekstraksi terstruktur. Qwen2.5-Coder 7B untuk tugas khusus kode.
┌─────────────────────────────────────────────────────────────┐
│ Ollama Production Architecture │
│ │
│ Application Layer │
│ ┌──────────────────────────────────────┐ │
│ │ NestJS / Node.js App │ │
│ │ (uses OpenAI SDK, base_url=local) │ │
│ └─────────────────┬────────────────────┘ │
│ │ HTTP │
│ ▼ │
│ ┌──────────────────────────────────────┐ │
│ │ Nginx (TLS + API Key Auth) │ │
│ └─────────────────┬────────────────────┘ │
│ │ http://localhost:11434 │
│ ▼ │
│ ┌──────────────────────────────────────┐ │
│ │ Ollama Service │ │
│ │ - llama3.1:8b (chat) │ │
│ │ - qwen2.5-coder:7b (code) │ │
│ │ - mistral-nemo:12b (extraction) │ │
│ └──────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ GPU: NVIDIA RTX 4090 (24GB VRAM) │
└─────────────────────────────────────────────────────────────┘Dari pengalaman saya menjalankan Ollama di produksi pada DigitalOcean GPU Droplet: muat model yang paling sering digunakan saat startup untuk menghindari latensi cold-start. Ollama menyimpan model dalam memori jika Anda menetapkan OLLAMA_KEEP_ALIVE=24h di lingkungan. Permintaan pertama setelah memuat model membutuhkan 3-8 detik untuk pemuatan awal; permintaan berikutnya hampir instan.
Menjalankan Ollama sebagai layanan produksi daripada alat developer memerlukan beberapa langkah tambahan: konfigurasi layanan systemd, batas sumber daya, proxy autentikasi, dan pemantauan. Setup Ollama default tidak memiliki autentikasi — siapa pun di jaringan Anda dapat memanggil API. Untuk produksi, selalu letakkan proxy reverse nginx yang diautentikasi di depan.
Konfigurasi yang saya gunakan menempatkan Ollama di belakang nginx dengan HTTP basic auth untuk deployment internal sederhana, atau proxy validasi kunci API untuk deployment tim. Untuk penggunaan enterprise, solusi yang lebih robust adalah proxy yang kompatibel dengan OpenAI seperti LiteLLM yang menangani autentikasi, rate limiting, perutean model, dan pelacakan biaya di seluruh model lokal dan cloud dari satu endpoint.
# Install Ollama
curl -fsSL https://ollama.com/install.sh | sh
# Configure as systemd service with resource limits
sudo tee /etc/systemd/system/ollama.service > /dev/null <<'EOF'
[Unit]
Description=Ollama Service
After=network-online.target
[Service]
ExecStart=/usr/local/bin/ollama serve
User=ollama
Group=ollama
Restart=always
RestartSec=3
Environment="OLLAMA_HOST=127.0.0.1:11434"
Environment="OLLAMA_KEEP_ALIVE=24h"
Environment="OLLAMA_MAX_LOADED_MODELS=3"
Environment="OLLAMA_NUM_PARALLEL=4"
[Install]
WantedBy=default.target
EOF
sudo systemctl enable --now ollama
# Pull models
ollama pull llama3.1:8b
ollama pull qwen2.5-coder:7b
ollama pull mistral-nemo:12b
# Nginx API key auth proxy
sudo tee /etc/nginx/sites-available/ollama > /dev/null <<'EOF'
server {
listen 443 ssl;
server_name llm.yourcompany.com;
ssl_certificate /etc/letsencrypt/live/llm.yourcompany.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/llm.yourcompany.com/privkey.pem;
location /v1/ {
# Validate API key
if ($http_authorization != "Bearer YOUR_SECRET_API_KEY") {
return 401 '{"error": "Unauthorized"}';
}
proxy_pass http://127.0.0.1:11434;
proxy_read_timeout 300s;
}
}
EOF
# Use with OpenAI SDK (drop-in replacement)
# import OpenAI from 'openai'
# const client = new OpenAI({
# baseURL: 'https://llm.yourcompany.com/v1',
# apiKey: 'YOUR_SECRET_API_KEY',
# })
# const response = await client.chat.completions.create({
# model: 'llama3.1:8b',
# messages: [{ role: 'user', content: 'Hello!' }],
# })Ollama mengekspos API yang kompatibel dengan OpenAI di http://localhost:11434/v1, yang berarti SDK OpenAI mana pun berfungsi tanpa modifikasi. Ganti base_url dan nama model, dan kode yang ada berjalan terhadap model lokal. Ini adalah jalur tercepat ke inferensi lokal untuk aplikasi yang sudah ada.
Kehabisan VRAM selama inferensi menyebabkan model beralih ke komputasi CPU, yang 10-20x lebih lambat. Ini tidak jelas dari log — API masih merespons, hanya sangat lambat. Jika Anda melihat inferensi yang sangat lambat (di bawah 2 token/detik untuk model 8B), periksa penggunaan memori GPU dengan nvidia-smi. Aturan praktisnya: ukuran model Q4 yang dikuantisasi dalam GB ditambah overhead 2GB harus muat di VRAM.
LLM lokal menang ketika: persyaratan privasi data mencegah pengiriman data ke pihak ketiga, Anda memiliki tugas berulang volume tinggi (klasifikasi, ekstraksi) di mana biaya API bertambah, persyaratan latensi membutuhkan respons sub-100ms (mungkin dengan model 7B di GPU), atau Anda membutuhkan ketersediaan terjamin tanpa batas rate API.
Setup produksi saat ini di Commsult Indonesia: Ollama berjalan di server khusus dengan 64GB RAM dan NVIDIA RTX 4090 (24GB VRAM). Model yang dimuat: Llama 3.1 8B Instruct (chat utama), Qwen2.5-Coder 7B (tugas kode), Mistral NeMo 12B (ekstraksi dokumen). Autentikasi melalui nginx dengan validasi kunci API. Biaya komputasi bulanan: depresiasi server tetap — nol biaya per token.