31 puan yazan GN⁺ 2025-06-10 | 2 yorum | WhatsApp'ta paylaş
  • CUDA programlamayı öğrenmek için hangi kitapları/kursları/projeleri takip etmem gerektiği soruluyor (çünkü çalışmak istenen birçok şirket CUDA deneyimi istiyor)

HN yanıtlarının özeti

  • Öğrenme kaynakları ve ilk adımlar

    • NVIDIA resmî CUDA Programming Guide ve NVIDIA’nın arşiv kitapları öneriliyor
    • Küçük örnek programlarla başlayıp giderek paralelleştirme pratiği yapmak, mevcut C/C++ bilgisinin çok önemli olduğu vurgulanıyor
    • Açık kaynak kodlar (GitHub vb.) ve LLM’ler (ör. ChatGPT) kullanılarak kod yapısını analiz etmek ve pratik yapmak öneriliyor
    • Yaklaşık 6–8 haftalık bir planla, pratik ağırlıklı bir yaklaşım tavsiye ediliyor
  • Gerekli donanım ve ortam

    • Son 10 yıl içinde çıkmış bir NVIDIA GPU (özellikle Turing/RTX 20xx, Ampere/RTX 30xx ve sonrası) yeterli; daha eski kartlar (Maxwell öncesi) destek ve performans açısından sınırlı
    • CUDA Toolkit’in en güncel sürümünü kullanmak ve GPU’nun Compute Capability değerini kontrol etmek şart (destek tablosu bakınız)
    • Windows ve Linux’un ikisi de kullanılabilir; ortama göre Docker ve VPS de değerlendirilebilir
    • GPU yoksa leetgpu.com gibi çevrim içi emülatörlerle deneme yapılabilir
  • Paralel programlama temelleri

    • CUDA sözdiziminden çok paralel algoritmalar ve donanım mimarisi anlayışının daha önemli olduğu belirtiliyor
    • Öne çıkan kitaplar:
      • Programming Massively Parallel Processors (PMPP)
      • Foundations of Multithreaded, Parallel, and Distributed Programming
      • Scientific Parallel Computing
      • The Art of High Performance Computing (Victor Eijkhout, ücretsiz)
    • CUDA’ya dair gerçek iş gereksinimleri çoğunlukla cuBLAS, cuDNN gibi CUDA tabanlı kütüphanelerin kullanımı ve paralel performansın en üst düzeye çıkarılması üzerine yoğunlaşıyor
  • Öğrenme metodolojisi

    • Sadece sözdizimi öğrenmek yerine küçük CPU kodlarını CUDA’ya taşımak → performans ölçümü yapmak → kademeli optimizasyon yaklaşımı öneriliyor
    • Başlangıçta doğruluğa odaklanıp, sonrasında performans optimizasyonunu (bellek yönetimi, shared memory, register kullanımı vb.) aşamalı olarak uygulamak tavsiye ediliyor
    • Pratik örnekleri olarak prefix scan, GEMM, n-body simulation gibi klasik paralel algoritmalar öneriliyor
    • CUDA Thrust, CUTLASS, cub gibi yüksek seviyeli soyutlama kütüphanelerini önce öğrenmek, doğrudan elle implementasyona daha sonra geçmek tavsiye ediliyor
  • İş hayatı ve kariyer

    • CUDA deneyimi talebi çoğunlukla derin öğrenme, veri mühendisliği, HPC (bilimsel hesaplama), oyun grafikleri vb. alanlarda ortaya çıkıyor
    • Sadece PyTorch/Tensorflow değil, çekirdek CUDA kernel’lerini/kütüphanelerini optimize etme deneyimi isteyen pozisyonlar da var
    • Pratikte uzmanlık kazanmak için PTX, nvcc, cuobjdump, Nsight Systems/Compute gibi düşük seviyeli araçları kullanabilmek de önemli
    • Topluluk katılımı: gpumode Discord, GPU Puzzles gibi aktif topluluklarda gerçek kod incelemeleri ve tartışmalar yapılabiliyor
  • Dikkat edilmesi gerekenler ve gerçekçi tavsiyeler

    • Başlamak kolay olsa da, donanıma özgü (mimari/komut seti) optimizasyon ve uyumluluk sağlamak çok zor; giriş bariyeri yüksek
    • Gerçekte iş deneyimi ve network önemli; yalnızca kendi kendine öğrenme, doğrudan sektör deneyiminin yerini tutmaz
    • CUDA; donanım, paralel hesaplama, algoritmalar ve optimizasyonun iç içe geçtiği bir alan olduğundan, tek bir alana odaklanıp derine inme stratejisi öneriliyor

2 yorum

 
ahwjdekf 2025-06-12

Eh işte. cudayı doğrudan kullanacağınız bir durum olur mu, emin değilim. Özellikle de Kore'de.

 
GN⁺ 2025-06-10
Hacker News yorumu
  • 2008'de düzenlenen NVidia cudacontest'e katılan biri olarak, Hindistan'dan başvuran az sayıdaki kişiden biri olup BlackEdition Card katılım ödülü de almış biri olarak izlediğim yöntemi paylaşıyorum

    • NVidia CUDA Programming Guide'a bakın
    • NVidia'nın yayımladığı CUDA Programming kitaplarını kullanın (developer.nvidia.com/cuda-books-archive'a bakın)
    • Mevcut uygulamaları temel alarak küçük programlarla başlayın (güçlü bir C dili hakimiyeti şart, gerekirse tekrar gözden geçirmeniz önerilir)
    • Gerekli toolchain'i, derleyicileri kurduğunuzu ve çalışmak için donanımınız olduğunu varsayıyorum
    • GitHub'daki CUDA proje kodlarını inceleyin; günümüzde LLM'leri kullanıp kodun açıklamasını da isteyebilirsiniz
    • Küçük ama paralel işleme tabanlı programlardan başlayıp giderek büyütün
    • 1-2 ay sakin şekilde ilerlerseniz CUDA programlamaya başlamak için fazlasıyla yeterli olur
    • Bugünlerde 2007/08'e kıyasla çok daha bol doküman ve kaynak var
    • 6-8 haftalık bir öğrenme planı yapıp uygulamanızı öneririm
    • İstediğiniz zaman soru bırakırsanız yardımcı olabileceğim ölçüde yönlendirebilirim
      • Gerekli donanım konusunda daha somut bilgi merak ediyorum. Yaklaşık 5 yıl önce çıkmış herhangi bir nvidia ekran kartı yeterli olur mu, yoksa daha özel bir donanım mı gerekiyor?
      • Hangi geliştirme ortamını kullandığınızı da merak ediyorum. Windows hâlâ CUDA için ana geliştirme ortamı mı, bunu öğrenmek istiyorum
  • Leela Chess Zero'nun CUDA koduna bizzat baktığımda anlayabileceğim bir seviyede olduğunu gördüm

    • O dönemde Leela, transformer yerine DCNN yapısını kullanıyordu; fast.ai videoları üzerinden DCNN temellerini kolayca öğrendim
    • Transformer'lar daha karmaşık olduğu için henüz öğrenmeye başlayamadım
    • CUDA dili C++ tabanlı olduğu için C++ deneyiminiz varsa yaklaşması çok zor değil
    • Ama CUDA geliştiricisi olmak istiyorsanız AI programlama seviyesine kadar çıkma ihtiyacı büyük; AI, CUDA'dan çok daha derin ve geniş bir alan, bu yüzden çok zaman ve pratik deneyim gerekiyor
    • Yine de bu becerilere ulaşırsanız piyasadaki talep çok yüksek
    • fast.ai videolarını güçlü şekilde tavsiye ederim
    • Oyun alanına giderseniz konu 3D grafiklere kadar uzanıyor ama son yıllarda işler çok daha karmaşık hâle geldiği için giriş yolunun ne olduğunu ben de bilmiyorum
      • CUDA geliştiricisi olarak iş aramanın, şu anda diğer yazılım mühendisliği alanlarına kıyasla daha az yük oluşturup oluşturmadığını soruyorum. Şu anda Java middleware geliştiricisiyim ve CUDA ile AI tarafı kariyer değişimi için iyi olabilir gibi geliyor
      • Bu kodun şu repo olup olmadığını doğrulamak istiyorum ve iki temel sorum var
        • Neden doğrudan C++/CUDA yazdılar? Sadece PyTorch ya da TensorFlow ile Leela'nın eğitim hızı yetersiz mi kalıyordu?
        • Ayrıca TensorFlow kodu da var; bunun nedeni nedir?
  • Motivasyonunuz para ise HPC ve matematik ağırlıklı alanları pas geçmenizi öneririm

    • Bu alanda doktora seviyesinde değilseniz ne kadar iyi olursanız olun ilgi görmek zor
    • Gerçekten para eden beceriler; PTX, nvcc, cuobjdump, Nsight Systems, Nsight Compute gibi araçlarda ustalaşmak ve CUTLASS gibi açık kaynak kod tabanlarını incelemektir
    • İlgili pratik notlara bakmanızı öneririm
    • En önemlisi, sadece HN'de kalmayın; gerçek geliştiricilerin bulunduğu discord gpu mode topluluğuna katılın
      • Havalı ve pratik görünüyor ama aynı zamanda çok niş bir alan gibi
      • Girişin kendisi zor ve yalnızca oyun sektörü, sürücüler gibi sınırlı alanlarda kullanılıyor
      • En baştan doğrudan o seviyeye çıkmak için ciddi bir yetenek gerektiği belirtiliyor
  • gpumode.com kaynakları ve Discord topluluğu aylarca yetecek kadar çalışma malzemesi sağlıyor

    • Programming massively parallel processors kitabı
    • nvidia cuda resmi belgeleri çok kapsamlı
    • GPU-Puzzles'ı denemeniz de tavsiye edilir
      • ThunderKittens flashattention-2 örnek koduna bakınca kodun karmaşıklığını kelimelerle anlatmanın zor olduğu hissediliyor
      • Bu tür bulmacalar 'kazanan hepsini alır' yapısında; fiili başarı farkı %1'in bile altında ve bu yüzden pratiğin kendisinin çok anlamlı olmadığını düşünüyorum
  • Öğrenme kapsamını bölerek yaklaşmanın erişilebilirliği artıracağını öneririm

      1. CUDA'nın kendisini öğrenmek (framework/kütüphane/soyutlama katmanları)
      1. Yüksek başarımlı hesaplama temelleri (bu sadece GPU ve Nvlink kavramlarını değil, genel HPC mimarisi için de geçerli)
      1. Uygulama alanına özgü uzmanlaşma (transformer ise Torch, TensorFlow gibi güncel yüksek seviyeli soyutlamalardan başlamak)
    • Gerçekten CUDA'da ustalaşmak istiyorsanız, büyük ölçekli paralel programlama ilkelerini deneyimlemek ve anlamak temel noktadır; bunun önemli bir kısmı başka alanlara da taşınabilir becerilerdir
      • Eski bir GPU geliştiricisi olarak ben de aynı tavsiyeyi veriyorum, özellikle 2 ve 3 numaraları vurguluyorum
      • İş hedefinize göre değişir ama gerçekten ihtiyaç duyduğunuz şey CUDA kütüphaneleriyle (cuDNN, cuBLAS, cuFFT vb.) deneyim olabilir
      • En önemlisi paralel programlama ilkelerini anlamak
      • Doğru yaklaşım bu; 2 olmadan doğrudan 1 ile başlamak daha büyük bir kafa karışıklığı yaratır
      • Önerilen kitap
  • Kişisel CUDA öğrenme sürecimden deneyim paylaşımı

    • Çok sistematik değildi ama akademide ve araştırmada işime yarayan bir yöntemdi
    • Doktora projem nedeniyle CUDA'yı doğrudan öğrenmem gerekti
    • Laboratuvarda deneyimli kimse olmadığı için NVIDIA'nın temel eğitimleriyle (Getting Started with Accelerated Computing with CUDA C/C++ ve Python sürümü) kavramsal temeli öğrendim
    • Resmî eğitimlerin dışında pratikte öğrenmenin büyük kısmı deneme-yanılma ile oldu
    • Çevrimiçi eğitimler ve kitaplar kullandım ama fonksiyonlar ve API'ler hızla değiştiği için eski/yeni sürüm karmaşası çoktu; ayrıca kendi GPU'm ile gerçek ortamın uyumluluk sorunlarını da düşünmem gerekiyordu
    • En zorlandığım nokta, zamanın çoğunu hata ayıklamaya (beklenenden yavaş olma nedenini izlemeye) ve araçları kullanmaya (compute-sanitizer, Nsight gibi) harcamamdı
    • Acele etmeyin; CPU'da çalışan basit bir projeyi CUDA'ya port edip benchmark yaparak optimizasyon deneyimi kazanmanızı öneririm
    • Optimizasyonu en sona bırakın; önce doğru çalışmayı hedefleyin
    • Yavaş çalışan ama bellek bozulmasına yol açmayan bir kernel, optimize edilmiş bir kernel'den daha değerlidir
      • Benzer doktora deneyimini paylaşayım — flashrnn pratik çıktısı
      • Temel ilkeleri ve GPU mimarisini anladıysanız önerdiğim iş akışı şu
        1. Kernel'i test edebileceğiniz bir ortam kurun ve bunu daha üst seviye bir dille yazılmış baseline ile karşılaştırın
        2. Acil bir projeniz yoksa mevcut bilinen problemleri (MatMul vb.) gözden geçirin ya da yeniden uygulayın — her vakayı yapmaya çalışmayın, işlev bazında odaklanın
        3. Karmaşıklığı aşamalı olarak artırın — döngüler, grid paralelleştirme, global/paylaşımlı/register bellek kullanımı ve basit matris çarpımından TensorCore (MMA)'ya kadar ilerleyin
        4. CUDA C Programming Guide'ı tekrar tekrar okuyun — ancak pratik yaparken gerçekten içselleşiyor
        5. CUTLASS, ThunderKitten gibi daha üst soyutlamalar da duruma göre tavsiye edilir; JAX/Torch ortamındaysanız önce triton kullanın
      • PTX seviyesine kadar ustalaşmak daha uzun zaman alır ama bunun sahada, yaparak öğrenilen bir süreç olduğu vurgulanıyor
      • CUDA performans hata ayıklama acısına derinden katılıyorum
  • Liselilere CUDA öğretirken kullandığım kaynakları paylaşayım — tek başına her şeyi ustalık seviyesinde öğretmez ama başlangıç için yardımcı olan bir ders

  • Henüz kullanmadım ama oldukça iyi göründüğü için önermek istediğim bir platform var: leetgpu.com

  • CUDA mühendisi işe alan görevler, pozisyonlar ve şirket tipleri hakkında sektörden görüş istiyorum

    • Şu anda birçok şirket PyTorch gibi CUDA tabanlı kütüphaneleri kullanıyor ama Native CUDA geliştirmenin gerçekten birçok şirkette gerekli olup olmadığını bilmiyorum
    • Doğrudan CUDA merkezli çalışan organizasyonları veya rolleri bulmayı umuyorum
      • Bizim ekipte doğrudan CUDA'yı coğrafi veri analizi için kullanıyoruz
      • Slippy map tile'larını rasterize ediyor ve raster özetlemeyi GPU üzerinde yapıyoruz
      • İşlerin çoğu piksel bazında birbirinden bağımsız olduğu için GPU'ya uygun
      • Satır bazında özetlemeyi paralel yapıp sonunda birleştiriyoruz
      • Ancak veriyi GPU'ya kopyalama kısmı şu anda darboğaz
  • Dönemin değişimine uyum sağlamak için Claude gibi LLM'lere soru sorup sonuç kodu ile açıklamayı tek seferde alma yönteminden yararlanmak

    • 2025'te bu yaklaşım işe yarayabilir ama 2026'da bir kademe daha fazlası gerekeceği görüşü