NVIDIA เพิ่มการรองรับ Python แบบเนทีฟให้ CUDA ในที่สุด
(thenewstack.io)- ชุดเครื่องมือ 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 ความคิดเห็น
มันจะเร็วกว่า Cuda wrapper ที่มีอยู่เดิมอย่าง Cupy, pytorch ไหมนะ ข้อดีของ Cupy กับ torch คือ API แทบจะเหมือนกับ numpy มาก เลยสามารถย้ายโค้ดทดสอบที่เขียนด้วย numpy มาใช้ได้แทบไม่ต้องออกแรงมาก อันนี้คงต้องลองใช้ดูก่อนครับ
ความคิดเห็นจาก Hacker News
ฉันไม่ใช่โปรแกรมเมอร์ GPU แต่ดูเหมือนว่าคนแบบฉันก็น่าจะใช้งานได้ง่าย ฉันลองทำเดโมง่าย ๆ ที่ใช้ทั้ง GPU และ CPU แล้ว ผลลัพธ์เป็นดังนี้
ฉันสงสัยว่าทำไม Python ถึงกลายเป็นเป้าหมายของสิ่งเหล่านี้ ฉันเห็นหลายโปรเจกต์เพิ่มการรองรับ Python เลยสงสัยว่าโค้ดเบส Python คอมไพล์ไปยังเป้าหมายที่หลากหลายได้ง่ายกว่าสิ่งอื่นหรือไม่
ดีใจที่ Pytorch มีแรงส่งมหาศาลก่อนที่สิ่งนี้จะออกมา ตอนนี้เรามีกึ่งมาตรฐานที่เป็นอิสระจากแพลตฟอร์มอย่างแท้จริงสำหรับการคำนวณแบบขนาน มันไม่ได้จำกัดอยู่แค่ NVIDIA
CuTile ให้ความรู้สึกเหมือนเป็นภาคต่อของ Triton จาก OpenAI ในหลายด้าน คุณไม่ได้แค่ได้ primitive ระดับ tile/block และ TileIR เท่านั้น แต่ยังได้โมเดลการเขียนโปรแกรม SIMT ที่เหมาะสมใน CuPy ด้วย ดูเหมือนจะมีคนไม่มากนักที่สังเกตเห็นมันในงาน GTC ปีนี้ มันเจ๋งมาก
ฉันอยากรู้มากว่ามันเทียบกับ JAX อย่างไร
นี่สุดยอดมาก คนที่เคยพิจารณา AMD + ROCm เป็นทางเลือกแทน NVIDIA ในสาย AI คงจะไม่เหลือแล้ว
รองรับ Rust เป็นลำดับถัดไปหรือไม่? ตอนนี้ฉันยังต้อง [de]serialize โครงสร้างข้อมูลของตัวเองเป็นอาร์เรย์ไบต์ด้วยมือเวลาเข้า/ออกเคอร์เนลอยู่เลย มันคงดีมากถ้ามีโครงสร้างข้อมูลที่ใช้ร่วมกันได้จริงเหมือนที่ CUDA มีให้ใน C++
Python กำลังกลายเป็น lingua franca ของภาษาโปรแกรมอย่างแท้จริง การยอมรับพุ่งสูงขึ้นในยุคฟื้นฟู FOSS และฉันคิดว่ามันเป็นเครื่องมือสารพัดประโยชน์ที่ใกล้เคียงที่สุดเท่าที่เรามี
สิ่งนี้น่าจะผลักดันสิ่งที่ Python ขับเคลื่อนมาโดยตลอด นั่นคือทำให้มีการลองสิ่งต่าง ๆ ได้มากขึ้นและเร็วขึ้น ก่อนจะคงส่วนที่เหลือไว้ในภาษาที่เร็วกว่า โดยรวมแล้วนี่เป็นการเคลื่อนไหวที่ยอดเยี่ยม ฉันตั้งตารอที่จะได้ลองเล่นมันอย่างแน่นอน
CUDA เกิดมาจาก C และ C++ ฉันหวังว่าพวกเขาจะทำเวอร์ชัน C ของ CUDA จริง ๆ แทนที่จะขยาย C++ แล้วเรียกมันว่า CUDA C
ความเร็วช่วงแรกนี่จริงหรือเปล่า? ช้าเกินไปนะ...