LLM'ler 1.58 bite nasıl ince ayar yapılır?

Facebok sayfasını beğenin :
sevilen

Tarih:

Giriş

Hepimiz biliyoruz ki Büyük Dil Modelleri boyut ve karmaşıklık olarak büyüyor. Hesaplama ve enerji maliyetlerini azaltmanın yollarını bulmak zorlaşıyor. Maliyeti azaltmanın popüler yöntemlerinden biri nicelemedir. Nicelemede, parametrelerin hassasiyetini standart 16 bit kayan nokta (FP16) veya 32 bit kayan nokta (FP32)'dan 8 bit veya 4 bit gibi daha düşük bit formatlarına düşürüyoruz. Bu yöntem belleği azaltır ve hesaplamayı hızlandırır ancak doğrulukla bir takas yapar. Hassasiyeti bu kadar düşürmek modellerin önemli bilgileri kaybetmesine neden olur. Dolayısıyla, performansımız düşer. Bu makalede, LLM'leri 1.58 bite nasıl ince ayar yapılır hakkında konuşacağız.

LLM'leri 1.58 bit'e ince ayar yapın

Genel Bakış

  • Nicemleme, hassasiyeti düşürerek LLM maliyetlerini azaltır ancak çoğu zaman doğruluktan ödün verilmesiyle sonuçlanır.
  • BitNet, enerji tüketimini ve hesaplama maliyetlerini önemli ölçüde azaltırken tam hassasiyetli modellerle karşılaştırılabilir performans sağlayan 1.58 bitlik bir LLM sunuyor.
  • BitNet, üçlü hassasiyeti kullanarak geleneksel katmanları BitLinear ile değiştirir ve türevlenemeyen ağırlıkları işlemek için STE'den yararlanır.
  • Önceden eğitilmiş Llama1.58 3B modellerinden BitNet modellerinin ince ayarı (LLM'leri 8 bite ince ayar) performansı artırır ancak niceleme yoluyla bilgilerin korunmasında zorluklarla karşı karşıya kalır.
  • Performansta bazı boşluklar kalmasına rağmen, dinamik lambda planlaması ve alternatif niceleme yöntemleri ince ayar sonuçlarının iyileştirilmesine yardımcı oluyor.
  • BitNet, gelecekte büyük ölçekli model eğitimi ve donanım optimizasyonu için yeni bir paradigma sunarak, verimli ve uygun maliyetli LLM'ler yaratma potansiyelini ortaya koyuyor.

İçindekiler

1-bit Büyük Dil Modelleri için BitNet (LLM)

Araştırmadaki yeni gelişmeler, örneğin BitNet, 1-bit için kapıyı açıyor Büyük Dil Modelleri (LLM'ler) norm haline gelmek için (LLM'leri 1.58 bite ince ayar yapın). Her bir LLM parametresinin üçlü {-1.58, 1, 1} olduğu 0 bitlik bir LLM varyasyonu olan BitNet b1'i sundular. 

Not: Şaşkınlık, bir dil modelinin (LLM) bir dizideki bir sonraki kelimeyi ne kadar iyi tahmin ettiğini değerlendirmek için kullanılan bir ölçüttür.

Şaşkınlık ve son görev performansı açısından, aynı model boyutu ve eğitim belirteçlerine sahip tam hassasiyetli (FP16 veya BF16) Transformer LLM ile karşılaştırılabilir. Yine de gecikme, bellek, verim ve enerji kullanımı önemli ölçüde daha ekonomiktir. Daha da önemlisi, 1.58 bitlik LLM, gelecek nesil yüksek performanslı ve makul fiyatlı LLM'ler için yeni bir ölçekleme yasası ve eğitim tarifi oluşturur. Ayrıca, 1 bitlik LLM'ler için özel olarak optimize edilmiş donanımlar oluşturmayı ve hesaplama için yeni bir paradigma oluşturmayı mümkün kılar.

1-bit Büyük Dil Modelleri için BitNet (LLM)

Bir sınırlamamız, sıfırdan bir model eğitmemiz gerektiğidir. Sonuçların çok iyi olduğunu söyleyebiliriz ancak herkesin bütçesi yok LLM'de ön eğitim almak. Bu sınırlamanın üstesinden gelmek için, bu makalenin yazarları göre Mevcut bir modeli 1.58 bite kadar ince ayar yapmayı sağlayan birkaç numarayı araştırdık. 

1-bit Büyük Dil Modelleri için BitNet (LLM)

Bu mimari, matris çarpımı gerçekleştirirken LLaMA LLM'nin FP8 toplama ve çarpma işlemlerinin aksine INT16 toplama hesaplamalarını kullanır. Bu, BitNet b1.58'in matris çarpımı için Llama temel çizgisine kıyasla 71.4 kat aritmetik işlem enerjisi tasarrufu sağlamasıyla sonuçlanır. 

1-bit Büyük Dil Modelleri için BitNet (LLM)

BitNet b1.58'in enerji tüketimi aramalar 7nm işlem düğümlerinde LLM. Solda aritmetik işlem enerjisinin bileşenleri yer alır. Sağda farklı model boyutlarındaki uçtan uca enerji maliyeti yer alır.

BitNet ne yapar?

BitNet, Çok Başlı Dikkat ve İleri Beslemeli Ağlardaki geleneksel Doğrusal katmanları BitLinear adı verilen özel katmanlarla değiştirir. Bu BitLinear katmanı üçlü kesinlik (veya ilk sürümde ikili bile) kullanır. Üçlü bir kesinlik eğitirken karşılaşılan en büyük engellerden biri ağırlıkların ayrıklaştırılmasıdır (round() işlevi kullanılarak). Bu, ağırlıkları türevlenemez hale getirir. Türevlenemez ise, ağırlıklar geri yayılım sırasında öğrenemez. Bu nedenle BitNet, STE (Doğrudan Tahminci)

STE Nedir?

Straight-Through Estimator (STE): Makale, niceliklendirilmiş sinir ağlarında (QNN'ler) ortaya çıkan türevlenemez fonksiyonlarla başa çıkmak için kullanılan bir teknik olan STE'nin ayrıntılı bir çalışmasını sunmaktadır. STE, eğimin geri yayılım sırasında eğimlerini yaklaştırarak ayrık değişkenlerden "geçmesine" izin verir. Bu, ağırlıkların ve aktivasyonların genellikle daha düşük hassasiyete niceliklendirildiği ve bunları türevlenemez hale getirdiği QNN'ler bağlamında özellikle önemlidir.

Konuya bir başka açıdan bakıldığında, STE'nin eğimin yuvarlama hiç olmamış gibi devam etmesine izin vermesi, geleneksel eğim tabanlı optimizasyon yöntemleri kullanılarak ağırlık güncellemelerinin yapılmasına olanak sağlamasıdır.

STE nedir?

(a) BitLinear'ın hesaplama akışı. (b) BitNet'in mimarisi, matris çarpımının BitLinear olarak uygulandığı dikkat ve FFN yığınlarından oluşur.

1.58b Nicemlemede Ön Eğitimi Denemek

Bu nedenle yazarlar sonuçları yeniden üretmeye çalıştılar BitNet kağıdır, küçük bir veri kümesiyle başladılar, minik hikayelerVe Llama3 8B modeli. Uygulama üzerine, bir normalizasyon fonksiyonu eklemenin bu performansı iyileştirdiğini doğruladılar. Ayrıca eğitimin kararlı olduğunu buldular. Örneğin, 2000 adımlık eğitimden sonra, normalizasyon olmadan 6.3'e ve normalizasyonla 5.9'a eşit bir doğrulama kümesinde şaşkınlık yaşadık. 

1.58b Nicemlemede Ön Eğitimi Denemek

Bu yaklaşım, doğruluğu korurken maliyeti düşürdü, ancak pek çok kuruluş bunu karşılayamaz. Diğer gruplar ince ayar sonuçlarının çok ümit verici olmadığını bildirdi, bu yüzden bunu da test ettiler. 

1.58bit Quantization kullanarak ince ayar

Önceden eğitilmiş Llama1.58 3B ağırlıklarından ince ayar yapmaya başladıklarında (LLM'leri 8 bite ince ayar yapma), model biraz daha iyi performans gösterdi ancak beklediğimiz kadar iyi değildi.

1.58bit Nicemleme Kullanarak İnce Ayar Yapma

Bunun neden olduğunu anlamak için, sorunları bulmak üzere rastgele başlatılmış ve önceden eğitilmiş modellerin ağırlık dağılımını incelediler. Ayrıca iki dağılımın ölçek değerlerini de incelediler. Önceden eğitilmiş modelin daha fazla bilgiyle başladığını ve daha fazla BitLinear katmanının eklenmesinin modeli boğduğunu buldular. Tüm önceki bilgilerini kaybeder.

Bu nedenle, ince ayar sonuçlarını iyileştirmek için tensör başına kantizasyon yerine satır başına ve sütun başına kantizasyon kullanmayı denediler. Bu şekilde, Llama 3'te zaten mevcut olan daha fazla bilgiyi korudular. Ancak, kantizasyon yaptıklarında modelin bilgi kaybettiğini gözlemlediler. Bu nedenle, ne kadar bilginin kaybolduğunu araştırmak için grup başına kantizasyon denediler. 

Mantık kontrolü olarak, öncelikle grup boyutunu 1'e ayarladılar, bu da esasen niceleme olmadığı anlamına geliyor. Bu senaryoda, kayıp normal ince ayar sırasında gördükleriyle aynı olan 1.45'te başladı. Ancak, grup boyutunu 2'ye çıkardığımızda, kayıp yaklaşık 11'e sıçradı. Bu, 2'lik minimum grup boyutuyla bile modelin hala neredeyse tüm bilgilerini kaybettiğini gösteriyor. Bu nedenle, bu sorunu ele almak için, nicelemeyi aniden uygulamak yerine kademeli olarak tanıtmayı düşündüler. 

Bunu yapmak için, süreci kontrol etmek için bir lambda değeri tanıttılar. Lambda = 0 olduğunda, kantizasyon yapılmaz ve lambda = 1 olduğunda, tam kantizasyon yapılır. Başlangıçta, 0.25, 0.50, 0.75 ve 1 gibi ayrık lambda değerlerini test ettiler. Ancak sonuçlar o kadar önemli değildi. Bunun nedeni, lambda = 0.25'te kaybın çok yüksek başlamasıdır. 

1.58bit Nicemleme Kullanarak İnce Ayar Yapma

Bu nedenle, eğitim adımlarına bağlı olarak ayarlanan dinamik bir lambda değeriyle deneme yapmaya karar verdiler. 

lambda_ = eğitim_adı / toplam_eğitim_adımları

Bu lambda değerini kullanmak daha iyi kayıp yakınsamasına yol açtı, ancak karışıklık tatmin edici değildi. Bunun nedeni modelin lambda = 1 ile yeterince uzun süre eğitilmemiş olmasıydı. Bu nedenle, bunu ele almak için aşağıdaki dinamik lambda değerini kullandılar.  

lambda_ = min(2 * eğitim_adı / toplam_eğitim_adımları, 1)

Bu konfigürasyonla 2000 adımdan sonra:

1.58bit Nicemleme Kullanarak İnce Ayar Yapma

Bunu görebiliriz ince ayar yöntemi genel olarak daha iyi bir yakınsama gösterir. Kayıp eğrisinde 1000 adım civarında hafif bir artış, ancak bunun iyileştiğini görebiliriz, bu da yaklaşık 4'lük bir şaşkınlığa yol açar. Şimdi, nicelikselleştirilmiş modeli daha büyük WikiText veri kümesinde (ince ayar için kullanılan küçük hikayelerde değil) test ettiler; bu, düşük bit modunda ince ayar yapmanın modelin genel bilgisini kaybetmesine neden olduğunu gösteren yüksek bir şaşkınlığa yol açtı. Bu nedenle, bu sorunu aşmak için daha büyük bir veri kümesi kullandılar FineWeb-eduAşağıdaki dinamik lambda değerini kullandılar. 

lambda_ = min(eğitim_adım/1000, 1)

Bu lambda değerini seçtiler çünkü modeli ısıtmak için iyi bir başlangıç ​​noktasıydı. FineWeb-edu veri kümesinde 1 adım için 4e-5,000'lük bir öğrenme oranı kullanıyorlar. Eğitim, toplam 2 milyar token'a denk gelen 10 milyonluk bir toplu iş boyutu (BS) içeriyordu. Doğru öğrenme oranını ve doğru çürümeyi bulmak zordu; modelin performansında önemli bir faktör gibi görünüyor.

1.58bit Nicemleme Kullanarak İnce Ayar Yapma

Fineweb-Edu veri setindeki ince ayarların tamamlanmasının ardından, WikiText veri setindeki karışıklık yalnızca 12.2 milyar token kullanılarak 10'ye ulaştı ki bu çok iyi bir sonuç. 

Lambda 1'e yaklaştığında keskin bir artış olduğunu görebilirsiniz. Bunu düzeltmek için, ilk başta üssel olarak büyüyen ve daha sonra 1'e yaklaştıkça sabitlenen lambda zamanlayıcıları düşünüldü. 

def scheduler(step, total_steps, k):
    normalized_step = step / total_steps
    return 1 - (1 - normalized_step)**k

Farklı k değerleri için, toplam ısınma adımı 1 olduğunda, grafikler aşağıdaki gibi görünür:

Arsalar

[4, 1, 4, 4]'daki k değerlerini test ederek en iyi performans gösteren öğrenme oranı 6e-8'ü kullanarak 10 deney yürüttüler. 

Eğriyi düzeltti ancak karışıklık çok büyük değildi ve 15 civarında kaldı ve aşağı akış görevleri performansı da daha iyi değildi. Başlangıçtaki artışı fark edebiliyoruz ve model artıştan kurtulmak için mücadele ediyor. Bu nedenle artışı önlemek için sigmoid gibi yavaş başlayan ancak 1'e keskin bir şekilde yükselen ve 1'e yaklaştığında sabitlenen farklı bir zamanlayıcı denediler.  

def sigmoid_scheduler(step, total_steps, k):
    # Sigmoid-like curve: slow start, fast middle, slow end
    normalized_step = step / total_steps
    return 1 / (1 + np.exp(-k * (normalized_step - 0.5)))

Farklı k değerleri için aşağıdaki eğrilere sahibiz:

araziler

Bu sefer k'yi [5, 15, 20, 25, 40] ile 100 deney yürüttüler:

Lambda'daki keskin artış 500. adım civarında istikrarsızlığa neden oldu ve ilk yakınsama sorununu çözmedi. Ancak k = 100 için, şaşkınlık 13.5 civarında kalsa da, aşağı akış görevlerinde bazı iyileştirmeler gözlemledik. Buna rağmen, doğrusal bir zamanlayıcıya göre belirgin bir performans artışı göstermedi.

Hatta rastgele ağırlıklar ve çeşitli öğrenme oranları kullanarak sıfırdan eğitim modelleri üzerinde deneyler yaptılar. Bu, ince ayar yaklaşımının etkinliğini geleneksel ön eğitim yöntemleriyle karşılaştırmalarına olanak sağladı.

lm_kaybı

Rastgele ağırlıklardan eğitilen modellerin hiçbiri ince ayarlı modelden daha iyi performans göstermedi. Bu modellerle elde ettikleri en iyi şaşkınlık 26 idi ve bu, ince ayar yaklaşımımızın sonuçlarıyla karşılaştırıldığında yetersiz kalıyor.

100 milyar jetonla modeli ölçeklendirmekten ince ayara

Daha kısa koşulardan en iyi performans gösteren kontrol noktasını doğrusal planlayıcıyla kullanarak daha uzun eğitim koşuları denediler. 45000 adıma kadar devam ettiler. Model bazı metriklerde Llama 3 modeline yakın performans gösterdi, ancak genel olarak geride kaldı. 

100 milyar jetonla modeli ölçeklendirmekten ince ayara

Daha Küçük Modeller Üzerinde Deneyler Yapmak

Isınma kantizasyonunun sonucu büyük ölçüde etkilemediğini gözlemlediler. Bu, ısınma kantizasyonunun etkinliğinin model boyutu ve karmaşıklığıyla daha fazla ilişkili olabileceğini düşündürmektedir. Örneğin, SmolLM 135M modelinde ısınma kantizasyonu ve tam kantizasyonu denediler. Eğriler yakından hizalanır ve aynı şaşkınlığa neden olur. 

Daha küçük modeller üzerinde denemeler

Hugging Face'i kullanarak erişim

Üçlü hassasiyetteki modeller ağırlık başına 2 bit ile paketlenir. config.json'da niceleme yöntemi BitNet olarak belirtildiği takdirde, bunları doğrudan from_pretrained kullanarak yükleyebilirsiniz.

Bağımlılıkları Yükleme

# start by installing the transformers version with the correct configuration to load bitnet models
!pip install git+https://github.com/huggingface/transformers.git@refs/pull/33410/head

Hugging Face CLI Girişi

!huggingface-cli login

Kimlik doğrulaması yapmak ve giriş yapmak için HF Token'ınızı girin.

Gerekli Kitaplıkları İçe Aktar

from transformers import AutoModelForCausalLM, AutoTokenizer
import torch
from IPython.display import Markdown

İnce Ayarlı modeli yükleyin

Aşağıdaki kodda, Llama3'ün ince ayarlı modelini kullanacağız – 8B. Bu, 1.58bit kantizasyona dayalı ince ayarlı bir modeldir. İnce ayar için kullanılan token sayısı 100B'dir. Bu son modelin, modelimizi 100B token bölümüyle ölçeklediğini gördük. 

model = AutoModelForCausalLM.from_pretrained("HF1BitLLM/Llama3-8B-1.58-100B-tokens", device_map="cuda", torch_dtype=torch.bfloat16)
tokenizer = AutoTokenizer.from_pretrained("meta-llama/Meta-Llama-3-8B")
tokenizer.pad_token = tokenizer.eos_token

Bir İstem Oluşturun ve Çıktı Üretin

input_text = """
Which of the following is the capital of France?
A) Berlin
B) Madrid
C) Paris
D) Rome
"""
input_ids = tokenizer.encode(input_text, return_tensors="pt").cuda()
output = model.generate(input_ids, max_length=50)
generated_text = tokenizer.decode(output[0], skip_special_tokens=True)

Çıktı

Markdown(generated_text)

Sonuç

Temel tekniklerle karşılaştırıldığında, BitNet özellikle düşük bit seviyelerinde iyi performans sağlar. Çalışma, BitNet'in 8 bit modellere benzer sonuçlar elde ettiğini ancak çok daha düşük çıkarım maliyetleriyle elde ettiğini iddia ediyor. Aktivasyonların ölçülmesi daha zor olduğundan, 4 bit modellerde yalnızca ağırlıkları niceleyen yaklaşımlar, hem ağırlıkları hem de aktivasyonları niceleyen yaklaşımlardan daha iyi performans gösterir. Ancak BitNet hem yalnızca ağırlık hem de ağırlık ve aktivasyon niceleme tekniklerinden daha iyi performans gösterir; BitNet 1.58 bit ağırlıkları kullanır. Fine-tune LLMs to 1.58 bit konusunda net olduğunuzu umuyorum.

Ayrıca, Llama3 8B'nin 10B ince ayar prosedürünü kullanan çeşitli ölçümler için sonuçlar aşağıdaki tabloda gösterilmiştir. Performansa dair kapsamlı bir genel bakış sağlamak için, bu sonuçlar çeşitli model tasarımlarından elde edilen sonuçlarla karşılaştırılmıştır (tüm değerlendirmeler Nanotron format modelinde Lighteval kullanılarak gerçekleştirilmiştir)

parametreler

Model, üçlü ağırlıklar kullanılarak yalnızca 10 milyar token üzerinde ince ayar yapıldıktan sonra, özellikle daha kapsamlı eğitimden geçen diğer modellerle karşılaştırıldığında olağanüstü bir performans gösteriyor. Örneğin, 7 milyar token içeren çok daha büyük bir veri kümesi üzerinde eğitilmiş olmasına rağmen, Bitnet 100B modelinden daha iyi performans gösteriyor. Ayrıca, 1.26 trilyon tokenlik daha da büyük bir ölçekte rafine edilen FBI LLM (Tam İkili LLM) modelinden daha iyi performans gösteriyor. Bu, ince ayar sürecinin nispeten küçük ölçeğine rağmen modelin etkinliğini ve verimliliğini gösteriyor.

Çevrimiçi bir Generative AI kursu mu arıyorsunuz? Cevabınız evetse, şunu inceleyin: GenAI Zirve Programı.

Sıkça Sorulan Sorular

S1. Hukuk alanında nicemleme nedir?

Cevap: Nicemleme, ağırlıklar gibi model parametrelerinin hassasiyetini 16 bit veya 32 bit kayan noktalardan daha düşük bit biçimlerine (8 bit, 4 bit veya hatta 1 bit) düşürerek bellek kullanımını azaltır ve bir miktar doğruluk pahasına hesaplamayı hızlandırır.

S2. BitNet nedir ve geleneksel LLM'lerden nasıl farklıdır?

Cevap: BitNet, her model parametresinin {-1.58, 1, 0} olarak temsil edildiği yeni bir 1 bitlik niceliklendirilmiş LLM'dir. Bellek, enerji ve hesaplama maliyetlerini önemli ölçüde azaltırken tam hassasiyetli modellere benzer performans elde eder.

Q3. STE (Straight-Through Estimator) nedir ve BitNet'te neden kullanılır?

Cevap: STE, gradyanların niceliksel sinir ağlarındaki türevlenemeyen fonksiyonlardan (yuvarlama gibi) geçmesine izin vererek, düşük hassasiyetli parametreler kullanıldığında bile etkili eğitim ve ağırlık güncellemelerine olanak tanır.

S4. BitNet, 1.58 bitlik kantizasyon kullanarak ince ayar yapmayı nasıl gerçekleştirir?

Cevap. İnce ayar, bilgi kaybını önlemeye ve yakınsamayı iyileştirmeye yardımcı olan, dinamik lambda zamanlaması gibi teknikleri kullanarak önceden eğitilmiş Llama3 modellerinden başlar ve nicelemeyi kademeli olarak tanıtır.

S5. BitNet'in geleneksel 8-bit modellere göre avantajları nelerdir?

Cevap: BitNet, enerji tüketimini ve hesaplama maliyetlerini önemli ölçüde azaltırken benzer karmaşıklık ve aşağı akış performansı sunar ve bu da onu büyük ölçekli LLM'ler için daha verimli bir alternatif haline getirir.

Analytics Vidhya'da ML, DL ve AI konusunda uzmanlaşmış veri bilimi stajyeri. Bu konulardaki makaleler aracılığıyla içgörüleri paylaşmaya adanmış. Öğrenmeye ve alanın ilerlemelerine katkıda bulunmaya istekli. Karmaşık sorunları çözmek ve inovasyonu yönlendirmek için verileri kullanma konusunda tutkulu.

İlgili Makaleler

spot_img

Son Makaleler

spot_img