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.
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.
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.
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.
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.
(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.
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.
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.
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:
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.
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:
[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:
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ı.
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ı.
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.
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)
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
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.
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.
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.
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.
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.
- SEO Destekli İçerik ve Halkla İlişkiler Dağıtımı. Bugün Gücünüzü Artırın.
- PlatoData.Network Dikey Üretken Yapay Zeka. Kendine güç ver. Buradan Erişin.
- PlatoAiStream. Web3 Zekası. Bilgi Genişletildi. Buradan Erişin.
- PlatoESG. karbon, temiz teknoloji, Enerji, Çevre, Güneş, Atık Yönetimi. Buradan Erişin.
- PlatoSağlık. Biyoteknoloji ve Klinik Araştırmalar Zekası. Buradan Erişin.
- Kaynak: https://www.analyticsvidhya.com/blog/2024/10/fine-tune-llms-to-1-58-bits/