Yapay Zeka
Kubernetes'te Büyük Dil Modellerini Dağıtma: Kapsamlı 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:
- 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).
- 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.
- 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).
- 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.
- 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
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:













