- FSDP (Fully Sharded Data Parallel) ile QLoRA'nın (Quantization + Low-Rank Adaptation) birleştirildiği açık kaynak çalışma
- Sıradan bir masaüstü bilgisayar ve iki standart oyuncu GPU’su ile 70B boyutundaki bir dil modelini verimli biçimde ince ayarlamak mümkün
Arka plan
- Veri merkezi sınıfı donanımlar ile masaüstü bilgisayarlardaki oyuncu GPU’ları arasında performans farkı çok büyük olmamasına rağmen, fiyat farkı oldukça yüksek
- Oyuncu GPU’larının belleği daha az olduğu için büyük dil modellerini eğitmek zor
- Answer.AI, bu sorunu çözmek için düşük maliyetli oyuncu GPU’larıyla en iyi açık kaynak modelleri eğitmenin yolunu bulmayı amaçlıyor
QLoRA: tek GPU’da daha büyük modeller eğitmek
- QLoRA, kuantizasyon ile LoRA’nın birleşimidir; model ağırlıklarını 4 bite indirerek GPU bellek kullanımını azaltır.
- LoRA, büyük dil modelinin tamamını eğitmek yerine küçük adaptör matrisleri ekleyip onları eğiterek bellek kısıtlarını aşar.
- QLoRA, 65B modeli 48GB kartta eğitmeyi mümkün kılar; ancak 70B modeli 24GB oyuncu GPU’sunda eğitmek için hâlâ yeterli değildir.
FSDP: eğitimi birden fazla GPU’ya ölçeklendirmek
- FSDP (Fully Sharded Data Parallel), model parametrelerini birden fazla GPU’ya dağıtarak bunların eşzamanlı kullanılmasını sağlar.
- FSDP, DDP’nin (Distributed Data Parallel) performans avantajlarını, tek GPU’ya sığmayacak kadar büyük modellere de uygulamayı mümkün kılar.
- Örneğin, 70B (70 milyar parametre) kuantize edilmemiş bir model 140GB RAM kullanır (çünkü her parametre 16 bit, yani 2 bayt olarak depolanır); bu yüzden NVIDIA’nın H100 kartı bile (kart başına yaklaşık $40,000!) tek başına yeterli değildir. 80GB RAM gerekir
- Ancak FSDP ile 4 adet H100 GPU birleştirilerek toplam 320GB RAM elde edilebilir. Ve $150000 tasarruf edilir
FSDP ile QLoRA’yı birleştirmek
- Answer.AI, QLoRA ile model boyutunu küçültüp bunu FSDP ile birden fazla 24GB oyuncu kartına dağıtarak verimli eğitimi mümkün kılıyor.
- Bu sayede 70B modeli iki sıradan oyuncu GPU’suyla eğitmek mümkün hâle geliyor.
- 2023’ün sonlarında FSDP ile QLoRA’yı birleştirme fikrini tartıştıktan sonra gerekli sorunları çözdüler.
- Bu süreçte çeşitli teknikler ve kütüphaneler birlikte kullanıldı
- Kuantize edilmiş parametrelerin, modelin "Computation Type"ı ile aynı veri türünde saklanması
- Tüm gradyanı saklamak yerine model genelinde birden çok 'checkpoint'te aktivasyonları kaydedip, gerektiğinde ileri besleme adımlarını yeniden çalıştırarak gradyanları tekrar hesaplayan gradient checkpointing
- Kullanılmadığında ağırlıkları GPU yerine CPU RAM’de tutarak gerekli GPU belleğini ciddi ölçüde azaltan CPU offloading
- Flash Attention 2: bellek optimize edilmiş Cuda çekirdekleri kullanarak attention’ı verimli hesaplama
- HQQ (Half-Quadratic Quantization) keşfedilerek FSDP ile entegre edildi (GPTQ’ya göre 50 kat daha hızlı ve doğru)
FSDP/QLoRA nasıl kullanılır
- FSDP kullanmak için iki veya daha fazla GPU gerekir. (Runpod’da saatlik $0.6 karşılığında çift 3090 kutusu kullanılabilir)
- Transformers, PEFT, Bitsandbytes’ın (ve kullanılıyorsa HQQ’nun) en güncel sürümleri kurulur, ardından Answer.AI deposu klonlanır ve README izlenerek çalıştırılır.
- 2 adet 24GB kartta Alpaca’yı eğitmek için
python train.py --train_type qlora --dataset alpaca --batch_size 8 --gradient_accumulation_steps 2 --output_dir qlora_output --log_to wandb
- Hâlâ erken aşamada (alpha/preview)
- Birkaç hafta içinde benchmark sonuçlarının da paylaşılması planlanıyor
GN⁺ görüşü
- Bu yazı, AI ve makine öğrenimi alanında çalışanlar için oldukça ilgi çekici olacaktır. Özellikle büyük dil modellerini verimli biçimde eğitmek için yeni bir yöntem sunduğu için dikkat çekicidir.
- Bu teknik başarıyla yaygın şekilde kullanılabilirse, AI araştırma ve geliştirmedeki maliyet bariyerini ciddi ölçüde düşürebilir. Bu da küçük araştırma laboratuvarları veya bireysel geliştiriciler için büyük bir fırsat olabilir.
- Ancak bu yaklaşımın gerçekten yaygın biçimde benimsenmesi için kararlılık ve kullanım kolaylığı önemli unsurlar olacaktır. Şu anda hâlâ erken aşamada olduğu için, topluluğun testleri ve geri bildirimleriyle sistemin geliştirilmesi gerekir.
- Yeni bir teknolojiyi benimserken her zaman mevcut sistemlerle uyumluluk, performans ve maliyet gibi unsurlar dikkate alınmalıdır. Bu teknolojinin sağlayabileceği avantaj, büyük ölçekli model eğitiminin erişilebilirliğini artırmasıdır; ancak hâlâ erken aşamada olduğu için kararlılık ve destek açısından dezavantajları olabilir.
1 yorum
Hacker News görüşleri
Yazı harika ama "nibble" kelimesini kullanmak için pek çok fırsat varken hepsinin kaçırılmış olması üzücü.
4 bit ağırlık kullanan bir sistemle 70B modeli fine-tune etmenin ne kadar süreceğini; örneğin model boyutu, eğitim boyutu, eğitim maliyeti ve bu tekniğin beklenen kalite kaybını gösteren bir tablo olsa, bir tüketici olarak ilgimi çekerdi.
(-1,0,1) kodlamasının uygulanıp uygulanamayacağını merak ediyorum. Böyle bir model çıktığında, answer.ai’nin aynı tekniği kullanarak iki küçük GPU ile büyük bir modeli fine-tune edip edemeyeceğini ve ayrıca bir maliyet/fayda analizi görmek isterim.
Bu tür araştırmalar, bireysel kullanıcıların LLM pazarında rekabet edebilmesini sağlamada çok faydalı. "Sıfırdan Bire" kitabındaki fikirlerle de örtüşen harika bir çalışma.
NeurIPS verimlilik yarışmasında üst sıralardaki tüm katılımcıların QLoRA kullandığından bahsetmemişsiniz; bu, QLoRA’nın önemini ve faydasını gösteren iyi bir örnek.
"Açık kaynak" LLM’lerde gördüğüm en ilginç ve en yapıcı yaklaşım bu. Keşke akademi de bunu standart haline getirse.
Metal üzerinde hızlı eğitimin daha erken gelmesini isterdim. Şu an için Mac Studio, büyük modellerde çıkarım için çok daha ucuz ve yeterince hızlı, ama eğitim çözümleri neredeyse hiç yok.
Teknik yazımın kalitesi ve açıklığı mükemmel.
LLM (70B) ağırlıklarını kendi verimle yeniden eğitip eğitemeyeceğimi merak ediyorum.
Sınırlı donanım bütçesiyle LLM fine-tune edenler için bu çığır açıcı bir gelişme.
FSDP yerine neden DeepSpeed seçildiğini merak ediyorum.
Modeli fine-tune edebilir hale geldiğinizde, performans ayarı için kullandığınız araçlar olup olmadığını merak ediyorum.
Seyrekleştirmeyi hiç denediniz mi? Bununla daha az RAM kullanarak fine-tune yapmak mümkün olabilir gibi geliyor.