Yazı

Kurum İçi LLM Sunumunda Soğuk Başlatma Optimizasyon Stratejileri

On-Premises AI · AI Architecture · Best Practices · Advanced

Kurum içi ortamlarda büyük dil modellerini yüklerken ve sunarken soğuk başlatma gecikmesini en aza indirmek için pratik teknikler: bellek eşlemeli ağırlıklardan tahmine dayalı ısıtma havuzlarına.

CPU çipi bulunan bir anakartın yakın çekimi

Kurum içi LLM sunumunda soğuk başlatma sorunu

Büyük bir dil modelini GPU belleğine yüklemek anlık değildir. FP16'daki 7 milyar parametreli bir model yaklaşık 14 GB GPU belleği gerektirir. Bu ağırlıkları diskten okumak, GPU'ya aktarmak ve çıkarım çalışma zamanını başlatmak, depolama hızına, PCIe bant genişliğine ve model mimarisine bağlı olarak 30 saniyeden birkaç dakikaya kadar sürebilir. 30B ile 70B arasındaki daha büyük modeller için standart kurumsal donanımda 5 ila 10 dakikalık soğuk başlatma süreleri yaygındır.

Bulut ortamlarında bu sorun, örnekleri sürekli ısıtık tutarak ve sağlayıcının elastik ölçeklendirmesine güvenerek hafifletilir. Kurum içi ortamlar daha sıkı kısıtlamalarla karşı karşıyadır. GPU kaynakları sınırlıdır ve ekipler ile iş yükleri arasında paylaşılır. Her modeli her zaman yüklü tutmak, düzinelerce ince ayar varyantınız, birden fazla model aileniz veya aynı altyapıda çalışan eğitim iş yüklerinden kaynaklanan GPU bellek baskınız olduğunda genellikle uygulanabilir değildir.

Sonuç, kaynak verimliliği ile yanıt gecikmesi arasında doğrudan bir gerilimdir. Agresif model tahliyesi GPU kullanımını yüksek tutar ancak tahliye edilen modeller istendiğinde gecikme artışları yaratır. Muhafazakar tahliye ise pahalı GPU kapasitesini boşta kalan modellere harcar. Etkili soğuk başlatma optimizasyonu, model yüklemeyi daha hızlı, daha akıllı veya gereksiz hale getirerek bu gerilimi çözer.

Bellek eşlemeli model yükleme

Soğuk başlatma gecikmesi için en etkili tek optimizasyon, model ağırlıkları için bellek eşlemeli dosya G/Ç'sidir. Tüm model dosyasını CPU belleğine okuyup ardından GPU'ya aktarmak yerine, bellek eşleme diskteki model dosyasına sanal bellek eşlemesi oluşturur. Sayfalar erişildikçe talep üzerine yüklenir ve işletim sisteminin sayfa önbelleği, sık erişilen ağırlıkların şeffaf önbelleğini sağlar.

Pratikte bu, modelin tüm dosya yüklenmeden kullanılabilir hale gelmesi anlamına gelir. Çıkarım çalışma zamanı, sonraki katmanlar diskten henüz sayfalanırken modelin ilk katmanlarını işlemeye başlayabilir. NVMe depolamadaki 14 GB'lık bir model için, bellek eşlemeli yükleme ilk belirtece kadar geçen süreyi 45 saniyeden 10 saniyenin altına düşürebilir.

Faydayı en üst düzeye çıkarmak için model dosyalarını verimli bellek eşlemeyi destekleyen bir formatta saklayın. SafeTensors özellikle bunun için tasarlanmıştır: tensor konumlarını tanımlayan bir başlıkla düz bir bellek düzeni kullanır ve tek tek tensorların tüm dosyayı ayrıştırmadan bağımsız olarak yüklenmesini sağlar. llama.cpp tarafından kullanılan GGUF formatı da bellek eşlemeyi doğal olarak destekler.

Bellek eşlemeli yüklemeyi yüksek hızlı yerel depolama ile eşleştirin. Eşlenmemiş sayfalara erişirken sayfa hatası gecikmesi, depolama veriminiz tarafından belirlenir. 3 ila 7 GB/s sıralı okuma hızlarına sahip NVMe SSD'ler bellek eşlemeli yüklemeyi pratik hale getirir. Dönen diskler veya ağa bağlı depolama faydaları tamamen ortadan kaldıracaktır.

Tahmine dayalı model ön yükleme

Hangi modellerin istenmeden önce gerekli olacağını tahmin edebilirseniz, bunları proaktif olarak yüklemeye başlayabilir ve çoğu istek için soğuk başlatma gecikmesini tamamen ortadan kaldırabilirsiniz. Bu, iş yükü kalıplarınızı analiz ederek bir ön yükleme stratejisi oluşturmayı gerektirir.

Model erişim kalıplarınızı birkaç hafta boyunca profilleme ile başlayın. Çoğu kurumsal dağıtım güçlü zamansal kalıplar gösterir: bazı modeller öncelikle mesai saatlerinde kullanılır, diğerleri toplu işlem pencerelerinde yükselir ve bazıları öngörülebilir kullanım çizelgelerine sahip belirli uygulamalara bağlıdır. Bu geçmiş verileri, modelleri beklenen kullanım penceresinden önce yükleyen bir zamana dayalı ön yükleme çizelgesi oluşturmak için kullanın.

Daha az öngörülebilir iş yükleri için istek kalıbına dayalı ön yükleme uygulayın. Sisteminiz bir ağ geçidi üzerinden birden fazla model sunuyorsa, bireysel kullanıcılardan veya uygulamalardan gelen model isteklerinin dizisini analiz edin. Model A'yı isteyen kullanıcılar sıklıkla sonraki birkaç dakika içinde Model B'yi istiyorsa, bir Model A isteği gördüğünüzde Model B'yi ön yükleyin.

Pratik bir uygulama, tahmin edilen talebe göre sıralanan modellerin bir öncelik kuyruğunu tutan hafif bir ön yükleme arka plan programı kullanır. Henüz GPU belleğinde olmayan en yüksek öncelikli modeli sürekli olarak yükler, bellek doluysa en düşük öncelikli yüklü modeli tahliye eder. Öncelik fonksiyonu zamana dayalı tahminleri, son istek kalıplarını ve model boyutunu birleştirir.

Isıtma havuzu yönetimi

Isıtma havuzu, GPU belleğinde yüklü tutulan ve isteklere anında hizmet vermeye hazır model örnekleri kümesidir. Isıtma havuzunu etkili bir şekilde yönetmek, soğuk başlatma optimizasyonunun temel zorluğudur: doğru zamanda doğru modellerin yüklü olmasını istersiniz.

En basit ısıtma havuzu stratejisi LRU (En Az Kullanılan) tahliyesidir: GPU belleği dolduğunda ve yeni bir model yüklenmesi gerektiğinde, en uzun süre istek almayan modeli tahliye edin. LRU, zamansal yerelliğe sahip iş yükleri için makul şekilde çalışır ancak periyodik iş yükleri için başarısız olur. Her sabah 9'da kullanılan bir model öğleden sonra tahliye edilir ve ertesi sabah tekrar soğuk başlatmayla karşılaşır.

Daha gelişmiş bir yaklaşım, hem yakınlık hem de kullanım sıklığını hesaba katan frekans ağırlıklı LRU'dur. Düzenli ama seyrek kullanılan modeller (günlük toplu iş gibi), bir istek patlaması alan ancak tekrar ihtiyaç duyulması muhtemel olmayan modellerden daha yüksek tahliye direnci korur. LFU-yaşlandırma algoritması iyi bir denge sağlar: istek sayılarını izler ancak zaman içinde azaltır, tarihsel olarak popüler ancak şu anda kullanılmayan modellerin GPU belleğini kalıcı olarak işgal etmesini önler.

Tahliye kararları verirken tahliye ve yeniden yükleme maliyetini de göz önünde bulundurun. Yeniden yüklenmesi 3 saniye süren 1B parametreli bir model, 8 dakika süren 70B'lık bir modelden çok daha ucuz bir tahliyedir. Tahliye kararlarınızı yalnızca erişim kalıplarına göre değil, yeniden yükleme maliyetine göre ağırlıklandırın.

Kontrol noktası tabanlı hızlı kurtarma

Optimize edilmiş yüklemeyle bile, model ağırlıklarını diskten GPU belleğine aktarmak serileştirme, bellek ayırma ve çalışma zamanı başlatma ek yükü içerir. GPU bellek kontrol noktası, tüm GPU bellek durumunu doğrudan kaydedip geri yükleyerek bunun çoğunu atlar.

Kavram, işletim sistemlerindeki süreç hazırda bekletmeye benzer. Bir model GPU belleğinden tahliye edildiğinde, GPU durumunu tamamen atmak yerine GPU bellek içeriklerini hızlı bir yerel depoya serileştirin. Model tekrar gerektiğinde, model dosyasını yeniden ayrıştırmadan veya çalışma zamanını yeniden başlatmadan serileştirilmiş durumu doğrudan GPU belleğine geri yükleyin. Bu, orijinal model dosyasından yüklemeye kıyasla yeniden yükleme sürelerini yüzde 60 ila 80 oranında azaltabilir.

NVIDIA'nın CUDA kontrol noktası/geri yükleme yetenekleri ve GPU uzantılı CRIU (Kullanıcı Alanında Kontrol Noktası/Geri Yükleme) gibi araçlar bu yaklaşımı destekler. Kontrol noktası dosyası, çalışma zamanı durumu, KV önbellek tahsisleri ve CUDA bağlamını içerdiğinden orijinal model dosyasından daha büyüktür, bu nedenle yeterli kapasiteye sahip hızlı depolamaya ihtiyacınız vardır.

Ödünleşim, depolama alanı ile yeniden yükleme hızı arasındadır. İhtiyaç duyulabilecek tüm modeller için kontrol noktaları tutmak önemli NVMe kapasitesi tüketir. Pratik bir yaklaşım, yalnızca boyut eşiğinin üzerindeki modeller için kontrol noktaları tutmaktır, örneğin 10B parametre, burada yeniden yükleme süresi tasarrufları depolama maliyetini haklı kılar.

Soğuk başlatmaları en aza indirmek için mimari kalıplar

Model başına optimizasyonların ötesinde, sistem düzeyindeki mimari kararlar son kullanıcılar için soğuk başlatma maruziyetini azaltabilir veya ortadan kaldırabilir.

Tahmini bekleme süreleriyle istek kuyruğu, soğuk başlatmaları arızalardan yönetilen gecikmelere dönüştürür. Yüklenmemiş bir model için bir istek geldiğinde, kuyruğa alın, modeli yüklemeye başlayın ve istemciye tahmini bir süre döndürün. İstemci beklemeye, daha sonra denemeye veya bir alternatife düşmeye karar verebilir.

GPU havuzları arasında model parçalama, ısıtma havuzunu birden fazla sunucuya dağıtır. Dört GPU sunucunuz varsa, her biri farklı modellerin ısıtma havuzunu tutar. Bir yönlendirme katmanı, istekleri ilgili modelin yüklü olduğu sunucuya yönlendirir. Bu, her sunucunun tüm modeller için yeterli GPU belleğine sahip olmasını gerektirmeden etkili ısıtma havuzu boyutunuzu sunucu sayısıyla çarpar. KServe ve Seldon Core, Kubernetes tabanlı kurum içi dağıtımlarda bu yönlendirme kalıbını destekler.

Küçük varsayılan modelle spekülatif yürütme, istenen model yüklenirken anında yanıtlar sağlar. Soğuk bir model için istek geldiğinde, her zaman yüklü olan küçük bir temel model isteği hemen işlemeye başlar. Tam model, temel model bitmeden yüklenirse yanıt tam model tarafından üretilir. Temel model önce biterse, yanıtı bir kalite göstergesiyle döndürülür. Bu kalıp, algılanan gecikmenin her yanıtta optimal kaliteden daha önemli olduğu etkileşimli uygulamalar için özellikle iyi çalışır.

Öne çıkan görsel: Rémy tarafından Unsplash'ta paylaşılmıştır.