24 điểm bởi GN⁺ 2025-04-05 | 3 bình luận | Chia sẻ qua WhatsApp
  • Sau nhiều năm CUDA Toolkit của NVIDIA tập trung vào C/C++, tại GTC 2024, hỗ trợ Python gốc đã chính thức được bổ sung
  • Giờ đây có thể chỉ dùng Python để trực tiếp chạy các phép tính tốc độ cao thiên về thuật toán trên GPU
  • Kiến trúc sư CUDA Stephen Jones giải thích rằng: “Python CUDA không đơn thuần là chuyển mã C sang cú pháp Python, mà là
    được thiết kế lại theo cách tự nhiên hơn cho các lập trình viên Python

Những khả năng mới mà hỗ trợ Python gốc mở ra

  • Trước đây, người dùng CUDA phải biết C++ hoặc Fortran, nhưng giờ đây chỉ với Python cũng có thể thực hiện tính toán GPU hiệu năng cao
  • Theo khảo sát mã nguồn mở GitHub năm 2024, Python đã vượt qua JavaScript để trở thành ngôn ngữ phổ biến nhất
  • Số người dùng CUDA tăng từ 2 triệu năm 2020 lên 4 triệu năm 2023, nhưng
    lập trình viên Python có quy mô lên tới hàng chục triệu người, đặc biệt là tin rất tốt cho các nhà phát triển ở những quốc gia mới nổi như Ấn Độ và Brazil
  • Vì vậy, có thể kỳ vọng tác động tích cực tới việc mở rộng hạ tầng GPU trên toàn cầu

Cách cấu thành của Pythonic CUDA

  • CUDA bao gồm thư viện, SDK, trình biên dịch, runtime, công cụ, thuật toán, v.v.
  • Việc tích hợp Python không chỉ là cung cấp kernel đơn lẻ, mà là xây dựng toàn bộ stack theo hướng thân thiện với Python
  • Cách tiếp cận cốt lõi: dựa trên biên dịch JIT (Just-In-Time), giảm thiểu phụ thuộc vào trình biên dịch

Các thành phần chính

  • cuPyNumeric: Thư viện Python hỗ trợ tăng tốc GPU trong khi cung cấp API giống hệt NumPy
  • CUDA Core: Hệ thống dựa trên luồng thực thi được thiết kế lại theo phong cách Python cho CUDA runtime
  • NVMath Python: Cung cấp giao diện hợp nhất để gọi thư viện host/device
  • Xây dựng API Python có thể liên kết trực tiếp với các thư viện C++ hiệu năng cao
  • Đồng thời cũng cung cấp công cụ phân tích hiệu năng và phân tích mã

> “Do được kết nối trực tiếp với mã C++ hiệu năng cao hiện có, gần như không có tổn thất hiệu năng.” — Stephen Jones

Mô hình lập trình mới: CuTile

  • Mô hình cấp cao tập trung vào mảng được thiết kế cho lập trình viên Python
  • Nếu CUDA trước đây yêu cầu kiểm soát chi tiết dựa trên thread, thì CuTile cung cấp cấu trúc ngắn gọn và dễ hiểu hơn thông qua mức trừu tượng theo tile
  • Bằng cách ánh xạ mảng theo đơn vị tile của GPU, CuTile giúp gỡ lỗi và tối ưu hóa dễ hơn mà vẫn giữ nguyên hiệu năng
  • Trong tương lai cũng dự kiến mở rộng sang C++ CUDA

> “Vì trình biên dịch hiểu cấu trúc GPU tốt hơn, nên việc tối ưu hiệu năng cũng được tự động thực hiện tốt hơn.”

Tổng kết

  • Việc tích hợp Python gốc vào CUDA là một thay đổi giúp hạ thấp đáng kể rào cản gia nhập của lập trình GPU
  • Không cần kiến thức ngôn ngữ phức tạp như trước, giờ đây chỉ với Python cũng có thể thực hiện các phép tính AI/khoa học trên GPU
  • Đây là bước ngoặt mang tính quyết định mở ra một kỷ nguyên mới cho việc mở rộng hệ sinh thái AI lấy Python làm trung tâm và khai thác GPU NVIDIA

3 bình luận

 
aer0700 2025-04-06

Liệu nó có nhanh hơn các wrapper CUDA hiện có như CuPy hay PyTorch không nhỉ. Ưu điểm của CuPy và torch là API gần như giống hệt NumPy, nên có thể chuyển các đoạn mã kiểm thử đã viết bằng NumPy sang mà không tốn nhiều công sức; cái này thì chắc phải dùng thử mới biết thế nào.

 
GN⁺ 2025-04-05
Ý kiến Hacker News
  • Tôi không phải là lập trình viên GPU, nhưng có vẻ ngay cả người như tôi cũng có thể dùng khá dễ. Tôi đã thử làm một demo đơn giản dùng cả GPU và CPU. Kết quả như sau

    • Tạo 100 ma trận ngẫu nhiên kích thước 5000x5000 trên CPU
    • Cộng ma trận bằng CPU
    • Thời gian hoàn tất phép cộng ma trận trên CPU: 0.6541 giây
    • Kích thước ma trận kết quả trên CPU: (5000, 5000)
    • Tạo 100 ma trận ngẫu nhiên kích thước 5000x5000 trên GPU
    • Cộng ma trận bằng GPU
    • Thời gian hoàn tất phép cộng ma trận trên GPU: 0.1480 giây
    • Kích thước ma trận kết quả trên GPU: (5000, 5000)
    • API thực sự rất đơn giản nên đáng để đào sâu thêm. Lập trình CUDA có vẻ như là một việc rất lớn nếu không có những thứ trừu tượng mức cao như thế này
  • Tôi tò mò vì sao Python lại trở thành đích đến cho các thứ như thế này. Tôi đã thấy nhiều dự án bổ sung hỗ trợ Python. Không rõ có phải codebase Python dễ biên dịch sang nhiều mục tiêu khác hơn những ngôn ngữ khác hay không

  • May là Pytorch đã tạo được đà rất lớn trước khi thứ này xuất hiện. Giờ chúng ta có một bán tiêu chuẩn thực sự, độc lập nền tảng cho tính toán song song. Không bị giới hạn trong NVIDIA

    • Phần của Pytorch liên quan tới backend NVIDIA giờ có thể được triển khai trực tiếp bằng Python
    • Điểm quan trọng là điều này không quan trọng, hoặc lẽ ra không nên quan trọng, đối với người dùng cuối/nhà phát triển
    • Có lẽ nền tảng mới này có thể mở rộng toàn bộ khái niệm tính toán GPU sang nhiều lĩnh vực hơn, như game, thông qua Python
    • Hãy tưởng tượng chạy game Rust chủ yếu trên GPU thông qua Python
  • CuTile trên nhiều phương diện cho cảm giác như phiên bản kế nhiệm của Triton từ OpenAI. Không chỉ có các primitive ở mức tile/block và TileIR, mà còn có cả mô hình lập trình SIMT đúng nghĩa trong CuPy. Có vẻ cũng không nhiều người chú ý tới nó tại GTC năm nay. Rất ngầu

    • Dù vậy, gần như không có công bố hay bài nói nào liên quan tới CPU. Grace CPU đã được công bố từ khá lâu, nhưng có vẻ chúng ta sẽ chưa sớm thấy một lớp trừu tượng tổng quát vận hành trơn tru trên cả CPU và GPU của Nvidia
    • Với những người làm thuật toán song song hằng ngày như tôi, đây là một vấn đề. Debug bằng NSight và CUDA-GDB vẫn chưa giống GDB thuần, và việc thiết kế thuật toán trước trên CPU rồi mới port sang GPU vẫn dễ hơn nhiều
    • Trong số mọi đội ngũ làm compiler, Modular là một trong số rất ít đội không bị cuốn hoàn toàn vào cơn sốt LLM mà vẫn chủ động xây dựng các lớp trừu tượng và ngôn ngữ bao phủ nhiều nền tảng. Điều đó ngày càng có giá trị trong bối cảnh này. Tôi mong nhiều người thử nghiệm Mojo hơn. Biết đâu đó cuối cùng có thể lấp được khoảng cách CPU-GPU mà chúng ta phải đối mặt mỗi ngày
  • Tôi rất tò mò nó so với JAX thế nào

    • JAX cho phép bạn viết code Python chạy được trên GPU không chỉ của Nvidia mà còn của các hãng khác nữa (mức hỗ trợ khác nhau). Tương tự, nó có các hàm thay thế kiểu drop-in cho NumPy
    • Còn thứ này chỉ hỗ trợ Nvidia. Nhưng liệu nó có làm được những việc JAX không làm được không? Có dễ dùng hơn không? Có bớt định hướng vào mảng kích thước cố định hơn không? Liệu có đáng để tự khóa mình vào GPU của một hãng hay không?
  • Thứ này thật sự quá ghê. Những ai từng cân nhắc AMD + ROCm như một lựa chọn thay thế NVIDIA trong AI có lẽ sẽ không còn nữa

    • Tôi là một trong những người không học đủ C++ để có thể viết code hiệu quả cho việc chạy trên GPU (và cũng sẽ không học). Nhưng giờ có thể có pipeline trực tiếp lên GPU qua Python. Quá bất ngờ
    • Ý nghĩa về mặt hiệu suất là rất lớn. Không chỉ cho các thư viện Python như PyTorch mà cho mọi thứ chạy trên GPU NVIDIA
    • Tôi thích nhìn thấy hiệu suất được cải thiện. Chúng ta liên tục nghe về việc OpenAI và Google sẽ cần bao nhiêu nhà máy điện hạt nhân để vận hành toàn bộ số GPU đó
  • Hỗ trợ Rust sẽ là bước tiếp theo chứ? Hiện tại tôi đang phải tự tay [giải] tuần tự hóa cấu trúc dữ liệu của mình thành mảng byte để đưa vào/từ kernel. Sẽ rất tuyệt nếu có các cấu trúc dữ liệu thực sự được chia sẻ như cách CUDA cung cấp trong C++

  • Python thực sự đang trở thành lingua franca của các ngôn ngữ lập trình. Mức độ được chấp nhận của nó đang tăng vọt trong thời kỳ phục hưng FOSS, và tôi nghĩ đây là công cụ vạn năng gần đúng nhất mà chúng ta đang có

    • Mô hình PEP là một cơ chế tốt cho tự cải tiến và tiêu chuẩn hóa. Nhờ các dự án như uv và BeeWare, vấn đề đóng gói và phân phối có lẽ sớm sẽ được giải quyết. Tôi tin hiệu năng sẽ tiếp tục được cải thiện qua từng năm
  • Điều này có lẽ sẽ tiếp tục xu hướng mà Python thường dẫn dắt: nhiều thứ được thử nghiệm nhiều hơn và nhanh hơn, trước khi phần còn lại được giữ lại trong các ngôn ngữ nhanh hơn. Nhìn chung đây là một bước đi tuyệt vời. Chắc chắn tôi rất mong được nghịch thử nó

  • CUDA sinh ra từ C và C++. Tôi ước họ thực sự triển khai một biến thể C của CUDA, thay vì mở rộng C++ rồi gọi đó là CUDA C

 
iwi19 2025-04-06

Tốc độ ban đầu này có thật không? Chậm quá...