Mojo Cho Thấy Tiềm Năng Thay Thế Cython Nhưng Vẫn Chậm Hơn 3 Lần Trong Các Thử Nghiệm Ban Đầu

Nhóm Cộng đồng BigGo
Mojo Cho Thấy Tiềm Năng Thay Thế Cython Nhưng Vẫn Chậm Hơn 3 Lần Trong Các Thử Nghiệm Ban Đầu

Một nhà phát triển gần đây đã thử nghiệm các tính năng tương tác Python mới của Mojo bằng cách dịch mã Cython từ scikit-learn sang Mojo. Thí nghiệm này cho thấy cả tiềm năng và những hạn chế hiện tại của việc sử dụng Mojo như một sự thay thế cho các công cụ tăng tốc Python hiện có.

Thử nghiệm tập trung vào việc dịch vòng lặp bên trong của thuật toán phân cụm DBSCAN từ scikit-learn, vốn được viết bằng Cython. Thuật toán này gắn nhãn các điểm cốt lõi trong các cụm dữ liệu và truyền những nhãn đó đến các điểm lân cận - một trường hợp kinh điển mà Python cần sự hỗ trợ từ các ngôn ngữ nhanh hơn.

Kết Quả Hiệu Suất Cho Thấy Những Kết Quả Trái Chiều

Nỗ lực dịch thuật ban đầu diễn ra một cách đáng ngạc nhiên là suôn sẻ, với phần lớn mã Cython hoạt động gần như không thay đổi trong Mojo nhờ cú pháp dựa trên Python. Tuy nhiên, kết quả hiệu suất lại kể một câu chuyện khác. Phiên bản đầu tiên chạy chậm hơn khoảng 800 lần so với triển khai Cython gốc, chủ yếu vì Mojo đang xử lý các đối tượng Python chung không thể được tối ưu hóa đúng cách.

Sau một số điều chỉnh để chuyển đổi các đối tượng Python thành các kiểu dữ liệu Mojo gốc được gọi là Spans, hiệu suất đã cải thiện đáng kể chỉ còn chậm hơn 3 lần so với Cython. Mặc dù điều này thể hiện một cải thiện đáng kể từ nỗ lực ban đầu, nhưng vẫn chưa đạt được tốc độ của Cython.

Kết Quả So Sánh Hiệu Suất

Triển Khai Hiệu Suất Tương Đối
Cython Gốc Chuẩn (nhanh nhất)
Mojo (thử nghiệm ban đầu) chậm hơn ~800 lần
Mojo (tối ưu hóa với Spans) chậm hơn ~3 lần

Cộng Đồng Tranh Luận Về Các Phương Pháp Thay Thế

Cộng đồng lập trình đã có những phản ứng trái chiều với thí nghiệm này. Một số nhà phát triển chỉ ra rằng bản thân Cython cũng đối mặt với những thách thức về việc áp dụng, đặc biệt là sự phụ thuộc vào các hệ thống xây dựng cũ mà nhiều người coi là lỗi thời vào năm 2025. Những người khác gợi ý rằng các công cụ như Numba, Julia, hoặc Rust với PyO3 có thể là những lựa chọn thay thế tốt hơn để tăng tốc mã Python.

Trong góc nhỏ của tôi về tính toán khoa học, có vẻ như Cython phần lớn đã được thay thế bởi Numba và CFFI, hoặc chỉ là Julia.

Cuộc thảo luận cũng làm nổi bật những hạn chế hiện tại của Mojo, bao gồm các hạn chế về nền tảng (hiện tại chỉ hỗ trợ hạn chế trên Linux), các mối quan ngại về giấy phép, và thực tế rằng nó vẫn đang trong giai đoạn phát triển ban đầu với dự kiến phát hành phiên bản 1.0 vào khoảng năm 2027.

Các Công Cụ Tăng Tốc Python Thay Thế Được Đề Cập

  • Numba: Trình biên dịch JIT cho Python
  • CFFI: Giao diện hàm ngoại lai C cho Python
  • Julia: Ngôn ngữ lập trình hiệu suất cao
  • Rust + PyO3/Maturin: Liên kết Rust cho Python
  • pybind11: Liên kết C++ cho Python
  • ctypes: Thư viện Python tích hợp sẵn để gọi các hàm C

Tiềm Năng Tương Lai Bất Chấp Những Hạn Chế Hiện Tại

Mặc dù có khoảng cách về hiệu suất, thí nghiệm chứng minh rằng việc dịch mã tăng tốc hiện có sang Mojo tương đối đơn giản. Thách thức chính nằm ở việc chuyển đổi các kiểu dữ liệu Python sang các kiểu gốc của Mojo để mở khóa hiệu suất tốt hơn. Các nhà phát triển gợi ý rằng những thuật toán phức tạp hơn có thể tận dụng khả năng vector hóa và GPU của Mojo có thể cho thấy kết quả tốt hơn.

Thử nghiệm này chỉ đại diện cho một bước nhỏ hướng tới việc có thể thay thế các phần lớn hơn của codebase Cython của scikit-learn bằng Mojo. Với sự phổ biến to lớn của scikit-learn với hơn 100 triệu lượt tải xuống mỗi tháng, bất kỳ cải thiện hiệu suất nào cũng có thể mang lại lợi ích cho một số lượng lớn người dùng. Tuy nhiên, những dự án tham vọng như vậy có thể sẽ cần phải chờ đến khi Mojo đạt được sự trưởng thành và ổn định hơn.

Tham khảo: Translating Cython to Mojo, a first attempt