NVIDIA, CUDA’ya yerel Python desteği ekledi
(thenewstack.io)- CUDA, C/C++ merkezli ekosistemden çıkarak Python geliştiricilerinin NVIDIA GPU hesaplamayı daha doğrudan ele alabileceği yönde genişliyor
- Yeni destek basit bir binding’den ibaret değil; CUDA araç setinin geneline Python arayüzleri ve betikleme akışlarını entegre etme girişimi
- CUDA Python yığını; temel binding’leri, çalışma zamanı derleyicisini, cuPyNumeric’i, CUDA Core’u, NVMath Python’ı, profiler’ları ve kod analiz araçlarını kapsıyor
- NVIDIA, JIT derleme ve mevcut C++ koduyla bağlantı kurmayı kullanarak Python üretkenliğini artırırken performans farkını küçük tutmayı hedefliyor
- CuTile arayüzü, Python geliştiricilerinin GPU işlerini thread’lerden ziyade dizi ve tile düzeyinde anlamasını ve hata ayıklamasını kolaylaştıran bir model
CUDA’ya gelen yerel Python
- Python, GitHub’ın 2024 açık kaynak anketine göre JavaScript’i geride bırakarak dünyanın en popüler programlama dili oldu
- NVIDIA’nın CUDA yazılım araç setinde yıllardır yerel Python desteği yoktu; ancak GTC’de yerel destek ve tam entegrasyon duyuruldu
- Geliştiriciler, NVIDIA GPU’larında çalışan algoritmik hesaplamaları doğrudan Python ile yazabilecek
- CUDA mimarı Stephen Jones, CUDA yığınına “accelerated Python”ı birinci sınıf destek olarak getirmek için çalıştıklarını söyledi
- Yeni yönelim, C’yi Python söz dizimine taşımak değil; Python geliştiricileri için doğal hissettiren CUDA Python oluşturmak
Python geliştirici tabanına doğru genişleme
- CUDA daha önce C++ veya Fortran bilgisi gerektiriyordu; bazı Python araçları vardı ancak yerel destek değildi
- Yerel Python desteği, CUDA geliştirici araçlarını milyonlarca Python geliştiricisine açıyor
- The Futurum Group’a göre CUDA kullanıcı sayısı 2020’de 2 milyondan 2023’te 4 milyona çıktı
- Python hızla büyüyen bir dil ve NVIDIA, Hindistan ve Brezilya gibi gelişmekte olan ülkelerdeki Python geliştiricilerine de erişebilir hale geliyor
- NVIDIA GPU’larının önemli bir kısmı ABD ve Avrupa’da olsa da Hindistan’daki telekom ve altyapı şirketleri, gelecekte işletilecek büyük ölçekli GPU kurulumları inşa ediyor
- NVIDIA, programcıları bünyesine çekmeye yoğun çaba harcıyor ve Rust ile Julia dahil daha fazla programlama dilini desteklemeyi hedefliyor
Pythonic CUDA yığınının bileşenleri
- CUDA; kütüphaneler, SDK’lar, derleyiciler, host runtime, araçlar, önceden paketlenmiş yazılımlar ve algoritmalar içeriyor
- NVIDIA, Pythonic CUDA stack genelinde bileşenler ekledi
- Temel hedef, Python’dan çıkmadan GPU hızlandırması sağlamak
- Jones’a göre CUDA Python, yalnızca kernel sunmakla sınırlı kalmamalı; tüm yığınla birlikte akıcı bir yürütme akışına ihtiyaç var
- Kernel yazıp PyTorch’a koyabilmek gerekiyor
- Pythonic kütüphaneler ve diğer bileşenler de çağrılabilmeli
- Derleyici katmanı fiilen JIT derleme merkezli kuruluyor ve GPU yığınının bağımlılık ağacını büyük ölçüde azaltıyor
- Katmanlar arası birlikte çalışabilirlik, Python’ı uçtan uca kullanırken üretkenlik artışı için önemli
CUDA Core, cuPyNumeric, NVMath Python
- NVIDIA başlangıçta çalışma zamanı derleyicisini de içeren temel Python binding’leri ve Python kütüphaneleri oluşturdu
- cuPyNumeric, Python’da yaygın kullanılan hesaplama kütüphanesi NumPy için drop-in bir alternatiftir
- Yalnızca bir import yönergesini değiştirerek NumPy kodu CPU yerine GPU’da çalışır
- Geçen yıl boyunca NVIDIA CUDA Core’u geliştirdi; Jones bunu CUDA runtime’ının doğal ve yerel Python olarak yeniden tasarlanmış hali olarak görüyor
- CUDA Core, Python’ın yürütme akışını izler; tamamen süreç içinde çalışır ve büyük ölçüde JIT derlemeye dayanır
- NVIDIA, host tarafı ve device tarafı kütüphane çağrıları için birleşik bir arayüz sunan NVMath Python’ı da oluşturdu
- Jones’a göre kütüphane çağrılarını birleştirebilme yeteneği, büyük performans iyileştirmeleri getiriyor
- Python kodundan hızlandırılmış C++ kütüphanelerine doğrudan erişim sağlayan kütüphaneler de oluşturuldu
- Python’da yeniden uygulamak yerine, mevcut ve ince ayarlanmış C++ koduna bağlanıyor
- Jones, bu yaklaşımla performans farkının ihmal edilebilir hale geldiğini düşünüyor
- Profiler’lar ve kod analiz araçları için araçlar da eklendi
CuTile programlama modeli
- Python, donanım ayrıntılarını fazla düşünmeden kod yazmayı kolaylaştırır; NVIDIA da GPU yürütmesi için daha yüksek düzeyli soyutlamalara uygun bir kodlama katmanı ekliyor
- Yeni programlama modeli olan CuTile arayüzü önce Pythonic CUDA için geliştiriliyor; ardından C++ CUDA uzantısı gelecek
- CuTile, Python geliştiricilerinin C++ geliştiricileri gibi thread’lerden çok dizileri merkeze alarak düşündüğü gerçeğine göre tasarlandı
- Python kodunu sihirli biçimde GPU hızlandırması için dışa aktarmak mümkün değil
- CUDA genellikle problemi binlerce küçük bloğa böler
- Bloklar daha küçük tile’lara ayrılır
- Tile içinde binlerce thread tek bir öğeyi işler
- Thread’ler bir araya gelerek tek bir işlemi gerçekleştirir
- GPU’nun büyük hesaplama gücü, thread düzeyinde tekil öğelere kadar paralel işleyebilmesinden gelir
- NVIDIA, GPU yürütmesinin mutlaka thread düzeyine kadar inmesi gerekmediğini; tile düzeyi ara aşamasında da işlenebileceğini düşünüyor
- CuTile, dizileri GPU’ya daha az ayrıntılı bir düzeyde verimli biçimde eşleyerek kodun anlaşılmasını ve hata ayıklamayı kolaylaştırır
- Jones’a göre bu yaklaşım temelde aynı performansı getiriyor
- Bir tile’ın verileri vektörlerden, tensörlerden ve dizilerden oluşabilir
- Derleyici, tüm dizi işlemini thread bloklarından GPU’ya eşleme işini daha iyi yapabilir; Jones, derleyicinin GPU yürütme ayrıntılarını derinlemesine anladığı için çoğu zaman kendisinden daha iyi yaptığını düşünüyor
- Python, C++’ın aksine tasarım gereği düşük düzeyli bir dil değildir; Jones, OpenAI’ın Triton’unu Python programlarına doğal biçimde uyan bir örnek olarak gösteriyor
2 yorum
Cupy ve pytorch gibi mevcut Cuda wrapper'larından daha hızlı olur mu acaba. Cupy ve torch'un avantajı, API'lerinin neredeyse numpy ile tamamen aynı olmasıydı; bu sayede numpy ile yazdığım test kodlarını çok uğraşmadan taşıyabiliyordum. Bunun nasıl olduğunu da kullanıp görmek gerekecek sanırım.
İlk hız gerçekten böyle mi? Fazla yavaş görünüyor...