- MLX คือ เฟรมเวิร์กแบบอาร์เรย์ สำหรับนักวิจัยด้านแมชชีนเลิร์นนิงบนพื้นฐาน Apple Silicon โดยมอบประสบการณ์การใช้งานที่คล้ายกับ NumPy และ PyTorch
- ขณะนี้กำลังดำเนินการเพิ่ม CUDA backend ให้กับ MLX
- เป้าหมายหลัก คือการรองรับ unified memory และการใช้งานฮาร์ดแวร์ NVIDIA ได้อย่างกว้างขวาง
- ตอนนี้ยังใช้งานได้เฉพาะ ตัวอย่างจากทิวทอเรียล เท่านั้น และมีการยืนยันการ build และ test บนสภาพแวดล้อม Ubuntu 22.04 + CUDA 11.6 แล้ว
- ขณะนี้มีการปรับปรุง optimization และ refactoring ซ้ำอย่างต่อเนื่อง ระหว่างกระบวนการแก้ปัญหาด้านประสิทธิภาพและคอขวดในช่วงแรก
- CUDA backend ของ MLX ดำเนินงานภายใต้การสนับสนุนจาก Apple โดยมีเป้าหมายเพื่อมอบประสบการณ์ที่สม่ำเสมอระหว่างการพัฒนาบน Mac และการนำไป deploy บนสภาพแวดล้อมคอมพิวต์ขนาดใหญ่ ผ่านการรองรับ unified memory และฮาร์ดแวร์ NVIDIA
แนะนำเฟรมเวิร์ก MLX
- MLX เป็น เฟรมเวิร์กอาร์เรย์สำหรับแมชชีนเลิร์นนิง ที่พัฒนาโดยทีมวิจัยแมชชีนเลิร์นนิงของ Apple
- พัฒนาขึ้นเพื่อช่วยให้วิศวกรและนักวิจัยทดลองได้อย่างมีประสิทธิภาพ และตรวจสอบไอเดียได้อย่างรวดเร็ว
- แม้จะมีจุดเด่นที่รองรับ Apple Silicon แต่ตอนนี้กำลังพยายามขยายความสามารถให้ทำงานได้ในสภาพแวดล้อม NVIDIA GPU ด้วยการเพิ่ม CUDA backend
คุณสมบัติหลัก
- API ที่คุ้นเคย: Python API คล้าย NumPy และแพ็กเกจระดับบนอย่าง
mlx.nn, mlx.optimizers ให้อินเทอร์เฟซที่คล้าย PyTorch
- มี API สำหรับ C++, C, Swift ด้วย และคงประสบการณ์การใช้งานที่สอดคล้องกับ Python API
- การแปลงฟังก์ชันที่ประกอบต่อกันได้: มีความสามารถอย่าง automatic differentiation, automatic vectorization และการเพิ่มประสิทธิภาพกราฟการคำนวณ
- การคำนวณแบบหน่วงเวลา: รวมหลายโอเปอเรชันเข้าด้วยกันและคำนวณผลเมื่อจำเป็นจริงเท่านั้น ทำให้ใช้ทรัพยากรได้อย่างมีประสิทธิภาพ
- การสร้างกราฟแบบไดนามิก: แม้ shape ของข้อมูลนำเข้าจะเปลี่ยน ก็สามารถรันได้ทันทีโดยไม่ต้องคอมไพล์ช้า ๆ ทำให้พัฒนาและดีบักได้ง่าย
- โมเดล multi-device และ unified memory:
- เดิมรองรับเฉพาะ CPU และ Apple GPU แต่ตอนนี้กำลังผลักดันการรองรับสภาพแวดล้อม NVIDIA GPU ผ่าน CUDA backend
- ด้วยสถาปัตยกรรม unified memory จึงสามารถใช้งานอ็อบเจ็กต์เดียวกันบนอุปกรณ์ที่รองรับทั้งหมดได้โดยไม่ต้องคัดลอกหน่วยความจำ
- การออกแบบที่กระชับและขยายต่อได้: ช่วยให้นักวิจัยขยายและปรับปรุงเฟรมเวิร์กได้ง่าย
ความแตกต่างจากเฟรมเวิร์กอื่นและแรงบันดาลใจ
- ได้รับแรงบันดาลใจด้านการออกแบบจาก NumPy, PyTorch, Jax, ArrayFire เป็นต้น
- จุดเด่นคือการเน้น โมเดล unified memory, อินเทอร์เฟซที่กระชับ และสภาพแวดล้อมแบบ รันทันที/ดีบักได้ทันที
ตัวอย่างเด่นและกรณีการใช้งาน
- ใน MLX Examples repo มีโค้ดตัวอย่างหลากหลาย
- การฝึก Transformer language model
- การสร้างข้อความขนาดใหญ่บนพื้นฐาน LLaMA และการ fine-tuning ด้วย LoRA
- การสร้างภาพด้วย Stable Diffusion
- รวมถึงตัวอย่างการใช้งานโมเดลล่าสุด เช่น การรู้จำเสียงพูดด้วย OpenAI Whisper
ความหมายของ MLX และการรองรับ CUDA
- MLX ซึ่งเดิมเป็นเฟรมเวิร์กที่เน้น Apple Silicon กำลังขยายศักยภาพให้ใช้งานได้กว้างขึ้นในสภาพแวดล้อม NVIDIA GPU ด้วยการนำ CUDA backend มาใช้
- ด้วยการรองรับ CUDA รุ่นใหม่ MLX มีแนวโน้มจะกลายเป็นเฟรมเวิร์กที่เหมาะทั้งกับ งานวิจัยล่าสุดและการใช้งานในภาคอุตสาหกรรม บนฮาร์ดแวร์ทั้งฝั่ง Apple และ NVIDIA
3 ความคิดเห็น
ถ้าแค่ทำให้ใช้ได้เฉพาะ nvidia gpu บน macos ก็พอแล้ว... เฮ้อๆ
เป็นข่าวที่ดีเลย 555 หวังว่าจะรองรับ CUDA เร็ว ๆ จะได้เทรนความเร็วสูงบน Mac ได้ด้วยครับ~!
ความเห็นจาก Hacker News
คำแนะนำการติดตั้ง
แนะนำ zcbenz
ดู bullet ใน readme ของรีโป: MLX GitHub
คิดว่าน่าจะน่าสนใจถ้าขยายไปยัง UMA APU ทั้งหมด (ไม่ว่าผู้ผลิตไหน) แต่ก็สงสัยว่าบน discrete GPU น่าจะต้องใช้วิธีที่ต่างออกไป
พอไปอ่านคอมเมนต์ใน PR ดูแล้ว เหมือนว่า CUDA ก็รองรับ UMA API โดยตรงเช่นกัน และจะจัดการ copy ให้แบบโปร่งใสเมื่อจำเป็น
เลยสงสัยว่า Apple สนับสนุนอยู่เบื้องหลังโดยไม่ออกหน้าอย่างเป็นทางการหรือเปล่า มีข่าวลือด้วยว่าทีมกำลังย้าย
กล่าวคือหมายความว่าโค้ด MLX สามารถ build และรันบนฮาร์ดแวร์ x86 + GeForce ได้ ไม่ใช่ในทางกลับกัน
ฉันลองเองแล้ว ตอนนี้มีแค่เวอร์ชัน Python 3.12 เท่านั้นที่ขึ้นบน pypi
หน้า MLX-CUDA บน PYPI
ช่วงหลังเริ่มมีรีวิวจากยูทูบเบอร์ว่า DGX Spark คุ้มค่าน้อยกว่า Strix Halo ข้อเสียคือ ROCm ยังไม่ค่อยพร้อม (แต่ดูเหมือนจะดีขึ้นเร็ว ๆ นี้) ถ้า CUDA บนอุปกรณ์ Apple ใช้งานได้สมบูรณ์จริง ต่อให้ Strix จะถูกและดีแค่ไหน มันก็เป็นตัวเลือกที่ต้องคิดหนักเหมือนกัน