- HipKittens, AMD GPU’ların potansiyel performansını ortaya çıkarmak için tasarlanmış bir programlama primitifi koleksiyonu olup bellek erişimi, zamanlama ve önbellek yeniden kullanımını optimize eder
- AMD MI355X GPU, 256 işlem birimi ve 8 chiplet (XCD) yapısına sahiptir; büyük bir register dosyası ve ince taneli matris çekirdeği komutları sunar
- NVIDIA’dan farklı olarak AMD’de register yeniden tahsisi, asenkron matris komutları ve mbarrier bulunmadığından, wave specialization yerine 8-wave ping-pong ve 4-wave interleave zamanlaması daha etkilidir
- HipKittens, chiplet farkındalıklı (grid) zamanlama ile L2 ve LLC önbellek yerelliğini iyileştirerek GEMM ve Attention işlemlerinde daha yüksek bant genişliği ve TFLOPS artışı sağlar
- Bu yaklaşım, AMD GPU ekosistemindeki yazılım olgunluğu eksikliğini telafi eder ve çeşitli donanım temelli yapay zeka hesaplamalarının ölçeklenebilirliğini artıracak bir temel sunar
AMD CDNA GPU mimarisi ve performans özellikleri
- AMD MI355X GPU, 256 işlem birimi (CU) içerir ve her CU 4 SIMD’den oluşur
- Her SIMD, 64 iş parçacığından oluşan bir wave çalıştırır; bu da NVIDIA’nın 32 iş parçacıklı warp yapısıyla karşılaştırılır
- MI355X, B200’e kıyasla %70 seviyesinde SRAM’e (165KB) sahiptir ve asenkron matris çarpımı komutları, register yeniden tahsisi, tensor memory acceleration, mbarrier özelliklerinden yoksundur
- Buna karşılık, 2 kat daha büyük bir register dosyası ve %60 daha fazla işlemci sayısı (256 CU’ya karşı 160 SM) sunar
- Küçük ve ince taneli matris çekirdeği komutlarını destekler ve doğrudan global→shared memory yükleme (TMA benzeri) yeteneğine sahiptir
- AMD, 8 chiplet’ten (XCD) oluşan bir chiplet mimarisi kullanır; her XCD bağımsız bir L2 önbelleğe sahiptir ve üst seviyede LLC önbelleği bulunur
- Tabloya göre MI355X; BF16 2.5 PFLOPs, MXFP8 5.0 PFLOPs, MXFP6 10.1 PFLOPs hesaplama performansı ile 288GB bellek kapasitesi ve 8TB/s bant genişliği sunar
AMD için kernel tasarımındaki zorluklar
- Bellek erişimi optimizasyonu: HIPCC derleyici kısıtları ve kamuya açık olmayan I/O davranışları nedeniyle veri yerleşimi ve swizzle desenlerinin tasarımı önemlidir
- İşlemci içi zamanlama: AMD’de shared memory yerine register dosyası ve küçük matris komutlarından yararlanmak gerekir
- İşlemciler arası zamanlama: Chiplet tabanlı yapı nedeniyle önbellek seviyesindeki NUMA etkilerini dikkate alan iş dağıtımı gerekir
HipKittens’in bellek erişim desenleri
- HipKittens (HK), temel veri birimi olarak tile kullanır ve PyTorch benzeri işlem fonksiyonları sunar
- Tile; veri tipi, boyut ve düzen ile tanımlanır ve C++ template metaprogramming sayesinde çeşitli girdilere uyarlanır
- Register zamanlaması: HIPCC belirli register’ları MFMA girdisi olarak kullanamadığı için HK, açık register sabitleme özelliği sunar
- Geliştirici, en yüksek performanslı kernel’i yazabilmek için register’ları doğrudan belirleyebilir
- Register düzeni: AMD’de veri tipi ve matris biçimine göre düzen değiştiğinden tek bir swizzle deseni kullanılamaz
- Örneğin 16×16 bf16 tile ile 16×32 bf16 tile farklı swizzle desenleri gerektirir
- Komut fazı yapısı: AMD’nin shared memory komutları süreksiz faz gruplarına sahiptir ve iç dokümantasyonu yetersizdir
- HK bunun için tersine mühendislikle geliştirilmiş bir çözücü sunar
- Adres üretimi: AMD, asenkron HBM→shared memory yüklemeyi destekler ve HBM adres swizzle’ı ile optimizasyon yapar
İşlemci içi zamanlama: Wave desenleri
- Wave specialization, NVIDIA’da etkili olsa da AMD’de register yeniden tahsisi olmaması nedeniyle performansı düşürür
- Producer wave gereksiz register’ları işgal ederken, Consumer wave yetersiz register yüzünden spill yaşar
- HK’nin deney sonuçlarına göre wave specialization, AMD’de aritmetik yoğunluğun düşmesine ve bellek darboğazına yol açar
- Örnek: GEMM’de HK 0/8 yapılandırması 1605 TFLOPs, CUTLASS ise 1570 TFLOPs üretir
- Alternatif zamanlama desenleri
- 8-wave ping-pong: İki wave sırayla bellek/hesaplama kümelerini yürütür
- 4-wave interleave: Bir wave, bellek ve hesaplamayı ince taneli biçimde iç içe yürütür
- 8-wave yaklaşımı daha sade koda sahipken, 4-wave daha ince denetim sunar ancak kodu uzatır
- GEMM ve Attention Forward’da 8-wave, SoTA düzeyinde performans sağlar
İşlemciler arası zamanlama: Chiplet farkındalıklı yaklaşım
- AMD MI355X, 8 XCD chiplet’ine sahiptir ve her chiplet bağımsız bir L2 önbellek taşır
- Thread block’lar round-robin yöntemiyle chiplet’lere atandığı için grid sırası önbellek yeniden kullanım verimini doğrudan etkiler
- Basit bir row-major yerleşim, düşük L2 önbellek yeniden kullanımına neden olarak bant genişliği kaybı yaratır
- Örnek: L2 %55, LLC %95, 15.1 TB/s, 1113 TFLOPs
- HK, chiplet farkındalıklı (grid) zamanlama getirerek L2 ve LLC önbellek yerelliğini birlikte kullanır
- Thread block’ları çıktı matrisinin bitişik bölgeleri bazında gruplandırarak girdi verisinin yeniden kullanımını en üst düzeye çıkarır
Gerçek kernel örnekleri
- Attention Forward ve BF16 GEMM kernel’lerinin hot loop kısmı, HK’nin 8-wave ping-pong zamanlamasını kullanır
- Her döngüde Compute–Memory kümeleri sırayla çalıştırılır ve schedule barrier ile senkronize edilir
- Kod örneğinde mma_AtB, load, exp2, col_sum gibi HK işlemleri tekrar tekrar kullanılır
Sonuç: Çoklu silikonlu yapay zeka çağında AMD
- HipKittens, AMD CDNA3 ve CDNA4’te rekabetçi performans elde eder
- Üç temel unsur: optimize edilmiş bellek erişimi, AMD odaklı wave zamanlaması, chiplet farkındalıklı grid zamanlaması
- HK kernel’leri AMD tarafında en yüksek performansı elde ederken, NVIDIA Blackwell kernel’leriyle de rekabet edecek seviyeye ulaşır
- Yapay zeka hesaplamalarında çeşitlilik için AMD GPU erişilebilirliğinin artırılması gerekir; HipKittens bunun için temel bir yazılım zemini sunar
- AMD’nin HIPCC register zamanlamasını iyileştirmesi, gelecekte önemli bir gelişim alanı olarak öne çıkıyor
1 yorum
Hacker News görüşleri