Mojo แสดงศักยภาพเป็นทางเลือกแทน Cython แต่ยังช้ากว่า 3 เท่าในการทดสอบเบื้องต้น

ทีมชุมชน BigGo
Mojo แสดงศักยภาพเป็นทางเลือกแทน Cython แต่ยังช้ากว่า 3 เท่าในการทดสอบเบื้องต้น

นักพัฒนาคนหนึ่งเพิ่งทดสอบฟีเจอร์ Python interoperability ใหม่ของ Mojo โดยการแปลงโค้ด Cython จาก scikit-learn เป็น Mojo การทดลองนี้เผยให้เห็นทั้งศักยภาพและข้อจำกัดปัจจุบันของการใช้ Mojo เป็นตัวทดแทนเครื่องมือเร่งความเร็ว Python ที่มีอยู่

การทดสอบมุ่งเน้นไปที่การแปลง inner loop ของอัลกอริทึม DBSCAN clustering จาก scikit-learn ซึ่งเดิมเขียนด้วย Cython อัลกอริทึมนี้ทำหน้าที่ติดป้ายกำกับจุดหลักในกลุ่มข้อมูลและเผยแพร่ป้ายกำกับเหล่านั้นไปยังจุดใกล้เคียง ซึ่งเป็นกรณีคลาสสิกที่ Python ต้องการความช่วยเหลือจากภาษาที่เร็วกว่า

ผลการทดสอบประสิทธิภาพแสดงผลลัพธ์ที่หลากหลาย

ความพยายามในการแปลงครั้งแรกนั้นตรงไปตรงมาอย่างน่าประหลาดใจ โดยโค้ด Cython ส่วนใหญ่สามารถทำงานใน Mojo ได้เกือบโดยไม่ต้องเปลี่ยนแปลง ต้องขอบคุณ syntax ที่ใช้ Python เป็นฐาน อย่างไรก็ตาม ผลการทดสอบประสิทธิภาพกลับเล่าเรื่องที่แตกต่างออกไป เวอร์ชันแรกทำงานช้ากว่าการใช้งาน Cython เดิมประมาณ 800 เท่า ส่วนใหญ่เป็นเพราะ Mojo กำลังประมวลผล Python objects แบบทั่วไปที่ไม่สามารถปรับให้เหมาะสมได้อย่างเหมาะสม

หลังจากการปรับแต่งบางอย่างเพื่อแปลง Python objects เป็นชนิดข้อมูลดั้งเดิมของ Mojo ที่เรียกว่า Spans ประสิทธิภาพก็ดีขึ้นอย่างมากจนเหลือเพียงช้ากว่า Cython แค่ 3 เท่า แม้ว่านี่จะแสดงถึงการปรับปรุงที่สำคัญจากความพยายามครั้งแรก แต่ก็ยังไม่สามารถเทียบเท่าความเร็วของ Cython ได้

ผลการเปรียบเทียบประสิทธิภาพ

การใช้งาน ประสิทธิภาพเทียบเคียง
Original Cython พื้นฐาน (เร็วที่สุด)
Mojo (ความพยายามครั้งแรก) ช้ากว่าประมาณ 800 เท่า
Mojo (ปรับปรุงแล้วด้วย Spans) ช้ากว่าประมาณ 3 เท่า

ชุมชนอภิปรายแนวทางทางเลือก

ชุมชนนักพัฒนาแสดงปฏิกิริยาที่หลากหลายต่อการทดลองนี้ นักพัฒนาบางคนชี้ให้เห็นว่า Cython เองก็เผชิญกับความท้าทายในการนำไปใช้ โดยเฉพาะการพึ่งพาระบบ build เก่าที่หลายคนถือว่าล้าสมัยในปี 2025 คนอื่นๆ แนะนำว่าเครื่องมืออย่าง Numba, Julia หรือ Rust กับ PyO3 อาจเป็นทางเลือกที่ดีกว่าสำหรับการเร่งความเร็วโค้ด Python

ในมุมเฉพาะของฉันในด้าน scientific computing รู้สึกเหมือน Cython ถูกแทนที่ด้วย Numba และ CFFI หรือแค่ Julia

การอภิปรายยังเน้นย้ำถึงข้อจำกัดปัจจุบันของ Mojo รวมถึงข้อจำกัดของแพลตฟอร์ม (ปัจจุบันรองรับ Linux อย่างจำกัด) ข้อกังวลเรื่องใบอนุญาต และความจริงที่ว่ายังอยู่ในขั้นตอนการพัฒนาเบื้องต้นโดยคาดว่าจะเปิดตัวเวอร์ชัน 1.0 ประมาณปี 2027

เครื่องมือเร่งความเร็ว Python ทางเลือกที่ได้รับการกล่าวถึง

  • Numba: คอมไพเลอร์ JIT สำหรับ Python
  • CFFI: C Foreign Function Interface สำหรับ Python
  • Julia: ภาษาโปรแกรมมิ่งประสิทธิภาพสูง
  • Rust + PyO3/Maturin: การเชื่อมต่อ Rust กับ Python
  • pybind11: การเชื่อมต่อ C++ กับ Python
  • ctypes: ไลบรารี Python ในตัวสำหรับเรียกใช้ฟังก์ชัน C

ศักยภาพในอนาคตแม้จะมีข้อจำกัดปัจจุบัน

แม้จะมีช่องว่างด้านประสิทธิภาพ การทดลองก็แสดงให้เห็นว่าการแปลงโค้ดเร่งความเร็วที่มีอยู่เป็น Mojo นั้นค่อนข้างง่าย ความท้าทายหลักอยู่ที่การแปลงชนิดข้อมูล Python เป็นชนิดข้อมูลดั้งเดิมของ Mojo เพื่อปลดล็อกประสิทธิภาพที่ดีกว่า นักพัฒนาแนะนำว่าอัลกอริทึมที่ซับซ้อนกว่าที่สามารถใช้ประโยชน์จากความสามารถ vectorization และ GPU ของ Mojo อาจแสดงผลลัพธ์ที่ดีกว่า

การทดสอบนี้แสดงถึงเพียงก้าวเล็กๆ สู่การแทนที่ส่วนใหญ่ของโค้ดเบส Cython ของ scikit-learn ด้วย Mojo เมื่อพิจารณาถึงความนิยมอย่างมากของ scikit-learn ที่มีการดาวน์โหลดมากกว่า 100 ล้านครั้งต่อเดือน การปรับปรุงประสิทธิภาพใดๆ ก็สามารถเป็นประโยชน์ต่อผู้ใช้จำนวนมหาศาล อย่างไรก็ตาม โครงการที่ทะเยอทะยานเช่นนี้น่าจะต้องรอจนกว่า Mojo จะมีความเป็นผู้ใหญ่และเสถียรภาพมากขึ้น

อ้างอิง: Translating Cython to Mojo, a first attempt