Yapay zekadaki hızla gelişen teknolojiler, özellikle büyük dil modelleri (LLM’ler) alanında model boyutlarının katlanarak artmasına yol açmıştır. Bu modeller, dönüştürücü yetenekleriyle birçok sektörde yenilikçi çözümler sunmakta. Ancak, bu modellerin eğitiminde karşılaşılan artan karmaşıklık ve hesaplama ihtiyaçları, optimizasyon ve profiling konularında titiz bir yaklaşımı gerektiriyor.
Generatif AI ve LLM’lerle ilgili heyecana rağmen, bu sistemlerin alt yapısı ve optimizasyon stratejileri genellikle göz ardı ediliyor. Bu modellerin eğitimi, sadece muazzam hesaplama kaynakları gerektirmekle kalmaz; aynı zamanda hiperparametreleri ayarlama, verimli kod yürütme ve güçlü profil oluşturma mekanizmaları kullanma ihtiyacı da doğurur. Bu süreçlerin her biri, ölçeklenebilirlik ve maliyet etkinliği sağlamak için kritik öneme sahiptir.
NVIDIA GH200 Grace Hopper Süper Çipi, AI donanım tasarımında bir paradigma kayması temsil ediyor. Yenilikçi CPU-GPU entegrasyonu ve yüksek bant genişliğe sahip bellek mimarisi ile, büyük dil modellerinin eğitimine yönelik zorlukları aşmada devrim niteliğinde çözümler sunuyor. NVIDIA Hopper GPU’ları ile NVIDIA Grace CPU’larını NVLink-C2C bağlantıları aracılığıyla birleştirerek, bu yapı kayıpları minimize ediyor ve verimliliği maksimum seviyeye çıkarıyor. Bu yönüyle, gelecek nesil AI iş yükleri için oldukça cazip bir seçenek haline geliyor.
Bu yazı, NVIDIA Grace Hopper mimarisi üzerinde çalışan LLM eğitim iş akışlarının profilini çıkarma konusunda kritik unsurları araştırmakta. Ayrıca, performans analizi için güçlü bir araç olan NVIDIA Nsight Systems‘in bu süreçteki rolünü detaylandırıyor. Araştırmacılara ve mühendislik alanına yönelik olarak, LLM eğitim iş akışlarınızı optimize etme konusunda kapsamlı bir rehber sunuyor.
LLM’lerde Hızla Artan Büyüme
Büyük dil modellerinin evrimi, model boyutlarında benzeri görülmemiş bir artışla karakterize edilmiştir. GPT-2’den Llama 4’e kadar, parametre sayısındaki artış, bu modellerin çeşitli generatif AI görevlerinde olağanüstü başarılar elde etmesine olanak tanımıştır. Ancak, bu büyüme beraberinde ciddi hesaplama zorluklarını da getirmektedir.
Devasa boyuttaki bu modellerin eğitimi, genellikle binlerce GPU’nun paralel olarak çalışmasını gerektirir ve uzun süre devam eden hesaplama süreçleri sonrasında büyük miktarlarda kaynak tüketimi gerçekleştirebilir. Bu büyüklükteki modeller için donanım mimarisinde yenilikler gerekli hale gelmiştir. NVIDIA Hopper GPU’ları, LLM eğitiminde köşe taşı bir rol üstlenmektedir; çünkü karışık ve düşük hassasiyet hesaplamaları için optimize edilmiş gelişmiş Tensor Kolları ve dönüştürücü motorları içermektedir.
LLM İş Akışlarını Profil Oluşturmak için Ortamı Hazırlama
LLM modelinizi incelemek ve profil verilerini toplamak için uygun ortamı hazırlamak adına bugünden itibaren şu adımları takip edebilirsiniz:
1. NVIDIA NeMo İmajını Çek
Öncelikle, NVIDIA GH200 sistemleri için optimize edilmiş NVIDIA NeMo imajını çekin. Bu imaj, deneylerinizi verimli bir şekilde yürütmek için gerekli tüm bağımlılıkları içerir.
Singularity:
singularity pull nemo:25.02.sif docker://nvcr.io/nvidia/nemo:25.02.01
Docker:
docker pull nvcr.io/nvidia/nemo:25.02.01
2. Kaynak Tahsis Et
İnteraktif modda bir düğüm almak için salloc
komutunu kullanın. Bu örnek SLURM tabanlı bir ortamda geçerli:
salloc -n 1 -N 1 -p gh -t 2:00:00
3. Singularity Konteynerini Çalıştır
İnteraktif oturumunuzda NeMo gece yapımını başlatın.
Singularity:
singularity run --nv nemo:25.02.sif
Docker:
docker run nvcr.io/nvidia/nemo:25.02.01
4. Gerekli Bileşenleri İndir
Konteyner içinde aşağıdakileri indirin:
- Llama 2 7B modeli için ince ayar
databricks-dolly-15k
veri seti ile ince ayar- NeMo framework deneylerinizi çalıştırmak için gerekli
Profil Oluşturma ve İnce Ayar İş Akışları
Detaylı performans verilerini toplamak için nsys profile
komutunu belirli anahtarlarla kullanın:
- Profil süresini ayarlama:
nsys profile -y 360
profil süresini 360 saniye (6 dakika) olarak ayarlar. - Profilin başlangıcını geciktirme:
nsys profile -d 720
profilin başlayışını 720 saniye (12 dakika) geciktirir, bu da kurulum aşamalarını atlamanızı sağlar ve asıl yükümlülüklerinizi profilleyebilirsiniz. - CUDA kütüphanelerini izleme:
nsys profile --trace=cuda,cudnn,cublas
CUDA işlemlerini, cuDNN çekirdeklerini ve cuBLAS çağrılarını izler. - Çıktı dosyasını belirtme:
nsys profile -o sft_llama2_7B
çıktı dosyasınısft_llama2_7B.nsys-rep
olarak adlandırır.
NeMo framework konteynerini etkinleştirdikten ve çevresel değişkenleri ayarladıktan sonra, etkileşimli düğümdeki ince ayar işini başlatın:
nsys profile -y 360 -d 720 --trace=cuda,cudnn,cublas,osrt,nvtx --event-sample=system-wide -w true -c cudaProfilerApi -o sft_llama2_7B python ...
Profil Verilerini Analiz Etme
Profil oturumunu çalıştırdıktan sonra, elde edilen verileri analiz etme aşamasına geçiyoruz. Nsight Systems, uygulamanızın performans özelliklerini anlamak için zengin bir görsel arayüz sunar.
Öncelikle, oluşturulan .nsys-rep
dosyasını Grace Hopper makinesinden yerel çalışma masanıza kopyalayın. Bu dosyayı, Nsight Systems penceresine sürükleyip bırakarak yükleyin. Bu örnekte odaklanılan ana görünüm, çalışmanın sırasında CPU ve GPU etkinliğini detaylandıran zamanlama görünümüdür.
CPU Kullanımı
Şekil 2’de, Nsight Systems, Grace Hopper makinesindeki 72 CPU çekirdeğinin kullanımını görselleştiriyor. Çubuklar, her bir çekirdeğin zaman içindeki yoğunluğunu göstermekte ve tüm çekirdeklerde sürekli aktivite, dengeli bir iş yükü dağılımını işaret ediyor. Bu durum, eğitim işinizin tüm mevcut CPU kaynaklarından etkin bir şekilde yararlandığının göstergesidir.
İşlemler
CPU bölümünün altında, Nsight Systems etkin olan süreçleri ve thread’leri listelemekte. Burada en önemli süreç python3
, NeMo framework’ü çalıştıran ve ince ayar yükümlülüğünü yürüten süreç. Bu sürecin aktivitesini inceleyerek, performansı hakkında önemli bilgiler edinebilirsiniz.
CUDA Donanımı
CUDA donanımı bölümü, GPU etkinliğini detaylandırıyor. Burada hangi CUDA çekirdeklerinin çalıştığını görebileceksiniz. Ağırlıklı olarak sm90_xmma_gemm_bf16bf16_bf16f32
çekirdeği, yürütülen çekirdekler arasında yer almakta.
Çekirdek Analizi ve Bellek Kullanımı
CUDA HW [Tüm Akışlar] bölümünde, hangi çekirdeklerin GPU yürütme süresinde baskın olduğunu analiz edebilirsiniz:
Bu profil oturumunda, bir çekirdek öne çıkmakta: sm90_xmma_gemm_bf16f16_bf16f32
. Bu çekirdek, toplam GPU zamanının %49.9’unu kapsıyor. Bu isim, bfloat16
(BF16) hassasiyetini kullanan matris çarpımlarını gerçekleştirdiğini gösteriyor; bu durum derin öğrenmeden beklenen kritik bir işlem. Bu çekirdeğin baskınlığı, matris çarpma işlemlerinin iş akışınızın ana darboğazı olduğunu ortaya koyuyor.
Diğer çekirdekler, örneğin elementwise_kernel
ve vectorized_elementwise_kernel
, daha küçük GPU sürelerini kapsamakta.
Bellek Kullanımı
Bellek kullanımı bölümü, GPU zamanının sadece %0.5’inin işlemci ve GPU arasındaki bellek transferlerine ve işlemlerine atfedildiğini ortaya koyuyor. Bu düşük yüzde, PCIe veya NVLink gibi interconnect bant genişliği açısından önemli bir darboğaz olmadığını gösteriyor. Ancak, bu gözlem yalnızca interconnect bant genişliği ile ilgili olup, çekirdeklerin kendilerinin bellek bant genişliği açısından kısıtlı olduğu anlamına gelmemektedir. Verilerin erişim şekline göre, GPU’nun iç belleği hala sınırlı olabilir.
Bu profil verileri temelinde, interconnect bant genişliğinin bir engel olmadığı ve iş akışının esasen hesaplama odaklı olduğu sonucuna varılabilir.
Hesaplama ve Bellek Kısıtlı Süreçler
Bir süreç hesaplama kısıtlı olarak nitelendirildiğinde, performansının esas olarak işlemcinin (CPU veya GPU) hızıyla sınırlı olduğu kestirilir. Bu durumda, sm90_xmma_gemm_bf16f16_bf16f32
çekirdeğinin baskınlığı, iş akışının çoğunu GPU üzerinde hesaplama gerektiren matris çarpımlarını gerçekleştirmesiyle geçirmekte olduğunu göstermektedir.
Bir süreç bellek kısıtlı olduğunda ise, performansı esas olarak bellek erişim hızına (veri okuma ve yazma) göre sınırlanmakta, bu da bellek içindeki kopyalama algoritmalarını veya sıklıkla bellek aramalarını örnek verebilir.
Ana Thread Analizi
GPU çekirdekleri ve bellek kullanımının genel görünümünden, ince ayar iş akışımızı koordine eden ana thread olan pt_main_thread
aktivitesine geçiyoruz. Bu thread veri yükleme, çekirdek başlatma ve sistemin farklı bileşenleri arasındaki iletişimden sorumludur.
Genel GPU Etkinliği
Zaman çizelgesinin en üst alanındaki belirgin yeşil çubuk, bu thread tarafından başlatılan GPU etkinliğini göstermekte. Genel olarak yüksek bir kullanım gözlemlense de, gri alanların bulunması, GPU’nun bekleme sürelerine dikkat çekiyor. Bu boşluklar çeşitli kaynaklardan kaynaklanabilir:
- CPU’daki veri işleme gecikmeleri nedeniyle GPU’nun yeni iş beklemesi.
- CPU thread’leri ile GPU çekirdekleri arasındaki senkronizasyon sorunları, böylelikle GPU’nun düşük kullanımı.
- Hesaplama ve iletişim arasındaki yetersiz örtüşme, bu durumda veri transferleri sırasında GPU’nun beklemeleri.
CUDA Bellek Transferleri
Zaman çizelgesindeki turuncu çubuklar, CPU ve GPU arasındaki CUDA bellek transferlerini temsil ediyor. İyi tasarlanmış derin öğrenme iş akışları için, bu transferlerin sık meydana geldiği görünmektedir; bu durum, verilerin sürekli olarak CPU ve GPU arasında taşındığını gösteriyor. Bu sık hareket, toplam performansı düşürebilir ve eğitimi yavaşlatabilir. Veri yerleşimini optimize etmek, bu transferleri asgariye indirerek verimliliği artırabilir.
Otomatik Türev Akışının Görselleştirme Süreci
pt_autograd_0
thread’i, PyTorch otomatik türev motorunun ana bileşenlerinden biridir. Bu motor, geri yayılım sırasında gradyan hesaplamaları için otomatik türev alma işlemlerini yürütmektedir.
Bu thread’in aktivitesini Nsight Systems içindeki analiz, GPU ve bellek kullanım desenlerini, senkronizasyon olaylarını ve gradyan hesaplamalarına bağlı ötelemeleri daha iyi anlamanıza yardımcı olur.
Zaman Çizelgesinin Renkleri ve Aktiviteleri
Zaman çizelgesinde farklı renkler ve aktiviteler, değerli bilgiler içermektedir:
- Yeşil bölgeler: Otomatik türev motorunda aktif hesaplama veya yürütmeyi temsil eder. Bu bölümler, gradyan hesaplamalarına ilişkin hesaplamalar yapıldığı dönemleri gösterir.
- kahverengi kesikli bölgeler: Thread’in kesilmesi ya da kaynaklar için bekleme sürelerine işaret eder. Bu kesintiler, gerek daha yüksek öncelikli görevlerden, gerekse kaynak çekişmelerinden dolayı thread’in yürütülmesinin durmasına neden oluyor olabilir.
pthread_cond_wait
blokları: Uygulama thread’lerinin bir koşul değişkeninin işaretlenmesini beklediği durumları temsil eder. Bu bloklar genellikle CPU’nun GPU’da çalışan görevlerin bitmesini beklediği anlarda gözlemlenir. Bu, optimizasyon için kritik bir gözlem.
Senkronizasyonu Optimize Etme
Bekleme sürelerini anlamak, genel performansı optimize etme konusunda önemlidir. Bu pthread_cond_wait
duraklamalarının azaltılması, CPU ve GPU görevleri arasındaki daha iyi senkronizasyon sağlayarak verimliliği artırabilir. Olası stratejiler şunlardır:
- Hesaplama ve iletişimi örtüşen şekilde yürütme: Senkronizasyon noktalarını azaltarak hesaplama ve veri transferini eş zamanlı yürütmek.
- Çekirdek başlatma parametrelerini optimize etme: Çekirdek başlatma için parametrelerin doğru ayarlandığından emin olun, bu durum CPU üst yükünü azaltabilir.
- Bağımlılıkları analiz etme: Farklı işlemler arasındaki bağımlılıkları inceleyerek gereksiz gecikmelere neden olabilecek herhangi bir darboğazı tespit etme.
Sonuç
Bu yazı, LLM eğitim iş akışlarının optimizasyonunda profil oluşturmanın kritik rolüne ışık tuttu. NVIDIA Nsight Systems profil oluşturma tekniklerine ilişkin detaylı bir bakış sundu; bu, sistem performansınızı incelemek için gerekli bilgileri sağlamaktadır. CPU kullanımından GPU çekirdek etkinliğine ve bellek kullanımına kadar çok yönlü çözümlemelerde bulunduk.
Ayrıca senkronizasyon gecikmeleri ve boş GPU dönemleri gibi olası darboğazları analiz ettik ve veri yükleme ve hesaplama süreçlerini optimize etme stratejilerini vurguladık.
Profil kapsamı, verimsizlikleri tespit etmek için gereklidir; ancak bu yalnızca bir parça. Gelişmiş optimizasyon teknikleri, CPU dışlama, Unified Memory, Otomatik Karışık Hassasiyet (AMP) ve FP8 eğitimi daha ileri düzeyde performans ve ölçeklenebilirlik için başka alanlar sunmaktadır. Bu yöntemler sadece donanım sınırlamalarını aşmakla kalmaz, aynı zamanda araştırmacıların LLM’lerin ulaşabileceği sınırları zorlamalarına olanak tanır.
Daha fazla bilgi edinmek için, GTC oturumunu Grace Hopper Süper Çipi üzerinde Büyük Dil Model Eğitimlerini Profil Olusturma talep üzerine izleyebilirsiniz.
Daha derin bir araştırma için NVIDIA Grace Hopper’da LLM Eğitimine Yönelik Gelişmiş Optimizasyon Stratejileri‘ne göz atın. İlgili yazı, nasıl Unified Memory bellek yönetimini basitleştirirken, CPU dışlama‘nın GPU bellek kısıtlamalarını nasıl yönettiğini ve AMP ve FP8 eğitimi gibi hassasiyet tekniklerinin nasıl yeni verimlilik seviyeleri sağlayabileceğini araştırıyor.