ระบบนิเวศของ Rust ยังคงขยายขีดความสามารถในการประมวลผลประสิทธิภาพสูงด้วย CubeCL ซึ่งเป็นส่วนขยายภาษาการคำนวณแบบหลายแพลตฟอร์มที่ช่วยให้นักพัฒนาสามารถเขียนโค้ด GPU โดยตรงใน Rust การอภิปรายในชุมชนแสดงให้เห็นทั้งความกระตือรือร้นต่อศักยภาพของโปรเจกต์นี้และความกังวลเกี่ยวกับเอกสารและการนำเสนอคุณสมบัติในปัจจุบัน
คุณสมบัติขั้นสูงถูกซ่อนอยู่หลังเอกสารที่มีน้อย
แม้ว่า CubeCL จะมีความสามารถที่น่าประทับใจ สมาชิกชุมชนหลายคนได้ชี้ให้เห็นว่า README ของโปรเจกต์ไม่ได้แสดงคุณสมบัติที่ทรงพลังที่สุด ตัวอย่างปัจจุบันมุ่งเน้นไปที่การดำเนินการแบบ element-wise อย่างง่าย ซึ่งไม่ได้แสดงศักยภาพของไลบรารีสำหรับงานการคำนวณ GPU ขั้นสูงอย่างเต็มที่
เรารองรับการทำงานแบบ warp, barriers สำหรับ Cuda, atomics สำหรับแบ็กเอนด์ส่วนใหญ่ รวมถึงคำสั่ง tensor cores ด้วย มันเพียงแค่ไม่ได้รับการบันทึกไว้อย่างดีใน readme!
หนึ่งในผู้เขียนหลักของโปรเจกต์ยอมรับข้อจำกัดนี้ ยืนยันว่า CubeCL จริงๆ แล้วรองรับเทคนิคการเขียนโปรแกรม GPU ที่ซับซ้อนรวมถึงการดำเนินการ warp (เรียกว่า Plane Operations ใน CubeCL), barriers, atomics และแม้แต่คำสั่ง tensor core ทีมงานยังได้ใช้คำสั่ง TMA (Tensor Memory Accelerator) สำหรับ CUDA แต่ความสามารถขั้นสูงเหล่านี้ไม่ได้ถูกนำเสนออย่างโดดเด่นในเอกสาร
คำขอจากชุมชนสำหรับตัวอย่างที่ซับซ้อนมากขึ้น
นักพัฒนาหลายคนแนะนำว่าโปรเจกต์จะได้ประโยชน์จากการแสดงตัวอย่างที่ซับซ้อนมากขึ้น โดยเฉพาะการคูณเมทริกซ์ที่มีความแม่นยำผสม ซึ่งเป็นความต้องการทั่วไปในงาน AI ผู้แสดงความคิดเห็นคนหนึ่งแนะนำเป็นพิเศษให้แทนที่ตัวอย่าง element-wise ปัจจุบันด้วยการสาธิต GEMM with a twist ที่จะแสดงประโยชน์ของ CubeCL สำหรับแอปพลิเคชัน AI ได้ดีขึ้น
ทีม CubeCL ตอบสนองในเชิงบวกต่อคำแนะนำเหล่านี้ โดยผู้มีส่วนร่วมคนหนึ่งกล่าวว่าการสนับสนุนสำหรับประเภทข้อมูลใหม่อย่าง FP8 และ FP4 มีการวางแผนเป็นโปรเจกต์ถัดไป อย่างไรก็ตาม พวกเขาสังเกตว่าข้อจำกัดด้านฮาร์ดแวร์เป็นคอขวดในปัจจุบัน เนื่องจากมีผู้มีส่วนร่วมเพียงคนเดียวที่มีอุปกรณ์ที่จำเป็นในการทดสอบประเภทใหม่เหล่านี้
ตำแหน่งในระบบนิเวศการเขียนโปรแกรม GPU
การอภิปรายในชุมชนยังเกี่ยวข้องกับการเปรียบเทียบ CubeCL กับโซลูชันการเขียนโปรแกรม GPU อื่นๆ ผู้แสดงความคิดเห็นหลายคนเปรียบเทียบกับ Halide, OpenCL และ SYCL โดยสนใจเป็นพิเศษว่าคุณสมบัติ comptime ของ CubeCL แตกต่างจากทางเลือกเหล่านี้อย่างไร
ระบบ comptime อนุญาตให้นักพัฒนาดำเนินโค้ดตามใจในเคอร์เนลในเวลาคอมไพล์ ซึ่งให้ความยืดหยุ่นมากกว่า generics แบบดั้งเดิม สิ่งนี้ช่วยให้สามารถแตกกิ่งตามการกำหนดค่าในเวลาคอมไพล์เพื่อเลือกอัลกอริทึมที่เหมาะสมที่สุดสำหรับเป้าหมายฮาร์ดแวร์ที่แตกต่างกัน
ผู้ใช้บางคนสงสัยว่าทำไม OpenCL จึงไม่ถูกรวมเป็นแบ็กเอนด์เช่นเดียวกับ WGPU, CUDA และ ROCm/HIP ผู้มีส่วนร่วมใน CubeCL อธิบายว่าในขณะที่คอมไพเลอร์ SPIR-V มีโครงสร้างพื้นฐานเพื่อกำหนดเป้าหมายทั้ง OpenCL และ Vulkan การใช้รันไทม์ OpenCL จะต้องมีการทำงานเพิ่มเติม พวกเขายังแสดงความสนใจในการทำความเข้าใจลักษณะประสิทธิภาพของ OpenCL บน CPU เมื่อเทียบกับการใช้งานที่เป็นธรรมชาติมากกว่า
รันไทม์ที่ CubeCL รองรับ:
- WGPU (ข้ามแพลตฟอร์ม: Vulkan, Metal, DirectX, WebGPU)
- CUDA (สำหรับ GPU ของ NVIDIA)
- ROCm/HIP (สำหรับ GPU ของ AMD) - อยู่ระหว่างการพัฒนา
- แผนในอนาคต: รันไทม์ CPU แบบ JIT พร้อมคำสั่ง SIMD ผ่าน Cranelift
คุณสมบัติหลัก:
- การเวกเตอร์ไรเซชันอัตโนมัติ
- Comptime (การปรับแต่งประสิทธิภาพในช่วงเวลาคอมไพล์)
- การปรับแต่งอัตโนมัติ
- รองรับการทำงานแบบ warp, barriers, atomics, tensor cores
- การคูณเมทริกซ์พร้อมรองรับ Tensor Core
การเชื่อมต่อกับ Burn Framework
บริบทสำคัญที่เกิดขึ้นจากความคิดเห็นคือความสัมพันธ์ของ CubeCL กับ Burn ซึ่งเป็นเฟรมเวิร์กการเรียนรู้เชิงลึกที่พัฒนาโดยทีมเดียวกัน CubeCL ทำหน้าที่เป็นแบ็กเอนด์การคำนวณสำหรับ Burn จัดการการดำเนินการเทนเซอร์ในขณะที่ Burn จัดการฟังก์ชันการเรียนรู้ของเครื่องระดับสูงขึ้นเช่นการหาอนุพันธ์อัตโนมัติ การรวมการดำเนินการ และกราฟการคำนวณแบบไดนามิก
ความต้องการสำหรับ CubeCL เกิดขึ้นโดยเฉพาะจากความต้องการของ Burn: ความสามารถในการเขียนอัลกอริทึม GPU ในภาษาโปรแกรมที่มีคุณสมบัติครบถ้วนในขณะที่เปิดใช้งานการคอมไพล์ในเวลารันไทม์สำหรับการรวมการดำเนินการ ทั้งหมดนี้ในขณะที่รักษาความเข้ากันได้ข้ามแพลตฟอร์มและประสิทธิภาพที่เหมาะสมที่สุด ตามที่นักพัฒนากล่าว ไม่มีเครื่องมือที่มีอยู่ตรงตามข้อกำหนดทั้งหมดเหล่านี้ในระบบนิเวศ Rust
ความสัมพันธ์ระหว่าง CubeCL และ Burn อธิบายการตัดสินใจออกแบบหลายอย่างเบื้องหลังไลบรารี รวมถึงการมุ่งเน้นที่ประสิทธิภาพและความเข้ากันได้ข้ามแพลตฟอร์ม นอกจากนี้ยังวาง CubeCL เป็นองค์ประกอบสำคัญในระบบนิเวศการเรียนรู้ของเครื่องที่ใช้ Rust ที่กำลังเติบโต
เมื่อโปรเจกต์เติบโตขึ้น ชุมชนดูเหมือนจะกระตือรือร้นสำหรับเอกสารและตัวอย่างที่ครอบคลุมมากขึ้นซึ่งแสดงความสามารถเต็มรูปแบบของ CubeCL ได้ดีขึ้น ด้วยการสนับสนุนที่วางแผนไว้สำหรับประเภทข้อมูลใหม่และการพัฒนาอย่างต่อเนื่อง CubeCL ดูเหมือนจะพร้อมที่จะเติมช่องว่างที่สำคัญในภูมิทัศน์การคำนวณ GPU ของ Rust โดยเฉพาะอย่างยิ่งสำหรับแอปพลิเคชันการเรียนรู้ของเครื่อง
อ้างอิง: cubecl/cubecl