LLMOps

LLM Çıkarımını Konteynerleştirme: LLMOps'ta Çoklu Mimari Görüntü Derlemeleri İçin En İyi Uygulamalar

Büyük Dil Modellerinin (LLM) yükselişi, altyapı gereksinimlerini temelden değiştirdi. Geleneksel mikro hizmetlerin aksine, LLM çıkarım iş yükleri kaynak yoğun ve donanım yeteneklerine karşı son derece hassastır. Kuruluşlar geliştirmeden üretime geçtikçe, parçalı bir donanım manzarasıyla karşılaşırlar: eğitim ve yüksek verimli çıkarım için GPU kümeleri, kenar veya maliyet-optimizasyonlu dağıtımlar için yalnızca CPU'lu örnekler ve bulut sağlayıcıları arasında değişen CPU mimarileri (amd64 ve arm64). LLM çıkarım konteynerlerinizin bu yelpaze boyunca güvenilir bir şekilde çalışmasını sağlamak, gelişmiş derleme stratejileri gerektirir.

Heterojen Donanımın Zorluğu

NVIDIA GPU'lu bir geliştirme dizüstü bilgisayarında derlenen standart bir Docker görüntüsü, yalnızca CPU'lu bir üretim düğümünde başarısız olur ve bunun tersi de geçerlidir. Ayrıca, hedef makinede NVIDIA sürücüleri yoksa CUDA kütüphanelerini bir temel görüntüye dahil etmek şişkinliğe ve bağımlılık çakışmalarına neden olur. LLMOps'ta endişeleri ayırmalıyız: uygulama mantığı, model ağırlıkları ve çalışma zamanı bağımlılıkları (CUDA/CPU) modüler olmalıdır.

Strateji 1: Mimariye Göre Ayrı Temel Görüntüler

Monolitik tek bir "evrensel" görüntü yerine, farklı donanım hedefleri için ayrı temel görüntüler sürdürün.

  • GPU Görüntüsü: nvidia/cuda:11.8-runtime-ubuntu22.04 tabanlıdır. CUDA araç setlerini ve flash-attn gibi GPU'ya özgü kütüphaneleri içerir.
  • CPU Görüntüsü: python:3.10-slim tabanlıdır. Optimize edilmiş CPU matematiği için MKL veya OpenBLAS içerir, ancak tüm CUDA bağımlılıklarını hariç tutar.

Strateji 2: Modüler Bağımlılık Yönetimi

Paketleri yalnızca ilgili donanım algılandığında yüklemek için Python'ın koşullu bağımlılık mekanizmasını kullanın. Bu, uyumsuz düğümlerde ImportError sorunlarını önler.


# requirements-gpu.txt
torch==2.0.1+cu118
transformers==4.36.0
flash-attn==2.3.6  # Yalnızca GPU

# requirements-cpu.txt
torch==2.0.1
transformers==4.36.0

Dockerfile'ınızda, doğru gereksinimler dosyasını seçmek için derleme argümanlarını kullanın:


ARG BUILD_VARIANT=cpu
RUN if [ "$BUILD_VARIANT" = "gpu" ]; then \
        pip install -r requirements-gpu.txt; \
    else \
        pip install -r requirements-cpu.txt; \
    fi

Strateji 3: Çoklu Mimari Derlemeler İçin BuildX'i Kullanma

CPU hedefleri için hem amd64 hem de arm64 (AWS Graviton ve Apple Silicon'da yaygın) desteği sunmanız gerekir. Her mimari için gerçek donanıma ihtiyaç duymadan çoklu mimari manifestler oluşturmak için Docker Buildx'i kullanın.


docker buildx create --use
docker buildx build --platform linux/amd64,linux/arm64 \
    --build-arg BUILD_VARIANT=cpu \
    -t my-llm-app:cpu-mixed .

Strateji 4: Model Ağırlıklarının Ayrılması

Büyük model ağırlıklarını (7B-13B parametre) asla Docker görüntünüze gömün. Görüntüler çoklu GB boyutuna ulaşır, bu da CI/CD hatlarını ve kayıt defteri çekme işlemlerini yavaşlatır. Bunun yerine, hacim bağlamalarını kullanın veya ağırlıkları konteyner başlatma sırasında bir kayıt defterinden (ör. Hugging Face Hub) çekin. Bu, görüntünüzün hafif ve sürümleyebilir kalmasını sağlarken, modellerin bağımsız olarak güncellenebilmesine olanak tanır.

CI/CD Uygulama En İyi Uygulamaları

1. Katmanları Agresif Önbelleğe Alın: Çekirdek bağımlılıklar için pip install işlemlerini erken katmanlarda tutun. Uygulama kodunu yalnızca sonraki katmanlarda kopyalayın.
2. Sağlık Kontrolleri: Hizmetin hazır olduğunu bildirmeden önce GPU kullanılabilirliğini (nvidia-smi kullanarak) veya CPU çekirdek sayısını doğrulayan bir CMD HEALTHCHECK uygulayın.
3. Etiketleme Kuralları: Kaza sonucu dağıtım uyumsuzluklarını önlemek için my-llm:v1.0-gpu ve my-llm:v1.0-cpu gibi etiketler kullanın.

Sonuç

LLM çıkarımını konteynerleştirmek, tek boy her bedene uyan bir görüntü oluşturmaktan ziyade, optimize edilmiş, donanıma özgü bir artefakt portföyü inşa etmektir. Çalışma zamanı bağımlılıklarını ayırarak, derleme argümanlarından yararlanarak ve model ağırlıklarını uygulama kodundan ayırarak, herhangi bir donanım topolojisi üzerinde güvenilir, ölçeklenebilir ve maliyet-etkin LLM dağıtımları elde edebilirsiniz. Altyapınız ölçeklendikçe teknik borçtan kaçınmak için LLMOps hattınızın başlangıcında modüler Dockerfile'larla başlayın.

Share: