OpenAI'de bir Yapay Zeka Mühendisi mülakatındasın. Röportaj yapan kişi şöyle soruyor: "GPT modelimiz 42 saniyede 100 token üretiyor. Nasıl 5 kat hızlandırıyorsun?" Sen: "Daha hızlı üretim için daha fazla GPU ayıracağım." Mülakat bitti. İşte kaçırdığınız şeyler:
Asıl darboğaz hesaplama değil, gereksiz hesaplama. KV önbellekleme olmadan, modeliniz her token için anahtarları ve değerleri yeniden hesaplar, işi tekrarlar. - KV önbellekleme ile → 9 saniye - KV önbellekleme olmadan 42 saniye (~5 kat daha yavaş) → Nasıl çalıştığını anlamak için derinlemesine bakalım!
KV önbelleğe almayı anlamak için, LLM'lerin belirteçleri nasıl çıkardığını bilmeliyiz. - Transformer, tüm belirteçler için gizli durumlar üretir. - Gizli durumlar kelime dağarcığına yansıtılır. - Son belirtecin günlükleri, bir sonraki belirteci oluşturmak için kullanılır. - Sonraki belirteçler için tekrarlayın. 👇 Bunu kontrol et
Bu nedenle, yeni bir token oluşturmak için yalnızca en son tokenin gizli durumuna ihtiyacımız var. Diğer gizli durumların hiçbiri gerekli değildir. Ardından, dikkat mekanizmasından transformatör katmanı içinde son gizli durumun nasıl hesaplandığını görelim.
Dikkat sırasında: sorgu anahtarı ürününün son satırı şunları içerir: - son sorgu vektörü. - tüm anahtar vektörler. Ayrıca, son dikkat sonucunun son satırı şunları içerir: - son sorgu vektörü. - Tüm Anahtar & Değer Vektörleri. Daha iyi anlamak için bu görsele göz atın:
Yukarıdaki içgörü, yeni bir token oluşturmak için ağdaki her dikkat işleminin yalnızca şunlara ihtiyacı olduğunu göstermektedir: - son belirtecin sorgu vektörü. - Tüm Anahtar & Değer Vektörleri. Ancak burada önemli bir içgörü daha var.
Yeni tokenler oluştururken: - Önceki TÜM tokenler için kullanılan KV vektörleri değişmez. Bu nedenle, bir adım önce oluşturulan belirteç için bir KV vektörü oluşturmamız yeterlidir. KV vektörlerinin geri kalanı, bilgi işlem ve zamandan tasarruf etmek için bir önbellekten alınabilir.
Buna KV önbelleğe alma denir! Tekrarlamak gerekirse, tüm bağlam belirteçlerinin KV vektörlerini yedekli olarak hesaplamak yerine, bunları önbelleğe alın. Bir belirteç oluşturmak için: - Bir adım önce oluşturulan belirteç için QKV vektörü oluşturun. - Diğer tüm KV vektörlerini önbellekten alın. - Dikkati hesaplayın. 👇 Bunu kontrol et
KV önbellekleme, belirteçler oluşturmadan önce istrinin KV önbelleğini hesaplayarak çıkarımı hızlandırır. İşte bu yüzden ChatGPT ilk tokenı diğerlerinden daha uzun sürede üretiyor. Bu gecikmeye ilk token'a giden zaman (TTFT) olarak bilinir. TTFT'yi geliştirmek başka bir günün konusu!
203