Chuyển đến nội dung chính

Phát hành NumPy 2.0: Những thay đổi chính và cách di trú

Tìm hiểu tất cả tính năng mới và các thay đổi trong bản cập nhật NumPy 2.0.
· 9 phút đọc

Khám phá cùng AI

Khi khoa học dữ liệu phát triển, một số thay đổi đối với các thư viện phổ biến là cần thiết, và lần này, thư viện NumPy được nâng cấp lên phiên bản 2.0. Bản cập nhật lớn này phát hành vào tháng 6/2024, mang đến nhiều tính năng và cải tiến mới cho thư viện Python phổ biến này.

Với bước nhảy vọt như vậy, chắc chắn sẽ có những điểm bạn cần lưu ý vì có thể phải điều chỉnh mã hiện có.

Trong bài viết này, chúng tôi sẽ điểm qua NumPy 2.0 bao gồm những gì, các thay đổi chính, và cách bạn có thể di trú sang NumPy 2.0.

Giới thiệu về NumPy 2.0

Được xây dựng dựa trên nhiều năm phản hồi và tiến bộ công nghệ, NumPy 2.0 là một bản nâng cấp đầy tham vọng, khác với nhiều bản cập nhật trước đây trong vài năm qua.

Trong bài đăng công bố phát hành, họ giới thiệu API được cập nhật, quy tắc thăng cấp kiểu vô hướng được cải thiện, một DType API mới và DType chuỗi mới, các cải tiến về khả năng tương thích, và sự thống nhất tiêu chuẩn API. Nhờ đó, người dùng sẽ thấy hiệu năng và tài liệu được cải thiện đáng kể.

Tuy nhiên, với thay đổi lớn như vậy, bản phát hành mới sẽ gây ra một số xáo trộn. Chẳng hạn, các thay đổi API và ABI mới không tương thích ngược.

Các tính năng mới lớn

Theo ghi chú phát hành, NumPy 2.0 mang đến nhiều thay đổi đáng kể; dưới đây là những điểm nổi bật:

Thay đổi API và ABI

Trong bản cập nhật này, có một số thay đổi dọn dẹp đối với API và ABI (Giao diện Nhị phân Ứng dụng).

Theo NEP (Đề xuất Nâng cấp NumPy) 52, NumPy rời bỏ quan điểm duy trì tương thích ngược để đảm bảo một API gọn gàng và đơn giản hơn.

Một số thay đổi đáng chú ý:

Đối với thay đổi ABI, sẽ có đứt gãy với bản phát hành mới. Điều này sẽ ảnh hưởng đến các gói nhị phân sử dụng NumPy C API.

Bất kỳ ai biên dịch dựa trên các bản NumPy 1.xx trước đó sẽ không hoạt động với NumPy 2.0. Tôi sẽ chia sẻ thêm về cách di trú theo khuyến nghị của họ. Bạn sẽ gặp thông báo ImportError, cho biết sự không tương thích nhị phân.

DType API mới và String DType

Như đề xuất trong NEP 41, bản 2.0 phát hành API mới để triển khai kiểu dữ liệu tùy chỉnh do người dùng định nghĩa bằng kiểu dữ liệu StringDType. API mới này hỗ trợ gốc cho kiểu dữ liệu chuỗi có độ dài biến thiên, vốn được người dùng NumPy yêu cầu từ lâu.

Quy tắc thăng cấp vô hướng

Ban đầu được đề xuất trong NEP 50, quy tắc thăng cấp vô hướng trong NumPy cũng được cập nhật để tránh gây bất ngờ cho người dùng. Trước đây, việc thăng cấp thường phụ thuộc vào giá trị dữ liệu của mảng đầu vào thay vì chỉ dựa trên DType của chúng, điều này có thể gây khó hiểu.

Để xem đường đi thăng cấp mới, xem hình dưới đây:

Độ chính xác và thăng cấp DType

Nguồn: Độ chính xác và thăng cấp DType của NumPy

Cải thiện hiệu năng

Bản phát hành mới này cũng mang đến một số cải thiện về hiệu năng.

Một số khu vực chính đã được cải thiện:

  • Các hàm sắp xếp nhanh hơn
  • Cải thiện hiệu năng các phép toán đại số tuyến tính trên macOS thông qua macOS Accelerate

Tương thích với Windows

Để phục vụ người dùng Windows tốt hơn, nhóm NumPy cũng đã khắc phục một số vấn đề tương thích trong bản phát hành mới.

Ví dụ, họ đã thay đổi kiểu số nguyên mặc định trên Windows thành int64 thay vì int32, nhằm phù hợp với hành vi mặc định trên các hệ điều hành khác.

Cải thiện tài liệu và khả năng sử dụng

Đã bổ sung thêm tài liệu cho cấu trúc mô-đun của NumPy, và cải thiện khả năng điều hướng phần hướng dẫn tham khảo. Tài liệu biên dịch từ mã nguồn cũng được viết lại hoàn toàn.

Cách di trú sang NumPy 2.0

Cập nhật lên NumPy 2.0

Trước hết, để bắt đầu với phiên bản mới của NumPy, bạn cần nâng cấp từ phiên bản hiện tại lên phiên bản mới nhất.

Để làm điều này, chỉ cần dùng tùy chọn nâng cấp trong lệnh sau:

pip install -U numpy

Ngoài ra, bạn cũng có thể dùng lệnh này:

pip install –upgrade numpy

Tùy chọn nâng cấp sẽ cập nhật gói đã chỉ định lên phiên bản mới nhất, trong trường hợp này là NumPy. Sau khi chạy lệnh, chờ hệ thống cài đặt gói cho đến khi bạn thấy thông báo “Successfully installed numpy-2.0.0”.

Nếu bạn muốn cập nhật lên một phiên bản cụ thể thay vì mới nhất, hãy dùng lệnh sau:

pip install numpy==2.0.0

Điều này đảm bảo phiên bản bạn cài đặt là đúng, trong trường hợp này là 2.0.0.

Để kiểm tra lần hai, chạy lệnh này:

pip list

Lệnh này sẽ liệt kê tất cả gói/thư viện đã cài và phiên bản tương ứng. Kiểm tra đầu ra để xem thư viện numpy đã được cập nhật lên phiên bản 2.0.0 hay chưa. 

Trong quá trình cài đặt, bạn cũng có thể gặp một số thông báo về phụ thuộc hiện lên màu đỏ. Điều này có nghĩa là có một số vấn đề tiềm ẩn với mã của bạn sau khi cập nhật lên phiên bản mới nhất. Khi đó bạn có thể xem xét từng khu vực và thư viện bị ảnh hưởng.

Nâng cấp lên NumPy 2.0 có thể gây gián đoạn tạm thời, vì vậy tốt nhất là đảm bảo mọi thứ được di trú ổn thỏa vào script và các pipeline sau này.

Để có hướng dẫn đầy đủ, vui lòng xem Hướng dẫn Di trú NumPy 2.0 do các nhà phát triển phát hành.

Dưới đây là các điểm chính cần lưu ý khi di trú:

Xử lý thay đổi thăng cấp kiểu dữ liệu trong NumPy

Để xem hướng dẫn đầy đủ về các thay đổi hành vi và thay đổi kiểu dữ liệu kỳ vọng, tham khảo bảng này trong NEP 50.

Vấn đề tương thích ngược chính là độ chính xác của các vô hướng.

Ví dụ, khi chạy phép toán như sau:

np.float32(6) + 6.

Phép toán này trả về kiểu dữ liệu float32 thay vì float64, khiến việc tương thích ngược trở nên khó khăn. Để xử lý vấn đề này, họ khuyến nghị:

Ép kiểu dữ liệu một cách tường minh: Dùng các vô hướng int(), float(), hoặc numpy_scalar.item() để chỉ định rõ kiểu dữ liệu.

Bật cảnh báo để truy vết thay đổi: Dùng cảnh báo như một cách tìm kiếm thay đổi thông qua traceback lỗi.

Xử lý thay đổi không gian tên

Với bản 2.0, việc loại bỏ hàng loạt trong không gian tên có thể ảnh hưởng đến mã của bạn. Nhóm NumPy đề xuất các bước sau:

  1. Kiểm tra các bí danh lỗi thời và hướng dẫn di trú tại đây.
  2. Thay thế các bí danh lỗi thời bằng lựa chọn thay thế tương thích ngược.
  3. Kiểm tra các thành viên riêng tư đã bị xóa trong bản 2.0.
  4. Sử dụng API hiện có nếu trước đó bạn dùng thành viên riêng tư.

Xử lý đứt gãy ABI

Nếu bạn đang dùng gói Python phụ thuộc vào NumPy’s C API, bạn sẽ phải xử lý mọi đứt gãy trong ABI. Các nhà phát triển đã phát hành một số khuyến nghị dành riêng cho NumPy 2.0 cho các tình huống như vậy để xử lý sự không tương thích:

Plugin Ruff để cập nhật mã Python

Để hỗ trợ quá trình di trú, bạn có thể dùng plugin Ruff với một quy tắc Ruff chuyên dụng, NPY201.

Ruff có sẵn dưới tên ruff trên PyPI. Để cài đặt Ruff, nhập lệnh sau trong dòng lệnh:

pip install ruff

Để biết thêm chi tiết, xem hướng dẫn cài đặt Ruff đầy đủ.

Hãy thêm quy tắc NP201 vào pyproject.toml của bạn:

[tool.ruff.lint]
select = ["NPY201"]

Ngoài ra, bạn cũng có thể chỉ định quy tắc NPY201 bằng dòng lệnh:

$ ruff check path/to/code/ --select NPY201

Đóng góp từ cộng đồng

Bản phát hành NumPy 2.0 là kết tinh của nỗ lực từ cộng đồng. Thông qua nhiều NEP do cộng đồng đề xuất, nhiều kiến nghị được mong đợi từ lâu đã được triển khai.

Các nhà phát triển, nhà nghiên cứu và người đam mê nhiệt huyết đều đóng vai trò then chốt trong bản phát hành đột phá này, chia sẻ chuyên môn, cung cấp phản hồi và gửi các cải tiến mã đã định hình đáng kể NumPy 2.0.

Kết luận

NumPy 2.0 là một bước tiến lớn cho ngôn ngữ lập trình Python, với nhiều tính năng mới và cải thiện về hiệu năng, khả năng tương thích và khả năng sử dụng. Nếu bạn gặp bất kỳ vấn đề hoặc lỗi nào khi di trú, tốt nhất hãy liên hệ trực tiếp với nhóm NumPy.

Hy vọng bài viết này giúp bạn hiểu rõ những thay đổi chính trong bản cập nhật thú vị của NumPy. Để đọc sâu hơn, hãy xem Hướng dẫn NumPy của chúng tôi.

Nếu bạn mới làm quen với NumPy và muốn khám phá thêm, hãy thử khóa học Giới thiệu về NumPy hoặc xem buổi đào tạo code trực tiếp NumPy. 

Austin Chia

Tác giả

Austin Chia

Tôi là Austin, một blogger và cây bút công nghệ với nhiều năm kinh nghiệm làm nhà khoa học dữ liệu và nhà phân tích dữ liệu trong lĩnh vực chăm sóc sức khỏe. Khởi đầu hành trình công nghệ với nền tảng sinh học, tôi hiện hỗ trợ những người khác thực hiện chuyển đổi tương tự thông qua blog công nghệ của mình. Niềm đam mê công nghệ đã đưa tôi đến với việc cộng tác viết cho hàng chục công ty SaaS, truyền cảm hứng cho người khác và chia sẻ trải nghiệm của bản thân.

Chủ đề

Liên quan