SON DAKİKA

Nvdia

NVIDIA GPU’larda CUTLASS 4.2 ile GEMM Kernel Otomatik Ayar Verimliliğini Artırma Yöntemleri

GEMM Kernel Seçimi ve Nvidia’nın Yeni Çözümü

Genel Matris Çarpımı (GEMM) kernel’ını belirli bir problem ve donanım için en iyi şekilde seçmek, önemli bir zorluktur. Bir GEMM kernel’inin performansı, derleme zamanı ve çalışma zamanı meta-parametrelerinin bir dizisine bağlıdır: CTA, warp ve talimat seviyesindeki dizi boyutları, kernel planlamaları, rasterizasyon stratejileri ve kümelenme boyutları gibi birçok faktör bu süreci etkiler.

Geleneksel yöntemler, en hızlı kernel’i bulmak için binlerce potansiyel kernel konfigürasyonu oluşturup derlemek ve sonrasında kapsamlı bir otomatik ayarlama süreci yürütmeyi içerir. Bu proses saatler sürebilir ve geliştiriciler için büyük bir darboğaz oluşturabilir. Bu nedenle, CUTLASS gibi çevrimiçi derlenmiş kütüphanelerde benimsenmesini zorlaştırır. Hızlı model derlemesinin kritik olduğu JIT derleme kütüphaneleri için bu sıkıntılar kullanıcıların karmaşık tuningleme süreçlerini atlayarak alt optimum kernel kullanmalarına neden olabilir.

NVIDIA Matmul Heuristics ile Tanışın

Bu yazıda, bu sorunu çözmek için geliştirilmiş NVIDIA Matmul Heuristics (nvMatmulHeuristics) adlı GPU kernel meta-parametre optimizasyon modülünden bahsedilecektir. Bu modül, belirli bir işlemin parametrelerini ve hedef donanım yeteneklerini analiz ederek maksimum performansı sağlamak için en iyi kernel konfigürasyonlarının küçük bir listesini oluşturur. Bu yazıda, örnek olarak CUTLASS 4.2 kullanılacaktır.

Heuristik Temelli CUTLASS Konfigürasyonu ve Otomatik Ayarlama

nvMatmulHeuristics’in CUTLASS ekosistemine entegrasyonu, kernel üretim ve ayarlama sürecini önemli ölçüde iyileştirir. Kullanıcılar, brute-force yöntemi yerine, yalnızca yüksek potansiyel konfigürasyonların küçük bir setini tahmin edebilirler.

Bu işlem aşağıdaki adımları içerir:

  1. Heuristik Tahmin: nvMatmulHeuristics, GEMM problem tanımı (şekil, veri türleri vb.), hedef arka uç (bu durumda CUTLASS) ve donanım özelliklerini tespit ederek, iç modellerine dayanarak umut verici kernel konfigürasyonlarından oluşan kısa bir liste oluşturur.
  2. Kernel Üretimi: Tahmin edilen konfigürasyonlar listesi, yalnızca bu küçük, alakalı kernel setini üreten CUTLASS Kütüphanesi’ne aktarılır. Bu sayede gereksiz binlerce varyantı derleme süresi önemli ölçüde kısalır.
  3. Otomatik Ayarlama: CUTLASS profilcisi, sadece çalıştırma parametrelerinin otomatik ayarlandığı aynı listeyi kullanarak, derlenmiş kernel’ler için nvMatmulHeuristics seçimlerine göre en iyi adayları hızlı bir şekilde bulur.

Bu yaklaşım, yüksek performanslı bir kernel bulmak için gereken toplam süreyi önemli ölçüde azaltabilir.

Kullanım Talimatları

CUTLASS içinde bu özelliği kullanmak için önce bir GEMM problemleri listesi hazırlamak gerekmektedir. Aşağıdaki örnek, tek bir FP16 GEMM içindir ve tnn terimi satır-ana, sütun-ana C/D’yi ifade eder.

[
{
     "m" : 4096,
     "n" : 4096,
     "k" : 4096,
     "batch_count" : 1,
     "layout" : "tnn",
     "dtype_a" : "f16",
     "dtype_b" : "f16",
     "dtype_c" : "f16",
     "dtype_acc" : "f32",
     "dtype_d" : "f16"
}
]

Daha sonra, hedef GPU’nuzla bir makinede CUTLASS’ı normal şekilde derleyin ve -DCUTLASS_LIBRARY_HEURISTICS_PROBLEMS_FILE=<path_to_your_problem_list.json> ve -DCUTLASS_LIBRARY_HEURISTICS_CONFIGS_PER_PROBLEM=N seçeneklerini sağlayın. Burada N, nvMatmulHeuristics’ın her GEMM için üreteceği konfigürasyon sayısını belirtir. Örneğin:

cmake ${SRC_DIR} 
    -DCUTLASS_NVCC_ARCHS=90a 
    -DCUTLASS_LIBRARY_HEURISTICS_PROBLEMS_FILE=<path_to_your_problem_list.json> 
    -DCUTLASS_LIBRARY_HEURISTICS_CONFIGS_PER_PROBLEM=8 
    -DCUTLASS_LIBRARY_HEURISTICS_TESTLIST_FILE=my_testlist_file.csv
    -DCMAKE_BUILD_TYPE=Release
...
...

make cutlass_profiler -j

cmake adımından sonra, çalıştırılması gereken tüm test durumlarını içeren bir CSV test listesi oluşturulacaktır. Bu liste, kendi otomatik ayarlama süreçleriniz için kullanılabilir veya cutlass_profiler ile bu CSV’yi kullanarak doğrudan yapılandırmaları çalıştırabilirsiniz:

cutlass_profiler --operation=Gemm --testlist-file=my_testlist_file.csv 
--profiling-iterations=0 --profiling-duration=50 --verification-enabled=false 
--output=<path_to_outfile>

Profilleme sonuçlarının tutarlı olabilmesi için kilitli saat hızlarıyla çalışmanız önerilir.

nvMatmulHeuristics Erken Erişimte

nvMatmulHeuristics, cuBLAS heuristiklerinin temel bir parçasıdır ve genel kullanım için erken erişimde mevcuttur. Entegre olduğu CUTLASS kütüphanesi ile birlikte sunduğu ana özellikler:

  • Hızlı analitik heuristikler ve otomatik GPU konfigürasyon algılama (örneğin, yeşil bağlam, MIG, grafiklerde CUDA, saat hızları)
  • CUTLASS ve diğer GEMM arka uçları desteği. Arka uç destek alanı, desteklenen CTA dizi şekilleri, split-k faktörleri vb. kısıtlanarak da değiştirilebilir.
  • Tüm Tensor Core tabanlı GEMM hassasiyetleri (FP4, FP8, FP16/FB16, TF32, INT8 ve daha fazlası) için Nvidia Ampere, Ada, Hopper ve (öncelikli) Blackwell GPU mimarileri desteği
  • Python ve C++ API’leri

Başlamak için aşağıdaki komutla nvMatmulHeuristics’i yükleyin:

pip install nvidia-matmul-heuristics

FP16 giriş/çıkış ve FP32 hesaplama (HSH) için tahmin edilen en iyi N GEMM konfigürasyonlarını sorgulayabilirsiniz:

from nvMatmulHeuristics import *

# Arayüzü yükle
nvmmh = NvMatmulHeuristicsInterface(NvMatmulHeuristicsTarget.CUTLASS3, 
                                    precision='HSH', 
                                    flags=NvMatmulHeuristicsFlags.PERF_MODEL_BASED_AUTO_TUNING)

# Donanım tanımlayıcı oluştur
# Donanım "Hiçbiri" seçilirse, sistemin GPU'su kullanılabilir
hw = nvmmh.createHardwareDescriptor()
nvmmh.setHardwarePredefinedGpu(hw, NvMatmulHeuristicsNvidiaGpu.H200_SXM)

# Dizi seçim
layout = NvMatmulHeuristicsMatmulLayout.NN_ROW_MAJOR

# Doğruluğu artırmak için dahili keşif setini yükle
assert nvmmh.loadInternalDiscoverySet(layout, hw)

# En iyi konfigürasyonları alın
configs = nvmmh.get_with_mnk(4000, 16, 32768, layout, 8, hw)

# Sonuçları yazdır
print(f"Bulunan {len(configs)} konfigürasyonlar:n")
for i, config in enumerate(sorted(configs, key=lambda d: d['runtime']), 1):
    print(f"Konfigürasyon {i}:")
    print(f"  Kernel: {config['kernel']}")
    print(f"  Tahmini çalışma süresi: {config['runtime'] * 1000:.6f} ms")

Aşağıda, tahmin edilen sekiz konfigürasyon yer alıyor ve bunlar, belirli bir GEMM problemi için en iyi performansı sunan CUTLASS kernel’lerini oluşturmanın ilk adımını oluşturuyor.

nvMatmulHeuristics Performansı

nvMatmulHeuristics tarafından önerilen birkaç adayı derlemek ve profilleme sürecini bu adaylar üzerinde yoğunlaştırarak, kapsamlı bir aramaya kıyasla çok daha hızlı bir şekilde yakın optimal performansa ulaşabilirsiniz.

Şekil 1, NVIDIA H100 SXM GPU üzerinde Llama 3 405B eğitim yükleri için bulunan GEMM’lerin geometrik ortalama performans skoru ile kapsamlı arama (1.0) arasında geçirilen toplam derleme ve profilleme süresini göstermektedir. Görüldüğü üzere, kapsamlı bir arama 700 dakikadan fazla sürerken, nvMatmulHeuristics kullanarak yalnızca 16 aday kernel seçimi, yaklaşık 150 dakikada %96 performans sunabilmektedir.

Aday sayısını artırdıkça, kullanıcılar kapsamlı bir arama ile elde edilen performansa yaklaşabilirken, derleme ve ayarlama sürelerinde büyük bir azalma elde etmiş olurlar. Bu, PyTorch gibi JIT derleme sürelerinin kritik olduğu ortamlarda yüksek performanslı kernel’leri bulmayı mümkün kılar.

Scatter plot showing the build time and achieved performance of nvMatmulHeuristics compared with an exhaustive baseline.
Şekil 1. nvMatmulHeuristics performansı, NVIDIA H100 SXM üzerindeki Llama 3 405B

Şekil 2 ise, NVIDIA B200 GPU üzerindeki bir DeepSeek-R1 671B eğitim yükünde benzer sonuçları göstermektedir. Performans, kapsamlı arama ile karşılaştırıldığında %99’a ulaşırken, derleme ve otomatik ayarlama süresinde 5 kat daha fazla hızlanma sağlanmıştır. Derleme süresi yalnızca birkaç kernel ile sınırlıdır, bu da JIT avantajını elde etmenizi sağlar.

Scatter plot showing build and achieved geomean speedup performance for nvMatmulHeuristics against a CUTLASS exhaustive baseline search. The experiment is conducted on a B200 with a fixed clock at 1530 MHz. The problem set used represents GEMMs from DeepSeek-R1 671B.
Şekil 2. nvMatmulHeuristics performansı, NVIDIA B200 üzerindeki DeepSeek-R1 675B

Sonuç

Bu sonuçlar, iyi bir heuristiğin otomatik ayarlama süreçlerini ve sistemin verimliliğini nasıl artırabileceğini göstermektedir. nvMatmulHeuristics, DL kütüphaneleri, derleyiciler ve kernel kütüphaneleri arasındaki üretkenliği artırarak yüksek performans elde etmenizi sağlar.

Başlamak için nvMatmulHeuristics’i indirin. Sorularınız varsa, NVIDIA Geliştirici Forumunda tartışmalara katılın veya Math-Libs-Feedback@nvidia.com adresine e-posta gönderin.

Teşekkürler

ÖzellikleCUTLASS OSS katkıcılarınave onların katkıları olmadan CUTLASS 4’ün mümkün olamayacağını belirtmek isteriz.

Kaynak

Nvdia Blog

Düşüncenizi Paylaşın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

İlgili Teknoloji Haberleri