LocalAI ile OpenAI API Uyumlu Yerel Yapay Zeka Sunucusu Kurulumu
Yapay zeka araçlarını buluta bağımlı kalmadan çalıştırmak isteyen sistem yöneticileri için LocalAI tam anlamıyla bir oyun değiştirici. OpenAI API’siyle birebir uyumlu bu açık kaynak proje sayesinde kendi sunucunda GPT benzeri modeller çalıştırabilir, gizlilik kaygılarından kurtulabilir ve aylık abonelik maliyetlerini sıfıra indirebilirsin. Bu yazıda LocalAI kurulumundan model yönetimine, API entegrasyonundan production ortamı optimizasyonuna kadar her şeyi ele alacağız.
LocalAI Nedir ve Neden Önemli?
LocalAI, Go diliyle yazılmış, OpenAI REST API spesifikasyonuyla tam uyumlu bir yerel yapay zeka sunucusudur. Temel mantığı şu: Eğer uygulamanız OpenAI SDK’sı veya API’siyle çalışıyorsa, sadece endpoint URL’ini değiştirerek LocalAI’ye yönlendirebilirsiniz. Hiçbir kod değişikliği gerekmez.
Peki bu neden bu kadar önemli? Şunları düşün:
- Veri gizliliği: Şirket içi belgeler, müşteri verileri veya hassas bilgiler hiçbir zaman dış sunuculara gönderilmez
- Maliyet kontrolü: OpenAI API token maliyetleri yoğun kullanımda ciddi boyutlara ulaşabilir
- Bant genişliği bağımsızlığı: İnternet bağlantısı olmadan bile çalışır
- Model esnekliği: Llama, Mistral, Phi, Falcon ve onlarca farklı modeli çalıştırabilirsin
- Özelleştirme: Fine-tuning yapılmış domain spesifik modelleri kolayca entegre edebilirsin
Gerçek dünya senaryosu olarak şunu hayal et: Hukuk bürosu için belge analiz sistemi kuruyorsun. Müvekkil sözleşmelerini OpenAI’ye göndermek hem hukuki hem de etik açıdan sorunlu. LocalAI bu noktada tam ihtiyacın olan çözümü sunuyor.
Sistem Gereksinimleri ve Ön Hazırlık
LocalAI CPU üzerinde de çalışabilir ama gerçekçi kullanım için GPU şiddetle tavsiye edilir. Minimum ve önerilen konfigürasyonlar şöyle sıralanabilir:
CPU modunda:
- RAM: Çalıştıracağın modelin boyutunun en az 2 katı (7B model için minimum 16GB)
- Depolama: Modeller için 50GB+ boş alan
- CPU: Modern çok çekirdekli işlemci (AVX2 desteği önemli)
GPU modunda:
- NVIDIA GPU: CUDA 11.7+ ile minimum 8GB VRAM (7B model için), 24GB+ (70B model için)
- CUDA Toolkit: 11.7 veya üzeri
- RAM: GPU VRAM’in en az 2 katı sistem RAM’i
Sistem hazırlığı için önce bağımlılıkları kuralım:
# Ubuntu/Debian için
sudo apt update && sudo apt upgrade -y
sudo apt install -y build-essential cmake git wget curl
libopenblas-dev pkg-config libgrpc++-dev
protobuf-compiler-grpc python3-pip
# NVIDIA GPU varsa CUDA kurulumu kontrol et
nvidia-smi
nvcc --version
# Docker ve Docker Compose (önerilen yöntem için)
curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER
sudo apt install -y docker-compose-plugin
Docker ile LocalAI Kurulumu
En pratik ve sorunsuz kurulum yöntemi Docker’dır. Hem CPU hem GPU versiyonlarını ele alalım:
# Çalışma dizini oluştur
mkdir -p /opt/localai/{models,config,images}
cd /opt/localai
# CPU versiyonu için docker-compose.yml
cat > docker-compose.yml << 'EOF'
version: '3.8'
services:
localai:
image: localai/localai:latest-cpu
container_name: localai
restart: unless-stopped
ports:
- "8080:8080"
volumes:
- ./models:/build/models
- ./config:/build/configuration
- ./images:/tmp/generated/images
environment:
- THREADS=4
- CONTEXT_SIZE=4096
- DEBUG=false
- GALLERIES=github:go-skynet/model-gallery/index.yaml
deploy:
resources:
limits:
memory: 16G
EOF
# GPU versiyonu için (NVIDIA)
cat > docker-compose-gpu.yml << 'EOF'
version: '3.8'
services:
localai:
image: localai/localai:latest-gpu-nvidia-cuda-12
container_name: localai-gpu
restart: unless-stopped
ports:
- "8080:8080"
volumes:
- ./models:/build/models
- ./config:/build/configuration
environment:
- THREADS=8
- CONTEXT_SIZE=8192
- DEBUG=false
- GPU_LAYERS=35
- GALLERIES=github:go-skynet/model-gallery/index.yaml
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: all
capabilities: [gpu]
EOF
# Başlatma
docker compose up -d
docker compose logs -f localai
Kaynak Derleme ile Kurulum
Docker kullanmak istemiyorsan veya maksimum performans gerekiyorsa kaynak koddan derleme yapabilirsin:
# Repository'i klonla
git clone https://github.com/mudler/LocalAI.git
cd LocalAI
# GPU desteğiyle derleme (NVIDIA)
make BUILD_TYPE=cublas build
# CPU optimizasyonlu derleme (AVX2)
make BUILD_TYPE=openblas build
# Sadece CPU (en geniş uyumluluk)
make build
# Çalıştırma
./local-ai --address ":8080"
--models-path ./models
--threads 8
--context-size 4096
--f16
--cors
Model İndirme ve Yapılandırma
LocalAI’nin en güçlü özelliklerinden biri model galerisi sistemidir. Doğrudan API üzerinden model indirebilirsin:
# Mevcut galeri modellerini listele
curl http://localhost:8080/models/available | python3 -m json.tool | grep '"name"' | head -20
# Model galeriden Mistral-7B indir
curl http://localhost:8080/models/apply -H "Content-Type: application/json"
-d '{"id": "mistral-openorca"}'
# İndirme durumunu kontrol et
curl http://localhost:8080/models/jobs/<job-id>
# Manuel model indirme (GGUF formatı)
cd /opt/localai/models
wget https://huggingface.co/TheBloke/Mistral-7B-Instruct-v0.2-GGUF/resolve/main/mistral-7b-instruct-v0.2.Q4_K_M.gguf
# Yüklü modelleri listele
curl http://localhost:8080/v1/models | python3 -m json.tool
Manuel olarak indirilen modeller için yapılandırma dosyası oluşturman gerekir:
# Model config dosyası oluştur
cat > /opt/localai/config/mistral-7b.yaml << 'EOF'
name: mistral-7b
backend: llama
parameters:
model: mistral-7b-instruct-v0.2.Q4_K_M.gguf
temperature: 0.7
top_p: 0.9
top_k: 40
max_tokens: 2048
context_size: 4096
f16: true
threads: 8
gpu_layers: 35
template:
chat: |
{{.Input}}
chat_message: |
[INST] {{if .SystemPrompt}}{{.SystemPrompt}}
{{end}}{{.Input}} [/INST]
EOF
API Kullanımı ve OpenAI Uyumluluğu
LocalAI’nin en kritik özelliği OpenAI API uyumluluğu. Mevcut kodunu neredeyse hiç değiştirmeden kullanabilirsin:
# Chat completions - OpenAI ile aynı format
curl http://localhost:8080/v1/chat/completions
-H "Content-Type: application/json"
-d '{
"model": "mistral-7b",
"messages": [
{
"role": "system",
"content": "Sen yardımcı bir asistansın. Türkçe yanıt ver."
},
{
"role": "user",
"content": "Linux sisteminde disk kullanımını nasıl kontrol ederim?"
}
],
"temperature": 0.7,
"max_tokens": 500
}'
# Embeddings API
curl http://localhost:8080/v1/embeddings
-H "Content-Type: application/json"
-d '{
"model": "text-embedding-ada-002",
"input": "LocalAI harika bir araçtır"
}'
# Python SDK ile kullanım (kod değişikliği olmadan)
python3 << 'PYEOF'
from openai import OpenAI
# Sadece base_url değişiyor, api_key dummy olabilir
client = OpenAI(
base_url="http://localhost:8080/v1",
api_key="localai-key" # LocalAI bunu doğrulamaz
)
response = client.chat.completions.create(
model="mistral-7b",
messages=[
{"role": "user", "content": "Merhaba, nasılsın?"}
]
)
print(response.choices[0].message.content)
PYEOF
Nginx ile Reverse Proxy ve SSL
Production ortamında LocalAI’yi doğrudan expose etmek yerine Nginx reverse proxy kullanmalısın:
# Nginx kurulumu
sudo apt install -y nginx certbot python3-certbot-nginx
# LocalAI için Nginx konfigürasyonu
sudo cat > /etc/nginx/sites-available/localai << 'EOF'
upstream localai_backend {
server 127.0.0.1:8080;
keepalive 32;
}
server {
listen 80;
server_name ai.sirketim.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
server_name ai.sirketim.com;
ssl_certificate /etc/letsencrypt/live/ai.sirketim.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/ai.sirketim.com/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
# API Key authentication
auth_request /auth;
# Büyük yanıtlar ve uzun inference süresi için timeout artır
proxy_read_timeout 300s;
proxy_connect_timeout 60s;
proxy_send_timeout 60s;
# Streaming yanıtlar için
proxy_buffering off;
proxy_cache off;
location / {
proxy_pass http://localai_backend;
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
# Rate limiting
limit_req_zone $binary_remote_addr zone=localai:10m rate=10r/m;
location /v1/ {
limit_req zone=localai burst=5 nodelay;
proxy_pass http://localai_backend;
proxy_http_version 1.1;
proxy_set_header Connection "";
}
}
EOF
sudo ln -s /etc/nginx/sites-available/localai /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
# SSL sertifikası al
sudo certbot --nginx -d ai.sirketim.com
Performans Optimizasyonu ve İzleme
LocalAI’yi production’da çalıştırırken performans kritik önem taşır:
# Sistem düzeyinde optimizasyonlar
# Huge pages aktifleştir (özellikle büyük modeller için)
echo 'vm.nr_hugepages = 1024' | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
# CPU governor performans moduna al
for cpu in /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor; do
echo performance | sudo tee $cpu
done
# LocalAI metrics ve monitoring scripti
cat > /opt/localai/monitor.sh << 'SCRIPT'
#!/bin/bash
ENDPOINT="http://localhost:8080"
LOG_FILE="/var/log/localai-monitor.log"
ALERT_EMAIL="[email protected]"
check_health() {
HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" --max-time 10 "$ENDPOINT/readyz")
if [ "$HTTP_CODE" != "200" ]; then
echo "$(date): LocalAI down! HTTP: $HTTP_CODE" >> $LOG_FILE
# Container'ı yeniden başlat
docker compose -f /opt/localai/docker-compose.yml restart localai
echo "$(date): Restart triggered" >> $LOG_FILE
# Mail gönder
echo "LocalAI yeniden başlatıldı - $(date)" | mail -s "LocalAI Alert" $ALERT_EMAIL
else
echo "$(date): OK - HTTP $HTTP_CODE" >> $LOG_FILE
fi
}
# GPU kullanım bilgisi
if command -v nvidia-smi &> /dev/null; then
GPU_UTIL=$(nvidia-smi --query-gpu=utilization.gpu --format=csv,noheader,nounits)
GPU_MEM=$(nvidia-smi --query-gpu=memory.used,memory.total --format=csv,noheader)
echo "$(date): GPU Util: ${GPU_UTIL}% | Memory: $GPU_MEM" >> $LOG_FILE
fi
check_health
SCRIPT
chmod +x /opt/localai/monitor.sh
# Cron'a ekle - her 5 dakikada kontrol
(crontab -l 2>/dev/null; echo "*/5 * * * * /opt/localai/monitor.sh") | crontab -
Gerçek Dünya Senaryosu: Şirket İçi Chatbot
Bir yazılım şirketinde geliştirici destek botu kurduğunu düşün. İç wiki, confluence sayfaları ve şirket dokümantasyonu üzerine sorular yanıtlayan bir sistem:
# LocalAI + RAG (Retrieval Augmented Generation) için basit wrapper script
cat > /opt/localai/company-bot.py << 'PYEOF'
#!/usr/bin/env python3
from openai import OpenAI
import sys
import json
# Şirket içi bilgi tabanı (gerçekte vector DB kullanılır)
COMPANY_CONTEXT = """
Şirket VPN: vpn.sirketim.com, Cisco AnyConnect kullan
Git sunucusu: git.sirketim.com (Gitea)
CI/CD: jenkins.sirketim.com
Monitoring: grafana.sirketim.com
Deployment: Kubernetes cluster, kubectl ile yönetim
On-call: Slack #alerts kanalı, PagerDuty entegrasyonu
"""
client = OpenAI(
base_url="http://localhost:8080/v1",
api_key="dummy"
)
def ask_company_bot(question: str) -> str:
response = client.chat.completions.create(
model="mistral-7b",
messages=[
{
"role": "system",
"content": f"""Sen bir şirket içi teknik destek asistanısın.
Aşağıdaki şirket bilgilerini kullanarak sorulara yanıt ver.
Bilmediğin konularda #tech-support Slack kanalına yönlendir.
Şirket Bilgileri:
{COMPANY_CONTEXT}"""
},
{
"role": "user",
"content": question
}
],
temperature=0.3,
max_tokens=500
)
return response.choices[0].message.content
if __name__ == "__main__":
question = " ".join(sys.argv[1:]) if len(sys.argv) > 1 else "Merhaba"
print(ask_company_bot(question))
PYEOF
chmod +x /opt/localai/company-bot.py
# Test
python3 /opt/localai/company-bot.py "VPN'e nasıl bağlanırım?"
python3 /opt/localai/company-bot.py "Git repomuza nasıl erişirim?"
Çoklu Model Yönetimi ve Yük Dengeleme
Production ortamında farklı görevler için farklı modeller kullanmak yaygın bir ihtiyaçtır:
# Birden fazla LocalAI instance yük dengeleme ile
cat > /opt/localai/docker-compose-cluster.yml << 'EOF'
version: '3.8'
services:
# Hızlı yanıt gerektiren görevler için küçük model
localai-fast:
image: localai/localai:latest-gpu-nvidia-cuda-12
ports:
- "8081:8080"
volumes:
- ./models:/build/models
environment:
- GPU_LAYERS=35
- THREADS=4
- PRELOAD_MODELS=phi-2
deploy:
resources:
reservations:
devices:
- driver: nvidia
device_ids: ['0']
capabilities: [gpu]
# Karmaşık görevler için büyük model
localai-powerful:
image: localai/localai:latest-gpu-nvidia-cuda-12
ports:
- "8082:8080"
volumes:
- ./models:/build/models
environment:
- GPU_LAYERS=40
- THREADS=8
- PRELOAD_MODELS=mistral-7b
deploy:
resources:
reservations:
devices:
- driver: nvidia
device_ids: ['1']
capabilities: [gpu]
EOF
# HAProxy ile akıllı yük dengeleme
sudo apt install -y haproxy
sudo cat > /etc/haproxy/haproxy.cfg << 'EOF'
frontend localai_frontend
bind *:8080
default_backend localai_backends
backend localai_backends
balance roundrobin
option httpchk GET /readyz
server localai1 127.0.0.1:8081 check inter 30s
server localai2 127.0.0.1:8082 check inter 30s
EOF
sudo systemctl restart haproxy
Güvenlik Sıkılaştırması
LocalAI’yi güvenli şekilde çalıştırmak için bazı önemli adımlar var:
# API Key middleware - basit token doğrulama
# Nginx'te API key kontrolü için Lua scripti (nginx-extras gerekli)
sudo apt install -y libnginx-mod-http-lua
# Basit API key yönetimi için environment değişkeni
# LocalAI'de API_KEY ayarla
cat >> /opt/localai/docker-compose.yml << 'EOF'
environment:
- API_KEY=gizli-api-anahtarin-buraya
EOF
# Güvenlik duvarı kuralları
sudo ufw enable
# Sadece Nginx'ten gelen bağlantılara izin ver
sudo ufw allow from 127.0.0.1 to any port 8080
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw allow 22/tcp
# Docker network izolasyonu
docker network create --internal localai-internal
# docker-compose.yml'de network tanımla
# Log rotasyonu
cat > /etc/logrotate.d/localai << 'EOF'
/var/log/localai*.log {
daily
rotate 14
compress
delaycompress
missingok
notifempty
create 640 root adm
}
EOF
# systemd servisi olarak çalıştırma
cat > /etc/systemd/system/localai.service << 'EOF'
[Unit]
Description=LocalAI Service
After=docker.service
Requires=docker.service
[Service]
Type=simple
WorkingDirectory=/opt/localai
ExecStart=/usr/bin/docker compose up
ExecStop=/usr/bin/docker compose down
Restart=on-failure
RestartSec=10
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable localai
sudo systemctl start localai
Yaygın Sorunlar ve Çözümleri
LocalAI ile çalışırken karşılaşacağın sorunlar ve çözümleri şöyle özetlenebilir:
“Model not found” hatası:
- Model dosyasının
/build/modelsdizininde olduğunu kontrol et - Config dosyasında model adının dosya adıyla eşleştiğini doğrula
docker exec localai ls /build/modelskomutuyla container içini kontrol et
Yavaş inference:
GPU_LAYERSparametresini modele göre optimize et (7B için 32-35, 13B için 40-43)THREADSdeğerini CPU çekirdeğinin 75%’ine ayarla- F16 precision’ı aktif et:
f16: true - Küçük context size daha hızlı sonuç verir
Out of Memory hatası:
- Daha düşük quantization kullan (Q4_K_M yerine Q3_K_S)
GPU_LAYERSdeğerini düşür, bir kısmını CPU’ya bırak- Paralel istek sayısını sınırla:
PARALLEL_REQUESTS=1
Container her seferinde yavaş başlıyor:
PRELOAD_MODELSenv değişkeniyle modeli startup’ta yükle- Bu sayede ilk istek gecikme yaşamaz
Sonuç
LocalAI, yapay zeka yeteneklerini tamamen kendi kontrolünde ve altyapında çalıştırmak isteyen sistem yöneticileri için olgun ve production’a hazır bir çözüm. OpenAI API uyumluluğu sayesinde mevcut entegrasyonları bozmadan çok hızlı geçiş yapabiliyorsun.
En önemli takeaway’ler şunlar:
- Docker ile kur: En hızlı ve sorunsuz yöntem. GPU desteği için nvidia-docker gerektiğini unutma.
- Modeli işe göre seç: Her şey için büyük model şart değil. Phi-2 veya Mistral-7B çoğu görev için yeterli.
- GGUF formatı kullan: HuggingFace’ten indirirken Q4_K_M quantization genellikle kalite/hız dengesi için en iyi seçenek.
- Nginx reverse proxy: Production’da asla LocalAI’yi direkt expose etme.
- İzleme şart: Inference süresi, GPU kullanımı ve memory metrikleri takip etmeden production’da sorun yaşarsın.
Küçük bir şirketin sysadmin’iysen aylık OpenAI maliyetleri bile can sıkıcı boyutlara ulaşabiliyor. LocalAI ile bu maliyeti bir kez aldığın sunucu donanımına dönüştürebilir, uzun vadede hem para hem veri güvenliği kazanabilirsin. Başlangıç için 8GB VRAM’li bir GPU ve Mistral-7B ile yola çıkman yeterli; ihtiyaç büyüdükçe ölçeklendirebilirsin.
