24 คะแนน โดย GN⁺ 2025-04-05 | 3 ความคิดเห็น | แชร์ทาง WhatsApp
  • ชุดเครื่องมือ CUDA ของ NVIDIA ที่เน้น C/C++ มานานหลายปี ได้เพิ่มการรองรับ Python แบบเนทีฟอย่างเป็นทางการในงาน GTC 2024
  • จากนี้ไปสามารถใช้ Python เพียงอย่างเดียวเพื่อรันงานคำนวณความเร็วสูงที่เน้นอัลกอริทึมบน GPU ได้โดยตรง
  • Stephen Jones สถาปนิก CUDA อธิบายว่า “Python CUDA ไม่ใช่แค่การย้ายโค้ด C มาเขียนด้วยไวยากรณ์ Python แต่เป็น
    การออกแบบขึ้นใหม่ให้เป็นธรรมชาติสำหรับนักพัฒนา Python

ความเป็นไปได้ใหม่ที่เกิดจากการรองรับแบบเนทีฟของ Python

  • เดิมทีผู้ใช้ CUDA ต้องรู้จัก C++ หรือ Fortran แต่ตอนนี้ใช้แค่ Python ก็ทำงานประมวลผล GPU ประสิทธิภาพสูงได้
  • ตามผลสำรวจโอเพนซอร์สของ GitHub ปี 2024 Python แซง JavaScript ขึ้นมาเป็นภาษาที่ได้รับความนิยมมากที่สุด
  • จำนวนผู้ใช้ CUDA เพิ่มจาก 2 ล้านคนในปี 2020 → 4 ล้านคนในปี 2023 แต่
    นักพัฒนา Python มีอยู่ในระดับหลายสิบล้านคน โดยเฉพาะนักพัฒนาในประเทศเกิดใหม่อย่างอินเดียและบราซิลถือเป็นข่าวดีอย่างมาก
  • จึงคาดว่าจะส่งผลบวกต่อการขยายโครงสร้างพื้นฐาน GPU ทั่วโลกด้วย

โครงสร้างการทำงานของ Pythonic CUDA

  • CUDA ประกอบด้วยไลบรารี, SDK, คอมไพเลอร์, รันไทม์, เครื่องมือ และอัลกอริทึม
  • การผสานรวมกับ Python ไม่ได้มีแค่การให้ kernel อย่างเดียว แต่เป็นการจัดทั้งสแตกให้เป็นมิตรกับ Python
  • แนวทางหลักคือ อิงการคอมไพล์แบบ JIT (Just-In-Time) เพื่อลดการพึ่งพาคอมไพเลอร์ให้มากที่สุด

องค์ประกอบหลัก

  • cuPyNumeric: ไลบรารี Python ที่ให้ API เหมือน NumPy พร้อมรองรับการเร่งความเร็วด้วย GPU
  • CUDA Core: ระบบแบบอิงลำดับการทำงานที่ออกแบบ CUDA runtime ใหม่ในสไตล์ Python
  • NVMath Python: มีอินเทอร์เฟซแบบรวมศูนย์สำหรับเรียกใช้ไลบรารีฝั่ง host/device
  • มี Python API ที่สามารถเชื่อมต่อกับไลบรารี C++ ประสิทธิภาพสูงได้โดยตรง
  • มีเครื่องมือวิเคราะห์ประสิทธิภาพและวิเคราะห์โค้ดให้มาพร้อมกัน

> “เชื่อมต่อกับโค้ด C++ ประสิทธิภาพสูงเดิมได้โดยตรง จึงแทบไม่มีการสูญเสียด้านประสิทธิภาพ” — Stephen Jones

โมเดลการเขียนโปรแกรมใหม่: CuTile

  • โมเดลระดับสูงที่เน้นอาร์เรย์ ออกแบบมาสำหรับนักพัฒนา Python
  • หาก CUDA แบบเดิมต้องการการควบคุมรายละเอียดในระดับ thread, CuTile จะให้นามธรรมในระดับ tile ทำให้โครงสร้างกระชับและเข้าใจง่าย
  • CuTile แมปอาร์เรย์กับหน่วย tile บน GPU ทำให้ดีบักและปรับจูนได้ง่ายขึ้นโดยยังคงประสิทธิภาพเดิมไว้
  • มีแผนจะขยายไปยัง C++ CUDA ในอนาคต

> “เพราะคอมไพเลอร์เข้าใจโครงสร้าง GPU ได้ดีกว่า การปรับแต่งประสิทธิภาพจึงทำได้อัตโนมัติอย่างมีประสิทธิผลด้วย”

สรุป

  • การผสาน Python แบบเนทีฟเข้ากับ CUDA เป็นความเปลี่ยนแปลงที่ลดกำแพงการเข้าสู่โลกการเขียนโปรแกรม GPU อย่างมาก
  • แม้ไม่มีความรู้ด้านภาษาอันซับซ้อนแบบเดิม ก็สามารถใช้ Python เพียงอย่างเดียวทำงาน AI/วิทยาศาสตร์บน GPU ได้
  • นี่คือจุดเปลี่ยนสำคัญที่เปิดยุคใหม่ให้กับการขยายระบบนิเวศ AI ที่มี Python เป็นศูนย์กลาง และการใช้งาน NVIDIA GPU

3 ความคิดเห็น

 
aer0700 2025-04-06

มันจะเร็วกว่า Cuda wrapper ที่มีอยู่เดิมอย่าง Cupy, pytorch ไหมนะ ข้อดีของ Cupy กับ torch คือ API แทบจะเหมือนกับ numpy มาก เลยสามารถย้ายโค้ดทดสอบที่เขียนด้วย numpy มาใช้ได้แทบไม่ต้องออกแรงมาก อันนี้คงต้องลองใช้ดูก่อนครับ

 
GN⁺ 2025-04-05
ความคิดเห็นจาก Hacker News
  • ฉันไม่ใช่โปรแกรมเมอร์ GPU แต่ดูเหมือนว่าคนแบบฉันก็น่าจะใช้งานได้ง่าย ฉันลองทำเดโมง่าย ๆ ที่ใช้ทั้ง GPU และ CPU แล้ว ผลลัพธ์เป็นดังนี้

    • สร้างเมทริกซ์สุ่มขนาด 5000x5000 จำนวน 100 ตัวบน CPU
    • บวกเมทริกซ์ด้วย CPU
    • เวลาที่ใช้บวกเมทริกซ์บน CPU เสร็จ: 0.6541 วินาที
    • ขนาดเมทริกซ์ผลลัพธ์ของ CPU: (5000, 5000)
    • สร้างเมทริกซ์สุ่มขนาด 5000x5000 จำนวน 100 ตัวบน GPU
    • บวกเมทริกซ์ด้วย GPU
    • เวลาที่ใช้บวกเมทริกซ์บน GPU เสร็จ: 0.1480 วินาที
    • ขนาดเมทริกซ์ผลลัพธ์ของ GPU: (5000, 5000)
    • API เรียบง่ายมากจนคุ้มที่จะลองเจาะลึกต่อ การเขียนโปรแกรม CUDA ดูเป็นงานใหญ่ถ้าไม่มีสิ่งที่เป็นระดับสูงแบบนี้
  • ฉันสงสัยว่าทำไม Python ถึงกลายเป็นเป้าหมายของสิ่งเหล่านี้ ฉันเห็นหลายโปรเจกต์เพิ่มการรองรับ Python เลยสงสัยว่าโค้ดเบส Python คอมไพล์ไปยังเป้าหมายที่หลากหลายได้ง่ายกว่าสิ่งอื่นหรือไม่

  • ดีใจที่ Pytorch มีแรงส่งมหาศาลก่อนที่สิ่งนี้จะออกมา ตอนนี้เรามีกึ่งมาตรฐานที่เป็นอิสระจากแพลตฟอร์มอย่างแท้จริงสำหรับการคำนวณแบบขนาน มันไม่ได้จำกัดอยู่แค่ NVIDIA

    • ส่วนของ Pytorch ที่เกี่ยวข้องกับแบ็กเอนด์ของ NVIDIA ตอนนี้อาจเขียนตรงใน Python ได้
    • ประเด็นสำคัญคือสำหรับผู้ใช้ปลายทาง/นักพัฒนาแล้ว สิ่งนี้ไม่สำคัญหรือไม่ควรสำคัญ
    • แพลตฟอร์มใหม่นี้อาจขยายแนวคิดทั้งหมดของการคำนวณบน GPU ไปยังโดเมนอื่น ๆ มากขึ้น เช่น เกม ผ่าน Python
    • ลองนึกภาพการรันเกม Rust ที่ทำงานบน GPU เป็นหลักผ่าน Python
  • CuTile ให้ความรู้สึกเหมือนเป็นภาคต่อของ Triton จาก OpenAI ในหลายด้าน คุณไม่ได้แค่ได้ primitive ระดับ tile/block และ TileIR เท่านั้น แต่ยังได้โมเดลการเขียนโปรแกรม SIMT ที่เหมาะสมใน CuPy ด้วย ดูเหมือนจะมีคนไม่มากนักที่สังเกตเห็นมันในงาน GTC ปีนี้ มันเจ๋งมาก

    • ถึงอย่างนั้นก็แทบไม่มีประกาศหรือทอล์กที่เกี่ยวกับ CPU เลย Grace CPU ถูกประกาศมาพักใหญ่แล้ว แต่ดูเหมือนว่าเราคงยังไม่ได้เห็น abstraction แบบทั่วไปที่ทำงานได้ลื่นไหลทั้งบน Nvidia CPU และ GPU ในเร็ว ๆ นี้
    • สำหรับคนที่ทำงานกับอัลกอริทึมขนานทุกวัน นี่เป็นปัญหา การดีบักด้วย NSight และ CUDA-GDB ยังไม่เหมือน GDB แบบดิบ ๆ และการออกแบบอัลกอริทึมบน CPU ก่อนแล้วค่อยพอร์ตไป GPU นั้นง่ายกว่ามาก
    • ในบรรดาทีมทั้งหมดในวงการคอมไพเลอร์ Modular เป็นหนึ่งในไม่กี่ทีมที่ไม่ได้ถูกกระแส LLM กลืนไปทั้งหมด และยังสร้าง abstraction และภาษาที่ครอบคลุมหลายแพลตฟอร์มอย่างจริงจัง ซึ่งยิ่งมีคุณค่ามากขึ้นในสภาพแวดล้อมแบบนี้ ฉันอยากให้คนลองเล่น Mojo กันมากขึ้น บางทีมันอาจเป็นสิ่งที่ช่วยเชื่อมช่องว่างระหว่าง CPU กับ GPU ที่เราเจอกันทุกวันได้ในที่สุด
  • ฉันอยากรู้มากว่ามันเทียบกับ JAX อย่างไร

    • JAX ช่วยให้คุณเขียนโค้ด Python ที่รันได้บน GPU ของแบรนด์อื่น ไม่ใช่แค่ Nvidia เท่านั้น (การรองรับแตกต่างกันไป) และก็มีฟังก์ชันที่ใช้แทน NumPy ได้แบบ drop-in ด้วย
    • แต่นี่รองรับแค่ Nvidia เท่านั้น แล้วมันทำอะไรที่ JAX ทำไม่ได้หรือเปล่า? ใช้ง่ายกว่าหรือไม่? ยึดติดกับอาร์เรย์ขนาดคงที่น้อยกว่าหรือเปล่า? การผูกตัวเองกับ GPU แค่ยี่ห้อเดียวคุ้มค่าหรือไม่?
  • นี่สุดยอดมาก คนที่เคยพิจารณา AMD + ROCm เป็นทางเลือกแทน NVIDIA ในสาย AI คงจะไม่เหลือแล้ว

    • ฉันเป็นหนึ่งในคนที่ไม่ได้เรียน C++ จนถึงระดับที่เขียนโค้ดสำหรับรันบน GPU ได้จริง (และก็คงไม่เรียน) แต่ตอนนี้กลับมีไปป์ไลน์ตรงสู่ GPU ผ่าน Python ได้ น่าทึ่งมาก
    • ความหมายในเชิงประสิทธิภาพนั้นมหาศาล ไม่ใช่แค่สำหรับไลบรารี Python อย่าง PyTorch แต่สำหรับทุกอย่างที่รันบน NVIDIA GPU
    • ฉันชอบเห็นการปรับปรุงประสิทธิภาพ เราได้ยินกันตลอดว่า OpenAI กับ Google จะต้องใช้โรงไฟฟ้านิวเคลียร์กี่แห่งเพื่อขับเคลื่อน GPU ทั้งหมด
  • รองรับ Rust เป็นลำดับถัดไปหรือไม่? ตอนนี้ฉันยังต้อง [de]serialize โครงสร้างข้อมูลของตัวเองเป็นอาร์เรย์ไบต์ด้วยมือเวลาเข้า/ออกเคอร์เนลอยู่เลย มันคงดีมากถ้ามีโครงสร้างข้อมูลที่ใช้ร่วมกันได้จริงเหมือนที่ CUDA มีให้ใน C++

  • Python กำลังกลายเป็น lingua franca ของภาษาโปรแกรมอย่างแท้จริง การยอมรับพุ่งสูงขึ้นในยุคฟื้นฟู FOSS และฉันคิดว่ามันเป็นเครื่องมือสารพัดประโยชน์ที่ใกล้เคียงที่สุดเท่าที่เรามี

    • โมเดล PEP เป็นกลไกที่ดีสำหรับการพัฒนาตัวเองและการทำให้เป็นมาตรฐาน ด้วยโปรเจกต์อย่าง uv และ BeeWare ปัญหาเรื่องแพ็กเกจและการแจกจ่ายก็น่าจะเป็นสิ่งที่จะถูกแก้ได้ในไม่ช้า ฉันมั่นใจว่าการปรับปรุงประสิทธิภาพจะยังเดินหน้าต่อไปทุกปี
  • สิ่งนี้น่าจะผลักดันสิ่งที่ Python ขับเคลื่อนมาโดยตลอด นั่นคือทำให้มีการลองสิ่งต่าง ๆ ได้มากขึ้นและเร็วขึ้น ก่อนจะคงส่วนที่เหลือไว้ในภาษาที่เร็วกว่า โดยรวมแล้วนี่เป็นการเคลื่อนไหวที่ยอดเยี่ยม ฉันตั้งตารอที่จะได้ลองเล่นมันอย่างแน่นอน

  • CUDA เกิดมาจาก C และ C++ ฉันหวังว่าพวกเขาจะทำเวอร์ชัน C ของ CUDA จริง ๆ แทนที่จะขยาย C++ แล้วเรียกมันว่า CUDA C

 
iwi19 2025-04-06

ความเร็วช่วงแรกนี่จริงหรือเปล่า? ช้าเกินไปนะ...