Önceki yazımızda, NVIDIA Grace Hopper üzerinde büyük dil modeli (LLM) eğitim iş akışlarının profilini çıkarmanın önemine değinmiş ve NVIDIA Nsight Systems kullanarak darboğazları analiz ettik. Ayrıca, NVIDIA GH200 Grace Hopper Superchip ile verimli eğitim süreçlerinin nasıl sağlandığını inceledik.
Profilleme, verimsizlikleri tanımlamada yardımcı olsa da, donanım sınırlamalarını aşma ve yapay zeka iş yüklerini etkili bir şekilde ölçeklendirme konusunda ileri düzey optimizasyon stratejileri gerekmektedir. Bu yazıda, CPU yükleme, Birleşik Bellek, Otomatik Karışık Hassasiyet ve FP8 eğitimi gibi teknikleri inceleyeceğiz. Bu yöntemler, performansı artırırken araştırmacıların LLM’lerle mümkün olanın sınırlarını zorlamasını sağlar.
Aktivasyonların CPU’ya Yüklenmesi
Büyük modellerle çalışırken, GPU belleğini etkili bir şekilde yönetmek son derece önemlidir. Bellek kısıtlamalarını aşmak için bir strateji, aktivasyonların CPU’ya yüklenmesidir. Bu teknik, model eğitimi veya çıkarımı sırasında ara aktivasyon tensörlerinin GPU belleğinden geçici olarak CPU belleğine aktarılmasını içerir. Bu bölüm, bu yaklaşımın avantajlarını ve dezavantajlarını ele alacaktır.
Aktivasyonların CPU’ya Yüklenmesini Anlamak
CPU’ya yükleme, daha büyük batch boyutlarını işlemek veya daha büyük modeller eğitmek için GPU belleğinde yer açılmasını sağlar. Aktivasyonların CPU’ya yüklenmesi, eğitim için kritik olan ileri ve geri geçişler gibi diğer işlemler için alan boşaltır. Kısaca, bu yöntem, sınırlı bellek kapasitesine sahip GPU’larda daha büyük modeller eğitmek için bir yol sunar.

Her ne kadar yükleme bellek kısıtlamaları olan ortamlarda faydalı olsa da, aşağıdaki olası dezavantajlarının da farkında olmak önemlidir:
- Artan senkronizasyon yükü: CPU ve GPU arasında veri hareketleri, veri tutarlılığını sağlamak için senkronizasyon yükü ekler.
- Düşük GPU kullanımı: Veri CPU ve GPU arasında sık sık hareket ettiğinde, GPU bazı dönemlerde boş kalabilir.
- CPU darboğazı: CPU kaynakları bir darboğaza dönüşebilir ya da CPU ve GPU arasındaki bant genişliği limitleri aşılabilir.
Llama 2 modelinin sekiz katmanlık aktivasyon yüklemesini etkinleştirmek için, başlatma komutunuzu şu şekilde değiştirin:
nsys profile ...
model.activations_checkpoint_granularity=null
...
+model.cpu_offloading=True
+model.cpu_offloading_num_layers=8
Aktivasyonların CPU’ya Yüklenmesi Uygulamada
Aktivasyonları CPU’ya yükleme, aşağıdaki etkileri gösterir:
- Artan CPU aktivitesi:
pt_autograd_0
vept_main_thread
gibi iş parçacıklarında belirgin bir artış görülür. Bu artış, CPU’nun yüklenen aktivasyonları yönetmek için aktif olduğunu gösterir.
- Düşük GPU bellek kullanımı: CUDA donanımındaki GPU bellek kullanımı azalmıştır, çünkü daha fazla veri geçici olarak CPU’da saklanmaktadır.
Artan senkronizasyon yükü: Şekil 2’deki zaman çizelgesi, GPU çekirdek yürütmesinde daha sık boşluklar göstermektedir (mavi çubuklar), bu da CPU ile GPU arasındaki koordinasyonun artışına bağlı olabilir.
Buradan elde edilen bazı önemli bulgular şunlardır:
- Aktivasyon yüklemesi CPU aktivitelerini artırmaktadır. Özellikle,
pt_autograd_0
vept_main_thread
yüksek bir aktivite sıklığı göstermektedir, bu da_CPU’nun yüklenen aktiviteleri yönetmekte aktif olduğunu gösterir.
- Şekil 3’teki zaman çizelgesi, kernel yürütmesindeki sık boşlukları göstermekte, bu da CPU ile GPU arasında artan senkronizasyona yol açmaktadır.
- CUDA donanımında önemli ölçüde azalmış GPU bellek kullanımı gözlemlenmiştir.
Bu etkiler, LLM eğitiminde CPU’yı yükleme olanağının temel ticaretlerini vurgulamaktadır. Aktivasyonları CPU’ya yüklemek, GPU bellek kısıtlamalarını hafifletirken, daha büyük modelleri veya daha büyük batch boyutlarını eğitme şansı sunar. Bununla birlikte, bu yüklemeler CPU üzerindeki yükü artırıp, CPU ve GPU arasında veri transferlerinde sık sık hareket etmeyi gerektirdiğinden, toplam eğitim hızı senkronizasyon yüklenmesi ve olası CPU darboğazları nedeniyle düşebilir.
Şekil 2 ve 3, GPU bellek kullanımındaki azalmayı ve CPU’dan gelen artan aktiviteyi net bir şekilde gösteriyor. Bu etkileşimleri anlamak, kaynak tahsisini optimize etmeyi ve LLM iş yüklerini ölçeklendirirken bellek verimliliği ile hesaplama performansı arasında en iyi dengeyi elde etmeyi hedefleyen pratiğe önemlidir.
NVIDIA Grace Hopper Üzerinde Birleşik Bellekten Yararlanma
Bu bölüm, temel donanım mimarisini ve bunun performansı nasıl etkileyebileceğini incelemektedir. Son bir deney olarak, aynı betiği Birleşik Bellek> (UM) kullanarak Grace Hopper platformunda çalıştırdık. UM, derin öğrenme iş yüklerini ölçeklendirirken çeşitli fırsatlar ve zorluklar sunmaktadır.
Birleşik Belleğin Genel Bakışı
UM, CPU ve GPU tarafından erişilebilen tek bir tutarlı bellek alanı sunarak bellek yönetimini basitleştirir ve potansiyel olarak performansı artırabilir. Geleneksel sistemlerde CPU ve GPU belleği ayrı olduğundan, bunlar arasında veri transferleri yapılması gerekmektedir. UM ile bu sınır bulanıklaşır ve CPU ile GPU aynı bellek alanına doğrudan erişebilir. Bunun birkaç avantajı bulunmaktadır:
- Basit bellek yönetimi: Geliştiriciler bellek ayırırken, nereye yerleştirileceğini açıkça belirtmek zorunda kalmazlar. Sistem, gerektiğinde veriyi iki bellek arasında otomatik olarak taşır.
- Otomatik veri taşınması: CPU GPU belleğindeki verilere eriştiğinde, sistem o veriyi CPU belleğine taşır. Aynı durum GPU’nun CPU belleğindeki verilere erişmesi için de geçerlidir.
UM, GPU’ya sığmayan çok büyük veri kümeleriyle çalışmayı kolaylaştırır. GPU, bellekten daha fazla veri kullanmaya çalıştığında, bellek hataları meydana gelebilir. UM sayesinde, veriler sistem belleğinden GPU’ya ve geriye ihtiyaç duyulduğunda sorunsuz bir şekilde transfer edilir.
UM’nin çalışmasını sağlamak için, Python betiğinizin başında NVIDIA RAPIDS Bellek Yöneticisi (RMM) ayarlayıcısını kullanabilirsiniz:
import rmm
from rmm.allocators.torch import rmm_torch_allocator
rmm.reinitialize(pool_allocator=True, managed_memory=True)
torch.cuda.memory.change_current_allocator(rmm_torch_allocator)
Bu kodu Python betiğinizde diğer tüm importlardan önce eklediğinizden emin olun.
Betik CLI üzerinden başlatılırken, model.peft.peft_scheme=none
olarak ayarlayın; bu, LoRA ince ayarını devre dışı bırakacak ve denetimli ince ayara (SFT) odaklanacaktır.
Şekil 4, LoRA ince ayarı (sol) ile denetimli ince ayar (sağ) arasındaki performansı karşılaştırmaktadır. Her iki deney de UM kullanarak gerçekleştirilmiş olsa da, davranış ve kaynak kullanımı açısından önemli farklılıklar göstermektedir.
LoRA İnce Ayarı
- Kesintisiz GPU kullanımı: LoRA ince ayar iş yükü, minimal bekleme süreleriyle tutarlı GPU kullanımını göstermektedir.
- Minimum bellek taşınması: Bellek işlemlerinin yalnızca %1.1’i UM ile ilgilidir; LoRA’nın parametre-verimli yaklaşımı verinin çoğunu GPU’da tutar ve bellek transfer yükünü azaltır.
Denetimli İnce Ayar
- Sık Bekleyen GPU Dönemleri: Tam ince ayar yükü sık sık boş GPU dönemleri göstermekte; bu, veri erişim darboğazlarını işaret etmektedir.
- Önemli Bellek Taşınması: Bellek işlemlerinin %9.8’i Birleşik Bellek etkinliği içerir ve yoğun Ana -> Cihaz transferleri gözlemlenir.
Birleşik Bellek kullanmak, daha büyük bir modelin tek bir GH200 Grace Hopper Superchip üzerine sığmasını sağladı, bu daha önce mümkün değildi. Şekil 4, LoRA’nın tutarlı GPU aktiviteleri ve minimum bellek transferleri gösterdiğini, oysa denetimli ince ayar iş akışının UM’nin daha büyük iş yüklerini nasıl daha az etkin bir şekilde yönettiğini vurguluyor.
Bununla birlikte, UM’nin kullanılması derin öğrenme iş akışlarını ölçeklendirmek için o kadar da basit değildir.
Daha büyük ölçekli eğitim için üç temel yaklaşım vardır: offloading olmadan çoklu GPU kullanmak, offloading ile daha az GPU kullanmak veya tek bir GPU ile offloading (uygun olması durumunda). Her bir yaklaşımın kendi ticaretleri bulunmaktadır:
- Offloading olmadan çoklu GPU kullanımı, çözüm süresini azaltabilir ancak daha az verimli olabilir.
- Daha az GPU ile offloading, kaynak kullanımını optimize edebilir ancak senkronizasyon ve bellek göçü yükünü artırabilir.
- Tek bir GPU kullanılması, yalnızca belirli uygulamalar için mümkündür ve çoğu durumda sık bellek göçleri nedeniyle daha uzun eğitim süreleri ile sonuçlanır.
Sonuç olarak, seçim belirli uygulamalara ve kısıtlamalara bağlıdır. Bazı uygulamalar için, verimlilik, eğitim süresini haftalar veya aylar içinde tamamlama gibi katı zaman bütçelerini karşılamak kadar öncelikli olmayabilir.
Ekstra Optimizasyonlar
Daha önce bahsedilen teknikler performansı önemli ölçüde artırabilirken, NVIDIA NeMo çerçevesinde daha fazla optimizasyon stratejisi bulunmaktadır. Bunlardan ikisi aşağıda ayrıntılı olarak verilmiştir.
Otomatik Karışık Hassasiyet
NeMo, karışık hassasiyet ile eğitim yapabilmeyi sağlamak için Otomatik Karışık Hassasiyet (AMP) desteği sunar; bu, minimal kod değişiklikleri ile yapılabilir. AMP’yi etkinleştirerek, hesaplamaları hızlandırabilir, bellek ayak izini azaltabilir ve verimliliği artırabilirsiniz.
AMP’yi etkinleştirmek için, NeMo yapılandırma dosyalarınızda veya eğitim betiklerinizde hassasiyet ayarlarını yapılandırın. Model veya eğitmen yapılandırmanızda hassasiyet veya AMP bayraklarına bakın. Bu, kodun bazı bölümlerinin daha düşük (ancak daha az hassas) veri türlerini (örneğin, bfloat16
veya float16
) kullanmasını sağlar.
FP8 Eğitimi
NeMo çerçevesi, bellek ayak izini önemli ölçüde azaltan ve hesaplamaları hızlandıran FP8 eğitimini desteklemek üzere tasarlanmıştır. Bu, bazı değişiklikler gerektirse de, FP8 genellikle performansta önemli bir artış sağlar. FP8 ile çalışırken, NVIDIA Hopper mimarisi tarafından sağlanan yeni Transformer Engine‘i kullanmanız önerilir.
Sonuç
LLM’lerin sürekli gelişen dünyasında, hesaplama kaynaklarına olan talepler sürekli artmaktadır ve performans darboğazlarını tanımlama ve çözme becerisi, araştırmacılar ve mühendisler için kritik bir yetkinlik haline gelmektedir. Bu yazıda ve NVIDIA Grace Hopper üzerinde LLM Eğitim İş Akışlarının Profilinde ele alınan teknikler, hiperparametrelerin stratejik ayarlanması, CPU yüklemesi ticaretinin dikkatli değerlendirilmesi ve Grace Hopper Superchip gibi son teknoloji donanımda Birleşik Bellek’in karmaşıklıkları ile ilgili olarak ciddikr olmuştur.
Bu teknikler, sürekli bir optimizasyon yolculuğunun başlangıç noktalarıdır. Detaylı profil çıkarma ve NVIDIA Nsight Systems gibi araçları kullanarak ve NVIDIA NeMo gibi çerçevelerin sunduğu gelişmiş özelliklerden yararlanarak, kaynakların tüm bölümlerinden yararlanma yeteneği kritik hale gelir.
Optimizasyon ve en iyi yazılımların kullanımı, daha büyük, daha karmaşık modelleri eğitme ve yapay zeka alanında olasılıkların sınırlarını zorlamaya olanak tanıyan yeni verimlilik ve performans seviyelerini açar.
Daha fazla bilgi için, Profile Large Language Model Trainings on the Grace Hopper Superchip GTC oturumunu izleyebilirsiniz.