- Python chiếm ưu thế trong AI nhờ hệ sinh thái của nó, nhưng GIL, kiểu động và trình thông dịch lại cản trở hiệu suất.
- Mojo, dựa trên MLIR, cung cấp khả năng biên dịch, song song hóa thực sự và tương thích với các thư viện Python.
- Modular hợp nhất thời gian chạy cho PyTorch và TensorFlow, với khả năng tăng tốc và lượng tử hóa tích hợp.
- Có thể tăng tốc đáng kể (Mandelbrot, SIMD); thách thức là đưa lợi thế đó vào sản xuất và nhiều phần cứng.

Cuộc tranh luận về hiệu năng giữa Mojo và Python đang diễn ra sôi nổi vì nó chạm đến cốt lõi của trí tuệ nhân tạo hiện đại: tốc độ thực, tính dễ sử dụng và khả năng hỗ trợ phần cứng. Trong những năm gần đây, các số liệu về khả năng tăng tốc đã xuất hiện, thoạt nhìn có vẻ như chỉ là viễn tưởng, nhưng chúng được hỗ trợ bởi những thay đổi sâu sắc trong trình biên dịch và cách thức thực thi mã trên CPU, GPU và bộ tăng tốc AI.
Trong bài viết này, chúng tôi đã tổng hợp một cái nhìn tổng quan toàn diện về mọi thứ được công bố trên nhiều nguồn khác nhau về Python, những hạn chế về hiệu năng của nó và cách tiếp cận của Mojo , ngôn ngữ được hỗ trợ bởi Modular và dẫn đầu bởi Chris Lattner (LLVM, Clang, Swift). Chúng tôi cũng giải thích về MLIR, lý do đằng sau các nút thắt cổ chai GIL, sự khác biệt giữa CUDA và MPS, khả năng tương thích với hệ sinh thái Python và những thách thức về việc áp dụng vẫn còn ở phía trước.
Python thống trị AI, nhưng kiến trúc của nó không giúp cải thiện hiệu suất
Không có gì ngạc nhiên khi Python là ngôn ngữ phổ quát của trí tuệ nhân tạo : cú pháp đơn giản, hàng ngàn thư viện, vô số hướng dẫn và một cộng đồng khổng lồ. Tuy nhiên, sự phổ biến này đi kèm với một thực tế khó chịu: Python là ngôn ngữ thông dịch , kiểu dữ liệu động và chịu sự chi phối của Khóa Trình thông dịch Toàn cục (GIL) , giới hạn việc thực thi đồng thời mã Python thuần túy chỉ trên một luồng duy nhất.
Thiết kế này cho phép phát triển nhanh hơn, nhưng lại làm giảm tốc độ và hiệu quả bộ nhớ so với các ngôn ngữ biên dịch như C/C++, Swift hoặc Rust. Trong các tác vụ học máy/học sâu, nơi mỗi mili giây đều quan trọng và phần cứng cực kỳ nhanh, sự khác biệt này càng trở nên rõ rệt.
Để bù đắp, hệ sinh thái đã phải dùng đến các giải pháp thay thế: NumPy (với các phần được viết bằng C và Fortran), các thư viện ủy thác cho mã gốc , và các phần mở rộng C/C++ cho các thao tác quan trọng. Giải pháp này hoạt động, nhưng nó lại tạo ra nhiều lớp, sự phụ thuộc, và một "quái vật Frankenstein" gồm các phiên bản, framework và backend khác nhau, rất khó bảo trì trong môi trường sản xuất.
Hơn nữa, tính song song trong Python thường dựa vào xử lý đa tiến trình hoặc các thư viện giải phóng GIL trong các phần mã gốc. Kết quả là, trừ khi khối lượng công việc được phân bổ rất tốt cho C/C++ hoặc GPU, hiệu năng thô của Python sẽ trở thành nút thắt cổ chai.
NumPy và các "bản vá" khác: thiết yếu, nhưng có hạn chế
NumPy là một ví dụ điển hình: nhiều thao tác quan trọng của nó được viết bằng C hoặc Fortran , nhanh hơn đáng kể so với Python thuần túy. Tuy nhiên, khi nói đến song song hóa chi tiết, mở rộng quy mô lên nhiều lõi hoặc tích hợp với các bộ tăng tốc mới, những hạn chế của Python lại xuất hiện , đặc biệt nếu luồng điều khiển thường xuyên quay trở lại trình thông dịch.
Cách tiếp cận nhiều lớp này (Python → các phần mở rộng C/C++ → trình điều khiển/phần cứng) rất hiệu quả, nhưng phức tạp trong việc gỡ lỗi và triển khai . Trong AI quy mô lớn, với các quy trình huấn luyện, suy luận và xử lý hậu kỳ, sự phức tạp trong vận hành này có trọng lượng gần bằng số phép tính FLOPS khả dụng.
CUDA, MPS và vấn đề khả năng di động
Tăng tốc CUDA (NVIDIA) là một cứu cánh, nhưng cũng là một chiếc lồng vàng: một số mô hình và tối ưu hóa hoàn toàn phụ thuộc vào nền tảng NVIDIA. Nếu bạn cố gắng chạy cùng một đoạn mã trên Apple Silicon với Metal Performance Shaders (MPS) hoặc trên GPU của AMD, bạn có thể gặp phải các lệnh không được hỗ trợ hoặc đường dẫn tính toán không đầy đủ.
Sự so sánh phổ biến nhất rất rõ ràng: với CUDA, bạn đang lái một chiếc "Ferrari", trong khi MPS có thể cảm thấy hạn chế hơn đối với một số khối lượng công việc nhất định. Tuy nhiên, ngành công nghiệp đang hướng tới các tiêu chuẩn và tính di động vì không ai muốn ràng buộc doanh nghiệp của mình với một nhà cung cấp phần cứng duy nhất trừ khi thực sự cần thiết.
MLIR: cầu nối mà kỷ nguyên máy tính mới cần có
Để hiểu những gì Mojo đề xuất, chúng ta cần nói về MLIR (Multi-Level Intermediate Representation) , một dự án ra đời trong hệ sinh thái LLVM, bổ sung một biểu diễn trung gian được thiết kế cho hiệu năng cao và học máy . Không giống như pipeline LLVM cổ điển, MLIR xử lý đồ thị dữ liệu, vector hóa, tessellation, chèn DMA và quản lý bộ nhớ cache rõ ràng.
Nói một cách đơn giản: MLIR cho phép chuyển đổi mã cấp cao thành các triển khai rất gần với phần cứng mục tiêu (CPU, GPU, TPU, NPU, FPGA, v.v.), trích xuất tính song song và áp dụng các tối ưu hóa HPC mà trình biên dịch truyền thống không hỗ trợ tốt cho các lĩnh vực này.
Mojo thực chất là gì?
Mojo là một ngôn ngữ tự nhận mình là một tập hợp con của Python : nó duy trì cú pháp quen thuộc, có thể tận dụng cùng các thư viện và tích hợp mô hình biên dịch hiện đại được hỗ trợ bởi MLIR. Nó được ra mắt vào năm 2023, ban đầu là một môi trường thử nghiệm trực tuyến có thể truy cập theo yêu cầu, và sau đó là khả năng thực thi cục bộ trên GNU/Linux và macOS. Vào tháng 2 năm 2025, thư viện chuẩn của nó đã được công khai mã nguồn, mặc dù trình biên dịch vẫn là mã nguồn đóng cho đến ngày nay.
Mục tiêu rất tham vọng: sự đơn giản của Python kết hợp với hiệu năng của C/C++ , cộng thêm tính bảo mật và thân thiện với người dùng mà chúng ta đã thấy ở các ngôn ngữ như Rust hay Swift. Nói cách khác, viết mã ở cấp độ cao và tạo ra các gói nhị phân nhỏ, nhanh và dễ triển khai.
Các khóa thiết kế: kiểu, bộ nhớ, cấu trúc và hàm
Trong số những tính năng nổi bật nhất là kiểu dữ liệu mạnh (và kiểu dữ liệu tĩnh khi cần), việc sử dụng let/var để khai báo các phần tử bất biến và có thể thay đổi, và hỗ trợ các cấu trúc với thiết kế do trình biên dịch định nghĩa, giúp tạo ra mã máy tối ưu.
Mojo cho phép bạn khai báo các hàm bằng `fn` ngoài `def` ; nói chung, `fn` thường hàm ý nhiều ràng buộc hơn và do đó, tiềm năng tối ưu hóa tốt hơn cho trình biên dịch. Nó cũng tự hào về "các trừu tượng không tốn chi phí" và khả năng tự điều chỉnh , trong đó trình biên dịch chọn các tham số hiệu quả cho nền tảng mục tiêu.
Không có GIL và với sự song song thực sự
Không giống như Python, Mojo không dựa vào GIL ( Generalized Interpreter Lock). Môi trường chạy và trình biên dịch được thiết kế để tận dụng các luồng, vector và bộ tăng tốc mà không cần nhà phát triển phải vật lộn với khả năng xử lý song song cơ bản của trình thông dịch. Trên thực tế, điều này có nghĩa là các tác vụ mà trong Python "truy cập" thông qua GIL có thể thực sự chạy song song.
Điểm này rất quan trọng trong điện toán chuyên sâu: nếu bạn có thể chia nhỏ một vấn đề thành các tác vụ con và chạy chúng đồng thời theo cách tự nhiên, thì sự cải thiện hiệu năng không chỉ là nhỏ mà là một sự thay đổi vượt bậc.
Hiệu suất: từ Mandelbrot đến các phiên bản vector hóa
Để đo lường sự cải thiện, một bài kiểm tra thường xuyên được sử dụng là tập hợp Mandelbrot , một trình tạo fractal đòi hỏi nhiều tài nguyên tính toán, rất phù hợp cho việc song song hóa. Với Python thuần túy, thời gian thực hiện đã vượt quá 1000 giây , trong khi các triển khai trong Mojo đã giảm xuống còn khoảng 0,03 giây sau các lần tối ưu hóa liên tiếp.
Các bước nâng cấp theo kiểu sau đã được ghi nhận: phiên bản Python đơn giản → NumPy → phiên bản Mojo đơn giản → Mojo được tối ưu hóa bằng SIMD . Với chuỗi cải tiến này, tốc độ xử lý đã được cải thiện đáng kể, từ 35.000 lần đến con số được báo cáo là 68.000 lần trong các trường hợp cụ thể. Đây là những con số ấn tượng, và như mọi khi, chúng phụ thuộc vào thuật toán, phần cứng và sự cẩn thận bạn dành cho việc tối ưu hóa.
Biên dịch và triển khai đơn giản
Mojo tuân theo triết lý biên dịch thành mã nhị phân : bạn biên dịch, bạn nhận được một tệp thực thi, và bạn phân phối nó . Nếu bạn chuyển từ Python, điều này sẽ tránh được những rắc rối của môi trường ảo , các gói cài đặt (wheels) , và sự kết hợp của các phiên bản thư viện không phải lúc nào cũng tương thích với nhau.
Để bạn dễ hình dung, chương trình "Hello World" có thể được biên dịch và chạy bằng một tệp mojo đơn giản như hello.mojo . Hơn nữa, các tệp này có phần mở rộng .mojo (biểu tượng ngọn lửa cũng trở nên phổ biến như một cái nháy mắt), giúp dễ dàng nhận diện chúng trong các dự án kết hợp.
Khả năng tương thích và hệ sinh thái của Python
Một phần sức hấp dẫn của Mojo nằm ở chỗ nó không bắt buộc bạn phải bỏ đi những gì bạn đã có : khả năng tương thích với hệ sinh thái Python có nghĩa là bạn có thể tiếp tục sử dụng các thư viện như NumPy, Pandas hoặc Matplotlib, đồng thời áp dụng các cấu trúc và kiểu dữ liệu hiệu quả hơn khi cần thiết.
Trên thực tế, chiến lược “Python++” này giúp quá trình áp dụng diễn ra suôn sẻ hơn: bạn duy trì mã nguồn của mình , chuyển các phần quan trọng sang Mojo, và tận dụng trình biên dịch và MLIR để tối ưu hiệu năng mà không cần từ bỏ cú pháp quen thuộc.
Mô-đun: thời gian chạy để hợp nhất PyTorch và TensorFlow
Ngoài ngôn ngữ lập trình, Modular còn giới thiệu một khung/môi trường chạy phổ quát có khả năng chạy các mô hình PyTorch và TensorFlow mà không cần cài đặt cả hai nền tảng. Theo các nguồn tin này, kiến trúc của nó có thể tăng tốc độ thực thi TensorFlow lên đến 3 lần và PyTorch lên đến 2,5 lần , đồng thời tích hợp các công cụ lượng tử hóa , do đó góp phần vào khả năng mở rộng của AI.
Mục tiêu là tránh được "địa ngục ba lớp" (Python → C/C++ → phần cứng cụ thể) bằng một lớp lập trình duy nhất và một hệ thống phụ trợ có thể giao tiếp với mọi phần cứng và khai thác tối đa khả năng của mọi nền tảng mà không cần phải viết lại mô hình thường xuyên.
Lượng tử hóa: giảm kích thước mà không làm giảm độ chính xác
Việc lượng tử hóa mô hình giống như việc nén MP3 cho mạng nơ-ron: bạn giảm độ chính xác ở một số trọng số/lớp nhất định và đổi lại, bạn giảm kích thước và tăng tốc độ suy luận. Sự suy giảm độ chính xác thường nhỏ (ví dụ, giảm từ 94% xuống 91% trong bộ phân loại) và lợi ích về khả năng triển khai và tốc độ sẽ bù đắp nhiều hơn thế.
Cách tiếp cận này rất quan trọng để đưa các mô hình lên thiết bị cục bộ trong khi vẫn tôn trọng quyền riêng tư. Trên thực tế, các nền tảng như Core ML và các bộ tăng tốc như NPU của Apple (thông qua MPS/Accelerate) đang hướng tới các mô hình được nén, phù hợp và chạy mượt mà trên iPhone hoặc Mac mà không cần gửi dữ liệu lên đám mây.
Từ Swift cho TensorFlow đến Mojo: Hành trình của Lattner
Con đường dẫn đến điểm này không phải là ngẫu nhiên. Sau thời gian làm việc tại Apple (LLVM, Clang, Swift ), Chris Lattner đã làm việc tại Tesla và Google Brain, nơi ông tiên phong phát triển Swift cho TensorFlow . Nỗ lực kết hợp một ngôn ngữ hiện đại với máy học đó đã bị gác lại, nhưng nó đã mang lại những bài học quý giá mà giờ đây đã được đúc kết trong MLIR và thiết kế của Mojo.
Trước Modular, Lattner cũng từng thử sức với thế giới RISC-V (SciFive), điều này phù hợp với ý tưởng rằng tương lai của AI liên quan đến nhiều loại phần cứng và chúng ta cần các trình biên dịch và môi trường chạy có khả năng thích ứng nhanh chóng với tất cả chúng.
Tình trạng dự án, hỗ trợ và áp dụng
Mojo được ra mắt vào năm 2023, và mặc dù ngôn ngữ này đang phát triển nhanh chóng, nó vẫn đang trong giai đoạn trưởng thành . Thư viện chuẩn của nó được công khai vào tháng 2 năm 2025, nhưng trình biên dịch vẫn đóng . Về mức độ phổ biến (chỉ số TIOBE), Mojo xếp hạng dưới top 50, điều này là dễ hiểu đối với một ngôn ngữ chỉ mới hai năm tuổi.
Trong phần "những nhân vật nổi bật", sự hỗ trợ từ Amazon, AMD, NVIDIA và Inworld đã được đề cập . Tuy nhiên, để cạnh tranh với Python, nó sẽ cần một cộng đồng, tài liệu, các gói phần mềm và những câu chuyện thành công trong thực tế có thể làm chuẩn mực cho những ngôn ngữ khác.
Thách thức: cộng đồng, phản ánh và đặc điểm năng động
Ngoài hiệu năng, Python còn vượt trội về cộng đồng, tài nguyên và hệ sinh thái . Mojo sẽ phải khắc phục những thiếu sót ở các lĩnh vực mà Python vượt trội, chẳng hạn như một số cơ chế phản chiếu hoặc các mẫu động được sử dụng rộng rãi. Nó cũng cần tiếp tục hoàn thiện tính thân thiện với người dùng để quá trình chuyển đổi từ Python diễn ra hoàn toàn liền mạch.
Về mặt kỹ thuật, lời hứa " biên dịch cho mọi thứ " nghe có vẻ tuyệt vời, nhưng mỗi hệ thống phụ trợ (CUDA, ROCm, MPS, TPU, FPGA…) lại có những đặc điểm riêng. Duy trì chức năng và hiệu suất nhất quán trên tất cả chúng trong quá trình hoạt động là một cuộc đua đường dài, chứ không phải là một cuộc chạy nước rút.
Mojo và GPU: Vượt xa NVIDIA
Một trong những điểm mạnh của Mojo và MLIR là khả năng nhắm mục tiêu vào GPU của cả NVIDIA và AMD , chứ không chỉ hệ sinh thái CUDA. Nếu sự hỗ trợ này được duy trì cập nhật và cạnh tranh, nhiều công ty sẽ nhận thấy lợi thế chiến lược khi không bị ràng buộc vào một nhà cung cấp duy nhất.
Đồng thời, thế giới của Apple (với MPS ) và các bộ tăng tốc chuyên dụng khác (NPU, FPGA ) đòi hỏi các đường dẫn biên dịch và thư viện phù hợp. Lời hứa "viết một lần, chạy nhanh ở mọi nơi" đầy tham vọng, và nếu được thực hiện đúng cách, nó sẽ là một bước ngoặt lớn.
Tranh luận: Ngôn ngữ mới hay “Python++”?
Trên các diễn đàn kỹ thuật, người ta tranh luận về việc Mojo là "một biến thể khác của Python" hay một ngôn ngữ mới chỉ chia sẻ cú pháp. Đối với việc sử dụng hàng ngày, điều quan trọng là bạn có thể tái sử dụng mã và thư viện của mình đồng thời viết các thành phần hiệu năng cao với các kiểu dữ liệu và cấu trúc phong phú hơn.
Sự song hành này, kết hợp với trình biên dịch MLIR hiện đại, là điều cho phép chương trình "hello world" trở nên thân thiện với người dùng, đồng thời giúp các nhân tính toán của bạn đạt được hoặc thậm chí vượt qua hiệu năng của C/C++ trong các kịch bản vector hóa.
Tài nguyên, cộng đồng và học tập
Nếu bạn mới bắt đầu tìm hiểu về Trí tuệ Nhân tạo (AI), các cộng đồng học tập mở là vô cùng quý giá. Những không gian này, hướng đến cả sinh viên và giảng viên, cung cấp cơ hội để đặt câu hỏi, chia sẻ tài nguyên và tiến bộ từ những kiến thức cơ bản đến các kỹ thuật nâng cao. Chúng là những nơi tuyệt vời để thực hành, so sánh các phương pháp và nhận được câu trả lời thực tế.
Hệ sinh thái hỗ trợ cũng đóng vai trò quan trọng: từ các bài tóm tắt ra mắt Mojo của các chuyên gia như Jeremy Howard, đến các khóa học Python miễn phí trên các nền tảng video giúp bạn bắt đầu lập trình mà không mất phí. Cộng đồng xung quanh Mojo càng mạnh mẽ, các công ty và nhà phát triển càng dễ dàng áp dụng nó.
Ghi chú thực tế và chi tiết thú vị
Những chi tiết nhỏ giúp cải thiện trải nghiệm người dùng cũng rất quan trọng: các tệp .mojo , hỗ trợ fn / def , thực thi trực tiếp bằng lệnh mojo , hoặc ý định rõ ràng cung cấp các tệp nhị phân dễ phân phối . Đó là những điều bình thường, nhưng khi bạn mở rộng quy mô dự án, chúng sẽ tạo nên sự khác biệt lớn.
Đồng thời, cần phải thừa nhận ảnh hưởng của Rust và Swift đối với thiết kế kiểu dữ liệu, tính an toàn bộ nhớ và các trừu tượng không tốn chi phí . Điều này không phải là ngẫu nhiên: Lattner xuất thân từ việc tạo ra Swift và điều khiển LLVM/Clang; di sản này thể hiện rõ trong thiết kế của trình biên dịch.
Từ phòng thí nghiệm đến sản xuất: những gì bạn có thể mong đợi
Nếu bạn định thử dùng Mojo ngay hôm nay, tốt nhất nên sử dụng nó trong các module có tác động lớn (các nhân tính toán, các phép biến đổi chuyên sâu hoặc các vòng lặp chặt chẽ). Hãy giữ nguyên phần điều phối và công cụ của bạn bằng Python, và chuyển các thành phần có nhu cầu cao sang Mojo để đo lường lợi ích thực sự trong các chỉ số của bạn.
Theo các báo cáo đã phân tích, các tác vụ kiểu Mandelbrot hoặc các nhân SIMD đã đạt được tốc độ tăng đáng kể . Trong các quy trình thực tế, với I/O, tiền xử lý và các thư viện của bên thứ ba, bạn sẽ thấy những cải thiện đáng kể, mặc dù khiêm tốn hơn và phụ thuộc vào nút thắt cổ chai chính.
Các lớp thống nhất: tạm biệt “Frankenstack”
Một lời hứa quan trọng của kiến trúc Modular là sự thống nhất các lớp: thay vì các thư viện Python + C/C++ + các backend riêng biệt rải rác, nó cung cấp một ngôn ngữ duy nhất cho cả ba lớp và một môi trường chạy có khả năng tương tác với phần cứng . Ít "kết nối" hơn, ít xung đột hơn và ít công việc bảo trì phức tạp hơn.
Nếu tầm nhìn này trở thành hiện thực, các quy trình huấn luyện và suy luận có thể được chuyển đổi giữa NVIDIA, AMD, Apple Silicon, TPU hoặc NPU mà không cần lập trình lại toàn bộ dự án. Và điều đó, hơn cả một chi tiết kỹ thuật, là một chiến lược kinh doanh : tự do lựa chọn phần cứng dựa trên chi phí, tính sẵn có hoặc hiệu quả năng lượng.
Lưu ý về mô hình giọng nói và phiên âm
Trong thực tế, khi chuyển đổi các mô hình như Whisper (chuyển đổi giọng nói thành văn bản) từ Python sang các tuyến đường gốc hoặc các API khác (MPS/Accelerate), sẽ phát sinh sự không tương thích: một số lệnh tồn tại trong CUDA nhưng không có trong MPS, hoặc ngược lại. Đây là lúc một hệ thống phụ trợ thống nhất và một trình biên dịch với MLIR có thể giúp bạn tránh được rất nhiều rắc rối.
Nếu thiếu đi yếu tố kết nối chung đó, bạn sẽ phải đối mặt với các nhánh mã và việc chuyển đổi thủ công, làm chậm quá trình phát triển dự án. Với yếu tố đó, lời hứa là chỉ cần viết mã một lần và có được khả năng định tuyến hiệu quả trên mọi nền tảng được hỗ trợ.
Bối cảnh “siêu”: tiếp cận, tài trợ và cộng đồng công nghệ
Một số nội dung thúc đẩy cuộc tranh luận này đến từ các podcast và blog kỹ thuật kết hợp nội dung giáo dục với tài trợ và cộng đồng (thậm chí cả bán hàng hóa). Bên cạnh những câu chuyện thực tế (khóa học, ứng dụng, Twitch, nhạc nền, hỗ trợ mạng lưới podcast…), điều thú vị là cuộc tranh luận kỹ thuật đã vượt ra khỏi phạm vi hẹp và thu hút được nhiều đối tượng khán giả.
Những phản hồi đó rất hữu ích: chúng mang đến những câu hỏi hóc búa, các trường hợp sử dụng thực tế và kinh nghiệm với nhiều loại phần cứng khác nhau. Việc mở rộng phạm vi thảo luận về MLIR và Mojo giúp đẩy nhanh quá trình phát hiện lỗi, xây dựng hướng dẫn di chuyển dữ liệu và tạo ra các công thức mà tất cả chúng ta có thể tái sử dụng.
Nhìn chung, bức tranh khá rõ ràng: Python sẽ vẫn là cánh cửa dẫn đến AI, nhưng một giải pháp thay thế thực tế đã tồn tại khi hiệu năng là yếu tố quan trọng hàng đầu. Mojo không nhằm mục đích loại bỏ Python, mà là nâng tầm nó với một trình biên dịch hiện đại , khả năng song song hóa thực sự và một lớp thời gian chạy hiểu được cả các bộ tăng tốc hiện tại và tương lai. Nếu bạn làm việc trong lĩnh vực học máy/học sâu và thời gian/chi phí cho mỗi lần suy luận hoặc huấn luyện là yếu tố quan trọng, thì Mojo rất đáng để thử với dữ liệu và phần cứng của riêng bạn.