Local AI

Gelişmiş VRAM Dışa Aktarma Stratejileri: Büyük Bağlam Pencereleri İçin Çoklu GPU İş Yüklerinin Optimize Edilmesi

Büyük Dil Modelleri (LLM'leri) yerel olarak çalıştırma talebi arttıkça, Video Rastgele Erişimli Bellek (VRAM) darboğazı geliştiriciler için birincil kısıtlayıcı faktör haline geldi. Tek GPU'lu kurulumlar daha küçük modeller için yeterli olsa da, 70B+ parametreli modellerle büyük bağlam pencerelerini yönetmek genellikle karmaşık çoklu GPU orkestrasyonu gerektirir. Bu yazıda, akıllı VRAM dışa aktarımı aracılığıyla verimi en üst düzeye çıkarmak ve bellek yetersizliği (OOM) hatalarını en aza indirmek için gelişmiş stratejileri keşfediyoruz.

Dışa Aktarma Hiyerarşisini Anlamak

Temelinde, VRAM dışa aktarma; model ağırlıklarının birden fazla donanım katmanı arasında dağıtılmasını içerir: GPU belleği (VRAM), sistem belleği (RAM) ve disk depolama. Bu dağıtımın verimi, çıkarım hızını belirler. Naif bir yaklaşım, modelin tamamını çökene kadar tek bir GPU'ya yükleyebilir veya veri yerelliğini göz ardı ederek katmanları eşit şekilde bölebilir. Gelişmiş stratejiler, her bir donanım bileşeninin özelliklerinden yararlanır.

Optimizasyonun anahtarı, en sık erişilen katmanları (genellikle gömme katmanları ve son çıktı katmanı) en hızlı cihazda tutarken, daha az sık erişilen ara katmanları sistem RAM'ine veya yüksek bant genişliğine sahip bir ikincil GPU'ya dışa aktarmaktır.

Çerçeveye Özgü Uygulama: Ollama ve GGUF

Ollama kullanan uygulayıcılar için dışa aktarma, Modelfile'daki num_gpu parametresi aracılığıyla yönetilir. Birden fazla GPU üzerinde dışa aktarmak için, katmanlar mevcut cihazlar arasında bölünebildiği sürece tek bir GPU'nun katman sayısından daha yüksek bir değer belirtebilirsiniz.

# Çoklu GPU Dışa Aktarımı için Örnek Modelfile
FROM llama3.1:70b

# Kullanılabilir tüm GPU'ları zorla kullan
PARAMETER num_gpu 999

# Kararlılık için sıcaklığı ayarla
PARAMETER temperature 0.7

Bununla birlikte, yalnızca num_gpu 999 ayarlamak her zaman en iyisi değildir. Llama-3-70B gibi modeller için, yükü dengelemek amacıyla GPU 0'da ve GPU 1'de kaç katmanın kalacağını manuel olarak belirlemek isteyebilirsiniz. Bir GPU'nun diğerinden daha fazla VRAM'e sahipse, daha fazla katmanı daha büyük GPU'ya atayın.

Hugging Face Accelerate ve Cihaz Haritası

Hugging Face Transformers kütüphanesini kullanırken, accelerate kütüphanesi çoklu GPU yönetimi için sağlam araçlar sağlar. device_map="auto" argümanı modeli en uygun şekilde dağıtmaya çalışır, ancak ince taneli kontrol için cihaz haritasını açıkça tanımlayabilirsiniz.

from transformers import AutoModelForCausalLM, AutoTokenizer
from accelerate import dispatch_model, infer_auto_device_map

model_id = "meta-llama/Llama-3-70b"
tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(
    model_id,
    torch_dtype="auto",
    device_map="auto"
)

# Hangi katmanların hangi cihazda olduğunu doğrulayın
for name, module in model.named_modules():
    if hasattr(module, 'device'):
        print(f"{name}: {module.device}")

Büyük bağlam pencereleri için, KV önbelleğinin üretim sırasında sistem RAM'ine taşmasını ve bu da önemli gecikme artışı neden olmasını önlemek amacıyla cihaz başına bellek kullanımını sınırlamak için max_memory kullanmayı düşünün.

Büyük Bağlam Pencereleri İçin Optimize Etme

Büyük bağlam pencereleri (örneğin, 32k veya 128k token) Anahtar-Değer (KV) önbelleğinin bellek ayak izini dramatik şekilde artırır. Mükemmel model ağırlığı dışa aktarımı olsa bile, KV önbelleği gigabaytlarca VRAM tüketebilir. Bunu azaltmak için aşağıdaki teknikleri uygulayın:

  1. Flash Attention 2: Çıkarım sırasında bellek kullanımını azaltmak için bu optimize edilmiş dikkat mekanizmasını etkinleştirin.
  2. KV Önbellek Nicelleme: Bellek gereksinimlerini yarıya indirmek için KV önbelleğini FP32 yerine INT8 veya FP16'da saklayın.
  3. Paged Attention: Bellek parçalanmasını yönetmek ve daha verimli önbellek kullanımına izin vermek için PagedAttention'ı (vLLM gibi) destekleyen çerçeveleri kullanın.

Sonuç

Büyük bağlam pencereleri için çoklu GPU iş yüklerini optimize etmek, ham güçten ziyade mimari verimlilikle ilgilidir. Dışa aktarma hiyerarşisini anlamak ve Ollama'nın Modelfile'ı veya Hugging Face'in Accelerate'i gibi çerçeveye özgü araçlardan yararlanarak geliştiriciler yerel AI'nın sınırlarını zorlayabilir. nvidia-smi gibi araçlarla bellek kullanımınızı her zaman izleyin ve darboğazları belirlemek için çıkarım döngülerinizi profilleyin. Yerel AI'nın geleceği çok cihazlıdır ve büyük modelleri tüketici sınıfı donanımlarda dağıtmakla ciddi şekilde ilgilenen herkes için bu dışa aktarma stratejilerini ustalaşmak esastır.

Share: