Bizimle iletişime geçin

Yapay Zeka

Kubernetes'te Büyük Dil Modellerini Dağıtma: Kapsamlı Bir Kılavuz

mm
Kubernetes ve GPU Büyük Dil Modelleri: Eksiksiz Bir Kılavuz

Büyük Dil Modelleri (LLM'ler) insan benzeri metinleri anlama ve üretme yeteneğine sahiptir; bu da onları sohbet robotları, içerik oluşturma ve dil çevirisi gibi çok çeşitli uygulamalar için paha biçilmez kılar.

Ancak, Hukuk Yüksek Lisansı (LLM) programlarının dağıtımı, muazzam boyutları ve hesaplama gereksinimleri nedeniyle zorlu bir görev olabilir. Açık kaynaklı bir konteyner orkestrasyon sistemi olan Kubernetes, Hukuk Yüksek Lisansı (LLM) programlarını büyük ölçekte dağıtmak ve yönetmek için güçlü bir çözüm sunar. Bu teknik blog yazısında, Kubernetes'te Hukuk Yüksek Lisansı (LLM) dağıtım sürecini, konteynerleştirme, kaynak tahsisi ve ölçeklenebilirlik gibi çeşitli yönleri ele alarak inceleyeceğiz.

Büyük Dil Modellerini Anlamak

Dağıtım sürecine dalmadan önce, Büyük Dil Modellerinin ne olduğunu ve neden bu kadar çok ilgi gördüğünü kısaca anlayalım.

Büyük Dil Modelleri (LLM'ler), çok miktarda metin verisi üzerinde eğitilmiş bir tür sinir ağı modelidir. Bu modeller, eğitim verileri içindeki kalıpları ve ilişkileri analiz ederek insan benzeri dili anlamayı ve üretmeyi öğrenir. Yüksek Lisans'ın bazı popüler örnekleri şunları içerir: GPT (Jeneratif Ön Eğitimli Transformatör), Bert (Transformatörlerden Çift Yönlü Kodlayıcı Gösterimleri) ve XLNet.

Yüksek Lisans'lar metin oluşturma, dil çevirisi ve soru yanıtlama gibi çeşitli NLP görevlerinde dikkate değer bir performans elde etti. Ancak devasa boyutları ve hesaplama gereksinimleri, dağıtım ve çıkarım açısından önemli zorluklar doğurmaktadır.

LLM Dağıtımı için Neden Kubernetes?

Kubernetes, konteynerli uygulamaların dağıtımını, ölçeklendirilmesini ve yönetimini otomatikleştiren açık kaynaklı bir konteyner düzenleme platformudur. LLM'lerin dağıtımı için aşağıdakiler de dahil olmak üzere çeşitli avantajlar sağlar:

  • ölçeklenebilirlik: Kubernetes, gereken şekilde bilgi işlem kaynaklarını ekleyerek veya kaldırarak LLM dağıtımınızı yatay olarak ölçeklendirmenize olanak tanır ve optimum kaynak kullanımı ve performansı sağlar.
  • Kaynak yönetimi: Kubernetes, LLM dağıtımınızın gerekli bilgi işlem, bellek ve GPU kaynaklarına erişmesini sağlayarak verimli kaynak tahsisi ve yalıtımı sağlar.
  • Yüksek kullanılabilirlik: Kubernetes, kendi kendini iyileştirme, otomatik kullanıma sunma ve geri alma işlemleri için yerleşik mekanizmalar sunarak LLM dağıtımınızın yüksek düzeyde kullanılabilir ve hatalara karşı dayanıklı kalmasını sağlar.
  • Taşınabilirlik: Konteynerli LLM dağıtımları, kapsamlı yeniden yapılandırmaya gerek kalmadan şirket içi veri merkezleri veya bulut platformları gibi farklı ortamlar arasında kolayca taşınabilir.
  • Ekosistem ve Topluluk Desteği: Kubernetes, Yüksek Lisans gibi karmaşık uygulamaların dağıtımı ve yönetimi için zengin araçlar, kitaplıklar ve kaynaklar sağlayan geniş ve aktif bir topluluğa sahiptir.

Kubernetes'te LLM Dağıtımına Hazırlık:

Kubernetes'te bir LLM dağıtmadan önce dikkate alınması gereken birkaç önkoşul vardır:

  1. Kubernet Kümesi: Şirket içinde veya bir bulut platformunda kurulu ve çalışan bir Kubernetes kümesine ihtiyacınız olacak. Amazon Elastic Kubernetes Hizmeti (EKS), Google Kubernetes Motoru (GKE)ya da Azure Kubernetes Hizmeti (AKS).
  2. GPU Desteği: Yüksek Lisans'lar hesaplama açısından yoğundur ve verimli çıkarım için genellikle GPU hızlandırmasını gerektirir. Kubernetes kümenizin fiziksel GPU'lar veya bulut tabanlı GPU örnekleri aracılığıyla GPU kaynaklarına erişimi olduğundan emin olun.
  3. Konteyner Kayıt DefteriLLM Docker görüntülerinizi depolamak için bir kapsayıcı kayıt defterine ihtiyacınız olacak. Popüler seçenekler arasında şunlar yer alır: Docker Hub'ı, Amazon Elastic Container Registry (ECR), Google Konteyner Kaydı (GCR)ya da Azure Konteyner Kayıt Defteri (ACR).
  4. Yüksek Lisans Modeli Dosyaları: İlgili kaynaktan önceden eğitilmiş LLM model dosyalarını (ağırlıklar, konfigürasyon ve belirteç) edinin veya kendi modelinizi eğitin.
  5. Konteynerleştirme: Docker veya benzer bir konteyner çalışma zamanını kullanarak LLM uygulamanızı konteynere alın. Bu, LLM kodunuzu, bağımlılıklarınızı ve model dosyalarınızı bir Docker görüntüsünde paketleyen bir Docker dosyası oluşturmayı içerir.

Kubernetes'te LLM'yi dağıtma

Önkoşulları yerine getirdikten sonra LLM'nizi Kubernetes'te dağıtmaya devam edebilirsiniz. Dağıtım süreci genellikle aşağıdaki adımları içerir:

Docker Görüntüsünü Oluşturma

Sağlanan Dockerfile'ı kullanarak LLM uygulamanız için Docker görüntüsünü oluşturun ve bunu konteyner kayıt defterinize aktarın.

Kubernetes Kaynakları Oluşturma

LLM dağıtımınız için gerekli olan Dağıtımlar, Hizmetler, ConfigMaps ve Secret'lar gibi Kubernetes kaynaklarını tanımlayın. Bu kaynaklar genellikle YAML veya JSON bildirimleri kullanılarak tanımlanır.

Kaynak Gereksinimlerini Yapılandırma

LLM dağıtımınız için CPU, bellek ve GPU kaynakları dahil kaynak gereksinimlerini belirtin. Bu, dağıtımınızın verimli çıkarım için gerekli bilgi işlem kaynaklarına erişmesini sağlar.

Kubernetes'e dağıtım

Kullan kubectl komut satırı aracı veya Kubernetes yönetim aracı (ör. Kubernetes Kontrol Paneli, Çiftlik sahibiya da Lens) Kubernetes bildirimlerini uygulamak ve LLM uygulamanızı dağıtmak için.

İzleme ve Ölçeklendirme

Aşağıdakiler gibi Kubernetes izleme araçlarını kullanarak LLM dağıtımınızın performansını ve kaynak kullanımını izleyin: Prometheus ve grafana. Talebi karşılamak için kaynak tahsisini ayarlayın veya dağıtımınızı gerektiği şekilde ölçeklendirin.

Örnek Dağıtım

Hugging Face'ten önceden oluşturulmuş bir Docker imajını kullanarak GPT-3 dil modelini Kubernetes'e dağıtma örneğini ele alalım. GPU desteğiyle kurulu ve yapılandırılmış bir Kubernetes kümeniz olduğunu varsayalım.

Docker Görüntüsünü Çekin:

docker pull huggingface/text-generation-inference:1.1.0

Kubernetes Dağıtımı oluşturun:

Aşağıdaki içeriğe sahip gpt3-deployment.yaml adlı bir dosya oluşturun:

apiVersion: apps/v1
kind: Deployment
metadata:
name: gpt3-deployment
spec:
replicas: 1
selector:
matchLabels:
app: gpt3
template:
metadata:
labels:
app: gpt3
spec:
containers:
- name: gpt3
image: huggingface/text-generation-inference:1.1.0
resources:
limits:
nvidia.com/gpu: 1
env:
- name: MODEL_ID
value: gpt2
- name: NUM_SHARD
value: "1"
- name: PORT
value: "8080"
- name: QUANTIZE
value: bitsandbytes-nf4

Bu dağıtım, huggingface/text- Generation-inference:3 Docker görüntüsünü kullanarak gpt1.1.0 kapsayıcısının bir kopyasını çalıştırmak istediğimizi belirtir. Dağıtım aynı zamanda konteynerin GPT-3 modelini yüklemesi ve çıkarım sunucusunu yapılandırması için gereken ortam değişkenlerini de ayarlar.

Kubernetes Hizmeti oluşturun:

Aşağıdaki içeriğe sahip gpt3-service.yaml adlı bir dosya oluşturun:

apiVersion: v1
kind: Service
metadata:
name: gpt3-service
spec:
selector:
app: gpt3
ports:
- port: 80
targetPort: 8080
type: LoadBalancer

Bu hizmet, 3 numaralı bağlantı noktasında gpt80 dağıtımını açığa çıkarır ve çıkarım sunucusunun Kubernetes kümesinin dışından erişilebilir olmasını sağlamak için LoadBalancer türünde bir hizmet oluşturur.

Kubernetes'e dağıtın:

Kubectl komutunu kullanarak Kubernetes bildirimlerini uygulayın:

kubectl apply -f gpt3-deployment.yaml
kubectl apply -f gpt3-service.yaml

Dağıtımı izleyin:

Aşağıdaki komutları kullanarak dağıtım ilerlemesini izleyin:

kubectl get pods
kubectl logs <pod_name>

Pod çalışmaya başladığında ve günlükler modelin yüklendiğini ve hazır olduğunu gösterdiğinde LoadBalancer hizmetinin harici IP adresini alabilirsiniz:

kubectl get service gpt3-service

Dağıtımı Test Edin:

Artık önceki adımdan elde edilen harici IP adresini ve bağlantı noktasını kullanarak çıkarım sunucusuna istek gönderebilirsiniz. Örneğin, kıvrılma kullanarak:

curl -X POST \
http://<external_ip>:80/generate \
-H 'Content-Type: application/json' \
-d '{"inputs": "The quick brown fox", "parameters": {"max_new_tokens": 50}}'

Bu komut, GPT-3 çıkarım sunucusuna bir metin oluşturma isteği göndererek, 50'ye kadar ek belirteç için "Hızlı kahverengi tilki" istemine devam etmesini ister.

Bilmeniz gereken ileri düzey konular

Kubernetes logosu LLM GPU

Yukarıdaki örnek, bir LLM'nin Kubernetes'te temel dağıtımını gösterse de, keşfedilecek birkaç ileri düzey konu ve husus vardır:

1. Otomatik ölçeklendirme

Kubernetes, değişken hesaplama talepleri nedeniyle LLM dağıtımları için faydalı olabilecek yatay ve dikey otomatik ölçeklendirmeyi destekler. Yatay otomatik ölçeklendirme, CPU veya bellek kullanımı gibi ölçümlere dayalı olarak kopya (pod) sayısını otomatik olarak ölçeklendirmenize olanak tanır. Dikey otomatik ölçeklendirme ise kapsayıcılarınız için kaynak isteklerini ve sınırlarını dinamik olarak ayarlamanıza olanak tanır.

Otomatik ölçeklendirmeyi etkinleştirmek için şunları kullanabilirsiniz: Kubernetes Yatay Kapsül Otomatik Ölçekleyici (HPA) ve Dikey Pod Otomatik Ölçekleyici (VPA). Bu bileşenler dağıtımınızı izler ve kaynakları önceden tanımlanmış kurallara ve eşiklere göre otomatik olarak ölçeklendirir.

2. GPU Planlama ve Paylaşımı

Aynı Kubernetes kümesinde birden fazla LLM dağıtımının veya GPU'yu yoğun kullanan diğer iş yüklerinin çalıştığı senaryolarda, verimli GPU zamanlaması ve paylaşımı hayati önem taşır. Kubernetes, GPU cihaz eklentileri, düğüm seçiciler ve kaynak sınırları gibi adil ve verimli GPU kullanımını sağlamak için çeşitli mekanizmalar sağlar.

Ayrıca aşağıdaki gibi gelişmiş GPU planlama tekniklerinden de yararlanabilirsiniz: NVIDIA Çoklu Örnek GPU (MIG) veya GPU'ları sanallaştırmak ve bunları birden fazla iş yükü arasında paylaşmak için AMD Bellek Havuzu Yeniden Eşleme (MPR).

3. Model Paralelliği ve Parçalama

Bazı LLM'ler, özellikle de milyarlarca veya trilyonlarca parametreye sahip olanlar, tek bir GPU'nun, hatta tek bir düğümün belleğine tamamen sığmayabilir. Bu gibi durumlarda, modeli birden fazla GPU'ya veya düğüme dağıtmak için model paralelliği ve parçalama tekniklerini kullanabilirsiniz.

Model paralelliği, model mimarisini farklı bileşenlere (örneğin kodlayıcı, kod çözücü) bölmeyi ve bunları birden fazla cihaza dağıtmayı içerir. Öte yandan parçalama, model parametrelerini bölümlendirmeyi ve bunları birden fazla cihaza veya düğüme dağıtmayı içerir.

Kubernetes, dağıtılmış LLM dağıtımlarını model paralelliği ve parçalama ile yönetmek ve düzenlemek için StatefulSets ve Özel Kaynak Tanımları (CRD'ler) gibi mekanizmalar sağlar.

4. İnce Ayar ve Sürekli Öğrenme

Çoğu durumda, önceden eğitilmiş LLM'lerin, belirli görevlere veya alanlara yönelik performanslarını artırmak için alana özgü veriler üzerinde ince ayar yapılması veya sürekli olarak eğitilmesi gerekebilir. Kubernetes, ince ayar veya sürekli öğrenme iş yüklerini çalıştırmak için ölçeklenebilir ve dayanıklı bir platform sağlayarak bu süreci kolaylaştırabilir.

Aşağıdakiler gibi Kubernetes toplu işleme çerçevelerinden yararlanabilirsiniz: Apache Spark or KubeFlow LLM modellerinizde dağıtılmış ince ayar veya eğitim işlerini yürütmek için. Ek olarak, sürekli güncellemeler veya mavi/yeşil dağıtımlar gibi Kubernetes mekanizmalarını kullanarak, ince ayarlı veya sürekli olarak eğitilen modellerinizi çıkarım dağıtımlarınızla entegre edebilirsiniz.

5. İzleme ve Gözlemlenebilirlik

İzleme ve gözlemlenebilirlik, Kubernetes'teki LLM dağıtımları da dahil olmak üzere herhangi bir üretim dağıtımının önemli unsurlarıdır. Kubernetes aşağıdaki gibi yerleşik izleme çözümleri sunar: Prometheus ve popüler gözlemlenebilirlik platformlarıyla entegrasyonlar grafana, Elasticsearch, ve Jaeger.

LLM dağıtımlarınızla ilgili CPU ve bellek kullanımı, GPU kullanımı, çıkarım gecikmesi ve aktarım hızı gibi çeşitli ölçümleri izleyebilirsiniz. Ek olarak, LLM modellerinizin davranışı ve performansı hakkında bilgi edinmek için uygulama düzeyindeki günlükleri ve izleri toplayıp analiz edebilirsiniz.

6. Güvenlik ve Uyumluluk

Kullanım durumunuza ve ilgili verilerin hassasiyetine bağlı olarak, Kubernetes'te LLM'leri dağıtırken güvenlik ve uyumluluk hususlarını dikkate almanız gerekebilir. Kubernetes, güvenliği artırmak için ağ politikaları, rol tabanlı erişim kontrolü (RBAC), gizli dizi yönetimi ve aşağıdaki gibi harici güvenlik çözümleriyle entegrasyon gibi çeşitli özellikler ve entegrasyonlar sağlar: HashiCorp Kasası or AWS Sırları Yöneticisi.

Ayrıca, düzenlenen sektörlerde LLM yapıyorsanız veya hassas verileri işliyorsanız, GDPR, HIPAA veya PCI-DSS gibi ilgili standartlara ve düzenlemelere uyumluluğu sağlamanız gerekebilir.

7. Çoklu Bulut ve Hibrit Dağıtımlar

Bu blog yazısı, LLM'leri tek bir Kubernetes kümesinde dağıtmaya odaklansa da bazı senaryolarda çoklu bulut veya hibrit dağıtımları düşünmeniz gerekebilir. Kubernetes, uygulamaları farklı bulut sağlayıcıları ve şirket içi veri merkezlerinde dağıtmak ve yönetmek için tutarlı bir platform sağlar.

Kubernetes federasyonundan veya aşağıdakiler gibi çoklu küme yönetim araçlarından yararlanabilirsiniz: KubeFed or GKE Merkezi Farklı bulut sağlayıcılarını veya hibrit ortamları kapsayan birden fazla Kubernetes kümesinde LLM dağıtımlarını yönetmek ve düzenlemek.

Bu ileri düzey konular, Kubernetes'in LLM'leri dağıtma ve yönetme konusundaki esnekliğini ve ölçeklenebilirliğini vurgulamaktadır.

Sonuç

Kubernetes'te Büyük Dil Modellerinin (LLM'ler) konuşlandırılması; ölçeklenebilirlik, kaynak yönetimi, yüksek kullanılabilirlik ve taşınabilirlik gibi çok sayıda avantaj sunar. Bu teknik blogda özetlenen adımları izleyerek LLM uygulamanızı kapsayıcı hale getirebilir, gerekli Kubernetes kaynaklarını tanımlayabilir ve bunu bir Kubernetes kümesine dağıtabilirsiniz.

Ancak LLM'leri Kubernetes'te dağıtmak yalnızca ilk adımdır. Uygulamanız büyüdükçe ve gereksinimleriniz geliştikçe otomatik ölçeklendirme, GPU planlama, model paralelliği, ince ayar, izleme, güvenlik ve çoklu bulut dağıtımları gibi gelişmiş konuları keşfetmeniz gerekebilir.

Kubernetes, LLM'leri dağıtmak ve yönetmek için sağlam ve genişletilebilir bir platform sağlayarak güvenilir, ölçeklenebilir ve güvenli uygulamalar oluşturmanıza olanak tanır.

Son beş yılımı, Makine Öğrenimi ve Derin Öğrenmenin büyüleyici dünyasına dalarak geçirdim. Tutkum ve uzmanlığım, özellikle AI/ML'ye odaklanarak 50'den fazla farklı yazılım mühendisliği projesine katkıda bulunmamı sağladı. Devam eden merakım, beni daha fazla keşfetmeye hevesli olduğum bir alan olan Doğal Dil İşleme'ye de çekti.