deniz.in

Piyasalar

Hava durumu

Hava durumu yükleniyor

· kaynak Hacker News – Front Page (native)

NVIDIA, SIMT ve Tile izleriyle GPU kernel'leri için CUDA Rust'ı duyurdu

NVIDIA, CUDA Rust'ı duyurdu; geliştiriciler artık GPU kernel'lerini Rust ile yazıp doğrudan PTX'e derleyebilecek. Proje, düşük seviyeli SIMT izi cuda-oxide ile daha yüksek seviyeli Tile izi cutile-rs'yi kapsıyor.

NVIDIA, SIMT ve Tile izleriyle GPU kernel'leri için CUDA Rust'ı duyurdu

NVIDIA, kernel'leri Rust'a getiriyor

NVIDIA, GPU kernel'lerini Rust ile yazmayı ve başka bir dilde yazılmış kernel'leri sarmalamak yerine bunları doğrudan PTX'e derlemeyi sağlayan yerel bir araç zinciri olan CUDA Rust'ı duyurdu. Hacker News'in ana sayfasına ulaşan şirket geliştirici blog yazısına göre, üretim kullanımı için olgun seçenekler CUDA C++ ve CUDA Python olmaya devam ediyor ve NVIDIA, CUDA Rust'ı 2027 ve sonrasında da geliştirmeyi planlıyor.

NVIDIA'nın ortaya koyduğu motivasyon, yapay zeka sistemleri katmanı: model ve teknikler evrildikçe sürekli değişen çıkarım motorları, serving altyapısı, sürücüler ve agent runtime'ları. Bu yazılımların büyüyen bir kısmı Rust ile yazılıyor; çünkü dilin derleme zamanı kontrolleri, performanstan ödün vermeden geniş hata sınıflarını ortadan kaldırıyor. NVIDIA bu değişime zaten katıldığını söylüyor — Nova Linux sürücüsü Rust ile yazıldı, Dynamo bir Rust çekirdeği üzerine inşa edildi ve NVTX Rust bağlayıcıları sunuyor.

Kernel istisnaydı. Rust kodu bir kernel'i başlatabiliyordu, ancak kernel gövdesinin kendisi tipik olarak başka bir dilde yazılmak zorundaydı. CUDA Rust bu sınırlamayı ortadan kaldırıyor.

İki iz, tek ekosistem

CUDA Rust, CUDA'nın zaten sunduğu iki programlama modelini yansıtıyor. SIMT, CUDA C++ ve numba-cuda'nın arkasındaki modeldir: tek bir thread'in ne yaptığını tanımlar ve binlercesini başlatırsınız. Tile ise ayrıca C++ ve Python'da bulunan daha yeni bir modeldir; verinin tek bir tile'ına ne olacağını tanımlarsınız ve Tile IR derleyicisi gerisini halleder.

NVIDIA'nın önerisi önce Tile'a yönelmek: derleyici, tile'ların her mimariye nasıl eşleneceğine karar verir, böylece kaynak kod mimariye özgü kararlardan arınmış kalır. Geliştiriciler, bu denetimi istediklerinde veya belleği ve thread'leri kendileri yönetmeleri gerektiğinde SIMT'ye inebilirler. Dil seçimi model seçiminden bağımsızdır ve NVIDIA diller arası birlikte çalışabilirlik (inter-language interop) planladığını söylüyor; dolayısıyla Rust'a geçiş bir ekibi diğer frontend'lerden dışarı kilitlemez. Her iki iz de 1.024 float üzerinde tam bir vektör toplama programıyla geliyor; program çalışıyor ve aynı sonucu yazdırıyor.

cuda-oxide: Özel bir derleyici arka ucuyla SIMT

cuda-oxide, rustc için özel bir kod üretim arka ucudur. Derlemeyi araya girerek yakalar ve #[kernel] fonksiyonlarını, PTX üretmeden önce Rust'ın MIR'ı, topluluk tarafından geliştirilen Pliron IR çerçevesi ve LLVM IR üzerinden geçirir; diğer her şey standart arka uca gider. Pliron üzerine katmanlanmış GPU diyalektleri NVIDIA'ya aittir ve pipeline, standart LLVM arka ucu devralana kadar Rust içinde kalır.

Gereksinimler zorlayıcıdır: Linux, compute capability 8.0 veya sonrası bir GPU, 12.x veya daha yeni bir CUDA toolkit, libclang başlıklarıyla birlikte clang ve sabitlenmiş (pinned) bir nightly Rust toolchain. cargo-oxide alt komutu derlemeyi yürütür ve bir doctor komutu tüm ortamı doğrular. İlk derleme, arka ucun kendisini derlediği için biraz zaman alır; sonraki çalıştırmalar önbelleği yeniden kullanır.

Güvenlik argümanı kernel imzasında yatar. Girdiler sıradan paylaşımlı dilimlerken (shared slice), çıktı her thread'e kendi elemanına özel erişim veren bir DisjointSlice'tır — sıradan bir değiştirilebilir (mutable) dilim, her thread'in aynı mutable borrow'ı tutmasını gerektirirdi ki Rust bunu yasaklar. İndeksleme, çıplak bir tamsayı yerine bir indeks tipi döndüren thread::index_1d() ile yapılır ve sınır dışı erişim, daha sonra keşfedilen bir bellek hatası yerine kernel'in ele aldığı bir Option olarak geri döner. Bir #[launch_contract] özniteliği indeksleme boyutlarını ve blok boyutunu bildirir; bir başlatmayı hazırlamak, yapılandırmayı bu bildirime ve canlı cihaz sınırlarına karşı doğrular, ardından güvenli başlatma metodunun talep ettiği bir kanıt jetonu (proof token) döndürür. Sözleşmesi olmayan kernel'ler yalnızca ham, unsafe başlatma metodlarını sunar.

cutile-rs: Daha hafif gereksinimlerle tile'lar

cutile-rs bir seviye yukarıda çalışır; skalerler yerine tile'lar üzerinde hesaplama yapar. Her tile bloğu, kernel gövdesini tek bir alt tensör üzerinde tek bir mantıksal thread olarak bir kez çalıştırır ve derleyici bunu kaç gerçek GPU thread'inin destekleyeceğine karar verir. Bir modül makrosu, kernel'in AST'sini host ikili dosyasına gömer ve kernel'e ilk kez ihtiyaç duyulduğunda NVIDIA'nın CUDA Tile IR'si üzerinden JIT ile derler.

Gereksinimler daha hafiftir: compute capability 8.0 veya sonrası bir GPU, CUDA 13.3, stabil Rust 1.89 veya daha yenisi ve Linux — nightly toolchain yok, ayrı LLVM kurulumu yok. cutile crates.io üzerinde yayımlanmıştır, dolayısıyla bir proje sıradan bir cargo add cutile ile başlar.

Neden önemli

GPU kernel kodu ezici ölçüde C ve C++ alanı olageldi; bu alanda bellek hataları, hata ayıklaması en zor kodlardan bazılarında çalışma zamanında ortaya çıkar. Rust'ın derleme zamanı garantilerini kernel gövdesine taşımak — tipli indeksler, ayrık (disjoint) mutable erişim, doğrulanmış başlatma yapılandırmaları — tekrarlayan bir hata sınıfını kaynağında hedefler.

Bu duyurudur ayrıca, çevresindeki yapay zeka altyapı yığını Rust'a daha da yaslanırken CUDA'nın mevcut iki dilinin ötesine büyüdüğüne dair NVIDIA'nın şimdiye kadarki en net sinyali. Sürücüler, serving çerçeveleri ve artık kernel'ler potansiyel olarak tek bir bellek güvenli dilini paylaşırken, GPU projelerini şekillendiren karma dil sınırı daralıyor. Vaat edilen diller arası birlikte çalışabilirlik, ekiplerin yeniden yazmak yerine artımlı olarak ilerleyebileceği anlamına geliyor.

  • #nvidia
  • #cuda
  • #rust
  • #gpu-programming
  • #ai-infrastructure

İlgili yazılar