Yapay zeka temelleri

KV Önbelleğinizin Bir Bit Sorunu Yok, Bir Geometri Sorunu Var.

mm
Unite.AI sitesini Google'daki tercih ettiğiniz kaynaklara ekleyin

Aynı 2-bit kesinlikte, hangi ekseni quantize edeceğinize ilişkin bir karar, benchmark puanını 2.88’den 63.53’e kadar değiştirebilir. Anahtarlar ve değerler karşıt bir muameleye ihtiyaç duyar – ve neden attention denklemindedir, donanım değil.

Llama-2-13B’yi ele alın. Anahtar-değer önbelleğini 32’lik bir quantization grup boyutuna göre iki bitlik gruplara ayırırken, her şeyi aynı model, aynı bit bütçesi, aynı grup boyutları ve aynı benchmark’ler ile yerinde bırakın.

Uygulama kararının tek bir unsuruna bağlı olarak, CoQA doğruluğu ya 2.88 ya da 63.53 olur. Tam kesinlikte kullanılan puan 66.37’dir.

Karar, kullanılan toplam bit sayısına ilişkin değildir. Soru, her ölçek faktörünü hesaplamak için hangi ekseni gruplama boyutu olarak kullanacağınızdır. Kanalları gruplama boyutu olarak (anahtarlar) ve tokenleri gruplama boyutu olarak (değerler) kullanmaya karar verdiğinizde, tam kesinlik performansından dört puan içinde bir yere gelirsiniz. Bu seçimlerden herhangi birini değiştirdiğinizde, kalite kaybı yaşarsınız. Her iki seçimi de değiştirdiğinizde, model çalışmaz.

Aynı 2 biti aynı önbellekte harcama’nın dört yolu. Llama-2-13B’de KIVI ablation sonuçları, grup boyutu 32’dir.

Quantization genellikle sadece bir ayar olarak düşünülür: 8 bit, 4 bit, 2 bit, bağlı doğruluk maliyeti ile birlikte. KV önbelleğinde böyle değildir. Koordinat sistemlerini seçmektir ve farklı sistemler anahtarlar ve değerler için geçerlidir. Bu parça nedenini açıklar. Kısaca: quantization hatası, gruplar içindeki değerlerin aralığına bağlıdır; anahtarlar ve değerler çok farklı bir yapıya sahiptir ve insanlar genellikle doğru ekseni değer dağılımından çıkaramadıkları için hata yaparlar. Hatanın nasıl değiştiğini attention’in tükettikten sonra incelemek gerekir. Bu, ara aktivasyonları sıkıştırmak için genel bir ilke sağlar ve kalite için reconstruction hatasının bir proxy olarak şüphe duymak için iyi bir neden sağlar.

KV Önbelleği Neden Bu Konuda Isırıyor

Üretme aşamasında, bir transformer, daha önce işlediği tokenlerin tüm anahtar-değer proje (KV) verilerini, bu verileri tekrar hesaplamak zorunda kalmamak için bir önbelleğe depolar. Bu önbellek, bağlam uzunluğu ve toplu işleme boyutu ile doğrusal olarak büyür. Sonunda, bu önbellek, modelin kendisinden daha büyük hale gelecektir.

Bu büyüme, modelin farklı kısımlarının bellek tüketimine bakıldığında kolayca tespit edilebilir. LLaMA-7B’nin KVQuant analizi, ağırlıkların yaklaşık 98 procentini bellekte işgal ettiğini, aktivasyonların ise 2 procentini işgal ettiğini gösterir. 128K bağlamda, oran yaklaşık olarak 16 procent ağırlık ve 84 procent KV önbelleğine dönüşür. KIVI yazarları tarafından alıntılanan OPT-175B analizi, benzer sonuçlar buldu. Özellikle, 512’lik bir toplu işleme boyutu ve 512-tokenlik bir.prompt ile, KV önbelleği 1.2TB’ye ulaşır – model ağırlıklarının birkaç katı.

Ancak, kapasite burada sadece yarım sorun. GPU, her bir token üretimi için tüm KV önbelleğini cihaz belleğinden okumalıdır. Bu, GPU KV önbelleğini okurken, hesaplama çekirdekleri boşta kalır. Böylece, önbelleğin genel boyutunu azaltmak, hem kullanılabilir işlem başlangıcını artırır hem de veri aktarımı için beklenen süreyi azaltır.

Quantization Hatasının Gerçekte Ne Olduğu

Tam sayı quantization matematiksel olarak basittir. Bir grup sayı için, en küçük sayıyı sıfır noktası olarak kaydeder ve ardından grubun aralığını temsil edilebilecek seviyelerin sayısına böler ve bir adım boyutu elde eder. Her bir öğeyi en yakın adıma yuvarlar. İki immediate sonuç takip eder. İlk olarak, her bir öğe için hata, yarım adımla sınırlıdır. İkincisi, adım boyutu, grubun aralığının 2^B – 1’e bölünmesiyle elde edilir. 2 bitlik durumda, sadece 4 seviye vardır ve bu, herhangi bir grup içindeki yayılmanın üzerine kurulur. Böylece, komşularına göre yüzlerce kez daha büyük bir öğe sadece kötü performans göstermez, aynı zamanda tüm komşularının adım boyutunu inflates ve hepsi birlikte kaba hale gelir. Grup, hasarın birimidir ve ekseni seçmek, hangi öğelerin birlikte acı çekeceğini belirler. Soruyu farklı şekilde ifade etmek, “kaç bit harcayabilirim?” değil, “nerede aşırı değerler var ve onları izole edebilir miyim?” olur.

Anahtarlar: Dışlayıcılar Sabit Kanallarda Yaşar

Büyük dil modelleri, çoğu aktivasyondan çok daha büyük aktivasyonlara sahiptir. Sun ve arkadaşları, farklı model aileleri boyunca bu büyük aktivasyonları katalogladı: Mixtral 8x7B’de en büyük büyüklük yaklaşık 7000 iken, median özellik büyüklüğü yaklaşık 0.3’dir – yaklaşık dört kat farklı. Bu aktivasyonlar nadirdir, girdilerle değişmeyen sabit boyutlarda kalırlar ve kazara değildir. İmplicit önyargılar olarak davranırlar ve dikkati sadece birkaç tokene odaklarlar: dikkat çukurları davranışı. Anahtar önbelleğinde, bu yapı çok açıktır: belirli kanallar, bir dizi boyunca her token için tutarlı olarak çok büyük büyüklükler taşır. Tokenler boyunca gruplandırırsanız, her grup bu dışlayıcı kanalları içerir, böylece her grubun adım boyutu dışlayıcılar tarafından belirlenir ve tüm normal kanallar bunun bedelini öder. Kanallar boyunca gruplandırırsanız, dışlayıcı kanallar kendi gruplarını oluşturur. İçe dönük aralıkları büyüktür, ancak kendi içinde kapsüllenmiştir; normal kanallar yalnız bırakılır. Sonuçlar eşleşir. Llama-2-13B’de, KIVI, token başına gruplandırma altında ortalama 13.67 anahtar yeniden inşa hatası ve 4.55 kanal başına gruplandırma altında rapor eder – ve daha da önemlisi, 47.00 dikkat puanı hatası ve 9.60. Anahtarları token başına quantize etmek, yaklaşık beş kat daha fazla puan hatasına neden olur. Skorlar, anahtarlar için anlamlı metriklere katılır; kanal quantization her iki方面te de excels.

Değerler: Nerede İntüisyon Bozulur

Değer önbelleği, kanal-dışlayıcı desenini göstermez. Oldukça düzgün görünür.

Ancak, anahtar yönetimi ne şekilde uygulanırsa uygulansın (2.80 ve 2.88 sonuçları), değerleri kanal başına sıkıştırmak modeli çöker.

Ve burada önemli bir nokta var: eğer bu kaybı, her bir değer için sıkıştırıldığı orijinal tensor上的 raw reconstruction hatası ile ölçerseniz, kanal başına değer quantization aslında biraz daha iyi görünür, 3.73’e karşı 4.57. Eğer sıkıştırmanızı açık bir şekilde doğrulayacaksanız, modeli bozan yapılandırmayı seçersiniz.

Llama-2-13B’de değer önbelleği quantization hatası, iki şekilde ölçülür. Depolanan-tensor metriği ve tüketilen-çıktı metriği, bir order of magnitude’den fazla farklılık gösterir.

Çözüm, değer önbelleğinin doğrudan okunmadığıdır. Bir matrix product ile tüketilir: dikkat çıkışı, softmax dikkat puanları ile ağırlıklı bir değer vektörler toplamıdır. Bu nedenle, ilgili hata, bu işlem sırasında ortaya çıkan hatadır, tensorların kendilerinde değil. Dikkat çıkışı açısından ölçülürse, sıra tamamen tersine döner. KIVI, token başına değer vektörü quantization nedeniyle dikkat çıkışı için 3.55’e karşı 49.89 relative hata rapor eder – görünüşte daha iyi seçim için 14 kat daha yüksek.

Açıklama, dikkat seyrektir, ki %84.3 olarak ölçülür. Çıkıştaki bilginin büyük çoğunluğu, birkaç önemli tokenlere atfedilebilir. Token başına quantization, her tokenin hatasını o tokene mahsup eder, böylece önemli olmayan tokenlerin hataları gần-zero dikkat ağırlıkları ile çarpılır ve etkili bir şekilde yok olur. Kanal başına quantization, her tokenin hatasını paylaşılan bir kanal ölçeğine yayarak, kötü temsil edilen tokenlerin önemli olanların temsilini kirletmesine neden olur. Dikkat verimliliğini sağlayan seyreklık, token başına quantization’ın güvenli olmasını sağlayan aynı özelliktir.

Genel olarak çıkarılacak ders, KV önbelleğinden daha geneldir: sıkıştırma hatasını, tensorun tüketildiği yerde ölçün, depolandığı yerde değil. Reconstruction hatasının yaptığı bir örtük varsayım, her bir tensor bileşeninin eşit ağırlığa sahip olduğudur. Dikkat bu varsayımı açıkça reddeder. Herhangi bir aşağı akım işlemi, girdilerini ağırlıklandırır, kapar veya seyrekleştirirse, bu varsayımı bozar. Retrieval sistemlerindeki değerlendirme metriklerindeki körlükler hakkındaki önceki makalemi okuyanlar, bu sonuçların daha önce tanımlanan başarısızlıklara benzer olduğunu tanıyacaktır: kolayca hesaplanan metriklere bakıldığında, amaçlandığından farklı bir şey raporlar.

Döner Gömme, Anahtarları Karmaşık Hale Getirir

Döner Pozisyon Gömme (RoPE) kullanmanın bazı sorunları vardır. RoPE, her tokenin göreli pozisyonuna bağlı olarak kanal çiftlerini döndürür. Bu karıştırma, per-kanal anahtar quantization’ın işe yaradığı sabit-kanal yapısını kısmen çözer – bir dışlayıcı kanal, komşularına döndürülür ve komşular, aralığı miras alır. KVQuant’ın cevabı, sıralamadır: anahtarları döndürme uygulanmadan önce quantize edin ve RoPE’yi dequantization’dan sonra uygulayın. Per-kanal anahtar quantization, non-uniform data tipleri ve dışlayıcıların küçük bir kısmını izole ederek, 3 bitlik durumda 0.1 perplexity bozulmasına ulaşır ve LLaMA-7B’nin 1 milyon token bağlamında tek bir A100-80GB’de hizmet vermesini sağlar.

Ayrıca, RoPE’nin etkisinin düzeyini anlamak önemlidir. “RotateKV” makalesinin yazarları, RoPE eklendiğinde quantization hatalarında %145’lik bir artış bildirdiler ve paylaşılan bir döndürme matrisinin her yerde yetersiz olduğunu, çünkü dışlayıcı kanalların dikkat kafa başına farklı olduğunu belirttiler – bu nedenle her yerde ortak bir döndürme matrisi uygulanması yetersizdir ve kafa-adaptif döndürmeler daha iyidir.

Sistem Vergisi ve Neden Bir Detay Değil

Token başına quantization, decoding için uygundur. Her token gelir; quantize edilir, diziye (token boyutu boyunca) eklenir, başka bir şey hareket etmez.

Ancak, kanal başına quantization uymaz. Bir kanalın istatistikleri, henüz üretilmeyen tokenleri kapsar, bu nedenle bir token geldiğinde, ölçek faktörünü hesaplayamazsınız. KIVI’nin çözümü, en fazla 128 tokeni, tam kesinlikte, bir artıklar tamponunda tutmaktır ve biriken tokenlerin gruplarını quantize etmektir.

Olumlu tarafı, artıklar tamponu, sadece bir ayrıntıdan ziyade, yük taşıyan bir şey haline gelir. GSM8K ile Llama-2-7B’de, tam kesinlik puanı 13.50’dir. Tam olarak quantize edilmiş 2 bitlik, doğru eksenlerle, 5.76 puan alır. Aynı eksenler ve aynı bitler, artı son ürettiği tokenlerin tam kesinlikte bir artıklar tamponu ile, 12.74 puan alır. Son ürettiği tokenlerin bir kaydırmalı penceresi, tam kesinlikte, zor çok adımlı problemlerde, agresif quantization’dan kaybettiğinizin çoğunu geri kazanır – bu, üretilen tokenlere dikkat zinciri tarafından hangi tokenlerin dikkat edildiğine bakıldığında mantıklı olur. KIVI, Llama-2-7B için 2.6 kat daha az zirve bellek kullanımı ve 4 kat daha büyük toplu işleme boyutuna izin veren, aynı zamanda gerçek bir hizmet görevinde 2.35 ila 3.47 kat daha iyi bir verimlilik rapor eder.

Bunu Yapmanız Gereken

  1. İkisi için aynı quantizer’ı kullanmayın. Anahtarlar (kanal başına) ve değerler (token başına) için farklı quantizer’lar kullanın. Tek bir quantizer’ı “KV önbelleği”ne uygulayan bir işlem hattı, muhtemelen küçük bir bit sayısı ile her değeri temsil ettiğinde, zaten çoğu olası kaliteden vazgeçmiştir.
  2. Anahtarları RoPE’den önce quantize edin. Bu, bir tercih meselesinden ziyade, bir doğruluk meselesidir.
  3. Son ürettiği tokenlerin tam kesinlikte bir penceresini depolayın. Bu pencere, önbelleğin büyüklüğüne kıyasla çok az bellek alır, ancak zor görevler için doğruluğun çoğunu üretir.
  4. Reconstruction hatası ile doğrulamayın. Daima dikkat çıkışı veya son görev performansı temelinde doğrulayın. Depolama metriği sadece gürültülü değil, değerler için yanlış yönlendiriyor.
  5. Kısa bağlam, çoklu seçenekli benchmark’lerle doğrulamayın. KIVI yazarları, bu değerlendirme için kapalı uçlu görevleri, MMLU gibi, kasıtlı olarak kaçınıyorlar, çünkü tek bir decoding adımı, çıktı logit’lerini okumak, önbelleği neredeyse hiç kullanmaz. Önbelleği zaman içinde inşa etmeden ve ondan üretim yapmadan hiçbir değerlendirme, sistem tasarımındaki başarısızlıkları gözlemleyemez.

Çalışma Nereye Gidiyor

Geometrik sorunla ilgili masih bazı şeyler yapılması gerekiyor, ancak birçok araştırmacı, dışlayıcı kanalların çeşitli transformer kafa arasında nasıl dağıldığını ve donanım kısıtlamalarının hangi gruplamaların en ucuz olduğunu nasıl etkilediğini incelemeye devam ediyor: InnerQ, kanal-başına anahtar normalize edilmesini, ön doldururken anahtar ve sorgu ağırlıklarına katlar. Böylece, çalışma zamanında ek bir yük olmaz. Ayrıca, InnerQ, son ürettiği tokenler ve dikkat çukurları tokenleri için yüksek kesinlik pencerelerini depolar. Bu, dışlayıcı kanalların komşu kanalları kirletme fırsatını ortadan kaldırır.

Diğerleri, tüm önbelleği depolamak yerine, anahtarları ve/veya değerleri talep üzerine yeniden oluşturmak için yeterli bilgiyi depolamayı önerir.

Son olarak, doğruluk tek parametre değildir, quantization’ın etkilediği. Yayınlanan bir araştırma, KV önbelleğini quantize etmenin, hizalama bozulmasına yol açabileceğini gösterdi. Ayrıca, bu araştırma, eğitim-free bir kurtarma protokolü ile, kaybedilenin %97’sini geri kazanan FP8 önbelleği kullanan üretim vLLM hizmet ortamlarında da hizalama bozulmasını belgeledi. Dolayısıyla, bir yapılandırma, benchmark sonuçlarını korursa, bu, ilgili diğer tüm parametreleri koruduğu anlamına gelmez.

Genel İlke

Quantization kavramı, bir “kesinlik bütçesi” olarak çerçevelenmiştir: kaç biti feda edebilirim? KV önbelleği, daha faydalı sorunun yapısal olduğunu gösterir. Kesinlik, gruplar halinde tahsis edilir; grup, hasarın birimidir ve grupladığınız eksen, hangi öğelerin birlikte acı çekeceğini belirler. Doğru eksen, tensorun tüketildiği yerdedir, yani tensoru nasıl kullandığınız, nasıl depolandığı değil. Anahtarlar, bir dot-product işlemi ile sorgu karşı kullanılır. Bir single bozuk kanal, tüm puanları zehirler. Değerler, bir sparse-ağırlıklı-ortalama işlemi ile tokenler boyunca tüketilir. Dolayısıyla, bir single bozuk token, sadece ağırlıklı çıkar. İki tensor, aynı boyutlara ve iki ardışık katmandan üretilse bile, farklı şekilde ele alınır. Herhangi bir aktivasyonu sıkıştırmaya planladığınız zaman, bu aktiviteyi hangi operasyon contrato eder ve grubum bu operasyona saygılı mı, diye sormak önemlidir.

İki tensor, aynı boyutlara ve iki ardışık katmandan üretilse bile, farklı şekilde ele alınır. Herhangi bir aktivasyonu sıkıştırmaya planladığınız zaman, bu aktiviteyi hangi operasyon contrato eder ve grubum bu operasyona saygılı mı, diye sormak önemlidir.

Himanshu Goel, yapay zeka ve makine öğrenimi alanında yüksek riskli alanlar için geri çağırma güçlendirilmiş nesil konusunda uzmanlaşmış bir araştırmacıdır, bunlar arasında biyomedikal, finansal ve düzenleyici belge iş akışları bulunmaktadır.