📑 İçindekiler
- 1. Giriş: Neden Kubernetes ile AI Model Dağıtımı?
- 2. AI Modellerinin Containerize Edilmesi
- 3. Model Serving Frameworkleri
- 3.1 TensorFlow Serving
- 3.2 TorchServe
- 3.3 NVIDIA Triton Inference Server
- 4. GPU Scheduling ve Kaynak Yönetimi
- 5. Auto-Scaling Stratejileri
- 6. Helm Charts ile Deployment Yönetimi
- 7. Monitoring ve Observability
- 8. CI/CD Pipeline Entegrasyonu
- 9. Best Practices ve Güvenlik
- 10. Sonuç
- 11. Sıkça Sorulan Sorular (FAQ)
1. Giriş: Neden Kubernetes ile AI Model Dağıtımı?
Yapay zeka modellerinin geliştirilmesi, tüm sürecin yalnızca küçük bir parçasıdır. Asıl zorluk, bu modellerin production ortamında güvenilir, ölçeklenebilir ve yönetilebilir şekilde çalıştırılmasıdır. Google'ın ünlü makalesinde belirtildiği gibi, ML sistemlerinde kodun yalnızca %5'i gerçek model eğitimi ile ilgiliyken, geri kalan %95'i altyapı, veri yönetimi ve operasyonel süreçlerden oluşur.
Kubernetes, container orchestration dünyasının de facto standardı olarak, AI model dağıtımında devrim yaratmıştır. Otomatik ölçeklendirme, self-healing, rolling updates ve deklaratif yapılandırma gibi özellikleri sayesinde, ML mühendislerinin altyapı karmaşıklığından soyutlanarak model performansına odaklanmalarını sağlar.
💡 Bilgi
2026 itibarıyla, Fortune 500 şirketlerinin %85'inden fazlası production ML workload'larını Kubernetes üzerinde çalıştırmaktadır. Bu oran her geçen yıl artmaya devam etmektedir.
Kubernetes ile AI model dağıtımının temel avantajları şunlardır:
2. AI Modellerinin Containerize Edilmesi
Kubernetes üzerinde model dağıtımının ilk adımı, modeli ve tüm bağımlılıklarını bir Docker container'ına paketlemektir. Bu süreçte dikkat edilmesi gereken kritik noktalar vardır.
Dockerfile Tasarımı
Bir AI model container'ı oluştururken, multi-stage build kullanarak image boyutunu optimize etmek büyük önem taşır. Eğitim bağımlılıkları ile inference bağımlılıkları birbirinden ayrılmalıdır.
# Multi-stage Dockerfile for AI Model FROM python:3.11-slim AS builder WORKDIR /app COPY requirements.txt . RUN pip install --no-cache-dir --prefix=/install -r requirements.txt FROM nvidia/cuda:12.3-runtime-ubuntu22.04 AS runtime COPY --from=builder /install /usr/local COPY model/ /app/model/ COPY src/ /app/src/ WORKDIR /app EXPOSE 8080 # Health check endpoint HEALTHCHECK --interval=30s --timeout=5s \ CMD curl -f http://localhost:8080/health || exit 1 CMD ["python", "src/serve.py", "--port", "8080"]
Model Artifact Yönetimi
Büyük model dosyalarını doğrudan container image'ına gömmek pratik değildir. Bunun yerine, model artifact'larını harici bir depolama alanında (S3, GCS, Azure Blob) tutup, container başlatılırken indirmek tercih edilir. Bu yaklaşım sayesinde:
- Container image boyutu küçük kalır ve dağıtım hızlanır
- Model versiyonları bağımsız olarak yönetilebilir
- Aynı serving kodu farklı model versiyonlarıyla kullanılabilir
- Model registry ile entegrasyon kolaylaşır
# Init container ile model indirme
apiVersion: v1
kind: Pod
metadata:
name: ai-model-server
spec:
initContainers:
- name: model-downloader
image: amazon/aws-cli:latest
command: ["aws", "s3", "cp", "s3://models/v2.1/model.onnx", "/models/"]
volumeMounts:
- name: model-volume
mountPath: /models
containers:
- name: inference-server
image: my-inference:latest
volumeMounts:
- name: model-volume
mountPath: /models
volumes:
- name: model-volume
emptyDir: {}
3. Model Serving Frameworkleri
Kubernetes üzerinde AI modellerini serve etmek için çeşitli framework'ler mevcuttur. Her birinin kendine özgü avantajları ve kullanım senaryoları bulunmaktadır.
3.1 TensorFlow Serving
TensorFlow Serving, Google tarafından geliştirilen, production ortamları için tasarlanmış yüksek performanslı bir model serving sistemidir. SavedModel formatındaki TensorFlow modellerini doğrudan sunabilir ve gRPC/REST API endpoint'leri sağlar.
apiVersion: apps/v1
kind: Deployment
metadata:
name: tf-serving
labels:
app: tf-serving
spec:
replicas: 3
selector:
matchLabels:
app: tf-serving
template:
metadata:
labels:
app: tf-serving
spec:
containers:
- name: tf-serving
image: tensorflow/serving:latest-gpu
ports:
- containerPort: 8500 # gRPC
- containerPort: 8501 # REST
args:
- "--model_config_file=/config/models.config"
- "--monitoring_config_file=/config/monitoring.config"
resources:
limits:
nvidia.com/gpu: 1
memory: "8Gi"
requests:
memory: "4Gi"
volumeMounts:
- name: model-config
mountPath: /config
volumes:
- name: model-config
configMap:
name: tf-serving-config
TensorFlow Serving'in en güçlü özelliklerinden biri, model versiyonlama desteğidir. Birden fazla model versiyonunu aynı anda serve edebilir ve A/B testing yapmanızı sağlar. Ayrıca batching desteği ile yüksek throughput elde edilir.
3.2 TorchServe
TorchServe, PyTorch modellerini production'da serve etmek için AWS ve Meta tarafından birlikte geliştirilen bir araçtır. Custom handler'lar yazarak pre/post processing adımlarını model serving pipeline'ına entegre edebilirsiniz.
# TorchServe Kubernetes Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: torchserve
spec:
replicas: 2
selector:
matchLabels:
app: torchserve
template:
spec:
containers:
- name: torchserve
image: pytorch/torchserve:latest-gpu
ports:
- containerPort: 8080 # Inference
- containerPort: 8081 # Management
- containerPort: 8082 # Metrics
env:
- name: TS_NUM_GPU
value: "1"
- name: TS_MAX_BATCH_SIZE
value: "32"
- name: TS_MAX_BATCH_DELAY
value: "100"
resources:
limits:
nvidia.com/gpu: 1
requests:
cpu: "2"
memory: "4Gi"
TorchServe'ün dynamic batching özelliği, birden fazla isteği tek bir batch halinde işleyerek GPU kullanımını optimize eder. Bu özellik özellikle transformer tabanlı modellerde büyük performans artışı sağlar.
3.3 NVIDIA Triton Inference Server
NVIDIA Triton, çoklu framework desteği (TensorFlow, PyTorch, ONNX, TensorRT, OpenVINO) sunan güçlü bir inference sunucusudur. Ensemble modelleri, model pipeline'ları ve gelişmiş scheduling özellikleri ile en kapsamlı çözümdür.
# Triton Inference Server Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: triton-inference
spec:
replicas: 3
selector:
matchLabels:
app: triton
template:
spec:
containers:
- name: triton
image: nvcr.io/nvidia/tritonserver:24.01-py3
ports:
- containerPort: 8000 # HTTP
- containerPort: 8001 # gRPC
- containerPort: 8002 # Metrics
args:
- "tritonserver"
- "--model-repository=/models"
- "--strict-model-config=false"
- "--log-verbose=1"
resources:
limits:
nvidia.com/gpu: 2
memory: "16Gi"
requests:
cpu: "4"
memory: "8Gi"
readinessProbe:
httpGet:
path: /v2/health/ready
port: 8000
initialDelaySeconds: 30
periodSeconds: 10
4. GPU Scheduling ve Kaynak Yönetimi
Kubernetes'te GPU kaynakları, node'lar üzerinde bulunan fiziksel GPU cihazlarının pod'lara tahsis edilmesi yoluyla yönetilir. NVIDIA GPU Operator ve Device Plugin bu sürecin temelini oluşturur.
NVIDIA GPU Operator Kurulumu
GPU Operator, Kubernetes cluster'ınızdaki tüm GPU ile ilgili bileşenleri otomatik olarak yönetir: driver'lar, container runtime, device plugin ve monitoring araçları.
# GPU Operator kurulumu helm repo add nvidia https://helm.ngc.nvidia.com/nvidia helm repo update helm install gpu-operator nvidia/gpu-operator \ --namespace gpu-operator \ --create-namespace \ --set driver.enabled=true \ --set toolkit.enabled=true \ --set devicePlugin.enabled=true \ --set mig.strategy=mixed
GPU Time-Slicing ve MIG
Her inference pod'una tam bir GPU tahsis etmek maliyetli olabilir. NVIDIA'nın Multi-Instance GPU (MIG) teknolojisi ve GPU time-slicing özelliği, tek bir GPU'yu birden fazla workload arasında paylaşmayı mümkün kılar.
# GPU Time-Slicing ConfigMap
apiVersion: v1
kind: ConfigMap
metadata:
name: gpu-sharing-config
data:
any: |-
version: v1
sharing:
timeSlicing:
renameByDefault: false
resources:
- name: nvidia.com/gpu
replicas: 4 # Her GPU 4 pod arasında paylaşılır
⚠️ Uyarı
GPU time-slicing, GPU belleğini izole etmez. Birden fazla workload aynı GPU belleğini paylaşır ve OOM (Out of Memory) riski oluşabilir. Kritik production workload'ları için MIG veya dedicated GPU kullanmanız önerilir.
Node Affinity ve Taints
GPU node'larını yalnızca GPU gerektiren workload'lar için ayırmak amacıyla taints ve tolerations mekanizması kullanılır. Bu sayede CPU-only pod'ların GPU node'larına schedule edilmesi engellenir.
# GPU node'larına taint ekleme
kubectl taint nodes gpu-node-1 nvidia.com/gpu=present:NoSchedule
# Pod'a toleration ekleme
spec:
tolerations:
- key: "nvidia.com/gpu"
operator: "Equal"
value: "present"
effect: "NoSchedule"
nodeSelector:
accelerator: nvidia-a100
5. Auto-Scaling Stratejileri
AI inference workload'ları genellikle değişken trafik paternlerine sahiptir. Kubernetes'in ölçeklendirme mekanizmalarını doğru yapılandırmak, hem maliyet optimizasyonu hem de performans için kritiktir.
Horizontal Pod Autoscaler (HPA)
HPA, pod sayısını otomatik olarak artırıp azaltır. AI workload'ları için standart CPU/memory metriklerinin yanı sıra, custom metrics (inference latency, queue depth, GPU utilization) kullanmak çok daha etkilidir.
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: inference-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: triton-inference
minReplicas: 2
maxReplicas: 20
behavior:
scaleUp:
stabilizationWindowSeconds: 60
policies:
- type: Pods
value: 2
periodSeconds: 60
scaleDown:
stabilizationWindowSeconds: 300
policies:
- type: Percent
value: 10
periodSeconds: 120
metrics:
- type: Pods
pods:
metric:
name: inference_request_queue_size
target:
type: AverageValue
averageValue: "10"
- type: Pods
pods:
metric:
name: gpu_utilization_percent
target:
type: AverageValue
averageValue: "70"
KEDA ile Event-Driven Scaling
KEDA (Kubernetes Event-Driven Autoscaling), daha gelişmiş ölçeklendirme senaryoları için idealdir. Kafka topic'lerindeki mesaj sayısı, Redis queue uzunluğu veya Prometheus metrikleri gibi harici kaynaklara göre scale edebilir ve sıfıra kadar ölçeklendirme (scale-to-zero) destekler.
Cluster Autoscaler
Pod seviyesindeki ölçeklendirmenin yanı sıra, cluster düzeyinde de node ekleme/çıkarma gerekebilir. Cluster Autoscaler, pending pod'ları tespit ederek otomatik olarak yeni node'lar ekler. GPU node pool'ları için farklı scaling politikaları tanımlanabilir.
6. Helm Charts ile Deployment Yönetimi
Helm, Kubernetes için paket yöneticisidir ve AI model deployment'larını standardize etmek için mükemmel bir araçtır. Tekrarlanabilir, parametrik ve versiyonlanabilir deployment'lar oluşturmanızı sağlar.
AI Model Serving Helm Chart Yapısı
ai-model-chart/
├── Chart.yaml
├── values.yaml
├── values-staging.yaml
├── values-production.yaml
├── templates/
│ ├── deployment.yaml
│ ├── service.yaml
│ ├── hpa.yaml
│ ├── ingress.yaml
│ ├── configmap.yaml
│ ├── secret.yaml
│ ├── servicemonitor.yaml
│ └── _helpers.tpl
└── tests/
└── test-connection.yaml
# values.yaml - Parametrik yapılandırma
replicaCount: 2
image:
repository: registry.example.com/ai-model
tag: "v2.1.0"
pullPolicy: IfNotPresent
model:
name: "text-classifier"
version: "2.1"
framework: "triton"
storageUri: "s3://models/text-classifier/v2.1/"
resources:
limits:
nvidia.com/gpu: 1
memory: "8Gi"
requests:
cpu: "2"
memory: "4Gi"
autoscaling:
enabled: true
minReplicas: 2
maxReplicas: 10
targetGPUUtilization: 70
monitoring:
enabled: true
serviceMonitor: true
Farklı ortamlar için environment-specific values dosyaları kullanarak, aynı chart ile staging ve production deployment'larını yönetebilirsiniz:
# Staging deployment helm upgrade --install ai-model ./ai-model-chart \ -f values-staging.yaml \ --namespace ai-staging # Production deployment helm upgrade --install ai-model ./ai-model-chart \ -f values-production.yaml \ --namespace ai-production
7. Monitoring ve Observability
AI model serving sistemlerinin izlenmesi, standart uygulama monitoring'inin ötesinde özel metrikler gerektirir. Model performansı, inference latency, GPU kullanımı ve data drift gibi ML-spesifik metrikler takip edilmelidir.
Prometheus + Grafana Stack
Kubernetes ekosisteminde en yaygın monitoring çözümü Prometheus ve Grafana kombinasyonudur. AI workload'ları için izlenmesi gereken temel metrikler:
# ServiceMonitor for Prometheus
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: inference-monitor
spec:
selector:
matchLabels:
app: triton-inference
endpoints:
- port: metrics
interval: 15s
path: /metrics
namespaceSelector:
matchNames:
- ai-production
Model Performance Tracking
Production'da model performansını sürekli izlemek, data drift ve concept drift problemlerini erken tespit etmek için kritiktir. Seldon Core veya Evidently AI gibi araçlar, prediction distribution'larını analiz ederek model degradation'ı otomatik olarak algılayabilir.
8. CI/CD Pipeline Entegrasyonu
AI model deployment'larında CI/CD pipeline, geleneksel yazılım deployment'larından farklıdır. Model eğitimi, validasyon, container build, integration test ve canary deployment gibi ML-spesifik adımlar gerektirir.
MLOps Pipeline Mimarisi
Tipik bir MLOps CI/CD pipeline şu adımlardan oluşur:
- Model Training Trigger: Yeni veri geldiğinde veya schedule'a göre model eğitimi başlatılır
- Model Validation: Eğitilen model, accuracy, latency ve bias metrikleri açısından test edilir
- Model Registry: Başarılı modeller MLflow veya Weights & Biases'a kaydedilir
- Container Build: Model artifact ile serving container'ı oluşturulur
- Integration Tests: Staging ortamında end-to-end testler çalıştırılır
- Canary Deployment: Trafiğin küçük bir kısmı yeni modele yönlendirilir
- Full Rollout: Metrikler olumlu ise tam geçiş yapılır
# GitHub Actions - AI Model CI/CD Pipeline
name: AI Model Deploy
on:
push:
paths: ['models/**', 'src/serving/**']
jobs:
validate-and-deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Run Model Validation
run: |
python scripts/validate_model.py \
--model-path models/latest \
--min-accuracy 0.95 \
--max-latency-ms 100
- name: Build & Push Container
run: |
docker build -t $REGISTRY/ai-model:${{ github.sha }} .
docker push $REGISTRY/ai-model:${{ github.sha }}
- name: Deploy Canary
run: |
helm upgrade ai-model ./charts/ai-model \
--set image.tag=${{ github.sha }} \
--set canary.enabled=true \
--set canary.weight=10
- name: Validate Canary Metrics
run: |
python scripts/check_canary.py \
--duration 600 \
--max-error-rate 0.01 \
--max-p99-latency 200
- name: Full Rollout
if: success()
run: |
helm upgrade ai-model ./charts/ai-model \
--set image.tag=${{ github.sha }} \
--set canary.enabled=false
Argo Rollouts ile Progressive Delivery
Argo Rollouts, Kubernetes-native progressive delivery controller'ıdır. Blue-green ve canary deployment stratejileri ile AI modellerinin güvenli bir şekilde production'a alınmasını sağlar. Prometheus metriklerine dayalı otomatik rollback özelliği, hatalı model deployment'larını anında geri alabilir.
apiVersion: argoproj.io/v1alpha1
kind: Rollout
metadata:
name: ai-model-rollout
spec:
strategy:
canary:
canaryService: ai-model-canary
stableService: ai-model-stable
analysis:
templates:
- templateName: inference-success-rate
startingStep: 1
steps:
- setWeight: 10
- pause: {duration: 5m}
- setWeight: 30
- pause: {duration: 5m}
- setWeight: 60
- pause: {duration: 10m}
- setWeight: 100
9. Best Practices ve Güvenlik
Kubernetes üzerinde AI model dağıtımında dikkat edilmesi gereken temel best practice'ler:
Kaynak Yönetimi
- Resource requests ve limits her zaman tanımlayın. GPU workload'ları için bu zorunludur
- Priority Classes kullanarak kritik inference pod'larının öncelikli schedule edilmesini sağlayın
- Pod Disruption Budget (PDB) ile minimum available replica sayısını garanti edin
- Resource quotas ile namespace bazında kaynak limitleri belirleyin
Güvenlik Önlemleri
- Network Policies ile inference pod'larının ağ erişimini kısıtlayın
- Model artifact'larına erişim için IRSA (IAM Roles for Service Accounts) kullanın
- Container image'larını vulnerability scanning ile tarayın
- Pod Security Standards uygulayarak container'ları non-root olarak çalıştırın
- API endpoint'lerine rate limiting ve authentication ekleyin
💡 İpucu
Model serving endpoint'lerinize mutual TLS (mTLS) eklemek için Istio veya Linkerd gibi service mesh çözümlerini kullanabilirsiniz. Bu, hem güvenlik hem de traffic management açısından büyük avantaj sağlar.
10. Sonuç
Kubernetes, AI model dağıtımı için endüstri standardı haline gelmiştir. Container orchestration, otomatik ölçeklendirme, self-healing ve deklaratif yapılandırma gibi güçlü özellikleri, ML workload'larının production ortamında güvenilir şekilde çalıştırılmasını mümkün kılar.
Bu rehberde ele aldığımız konuları özetlemek gerekirse: model containerization ile başlayan süreç, uygun serving framework seçimi (TF Serving, TorchServe veya Triton), GPU scheduling ve kaynak yönetimi, auto-scaling stratejileri, Helm charts ile standardize deployment'lar, kapsamlı monitoring ve CI/CD pipeline entegrasyonu ile tamamlanır.
Başarılı bir AI model deployment stratejisi için, bu bileşenlerin bir bütün olarak ele alınması ve organizasyonun MLOps olgunluk seviyesine göre kademeli olarak uygulanması önerilir. En önemlisi, her adımda observability ve automation ilkelerini ön planda tutmaktır.
11. Sıkça Sorulan Sorular (FAQ)
Kubernetes olmadan AI model deployment yapılabilir mi?
Evet, AWS SageMaker, Google Vertex AI veya Azure ML gibi managed servisler kullanılabilir. Ancak Kubernetes, vendor lock-in'den kaçınma, tam kontrol ve hybrid/multi-cloud esnekliği sunar. Küçük ölçekli projeler için Docker Compose veya serverless seçenekler de değerlendirilebilir.
Hangi model serving framework'ünü seçmeliyim?
Framework seçimi kullanılan ML framework'üne ve gereksinimlere bağlıdır. Yalnızca TensorFlow modelleri serve ediyorsanız TF Serving, PyTorch modelleri için TorchServe idealdir. Birden fazla framework kullanıyorsanız veya gelişmiş ensemble/pipeline desteğine ihtiyacınız varsa NVIDIA Triton en kapsamlı çözümdür.
GPU olmadan Kubernetes'te model serving yapılabilir mi?
Evet, birçok model CPU üzerinde de verimli şekilde çalıştırılabilir. ONNX Runtime, OpenVINO gibi araçlar CPU inference performansını optimize eder. Küçük modeller, quantize edilmiş modeller veya düşük throughput gereksinimleri için CPU-only deployment makul bir seçenektir. Ancak büyük transformer modelleri için GPU neredeyse zorunludur.
Canary deployment sırasında model performansı nasıl değerlendirilir?
Canary deployment'ta yeni modele kademeli olarak trafik yönlendirilirken, inference latency (P50/P95/P99), error rate, prediction distribution ve business metrikleri (conversion rate, kullanıcı etkileşimi) karşılaştırılır. Argo Rollouts veya Flagger gibi araçlar, bu metrikleri Prometheus'tan çekerek otomatik rollback kararı verebilir.
Scale-to-zero yaklaşımı AI inference için uygun mudur?
Scale-to-zero, maliyet açısından cazip olsa da AI inference için cold start süreleri önemli bir dezavantajdır. GPU pod'larının başlatılması, model yüklenmesi ve warmup süreci dakikalar alabilir. KEDA ile scale-to-zero uygulanabilir ancak yalnızca düşük trafik alan veya latency-insensitive workload'lar için önerilir. Kritik inference endpoint'leri için minimum 1-2 replica her zaman çalışır durumda tutulmalıdır.
KServe (eski adıyla KFServing) nedir ve ne zaman kullanılmalıdır?
KServe, Kubernetes üzerinde standardize model serving sağlayan bir CRD (Custom Resource Definition) ve controller'dır. InferenceService abstraction'ı ile TF Serving, TorchServe ve Triton gibi runtime'ları tek bir API altında birleştirir. Transformer ve Explainer bileşenleri ile pre/post processing ve model açıklanabilirliği entegre edilebilir. Kubeflow ekosistemi ile çalışıyorsanız KServe doğal bir seçimdir.