Kubernetes
Kubernetes (K8s), kapsayıcıları bir küme genelinde çalıştırır, tanımlanan çoğaltma sayısının sağlıklı kalmasını sağlar ve GPU eğitim ile çıkarım işlerini planlar.
Genellikle K8s olarak kısaltılan Kubernetes, makinelerden oluşan bir kümede konteynerleştirilmiş uygulamaları çalıştıran açık kaynaklı bir sistemdir. Kullanıcılar, hangi konteyner görüntüsünün çalıştırılacağı, kaç kopyanın tutulacağı ve her kopyanın ne kadar CPU, bellek ve GPU kapasitesine ihtiyaç duyduğu gibi bir iş yükünün istenen durumunu belirtir; Kubernetes de konteynerleri bu duruma uydurmak için sürekli başlatır, yeniden başlatır, taşır ve ölçeklendirir. Google, şirket içi Borg küme yöneticisinden yararlanarak projeyi Haziran 2014'te duyurdu ve Temmuz 2015'te 1.0 sürümüyle yeni kurulan Cloud Native Computing Foundation vakfının temel projesi olarak sundu. Adı Yunancada dümenci anlamına gelir; K8s kısaltması, K ile s arasındaki sekiz harfin yerine geçer. Makine öğrenimi operasyonlarında (MLOps) Kubernetes, paylaşılan donanımlarda dağıtık eğitim işlerini, toplu çıkarımı ve model sunumunu yürüten yaygın katmandır.
Mimari ve Denetim Döngüsü#
Bir kümede denetim düzlemi ve çalışan düğümler bulunur. Denetim düzlemi; her istemcinin iletişim kurduğu API sunucusunu, küme durumunu tutan etcd deposunu, yeni pod'ları düğümlere atayan zamanlayıcıyı ve her biri bir nesne türünü izleyen denetleyicileri barındırır. İster şirket içi bir sunucu ister bulut sanal makinesi olsun, her çalışan düğümde bir kubelet aracısı ve containerd ya da CRI-O gibi bir konteyner çalışma zamanı bulunur. Kubernetes'in zamanladığı en küçük birim pod'dur: Ağ adresini ve depolama birimlerini paylaşan bir veya daha fazla konteyner.
İş yükleri genellikle YAML ile yazılan nesneler olarak tanımlanır ve kubectl ile uygulanır. Deployment, belirli sayıda özdeş pod'u çalışır durumda tutar ve görüntü değiştiğinde bunları kademeli olarak değiştirir; Service bu pod'lara tek bir sabit adres verir ve istekleri aralarında dağıtır; Job ise bir görev tamamlanana kadar pod'ları çalıştırır. Denetleyiciler, bildirilen durumla gerçekte çalışan durumu karşılaştırıp aradaki farkları giderir:
Aynı döngü Kubernetes'in kendi kendini onarmasını sağlar. Bir düğüm arızalandığında o düğümdeki pod'lar çalışan durumdan çıkar ve denetleyici sağlıklı düğümlerde bunların yerine yenilerini oluşturur. Kapasite yetersizliği nedeniyle Pending durumunda kalan bir pod da küme otomatik ölçekleyicilerinin düğüm eklemesi gerektiğini gösterir.
Makine Öğrenimi için Kubernetes#
GPU'lar pod'lara, bunları nvidia.com/gpu gibi sayılabilir bir kaynak olarak duyuran aygıt eklentileri ve Kubernetes 1.34'ten beri kararlı olan Dinamik Kaynak Tahsisi aracılığıyla sunulur; bu özellik, pod'un GPU modeli veya bellek gibi özniteliklere göre aygıt istemesini sağlar. NVIDIA'nın GPU Operator'ı GPU düğümlerine sürücüleri ve eklentileri yükleyebilir, tek bir GPU'yu Multi-Instance GPU dilimlerine bölebilir veya GPU'yu pod'lar arasında zaman paylaşımlı kullanabilir. OpenAI, 2021'de GPT-3 ve CLIP gibi modelleri eğitmek için tek Kubernetes kümelerini 7.500 düğüme ölçeklendirdiğini bildirdi.
Açık kaynaklı projeler bunun üzerine makine öğrenimine özgü katmanlar ekler:
- Kubeflow: Bir kümede dağıtık PyTorch eğitimini, makine öğrenimi işlem hatlarını ve not defterlerini çalıştırır.
- Kueue: Toplu işleri ve eğitim işlerini sıraya alıp ekip kotalarını uygular; böylece pahalı GPU'lar meşgul kalır ve hiçbir ekip tüm GPU'ları tek başına alamaz.
- KServe: Boştaki modeller için sıfıra ölçeklendirme dâhil olmak üzere, otomatik ölçeklenen uç noktaların arkasında modeller sunar.
- Yatay Pod Otomatik Ölçekleyici: Trafik değişirken gecikmeyi sabit tutmak için CPU kullanımına veya kuyruk uzunluğu gibi özel ölçümlere göre çıkarım kopyalarını ekler ya da kaldırır.
Bir Job, toplu çıkarım gibi tek seferlik bir GPU görevini çalıştırmanın en basit yoludur. Resmî Ultralytics Docker görüntüsü, yolo komutunu ve YOLO26 nano ağırlıklarını zaten içerir; bu nedenle bu Job yalnızca bir komut belirler ve bir GPU ister:
apiVersion: batch/v1
kind: Job
metadata:
name: yolo26-predict
spec:
backoffLimit: 2 # retry a failed pod at most twice
template:
spec:
restartPolicy: Never
containers:
- name: yolo
image: ultralytics/ultralytics:latest
command: ["yolo", "predict", "model=yolo26n.pt", "source=https://ultralytics.com/images/bus.jpg"]
resources:
limits:
nvidia.com/gpu: 1 # schedule only onto a node with a free GPUkubectl apply -f job.yaml bunu gönderir, zamanlayıcı pod'u boş GPU bulunan bir düğüme yerleştirir ve kubectl logs job/yolo26-predict, tahmin modu üzerinden nesne algılama sonuçlarını yazdırır. Bir eğitim Job'u da aynı düzeni izler; denetim noktaları için kalıcı bir birim, ayrıca PyTorch veri yükleyici çalışanları için /dev/shm konumunda bellekte bir birim ekler.
Kubernetes, Docker ve Sunucusuz Mimari Karşılaştırması#
- Docker: Görüntüler oluşturur ve konteynerleri tek bir makinede çalıştırır. Kubernetes konteynerleri birçok makineye dağıtır; 1.24 sürümünden beri Docker ile oluşturulmuş görüntüleri Docker Engine yerine containerd veya CRI-O aracılığıyla çalıştırır.
- Sunucusuz bilgi işlem: Google Cloud Run ve AWS Lambda gibi hizmetler kümeyi tamamen gizler ve istek başına ücret alır; Knative ise aynı sıfıra ölçeklendirme modelini Kubernetes kümelerine taşır.
- Yönetilen Kubernetes: Google Kubernetes Engine (GKE), Amazon Elastic Kubernetes Service (EKS) ve Azure Kubernetes Service (AKS), müşterileri için denetim düzlemini çalıştırır; GKE Autopilot çalışan düğümleri de yönetir.










