DeepL'nin yeni nesil LLM'lerini eğit ve çıkarım için FP8 ile nasıl geliştirdik

DeepL, 544 adet NVIDIA H100 Tensor Core GPU içeren mevcut NVIDIA DGX SuperPOD sistemimizi devreye aldığında, sadece hesaplama gücünde büyük bir artış elde etmekle kalmadık. H100 ayrıca, GPU'nun FP8 hassasiyetinde matris çarpımları ve diğer tensör işlemlerini gerçekleştirmesini sağlayan yeni nesil Tensor Çekirdekleri aracılığıyla 8 bitlik kayan nokta (FP8) veri türleri için yerel destek sunar. Matris çarpımlarını FP8 ile hesaplayarak, Büyük Dil Modellerimizi (LLM'ler) eğitirken ve uygularken verimi artırabiliriz, çünkü modern LLM'lerdeki hesaplamaların çoğu matris çarpımı şeklindedir.

Hesaplamaları 16 bitlik hassasiyetten 8 bitlik hassasiyete geçirmek, DeepL'nin yeni nesil LLM'lerinin geliştirilmesinde büyük bir etki yarattı. Bu, dil uzmanları tarafından değerlendirildiğinde kalitede önemli iyileştirmeler sağlayan, çok daha fazla parametreye sahip çok daha büyük dil yapay zekası modelleri oluşturmamızı sağlar, ancak üretim çıkarımları için aynı gecikme aralığı içinde kalır. Bu, Avrupa dilleri için önceki modellerimizi 1,4 kat, İngilizce ve Japonca gibi daha karmaşık dil çifti için ise 1,7 kat daha iyi performans gösteren, ancak sonuçları aynı hızda etkili bir şekilde sunan çeviriler anlamına gelir. Bu aynı zamanda, modellerimizin kullanıcı deneyimi ödün vermeden daha fazla özellik ve işlevde daha fazla sayıda isteği işleyebileceği anlamına da gelir.

Diğer bir deyişle, FP8 eğitimi ve çıkarımları DeepL'in dil yapay zekası'nın ölçeklendirilmesinde merkezi bir rol oynamıştır.

Bu yazıda, FP8'i eğit ve çıkarım için uygulamak amacıyla çıktığımız yolculuğu anlatmak, bu başarının temelini oluşturan bazı araç ve teknikleri paylaşmak ve bu süreçte eğit ve çıkarım performansı terimleriyle elde ettiğimiz sonuçlar hakkında size bir fikir vermek istiyoruz. 

BF16 ve FP8 formatları arasındaki fark nedir?

BFloat16 (BF16) ve FP8 arasındaki farkın normal açıklaması, ikincisinin değerleri ifade etmek için yarısı kadar bit kullanmasıdır. BF16, her biri 8 bitlik iki baytta bulunan 16 pozisyonu etkin bir şekilde kullanır. FP8 sadece bir bayt kullanır. 

Kullanabileceğiniz bit sayısı, bilimsel gösterimde kayan noktalı sayıların mantis ve üs elemanlarını ne kadar hassas bir şekilde dağıtabileceğinizi belirler. BF16, 1 işaret biti, 8 üs biti ve 7 mantis bitine sahiptir. FP8, 1 işaret biti ve üs ile mantis arasında bölünmüş 7 bit ile yarısı kadar bit ile çalışır. Bu nedenle, BF16'ya göre daha küçük bir aralığa ve daha düşük bir hassasiyete sahiptir. Daha dar bir aralığı ve bu aralık içinde daha az sayıda sayıyı temsil edebilir.

Örnek olarak, dünyanın yaşını milyar yıl olarak (yaklaşık 4,543) temsil etmek istediğimizi varsayalım. BF16'da bunu tam olarak 0100000010010001 olarak gösterebiliriz.  

Bu sayıyı FP8 ile temsil etmeye ne dersiniz? Aslında iki FP8 formatı arasından seçim yapabilirsiniz: E4M3 ve E5M2. Buradaki harfler ve rakamlar, bitlerin üs (E) ve mantis (M) arasında dağıtılma şeklini temsil eder. Üssü için ne kadar çok bit ayırırsanız, tanımlayabileceğiniz sayı aralığı o kadar geniş olur ve mantisa için ne kadar çok bit ayırırsanız, o aralıkta tanımlayabileceğiniz sayı sayısı o kadar fazla olur. 

Hangi FP8 formatını seçerseniz seçin, 4,543'ü tam olarak temsil etmek aslında mümkün değildir. Nispeten daha yüksek hassasiyete sahip E4M3'ü seçerseniz, en yakın değeri (4,5) elde edebilirsiniz. E5M2'de ulaşabileceğiniz en yakın değer 5'tir.

Bu aralık ve hassasiyet eksikliğinin diğer tarafında ise, FP8 daha hızlı hesaplama sağlar ve BF16'ya kıyasla önemli ölçüde daha az bellek gerektirir. Bu, çıkarım için son derece değerlidir ve doğru yaklaşımla, eğitimi hızlandırmak için de son derece değerli olabilir. Bu, LLM eğitiminin gerçekte ne kadar geniş bir aralık ve hassasiyete ihtiyaç duyduğu sorusuna indirgeniyor. Dünyanın yaşını tam olarak temsil etmeniz mi gerekiyor? Yoksa 43 milyon yıl içinde olmak yeterince yakın mı? Eğer evrenin bütünüyle ilgileniyorsanız, muhtemelen ikinci seviyedeki bu hassasiyet sizi memnun edecektir. Sonuçta, yuvarlama hatası evrenin yaşının sadece yaklaşık %0,3'ünü temsil ediyor.

DeepL'nin yolculuğu, FP8'in yüksek kaliteli LLM eğitimi için gerekli olanı sağlayabildiğini kanıtlamaktadır ve bu, modellerimizi ne için eğiteceğimiz ve bunları pratikte nasıl kullanacağımız konusunda yeni olanaklar sunmuştur.

DeepL LLM'ler için ön eğitim

FP8 eğitimi ve çıkarımıyla çıktığımız yolculuk, LLM'lerimizin ön eğitimi ile başlar. Ön eğitimin ardından, modellerimizi belirli görevler için ince ayar yapar, büyük modelleri daha küçük modellere dönüştürür, pekiştirme öğrenimi yapar ve sahip olduğumuz çok sayıda GPU'yu kullanabilmek için bir dizi paralelleştirme stratejisi uygularız.

Karışık hassasiyetli eğit için FP8 formatını uygulama

Mevcut eğitim kodumuzu BF16'dan FP8'e NVIDIA Transformer Engine kullanarak geçirdik: NVIDIA tarafından sağlanan, dönüştürücü modelleri hızlandıran ve FP8 desteğini içeren bir eğitme kütüphanesi. Transformer Engine, karışık hassasiyetli eğitimi kolaylaştıran temel bileşenler sağlar, FP8 ve BF16 formatları arasındaki dönüştürmeyi sorunsuz bir şekilde yönetir ve ölçeklendirme faktörlerini işler.

NVIDIA tarafından önerildiği gibi Transformer Engine'in varsayılan ayarlarını kullanıyoruz. Eğit için ileri geçişte E4M3'ü, geri geçişte ise E5M2'yi kullanıyoruz. Bu, bir sonraki tokenin olasılık dağılımını tahmin etmek için daha yüksek hassasiyete sahip formatı kullandığımızı ve ardından, hassasiyetin daha az önemli olduğu durumlarda modeli güncellemek için gerekli gradyanları hesaplamak için daha düşük hassasiyete sahip ancak daha yüksek aralığa sahip formatı kullandığımızı anlamına gelir. Her iki formatı da en uygun olduğu görev için kullanıyoruz.

Aşağıdaki grafikte, E4M3 formatıyla temsil edilebilen tüm sayıları çizdik. Gördüğünüz gibi, bu sayılar sıfır civarında yoğunlaşıyor ve maksimum değeri 500'den az. Aslında, FP8 formatları için temsil edilebilir değerlerin sayısı çok kısa bir tabloda yazdırılabilir. Bu formatın eğitmede işe yaraması için püf noktası, bu değerlerin dağılımının farkında olmak ve bu dağılım çerçevesinde çalışmaktır. 

Bu, sınırlı aralığı aşmak ve taşma ve yetersizlik durumlarını önlemek için FP8 ağırlık tensörlerinin yanı sıra ek ölçeklendirme faktörlerinin depolanmasını içerir. Düşük hassasiyetli tensörlerle hesaplamalar yaparken, ölçeklendirme faktörlerini de dikkate almanız gerekir. Örneğin, iki tensörü çarparak, şu formülü kullanırsınız: (A_fp8 * A_scale) x (B_fp8 * B_scale), burada A_fp8 ve B_fp8 8 bitlik tensörler ve ölçekler 32 bitlik skalerlerdir. Bu işlemler için özel donanım desteği mevcuttur.

Eğit performansı için FP8 ve BF16 karşılaştırması

Eğitim performansı hakkında konuşurken, modelin mevcut hesaplama gücüyle ne kadar hızlı eğitilebileceğinden bahsediyoruz. FP8 ve BF16 arasındaki eğit performansını karşılaştırmak için, modelin gerçekleştirdiği saniye başına kayan nokta işlem sayısı (FLOPS) olan Model FLOPS kullanımı (MFU) değerini, sahip olduğunuz donanımla teknik olarak mümkün olan FLOPS değerinin yüzdesi olarak inceliyoruz.

Karşılaştırmamız için, teknik olarak FP8'e geçildiğinde daha fazla FLOPS elde edilebilmesine rağmen, BF16 formatında elde edilebilen FLOPS sayısını ortak payda olarak kullandık. Bu, BF16'dan FP8'e geçtiğinizde kullanılabilir işlem gücünün kullanımında elde edilen artışı ölçmemizi sağladı.

Aşağıdaki grafikte gösterildiği gibi, model eğitiminin mevcut hesaplama gücünü kullanma verimliliği, FP8 ile %44,6 MFU'dan %67 MFU'ya yükseldi ve model eğitimini %50 oranında etkili bir şekilde hızlandırdı.

Bu, başlı başına etkileyici bir performans artışıdır. Bunu başarmak için NVIDIA ile işbirliği yaparak Transformer Engine özelliklerinin kullanımını optimize ettik. Başka bir eğit düzenine dayanarak, 15 ay boyunca eğit performansını kademeli olarak %25 artırmayı başardık ve MFU'yu %80'e çıkardık.

LLM eğit kalitesi için FP8 ve BF16 karşılaştırması

FP8'in eğitim performansı terimlerinde elde ettiği kazanımlar gerçekten çok etkileyici. Ancak, DeepL olarak bizim için gerçekten önemli olan çıktı, eğit kalitesidir. Bu, BF16 hassasiyetiyle eğit kalitesiyle karşılaştırıldığında nasıl olur?

FP8'in sunduğu kaliteyi kontrol etmek için, modellerimizden birini her iki formatta da eğiterek test ettik. Bu, eğit kayıplarını ve aşağı akış kalitesini karşılaştırmamızı sağladı. 

Üç trilyon token üzerinde 1,5 milyarlık bir model eğittik ve ardından FP8 eğitiminin kalitesini BF16 ile karşılaştırdık. Buradaki temel ölçüt, modelin bir sonraki tokeni tahmin etme yeteneğini ifade eden eğit kaybıydı.

Aşağıdaki grafikte göreceğiniz gibi, FP8 çizgisinin BF16 çizgisinin hemen üzerinde seyretmesinden de anlaşılacağı üzere, BF16'nın FP8'e göre küçük bir üstünlüğü olduğunu tespit edebildik. Ancak, bu fark, her iki format için de bir adımdan diğerine eğitim kaybında meydana gelen çok daha geniş dalgalanmalar tarafından gölgelenmektedir ve her iki durumda da, zaman içinde eğitim kaybını en aza indirgemede aynı somut iyileştirmeyi görüyoruz.

FP8 ile BF16'nın aşağı akış eğit kalitesi karşılaştırması

Ardından, FP8 ve BF16'daki eğitimin pratik, aşağı akış uygulamalarında sağladığı kaliteyi test etmeye geçtik.

Bu durumda, modelin İngilizce ve Almanca ile çalışırken nasıl bir performans gösterdiğini test ettik. Bir dizideki bir sonraki tokeni tahmin ederken modelin yaşadığı belirsizliği ölçen doğrulama karmaşıklığını karşılaştırdık. Bir kez daha, zamanla şaşkınlığın azalacağı beklentisi vardır. Bu pratik senaryoda, FP8 eğitimi ile BF16'ya kıyasla kalitede herhangi bir bozulma tespit etmedik.

BF16'dan FP8'e geçişin net sonucu, modellerimizi daha hızlı, daha az bellek gereksinimi ile eğitebilmemiz ve eğitim kaybı ile karşılaştırılabilir doğrulama karmaşıklığı terimlerinde minimum düzeyde bir düşüşle aynı eğitim kalitesini elde edebilmemizdir. Bu, DeepL'in işlem gücünü en üst düzeyde kullanarak daha sofistike modeller oluşturup daha karmaşık görevleri yerine getirebileceği anlamına geliyor. LLM eğitmesiyle yapabileceklerimizin kapsamını önemli ölçüde genişletir.

FP8 eğitmesinden çıkarımlara

Yolculuğun bir sonraki aşaması, LLM'leri üretim çıkarımına hazırlamaktır. Burada destek konusunda ağır işi NVIDIA TensorRT-LLM üstleniyor. NVIDIA TensorRT-LLM, NVIDIA'nın ölçeklenebilir LLM çıkarımına yönelik çözümü olup FP8'i destekliyor. Modelinizin ağırlıklarını eğitiden alır ve çekirdek füzyonu, optimize edilmiş C++/CUDA kodu, KV önbellekleme ve sürekli uçuş sırasında toplu işleme gibi optimizasyon tekniklerini kullanarak modelin işlemlerini mümkün olduğunca hesaplama açısından verimli hale getirmek için bir motor oluşturur. 

Çıkarım için FP8'in avantajları

LLM'ler için çıkarım her zaman verim (bir zaman diliminde işlenebilen token sayısı) ve gecikme süresinin etkileşimini içerir. En iyi müşteri deneyimini sunmak için gecikmeyi kontrol etmek gerektiği açıktır. Ancak, iş hacmi DeepL için de büyük önem taşır, çünkü belirli bir zamanda işleyebileceğimiz istek sayısını ve dolayısıyla modelimizin pratikte yapabileceklerinin kapsamını belirler.

Verim arttıkça gecikme süresinin de artması kaçınılmazdır. Birden fazla isteği toplu olarak işleme, daha yüksek verim sağlar, ancak bunun bedeli olarak her bireysel isteğin gecikme süresi artar. Bu durum müşteri deneyimini potansiyel olarak etkileyebilir. Ancak, FP8 ile BF16'nın çıkarım performansı, bu dengelemeyi bizim lehimize önemli ölçüde değiştiriyor.

Aşağıdaki grafikte gösterildiği gibi, çoğu parti boyutu için FP8, BF16 ile aynı gecikme derecesinde iki kat daha fazla verim sağlayabilir. Kullanıcılarımız için en uygun deneyime denk gelen belirli bir gecikme bütçesi belirlediğimizde, bunu pratikte görebiliriz. Aslında, FP8, terimler açısından LLM'lerimizin etkin kapasitesini iki katına çıkarmıştır. 

Diğer bir deyişle, BF16'dan FP8'e geçiş, DeepL için daha güçlü ve sofistike LLM'ler geliştirmemizi sağlamanın ötesinde bir anlam taşıyor. Ayrıca, bu LLM'leri etkili bir şekilde uygulayabilmemiz, optimum müşteri deneyimleri sunabilmemiz ve dil yapay zekamızın etkisini geniş çapta ölçeklendirebilmemiz de garanti altına alınmıştır. Daha büyük modellerin daha hızlı eğitilmesini sağlıyoruz. Bu modeller, aynı gecikme parametreleri içinde çalışırken, iki kat daha fazla istek işleyebiliyor.

Sırada ne var? Kısa süre önce, hesaplama gücünde neredeyse katlanarak artış sağlayan NVIDIA DGX GB200 sistemleri ile yeni NVIDIA DGX SuperPOD'u kullanıma sunduk. Bizim için gerçekten ilginç olan, bu makinenin matris çarpımları gibi FP4 tensör işlemlerini yerel olarak destekleyebilen yeni nesil Tensor Çekirdekleri sunacak olmasıdır. İşte o zaman yolculuğumuz yeniden başlıyor. Eğit ve çıkarım konusunda tek bir baytla neler yapabileceğimizi görmek heyecan vericiydi. Bu alanı izleyerek yarım baytla neler yapabileceğinizi görün.


Yazarlar Hakkında

Markus Schnös, Araştırma HPC Mühendisi

Markus Schnös, DeepL'de HPC Mühendisi olarak çalışmakta ve LLM eğitiminin ve çıkarımının ölçeklendirilmesine odaklanmaktadır. Dağıtık eğit ve düşük hassasiyetli kayan nokta hesaplamalarına özel ilgi duymaktadır.

www.linkedin.com/in/markus-schnoes-349300185

https://github.com/Marks101

Fabian Joswig, Araştırma HPC Mühendisi

Fabian Joswig, DeepL'de araştırma mühendisi olarak çalışmaktadır ve makine öğrenimi, yüksek performanslı hesaplama ve teorik parçacık fiziği alanlarında deneyime sahiptir. Dünyanın en doğru çevirmen için yapay zeka modellerini ve altyapısını ölçeklendirmeye odaklanıyor.

https://www.linkedin.com/in/fabianjoswig/

https://github.com/fjosw

Paylaş