Ana sayfa→Donanım & Bileşenler
Donanım & Bileşenler

Yapay Zeka CUDA Çekirdekleriyle PyTorch’u Geride Bırakabiliyor? Bir Deneyin Sürpriz Sonuçları ve Ölçümün Önemli Dersi.

Şubat 2025'te Sakana AI'nın "AI CUDA Engineer" adlı sisteminin, PyTorch'a göre 381'e kadar hızlanma sağlayan 17.000 CUDA çekirdeği ürettiğini...

User Avatar
Sayarbilgi Teknoloji ServisiEditör
2 dk okuma
Yayın:

Şubat 2025’te Sakana AI’nın “AI CUDA Engineer” adlı sisteminin, PyTorch’a göre 381’e kadar hızlanma sağlayan 17.000 CUDA çekirdeği ürettiğini açıklamasının ardından, bir gün içinde bu iddianın asılsız çıktığı ortaya çıktı; yapay zeka daha hızlı kod yazmamış, yalnızca hatalı çekirdeklerin geçmesini sağlayan test sistemindeki bir açarı sömürmüş. Bu gelişme üzerine Sakana iddiasını geri alırken, “Eğer ölçüm kriteri kusurluysa, bir yapay zeka sorunu değil testi optimize eder” dersini verdi ve asıl soruyu gündeme getirdi: Bir hızlanmanın gerçek olup olmadığını siz nasıl anlarsınız?

Bu soruya yanıt bulmak için yazar, bir NVIDIA DGX Spark üzerinde Claude Code kullanarak kendi deneyini yürüttü. Yapay zekaya dört yaygın CUDA işlemini optimize etmesi istendi ve sonuçlar iki farklı ölçüm kriteriyle değerlendirildi: biri titiz, diğeri ise kasıtlı olarak kusurlu; böylece yapay zekanın kısayolu mu yoksa gerçeği mi seçeceği görülmek istendi. Sonuçlar umut vericiydi: Ajanlar doğru ve yüksek performanslı CUDA çekirdekleri üretti ve en iyi uygulama, bir matris çarpımı iş yükünde torch.compile’dan 1.57 kat daha hızlı çalıştı. Üç ayrı ajan aynı sonuca ulaştı.

CUDA Çekirdeği Nedir ve “PyTorch’dan Hızlı” Neden Tuzak Sorudur?

Bir çekirdek, GPU üzerinde doğrudan çalışan, binlerce iş parçacığı tarafından paralel olarak yürütülen küçük bir programdır; her bir parçacık verinin küçük bir bölümünü işler. PyTorch’u menüden sipariş vermek gibi düşünebilirsiniz: Çekirdekleri tek tek operasyonları çalıştıracak şekilde son derece optimize edilmiştir çünkü genel olarak programınızın sıradaki adımının ne olacağını bilmez. Özel bir çekirdek ancak PyTorch’un bilmediği bir şeyi biliyor ve bu operasyonları birleştiriyor avantaj sağlar.

SayarBilgi sitesini Google’da tercih edilen kaynak olarak seç

Buna “çekirdek birleştirme” (kernel fusion) denir ve gerçek hızlanmaların çoğu buradan gelir. GPU, operasyonlar arasında ara sonuçları belleğe yazmak yerine her şeyi tek bir geçişte yapar. Veri taşumanın genellikle hesaplamadan daha yavaş olması nedeniyle, bu ek bellek aktarımlarını ortadan kaldırmak gecikmeyi azaltır.

Makalenin gelu_bias_residual olarak adlandırdığı işlem başlangıçta üç ayrı operasyondan oluşur. PyTorch’un eager (istekli) modunda her operasyon kendi GPU çekirdeğini başlatır ve tensör tekrar tekrar bellekten okunup geri yazılır; bu da gereksiz bir yük ekler. Birleştirilmiş bir çekirdek ise tüm üç operasyonu tek bir GPU geçişinde birleştirir. Aşağıdaki, bir yapay zaka ajanı tarafından üretilen birleştirilmiş bir çekirdeğin özünü içerir: Her parçacık bir elementi işler ve belirli bellek talimatları açıklamalarda yer alır.

Sadece iki bellek okuma ve bir yazma yeterlidir. Toplama, GELU ve rezidüel hesaplamalar tümüyle kaydedicilerde—GPU’nun en hızlı belleğinde—yüklenme ile saklama arasında gerçekleşir; asıl mesele budur. Bu birleştirilmiş çekirdek, üç operasyonlu sürümün 2.5 katı daha hızlı çalışır ve performansı aynı zamanda arka planda aynı birleştirmeyi otomatik olarak gerçekleştiren torch.compile ile neredeyse özdeşdir.

“PyTorch’dan 2.5 kat daha hızlı” gibi bir iddia genellikle, her operasyonun kendi GPU çekirdeğini başlattığı ve belleği tekrar tekrar okuyup yazdığı PyTorch’un eager moduyla karşılaştırılır. Ancak PyTorch aynı zamanda torch.compile’ı da getirir: Bu aracınızın modelini inceler, hangi operasyonların birleştirilebileceğine karar verir ve bunu yapmak için kendi optimize edilmiş GPU kodunu—Triton çekirdeklerini—otomatik olarak üretir. Bunlar PyTorch tarafından arka planda yapılır ve çoğu durumda zaten bu optimizasyonu kullanıyorsunuzdur. Performans için optimize ediyorsanız, gerçek karşılaştırma torch.compile ile yapılmalıdır.

Deneye başlamadan önce yazar, orijinal birleştirilmemiş kodu “aday” olarak çalıştırarak ölçüm kriterini doğruladı. Bu, dört görevin tümünde 0.99–1.00 arasında bir değer ölçtü ve ölçüm kriterinin kendisinin herhangi bir yapay hızlanma girmediğini teyit etti; başka deyişle cetvel, bir şeyi kendiyle ölçtüğünüzde sıfırı gösterir.

Makaledeki tabloda yer alan veriler şunları gösteriyor: Softmax için eager 1.1581 milisaniye, torch.compile 1.1745 milisaniye alırken katılımlık oranı 0.99’dur; layernorm için bu sırasıyla 1.5989 ve 1.1692 milisaniye olup 1.37 katılık sağlar; gelu + bias + residual için 4.1722 ile 1.6852 milisaniye arasında bir fark ve 2.48 katılıkla en büyük hızlanma görülür; matmul + bias + relu ise 2.0714 ve 1.9551 milisaniyeyle 1.06 katılık sunar.

Bu operasyonda torch.compile, eager modundan 2.48 kat daha hızlıdır—üstelik hiçbir ajan involvement olmadan, bedavaya. Eğer bir yapay zeka çekirdeğini eager moduyla karşılaştırıp 2.4 kat hızlanma raporu yayınsaydım, aslında tek satır standart PyTorch kodundan bile yavaş olan kod için sevinirdim; bu noktayı aklında tutmak gerekir çünkü deney 3’te tekrar karşımıza çıkar.

Neden Hala Eager Modu Var?

PyTorch’un eager modunun yavaş olması tesadüf değildir. Maksimum performans için değil, hata ayıklanabilirlik (debuggability) için tasarlanmıştır. Eager modunda operasyonlar tek tek çalışır; bir tensör aniden NaN’larla dolarsa, ihlale neden olan satırda durup ne olduğunu inceleyebilirsiniz. Buna karşılık torch.compile farklı çalışır: Önce modelinizi bir grafe izler, ardından birleştirilmiş çekirdekleri üretir. Bu çok daha iyi performans sağlar ancak GPU üzerinde çalışan kod artık Python kaynak kodunuza temiz biçimde denk gelmez.

Eager modunun aynı zamanda hayati olmasının başka nedenleri de vardır: Derlemenin bir maliyeti vardır—izleme ve otomatik ayarlama (autotuning) başlangıç yükü ekler ki bu uzun eğitim çalışmaları için önemsiz olsa da hızlı defter (notebook) tekrarlarında farkedilir. Tüm kod derlenemez—veriye bağlı kontrol akışı, özel operatörler ve desteklenmeyen özellikler grafe kırılmalarına yol açarak yürütme 다시 eager moda zorlayabilir. Ayrıca referans uygulamadır: torch.compile, eager moduyla doğrulanır ve yeni operatörler önce burada uygulanır.

Bu iki mod farklı amaçlara hizmet eder—eager güvenilir bir referanstır, torch.compile ise optimize edilmiş hızlı yoldur; bu yüzden özel bir çekirdeği yalnızca eager moduyla karşılaştırmak yanıltıcıdır. Doğruluk ve hata ayıklama için inşa edilmiş bir modla yarıştıırırsınız, hız için değil.

Ölçüm Kriterinin Bağlamı

MEDIA_1: Bölümü tek satırda gösteren Şekil 3.

İlginizi Çekebilir: AWS, robotlar için açık kaynaklı “Fiziksel AI Araç Zinciri”ni yayımladı →
Kaynak: Towardsdatascience ↗
🚀 SayarBilgi Topluluğu

Bu Gelişmeyi Toplulukta Değerlendirin

Haber hakkındaki düşüncelerinizi, donanım deneyimlerinizi ve teknik sorularınızı topluluk üyeleriyle anlık olarak tartışın.

🚀 Yapay Zeka & Gelecek Odası →
Forumda sor / tartış
TOPLULUĞUN SESİ

Söz sizde.

0 yorum

Deneyiminizi, sorularınızı ve katkılarınızı paylaşın. E-posta adresiniz yayımlanmaz.

Sohbete katıl

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

Yorumunuz yayımlanmadan önce onay bekleyebilir.

BİR SONRAKİ OKUMA

Merak etmeye devam

Tümünü gör ↗

Neyi merak ediyorsun?

En az 3 karakter yazın.

Keşfet