Skip to main content
Veri Bilimi & Yapay Zeka

Kubernetes ile AI Model Dağıtımı

Mart 06, 2026 13 dk okuma 16 views Raw
Kubernetes ile AI model dağıtımı için modern veri merkezi altyapısı
İçindekiler

📑 İçindekiler

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:

Avantaj Açıklama
Ölçeklenebilirlik HPA ve VPA ile otomatik kaynak ayarlama
Taşınabilirlik On-premise, cloud ve hybrid ortamlarda çalışma
Self-healing Başarısız pod'ların otomatik yeniden başlatılması
Declarative Config YAML ile tekrarlanabilir altyapı tanımları
Ecosystem Zengin araç ve operatör ekosistemi

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
Özellik TF Serving TorchServe Triton
Multi-framework
Dynamic Batching
Ensemble Models ⚠️
GPU Paylaşımı ⚠️ ⚠️
Model Versiyonlama

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:

Metrik Kategorisi Metrikler Alarm Eşiği
Latency P50, P95, P99 inference süresi P99 > 500ms
Throughput Requests/sec, batch size RPS < minimum SLA
GPU Utilization, memory, temperature Temp > 85°C
Model Quality Accuracy, drift score Drift > threshold
Errors Error rate, timeout rate Error rate > %1
# 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:

  1. Model Training Trigger: Yeni veri geldiğinde veya schedule'a göre model eğitimi başlatılır
  2. Model Validation: Eğitilen model, accuracy, latency ve bias metrikleri açısından test edilir
  3. Model Registry: Başarılı modeller MLflow veya Weights & Biases'a kaydedilir
  4. Container Build: Model artifact ile serving container'ı oluşturulur
  5. Integration Tests: Staging ortamında end-to-end testler çalıştırılır
  6. Canary Deployment: Trafiğin küçük bir kısmı yeni modele yönlendirilir
  7. 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.

]]>

Bu yazıyı paylaş