Yapay zeka modelleri ve platformları
Microsoft’un 1-Bit Büyük Dil Modelleri İçin Çıkarım Çerçevesi

17 Ekim 2024’te, Microsoft, BitNet.cpp adlı bir çıkarım çerçevesi duyurdu. BitNet.cpp, 1-bit quantized Büyük Dil Modelleri (LLM’ler) çalıştırmak için tasarlanmış bir çerçevedir. BitNet.cpp, Gen AI’de önemli bir ilerlemeyi temsil eder ve 1-bit LLM’lerin standart CPU’lar üzerinde verimli bir şekilde dağıtılmasını sağlar. Bu geliştirme, LLM’lere erişimi demokratikleştirir ve geniş bir cihaz yelpazesi üzerinde kullanılmasını sağlar.
1-Bit Büyük Dil Modellerini Anlama
Büyük Dil Modelleri (LLM’ler), geleneksel olarak yüksek hassasiyetli kayan nokta sayıları (tipik olarak FP16 veya BF16) kullanarak model ağırlıkları için önemli hesaplama kaynaklarına ihtiyaç duyar. Bu gereksinim, LLM’lerin dağıtılmasını pahalı ve enerji yoğun hale getirmiştir.
1-bit LLM’lerin temelinde, model ağırlıklarını yalnızca üç olası değer kullanarak temsil etme teknikleri vardır: -1, 0 ve 1, yani “1,58 bit” (üç durumu kodlamak için biraz daha fazla bir bitten fazla gerekir).
Üçlü Ağırlık Sistemi
Kavram
BitNet.cpp’deki 1-bit quantization, bir üçlü ağırlık sistemidir. BitNet, her parametre için yalnızca üç olası değerle çalışır:
- -1 (negatif)
- 0 (nötr)
- 1 (pozitif)
Bu, yaklaşık 1,58 bitlik bir parametre depolama gereksinimine yol açar, bu nedenle BitNet b1.58 adı verilir. Parametre bit genişliğinin bu radikal azaltılması, bellek kullanımında ve hesaplama karmaşıklığında önemli bir azalma sağlar, çünkü çoğu kayan nokta çarpımı basit toplama ve çıkarma işlemleriyle değiştirilir.
Matematiksel Temel
1-bit quantization, ağırlıkları ve aktivasyonları aşağıdaki adımlarla ternary temsiline dönüştürür:
1. Ağırlık Binarizasyonu
Ağırlıkları ikili hale getirmek, onları ortalama (α) etrafında merkezleme ve ternary bir temsil oluşturmayı içerir. Dönüşüm matematiksel olarak şu şekilde ifade edilir:
Wf=Sign(W−α)
Burada:
- W orijinal ağırlık matrisidir.
- α ağırlıkların ortalamasıdır.
- Sign(x) x > 0 ise +1 ve aksi takdirde -1 döndürür.
2. Activasyon Quantization
Activasyonları quantize etmek, girişlerin belirli bir bit genişliğine sıkıştırılmasını sağlar:
Burada:
- Qb = 2(b−1)2^{(b-1)} b-bit genişliği için maksimum quantization seviyesidir.
- γ x mutlak değerinin maksimumudur (yani ∣∣x∣∣∞).
- ε hesaplamalar sırasında taşmayı önlemek için küçük bir sayıdır.
3. BitLinear Operasyon
BitLinear katmanı, geleneksel matris çarpımlarını basitleştirilmiş bir operasyonla değiştirir:
y=Wf×x^e×(Qbβγ)
Burada:
- β yaklaşık hataları en aza indirmek için kullanılan bir ölçek faktörüdür.
- γ aktivasyonları ölçeklendirir.
- Q_b quantization faktörüdür.
Bu dönüşüm, model performansını korurken verimli hesaplamaları sağlar.
Performans Sonuçları
Bellek Verimliliği
Üçlü ağırlık sistemi, bellek gereksinimlerini önemli ölçüde azaltır:
- Geleneksel LLM’ler: Her ağırlık için 16 bit
- BitNet.cpp: Her ağırlık için 1,58 bit
Bu azalma, geleneksel 16-bit modellere kıyasla yaklaşık %90 bellek tasarrufu sağlar, bu da daha büyük modellerin aynı donanım kısıtlamaları içinde sığmasını sağlar.
1. Çıkarım Hızı: Her İki CPU’da Daha Hızlı
Çıkarım hızı, saniye başına işlenen token sayısı olarak temsil edilir. Gözlemler şunlardır:
- Apple M2 Ultra’da: BitNet.cpp, daha büyük modeller (30B) için Llama.cpp’ye kıyasla 5,07 kat hız artışı sağlar ve 125M model için 593,43 token/saniye zirve hızına ulaşır, bu da 1,37 kat hız artışıdır. Daha büyük modeller için (3,8B ve 7B), BitNet.cpp her zaman 84,77 token/saniye üzerindedir, bu da ölçek boyunca verimliliğini gösterir.
- Intel i7-13700H’de: BitNet.cpp, daha dramatik hız iyileştirmeleri sağlar. 7B model boyutunda, BitNet.cpp 5,68 kat hız artışı sağlar. Daha küçük modeller için (125M), 389,08 token/saniye işler, bu da Llama.cpp’ye kıyasla 2,37 kat daha hızlıdır.
2. Enerji Verimliliği: Kenar Aygıtları için Oyun Değiştirici
Sağlanan grafikler ayrıca enerji maliyeti karşılaştırmalarını gösterir, bu da token başına önemli bir enerji tüketimi azalması sağlar:
- Apple M2 Ultra’da: BitNet.cpp’nin enerji tasarrufu önemlidir. 700M model için, token başına %55,4 daha az enerji tüketir, bu da 0,314’ten 0,140’a düşer. Bu eğilim daha büyük modeller için de devam eder ve 70B model %70,0 enerji tüketimi azalması gösterir.
- Intel i7-13700H’de: BitNet.cpp, 700M model için %71,9 enerji tasarrufu sağlar, tüketim 1,367’den 0,384’e düşer. Llama.cpp için 70B modelin enerji verisi bulunmadığından, BitNet.cpp yine de verimlidir ve 70B model için 17,33 enerji tüketimi gösterir.
3. İnsan Okuma Hızını Aşmak
Bu grafiklerden en ilginç olanı, insan okuma hızı referans çizgisidir, bu da 5-7 token/saniye olarak işaretlenmiştir. Bu kırmızı çizgi, her iki uygulamanın, özellikle BitNet.cpp’nin, en büyük modeller için bile insan okuma hızlarını rahatça aşabileceğini gösterir:
- Apple M2 Ultra’da, BitNet.cpp tüm model boyutları için insan okuma hızını aşar, en düşük hız 8,67 token/saniye ile 70B model için sağlanır.
- Intel i7-13700H’de, 100B model 1,70 token/saniye hızına ulaşır, bu da insan okuma hızının alt sınırına yakın bir değerdir, daha küçük modeller ise bu benchmark’u aşar.
Eğitim Düşünceleri
Düz Geçiş Tahmini (STE)
1-bit quantization, diferansiyal olmayan fonksiyonlar tanıttığından, eğitim, Düz Geçiş Tahmini (STE) adlı özel bir teknik gerektirir. Bu yaklaşım, diferansiyal olmayan noktaların üzerinden gradyanların akmasına izin verir. Python’da basitleştirilmiş bir uygulama:
class DüzGeçişTahmini(Function): @staticmethod def forward(ctx, input): return input.sign() @staticmethod def backward(ctx, grad_output): return grad_output
Karışık Hassasiyetli Eğitim
Eğitim sırasında stabiliteyi korumak için karışık hassasiyet kullanılır:
- Ağırlıklar ve Aktivasyonlar: 1-bit hassasiyetine quantize edilir.
- Gradyanlar ve Optimizer Durumları: Daha yüksek hassasiyette depolanır.
- Gizli Ağırlıklar: Eğitim sırasında doğru güncellemeleri sağlamak için yüksek hassasiyette tutulur.
Büyük Öğrenme Oranı Stratejisi
1-bit modellerle ilgili bir zorluk, küçük güncellemelerin ikili hale getirilmiş ağırlıkları etkilememesidir. Bunu gidermek için öğrenme oranı artırılır, bu da geleneksel yaklaşımlara kıyasla daha hızlı yakınsama ve daha iyi optimizasyonu sağlar.
Grup Quantization ve Normalizasyon
BitNet.cpp, model paralelliliğini artırmak için Grup Quantization ve Normalizasyon‘u tanıtır. Ağırlık matrisinin tamamı için parametre hesaplamak yerine, BitNet, ağırlıkları ve aktivasyonları birden fazla gruba (G) ayırır.
Bu gruplandırma, ek gruplararası iletişim olmadan verimli paralel işlemeyi sağlar, bu da büyük ölçekli model eğitimi ve çıkarımını mümkün kılar.
Uygulama Notları ve Optimizasyonlar
CPU Optimizasyonu
BitNet.cpp, en yüksek CPU performansını elde etmek için çeşitli düşük seviye optimizasyonları kullanır:
- Vektörleştirilmiş Operasyonlar: Bit manipülasyonlarını verimli bir şekilde gerçekleştirmek için SIMD talimatlarını kullanır.
- Önbellek Dostu Bellek Erişimi: Verileri önbellek kaçaklarını en aza indirmek için yapılandırır.
- Paralel İşleme: İş yükünü etkili bir şekilde birden fazla CPU çekirdeği arasında dağıtır.
BitNet’te quantization ve çıkarımın uygulanmasıyla ilgili bir ana fonksiyon örneği:
Desteklenen Modeller
BitNet.cpp’nin当前 sürümü, aşağıdaki Hugging Face’de bulunan 1-bit LLM’leri destekler:
- bitnet_b1_58-large (0,7M parametre)
- bitnet_b1_58-3B (3,3M parametre)
- Llama3-8B-1.58-100B-tokens (8,0M parametre)
Bu modeller, çerçevenin çıkarım yeteneklerini göstermek için halka açıktır. Resmi olarak Microsoft tarafından eğitilmemiş veya yayınlanmamış olsalar da, çerçevenin esnekliğini gösterirler.
Kurulum Kılavuzu
BitNet.cpp ile çalışmaya başlamak için aşağıdaki adımları takip edin:
Ön Koşullar
- Python >= 3.9
- CMake >= 3.22
- Clang >= 18
- Conda (tavsiye edilir)
Windows kullanıcıları için, Visual Studio aşağıdaki bileşenlerle kurulmalıdır:
- Masaüstü Geliştirme ile C++
- Windows için C++-CMake Araçları
- Windows için Git
- Windows için C++-Clang Derleyici
- LLVM Araç Seti için MS-Build Desteği (Clang)
Debian/Ubuntu kullanıcıları için otomatik bir kurulum betiği mevcuttur:
Adım Adım Kurulum
- Depoyu Klonlayın:
- Bağımlılıkları Kurun:
- Proje Oluşturun ve Hazırlayın: Modeli doğrudan Hugging Face’den indirebilir ve quantize edilmiş bir formata dönüştürebilirsiniz:
Alternatif olarak, modeli manuel olarak indirebilir ve dönüştürebilirsiniz:
BitNet.cpp ile Çıkarım
Çıkarım çalıştırmak için aşağıdaki komutu kullanın:
Açıklama:
-mmodel dosyası yolunu belirtir.-pgirdi metnini tanımlar.-ntahmin edilecek token sayısını ayarlar.-tempçıkarım sırasında örneklem rastgeleliğini (sıcaklık) ayarlar.
Çıktı Örneği
BitNet.cpp’nin Teknik Ayrıntıları
BitLinear Katmanı
BitNet.cpp, geleneksel Transformer mimarisini değiştirerek, standart matris çarpımlarını BitLinear operasyonlarıyla değiştirir. Bu yaklaşım, ağırlıkları ikili hale getirmeden önce sıfıra merkezler ve bunları ölçeklendirir, böylece yakınsama hatasını en aza indirir. Ana dönüşüm fonksiyonu şudur:
# 1-bit ağırlıkları için ikili hale getirme fonksiyonu def binarize_weights(W): alpha = W.mean() W_binarized = np.sign(W - alpha) return W_binarized
Ağırlıkların merkezlenmesi ve ölçeklenmesi, quantization hatasının minimumda kalmasını sağlar, böylece performansı korur.
Endüstri Etkisi
BitNet.cpp, LLM’lerin dağıtımı için önemli sonuçlar doğurabilir:
- Erişilebilirlik: LLM’lerin standart cihazlarda çalışmasını sağlar, böylece güçlü AI’ye erişimi demokratikleştirir.
- Maliyet Etkinliği: Pahalı GPU’lere olan ihtiyacı azaltır, bu da benimsemeyi daha erişilebilir hale getirir.
- Enerji Verimliliği: Standart CPU tabanlı çıkarım yoluyla enerji tasarrufu sağlar.
- Yenilik: Bulut bağımlılığı olmadan gerçek zamanlı dil çevirisi, ses asistanları ve gizlilik odaklı uygulamalar gibi cihaz上的 AI için yeni olanaklar sunar.
Çıkarımlar ve Gelecek Yönelim
1-bit LLM’ler vaat ediyor olsa da, çeşitli zorluklar vẫn mevcuttur. Bu zorluklar arasında çeşitli görevler için güçlü 1-bit modeller geliştirmek, 1-bit hesabını optimize etmek için donanımı geliştirmek ve geliştiricileri bu yeni paradigmayı benimsemeye teşvik etmek yer alır. Ayrıca, 1-bit quantization’u bilgisayar görüşü veya ses görevleri için keşfetmek gelecekteki bir yönü temsil eder.
Sonuç
Microsoft’un BitNet.cpp’yi piyasaya sürmesi önemli bir ilerlemeyi temsil eder. Standart CPU’larda verimli 1-bit çıkarım sağlayan BitNet.cpp, AI’nin erişilebilirliğini ve sürdürülebilirliğini sağlar. Bu çerçeve, daha taşınabilir ve maliyet etkin LLM’ler için zemin hazırlar, böylece cihaz上的 AI’nin sınırlarını genişletir.














