31 पॉइंट द्वारा GN⁺ 2025-06-10 | 2 टिप्पणियां | WhatsApp पर शेयर करें
  • CUDA programming सीखने के लिए कौन-सी किताबें/courses/projects करने चाहिए, यह जानना चाहते हैं (क्योंकि जिन कई कंपनियों में काम करना है वे CUDA experience मांगती हैं)

HN के जवाबों का सार

  • सीखने की सामग्री और शुरुआती कदम

    • NVIDIA official CUDA Programming Guide और NVIDIA archive books की सिफारिश
    • छोटे example programs से शुरू करके धीरे-धीरे parallelization का अभ्यास करें; मौजूदा C/C++ knowledge बहुत महत्वपूर्ण है
    • GitHub जैसे open source code और LLMs (जैसे ChatGPT) का उपयोग करके code structure समझें और hands-on practice करें
    • लगभग 6~8 हफ्तों की योजना बनाकर practice-first approach अपनाने की सलाह
  • ज़रूरी hardware और environment

    • पिछले 10 वर्षों के भीतर का NVIDIA GPU (खासकर Turing/RTX 20xx, Ampere/RTX 30xx या उससे ऊपर) पर्याप्त है; पुराने GPUs (Maxwell से पहले) में support और performance दोनों की सीमाएँ हैं
    • CUDA Toolkit का latest version इस्तेमाल करें, और GPU की Compute Capability ज़रूर जाँचें (support table देखें)
    • Windows और Linux दोनों पर काम हो सकता है; environment के अनुसार Docker और VPS भी उपयोगी हो सकते हैं
    • अगर GPU नहीं है, तो leetgpu.com जैसे online emulator से अनुभव लिया जा सकता है
  • parallel programming की बुनियाद

    • CUDA syntax से भी ज़्यादा parallel algorithms और hardware architecture की समझ महत्वपूर्ण है
    • प्रमुख किताबें:
      • Programming Massively Parallel Processors (PMPP)
      • Foundations of Multithreaded, Parallel, and Distributed Programming
      • Scientific Parallel Computing
      • The Art of High Performance Computing (Victor Eijkhout, free)
    • वास्तविक industry demand अक्सर cuBLAS, cuDNN जैसी CUDA-based libraries के उपयोग और parallel performance को अधिकतम करने पर केंद्रित होती है
  • सीखने की methodology

    • सिर्फ syntax सीखने के बजाय छोटे CPU code को CUDA में port करना → performance benchmark करना → धीरे-धीरे optimize करना बेहतर तरीका है
    • शुरुआत में correctness पर ध्यान दें, फिर performance optimization (memory management, shared memory, registers का उपयोग आदि) को चरणबद्ध तरीके से लागू करें
    • practice examples: prefix scan, GEMM, n-body simulation जैसे classic parallel algorithms की सिफारिश
    • CUDA Thrust, CUTLASS, cub जैसी high-level abstraction libraries पहले सीखें; direct implementation बाद में आज़माएँ
  • व्यावहारिक काम और career

    • CUDA experience की मांग ज़्यादातर deep learning, data engineering, HPC (scientific computing), game graphics आदि क्षेत्रों में आती है
    • कुछ भूमिकाओं में सिर्फ PyTorch/Tensorflow नहीं, बल्कि core CUDA kernels/libraries optimization experience भी अपेक्षित होता है
    • व्यावहारिक expertise के लिए PTX, nvcc, cuobjdump, Nsight Systems/Compute जैसे low-level tools का उपयोग भी महत्वपूर्ण है
    • community participation: gpumode Discord, GPU Puzzles जैसी सक्रिय communities में real-world code review और discussion करें
  • सावधानियाँ और यथार्थवादी सलाह

    • शुरुआत आसान लग सकती है, लेकिन hardware-specific (architecture/instruction set) optimization और compatibility सुनिश्चित करना बहुत कठिन है, और entry barrier ऊँचा है
    • व्यवहार में job experience और network महत्वपूर्ण होते हैं, और सिर्फ self-directed learning से industry experience की भरपाई नहीं की जा सकती
    • CUDA ऐसा क्षेत्र है जहाँ hardware, parallel computing, algorithms और optimization सब एक-दूसरे से जुड़े होते हैं, इसलिए एक क्षेत्र पर फोकस करके गहराई में जाना बेहतर रणनीति है

2 टिप्पणियां

 
ahwjdekf 2025-06-12

खैर। सीधे CUDA का इस्तेमाल करने का मौका आएगा भी या नहीं, पता नहीं। खासकर कोरिया में।

 
GN⁺ 2025-06-10
Hacker News राय
  • 2008 के NVidia cudacontest के प्रतिभागी के रूप में, भारत से सबमिट करने वाले कुछ लोगों में से एक होने और BlackEdition Card प्रतिभागिता पुरस्कार पाने के अनुभव के आधार पर, मैं अपने अपनाए हुए तरीके साझा कर रहा हूँ

    • NVidia CUDA Programming Guide देखें
    • NVidia द्वारा वितरित CUDA Programming से संबंधित किताबों का उपयोग करें (developer.nvidia.com/cuda-books-archive देखें)
    • मौजूदा implementations के आधार पर छोटे programs से लिखना शुरू करें (मजबूत C भाषा implementation क्षमता ज़रूरी है, इसलिए आवश्यकता हो तो दोबारा पढ़ें)
    • आवश्यक toolchain, compiler install होना और काम के लिए hardware उपलब्ध होना मानकर चलें
    • Github पर CUDA projects के code का विश्लेषण करें, और अब LLM का उपयोग करके code explanation भी माँग सकते हैं
    • छोटे लेकिन parallel processing आधारित programs से शुरू करके धीरे-धीरे विस्तार करें
    • 1~2 महीने शांति से काम करें तो CUDA programming शुरू करने के लिए पर्याप्त है
    • आजकल 2007/08 की तुलना में materials और resources कहीं अधिक उपलब्ध हैं
    • 6~8 हफ्तों की study plan बनाकर उसे लागू करने की सिफारिश
    • कभी भी सवाल छोड़ें, मैं जहाँ तक हो सके मदद कर सकता हूँ
      • ज़रूरी hardware को लेकर विशेष जिज्ञासा है। क्या लगभग 5 साल पुराना कोई भी nvidia graphics card काफी है, या कुछ और खास specifications चाहिए?
      • आप कौन-सा development environment इस्तेमाल करते हैं, यह जानना चाहता हूँ। क्या अभी भी Windows ही CUDA का मुख्य development environment है?
  • Leela Chess Zero का CUDA code सीधे देखा तो वह समझ में आने लायक स्तर का लगा

    • उस समय Leela transformer की जगह DCNN structure इस्तेमाल करता था, और fast.ai videos के ज़रिए DCNN basics आसानी से सीखे
    • Transformer अधिक complex है, इसलिए अभी तक उसे सीखना शुरू नहीं कर पाया
    • CUDA भाषा खुद C++ आधारित है, इसलिए अगर C++ का अनुभव है तो उस तक पहुँचना बहुत कठिन नहीं
    • लेकिन अगर आप CUDA developer बनना चाहते हैं, तो AI programming स्तर तक पहुँचना काफ़ी ज़रूरी है—AI, CUDA से कहीं अधिक गहरा और विशाल क्षेत्र है, इसलिए बहुत समय और hands-on experience चाहिए
    • फिर भी अगर कौशल आ जाए तो बाज़ार में मांग बहुत अधिक है
    • fast.ai videos की ज़ोरदार सिफारिश
    • अगर क्षेत्र game development है, तो बात 3D graphics तक जाती है, लेकिन हाल के समय में चीज़ें बहुत अधिक complex हो गई हैं, इसलिए entry path पता नहीं
      • क्या अभी CUDA developer के रूप में नौकरी ढूँढना दूसरे software engineering क्षेत्रों की तुलना में कम बोझिल है? एक Java middleware developer के रूप में लगता है कि CUDA और AI career transition के लिए अच्छे हो सकते हैं
      • क्या यह code यही है, इसकी पुष्टि चाहिए, और दो शुरुआती सवाल हैं
        • C++/CUDA सीधे क्यों लिखा गया, क्या सिर्फ pytorch या tensorflow से Leela की training speed पर्याप्त नहीं थी?
        • और tensorflow code भी है, तो उसके पीछे क्या कारण है?
  • अगर motivation पैसा है, तो HPC और गणित-प्रधान क्षेत्रों को छोड़ने की सिफारिश

    • इस क्षेत्र में PhD स्तर के बिना, कौशल कितना भी अच्छा हो, ध्यान मिलना मुश्किल है
    • सच में पैसे वाला कौशल है PTX, nvcc, cuobjdump, Nsight Systems, Nsight Compute जैसे tools में महारत, और CUTLASS जैसे open source codebases का विश्लेषण
    • संबंधित practical notes देखने की सिफारिश
    • सबसे बढ़कर, सिर्फ HN पर मत रुकिए; असली developers जहाँ इकट्ठा होते हैं उस discord gpu mode community में शामिल होने की सलाह
      • शानदार और practical लगता है, लेकिन बहुत niche क्षेत्र भी दिखता है
      • इसमें प्रवेश खुद कठिन है, और उपयोग भी game industry, drivers आदि सीमित क्षेत्रों में ही होता है
      • शुरुआत से सीधे उस स्तर तक पहुँचने के लिए काफ़ी प्रतिभा चाहिए, ऐसा उल्लेख
  • gpumode.com resources और Discord community कई महीनों तक पढ़ने-सीखने के लिए पर्याप्त सामग्री देते हैं

    • Programming massively parallel processors किताब
    • nvidia cuda का official documentation बहुत व्यापक है
    • GPU-Puzzles भी आज़माने की सिफारिश
      • ThunderKittens flashattention-2 example code को देखकर उस code complexity का अहसास होता है जिसे शब्दों में समझाना मुश्किल है
      • ऐसे puzzles 'winner-takes-all' संरचना जैसे हैं, इसलिए वास्तविक उपलब्धि का अंतर 1% से भी कम है, और practice खुद बहुत अर्थपूर्ण नहीं लगती, ऐसा विचार
  • सीखने के दायरे को टुकड़ों में बाँटकर approach करना accessibility बढ़ाने के लिए सुझाया गया

      1. CUDA खुद (framework/library/abstraction layers) सीखें
      1. high-performance computing की basics (यह GPU, Nvlink से आगे जाकर पूरे HPC architecture में लागू होती हैं)
      1. application domain specialization (अगर Transformer है, तो Torch, Tensorflow जैसी आधुनिक high-level abstractions से शुरू करें)
    • अगर वास्तव में CUDA mastery चाहिए, तो large-scale parallel programming के सिद्धांतों का अनुभव और समझ ही मुख्य है, और यह काफी हद तक transferable skill है
      • एक पूर्व GPU developer के रूप में मैं भी यही सलाह दूँगा, खासकर 2 और 3 पर ज़ोर
      • नौकरी के लक्ष्य पर निर्भर करेगा, लेकिन वास्तव में ज़रूरत CUDA libraries (cuDNN, cuBLAS, cuFFT आदि) के अनुभव की भी हो सकती है
      • parallel programming के सिद्धांतों को समझना सबसे पहले आता है
      • यही सही approach है, और 2 के बिना 1 से सीधे शुरू करने पर और अधिक भ्रम ही पैदा होगा
      • सिफारिश की गई किताब
  • अपने व्यक्तिगत CUDA learning process का अनुभव साझा

    • यह बहुत systematic नहीं था, लेकिन academia और research में मददगार रहा
    • PhD project के कारण CUDA सीधे सीखना ज़रूरी हुआ
    • lab में कोई अनुभवी व्यक्ति नहीं था, इसलिए NVIDIA के basic courses (Getting Started with Accelerated Computing with CUDA C/C++ और उसका python version) से concepts की नींव बनाई
    • official tutorials के अलावा, व्यवहार में सीखना अधिकतर trial and error पर आधारित था
    • online tutorials और किताबें इस्तेमाल कीं, लेकिन functions और APIs जल्दी बदलते रहे, इसलिए पुराने/नए versions को लेकर बहुत भ्रम था, और मेरे GPU तथा वास्तविक environment की compatibility issues पर भी ध्यान देना पड़ा
    • सबसे कठिन हिस्सा यह था कि ज़्यादातर समय debugging में गया (उम्मीद से धीमे होने के कारण ढूँढना) और tools (जैसे: compute-sanitizer, Nsight) का उपयोग सीखने में
    • अधीर मत हों; CPU पर चलने वाले किसी simple project को CUDA में port करके फिर benchmark करते हुए optimization का अनुभव लेने की सिफारिश
    • optimization सबसे अंत में करें, पहले सही behavior implement करने को प्राथमिकता दें
    • memory corruption के बिना चलने वाला धीमा kernel भी optimized kernel से अधिक मूल्यवान है
      • इसी तरह का PhD अनुभव साझा—flashrnn practical result
      • अगर basic principles और GPU structure समझ चुके हैं, तो यह workflow सुझाया गया
        1. ऐसा environment सेट करें जहाँ kernel test हो सके, और इसे किसी higher-level language में बने Baseline से compare करें
        2. अगर कोई urgent project नहीं है, तो प्रसिद्ध existing problems (MatMul आदि) को review या reimplement करें—हर case एक साथ करने की कोशिश न करें, features के हिसाब से focus करें
        3. धीरे-धीरे complexity बढ़ाएँ—loops, grid parallelization, global/shared/register memory का क्रमशः उपयोग, और simple matrix multiplication से TensorCore(MMA) तक विस्तार
        4. CUDA C Programming Guide को बार-बार पढ़ें—इसे सही मायने में सिर्फ practice करते हुए ही आत्मसात किया जा सकता है
        5. CUTLASS, ThunderKitten जैसी higher abstractions भी case के अनुसार सुझाई जाती हैं; अगर JAX/Torch environment है तो पहले triton का उपयोग करें
      • PTX तक mastery पाने में और अधिक समय लगता है, लेकिन practice में हाथ गंदा करने की प्रक्रिया पर ज़ोर
      • CUDA performance debugging की पीड़ा से गहरी सहमति
  • हाई स्कूल के छात्रों को CUDA पढ़ाते समय इस्तेमाल की गई सामग्री का परिचय—अकेले पूरे mastery के लिए पर्याप्त नहीं, लेकिन शुरुआत में मददगार lecture

  • अभी खुद इस्तेमाल नहीं किया, लेकिन काफ़ी अच्छा लगने के कारण सुझाना चाहता हूँ: leetgpu.com platform

  • CUDA engineers को hire करने वाले roles, positions, और companies के बारे में उद्योग में काम कर रहे लोगों की राय माँगी गई

    • अभी बहुत-सी कंपनियाँ PyTorch जैसी CUDA-आधारित libraries का उपयोग करती हैं, लेकिन क्या native CUDA development खुद उतनी कंपनियों को चाहिए, यह स्पष्ट नहीं
    • सीधे CUDA-केंद्रित काम करने वाले organizations या roles की पहचान करने की उम्मीद
      • हमारी team के मामले में, geospatial data analysis के लिए सीधे CUDA का उपयोग होता है
      • slippy map tiles को rasterize करके GPU पर raster summarization करते हैं
      • ज़्यादातर काम pixel-level independent processing है, इसलिए GPU के लिए उपयुक्त है
      • row-level summarization को parallel process करके अंत में इकट्ठा करके process करते हैं
      • लेकिन GPU में data copy करना अभी bottleneck है
  • समय के बदलाव के साथ, Claude जैसे LLM से सवाल पूछकर एक साथ result code और explanation पाने का तरीका इस्तेमाल करें

    • 2025 में यह तरीका काम कर सकता है, लेकिन 2026 में एक स्तर और आगे की अपेक्षा होगी, ऐसी राय