Bellek bütçesi ve hızlandırıcı kararı
Ağırlıkların, dikkat önbelleğinin ve ara değerlerin aynı belleği nasıl paylaştığını hesaplamayı öğretir. Hızlandırıcı kararını tek bir tercih yerine bağlam uzunluğu ve eşzamanlılıktan türetilen bir bellek bütçesi tablosuna bağlar.
Önkoşul: Large Language Model, Context Window
BU DERSİN SONUNDA
- Ağırlık, dikkat önbelleği ve ara değer kalemlerini ayrı ayrı hesaplamak
- Bağlam uzunluğu ve eşzamanlılıktan bir bellek tavanı türetmek
- Bant genişliği ile hesap gücü arasında hangisinin darboğaz olduğunu ayırt etmek
- Kestirilen bütçeyi gerçek ölçümle karşılaştırıp sapmayı açıklamak
- 1
Teori
Kavramın çalışma mantığı
- 2
Örnek
Gerçek bir senaryo üzerinde gösterim
- 3
Lab
Uygulamalı alıştırma
- 4
Test
Kısa ölçüm
- 5
Proje
Rotadaki projeye katkı
Kısa cevap
Modelin hızlandırıcıya yüklenip yüklenemeyeceğini ağırlıklar belirler; yüklendikten sonra kaç isteğe aynı anda hizmet verebileceğini dikkat önbelleği belirler. Ağırlıklar sabit bir yer tutar; dikkat önbelleği ise bağlam uzunluğu ile eşzamanlı istek sayısının çarpımı kadar büyür. Karar, bu iki kalemi ve ara değer payını aynı tabloda toplayan bir bütçeyle verilir; tek bir parametre sayısıyla verilemez.
Teori: üç kalem, tek tavan#
Birinci kalem ağırlıklar: parametre sayısı ile parametre başına bayt genişliğinin çarpımı. Bayt genişlikleri tanım gereği sabittir: fp32 dört bayt, bf16 ve fp16 iki bayt, sekiz bitlik tamsayı bir bayt, dört bitlik temsil yarım bayt. Bu kalem yük ile değişmez; kurulumda bir kez ödenir ve orada durur.
İkinci kalem dikkat önbelleği. Üretim aşamasında her yeni jeton kendisinden önceki tüm jetonlara bakmak zorundadır; geçmişi her adımda yeniden hesaplamak yerine her katmanın anahtar ve değer vektörleri saklanır. Boyut, iki (anahtar ve değer) çarpı katman sayısı çarpı anahtar-değer başlık sayısı çarpı başlık boyutu çarpı bayt genişliği kadardır ve bu, jeton başına maliyettir.
Bu formülde altyapıyı en çok etkileyen terim anahtar-değer başlık sayısıdır. Birçok mimaride sorgu başlıkları anahtar-değer başlıklarını paylaşır; paylaşım arttıkça saklanacak başlık sayısı düşer ve önbellek küçülür. Yani mimari bir tercih, doğrudan sizin eşzamanlılık tavanınıza dönüşür. Bu yüzden bütçe hesabı model yapılandırmasını okumakla başlar.
Üçüncü kalem ara değerler ve çalışma zamanı payı: geçici tamponlar, parçalanma ve çalışma zamanının önceden ayırdığı havuz. Bu kalem formülle kestirilmez, ölçülür. Bu yüzden bütçeye açıkça bir pay olarak yazılır ve ilk ölçümden sonra o payın gerçek değeriyle güncellenir.
Hesap#
BAYT = {"fp32": 4, "bf16": 2, "fp16": 2, "int8": 1, "int4": 0.5}
def kv_bayt_jeton_basina(katman, kv_baslik, baslik_boyutu, tip="bf16"):
"""Bir jetonun dikkat önbelleğinde tuttuğu yer. 2 çarpanı: anahtar + değer."""
return 2 * katman * kv_baslik * baslik_boyutu * BAYT[tip]
def butce(bellek_gb, parametre_milyar, agirlik_tipi, kv_jeton_basina, pay=0.10):
"""pay: ara değer, parçalanma ve çalışma zamanı için ayrılan oran (varsayım)."""
toplam = bellek_gb * 1024**3
agirlik = parametre_milyar * 1e9 * BAYT[agirlik_tipi]
kalan = toplam * (1 - pay) - agirlik
return {
"agirlik_gb": agirlik / 1024**3,
"onbellek_icin_kalan_gb": kalan / 1024**3,
"toplam_jeton_butcesi": int(kalan / kv_jeton_basina) if kalan > 0 else 0,
}
# Katman sayısı, anahtar-değer başlık sayısı ve başlık boyutu kendi modelinizin
# yapılandırmasından okunur; buraya sabit sayı yazılmaz.Bu hesabın asıl çıktısı toplam jeton bütçesidir: kalan belleğin kaç jetonluk geçmişi taşıyabildiği. Bu tek sayı, iki bilinmeyenle bölüşülür: eşzamanlı istek sayısı ve istek başına en uzun bağlam. İkisini birlikte belirleyemezsiniz; birini ürün kararı sabitler, diğeri hesaptan çıkar. Bütçe tablosunun değeri tam olarak bu zorunlu tercihi görünür kılmasıdır.
Bant genişliği mi, hesap gücü mü#
| Aşama | Baskın kaynak | Belirti | Müdahale yönü |
|---|---|---|---|
| Girdi dolumu | Hesap gücü | Uzun girdide ilk jeton gecikmesi hızla büyür | Dolumu parçalara ayırmak, paylaşılan öneki önbelleklemek |
| Jeton üretimi | Bellek bant genişliği | Toplu iş büyürken jeton başına süre az değişir | Toplu işi büyütmek, ağırlık bayt genişliğini düşürmek |
| Uzun bağlamlı üretim | Dikkat önbelleğinin okunması | Bağlam uzadıkça jeton başına süre artar | Önbellek veri tipini düşürmek, bağlamı kısaltmak |
| Yüksek eşzamanlılık | Bellek kapasitesi | Bellek dolu, istekler kuyrukta bekliyor | Eşzamanlılık tavanı koymak, istek boyunu sınırlamak |
Karar: bütçeden hızlandırıcıya#
- 1Yapılandırmayı okuyun
Katman sayısı, anahtar-değer başlık sayısı, başlık boyutu ve ağırlık veri tipi bütçenin dört girdisidir.
- 2Ağırlık ayak izini sabitleyin
Parametre sayısı ile bayt genişliğinin çarpımı; yük ile değişmediği için ilk çıkarılacak kalem budur.
- 3Jeton başına önbellek maliyetini çıkarın
Kalan belleği bu sayıya bölerek toplam jeton bütçesini bulun; ara değer payını önceden ayırın.
- 4Bütçeyi hizmet hedefine bölün
Toplam jeton bütçesi, eşzamanlı istek sayısı ile en uzun bağlamın çarpımına eşittir. Birini sabitleyin, diğerini okuyun.
- 5Kestirimi ölçümle karşılaştırın
Gerçek doluluk kestirimden yüksekse fark ara değer, parçalanma ve çalışma zamanı payındadır. Payı ölçüme göre güncelleyip tabloyu yeniden okuyun.
Sık yapılan hata#
Birinci hata "model sığıyor, sorun yok" demek: ağırlıklar sığdığı halde tek haneli eşzamanlılıkta bellek tükenebilir, çünkü önbellek kalemi hiç hesaba katılmamıştır. İkinci hata bütçeyi ortalama istek uzunluğuyla kurmak. Bellek tavanını belirleyen ortalama değil, aynı anda sistemde bulunabilecek en uzun isteklerin toplamıdır; ortalamayla kurulan bütçe trafik kuyruğun sağ tarafına kaydığı anda çöker.
LAB · UYGULAMALI ALIŞTIRMA
Bellek bütçesi ızgarasını kurun ve tavanı işaretleyin
- 1Kullandığınız modelin yapılandırmasından katman sayısını, anahtar-değer başlık sayısını, başlık boyutunu ve ağırlık veri tipini bir tabloya yazın.
- 2Ağırlık ayak izini hesaplayıp hızlandırıcının toplam belleğinden çıkarın; ara değerler için ayırdığınız payı varsayım olarak açıkça yazın.
- 3Jeton başına dikkat önbelleği maliyetini hesaplayın; aynı hesabı önbellek veri tipini bir kademe düşürerek ikinci satıra ekleyin.
- 4Bağlam uzunluğu satır, eşzamanlı istek sayısı kolon olacak bir ızgara doldurun ve kalan belleği aşan hücreleri işaretleyin.
- 5Birinci derste sabitlediğiniz birim işi ızgaraya yerleştirip o sınıfın taşınabileceği en yüksek eşzamanlılığı tek sayı olarak yazın.
- 6Çalışan bir kurulumunuz varsa bu sayının hemen altında ve hemen üstünde yük verip gerçek bellek doluluğunu kestiriminizle karşılaştırın ve farkı ara değer payına yazın; yoksa ara değer payını doğrulanmamış varsayım olarak işaretleyip ızgaranın hangi hücresinin ilk ölçümle sınanacağını yazın.
Beklenen çıktı
Bağlam uzunluğu ile eşzamanlılık ızgarası üzerinde işaretlenmiş bir bellek tavanı ve birim iş için gerekçelendirilmiş tek bir eşzamanlılık sınırı.
Sık sorulan sorular
Parametre sayısı iki katına çıkarsa bellek ihtiyacı da iki katına mı çıkar?
Ağırlık kalemi için evet, doğrusal. Ama dikkat önbelleği kalemi parametre sayısına değil katman sayısı, anahtar-değer başlık sayısı ve başlık boyutuna bağlıdır; bunlar aynı oranda büyümez. Bu yüzden bütçeyi tek bir parametre sayısından kestirmek yanıltıcıdır, yapılandırmayı okumak gerekir.
Dikkat önbelleğini saklamayıp her jetonda yeniden hesaplayabilir miyiz?
Hesaplanabilir, ama üretimin her adımında tüm geçmişin yeniden işlenmesi gerekir; bu, üretim aşamasını dolum aşaması kadar pahalı hale getirir. Bellek ile hesap arasındaki bu takas bilinçli bir seçimdir ve varsayılan yön saklamaktır. Bellek darsa doğru cevap yeniden hesaplamak değil, önbelleğin bayt genişliğini veya bağlamı düşürmektir.
Bütçe sığıyorsa hızlandırıcı kararı bitmiş midir?
Hayır. Kapasite sığmayı belirler, bant genişliği hızı belirler. Aynı belleğe sahip iki hızlandırıcı farklı bant genişliğine sahipse jeton başına süre farklı çıkar, çünkü üretim aşaması bant genişliğine bağlıdır. Karar iki eksende birlikte verilir.
LEARN
AI Altyapı Mühendisi rotasına devam et
Dersler tek başına da okunabilir, ama sıralı ilerlemek önkoşul boşluklarını kapatır.
