Có vẻ như tốc độ tính toán thay đổi tùy thuộc vào BLAS được sử dụng trong Numpy [Python]

Ngày 2019 tháng 6 năm 4

Trong "numpy", thư viện phép toán số có tên BLAS chịu trách nhiệm xử lý thực tế.

Tùy thuộc vào việc bạn cài đặt numpy bằng "cài đặt conda" hay "cài đặt pip", BLAS được sử dụng sẽ thay đổi và tùy thuộc vào việc bạn sử dụng BLAS nào, tốc độ xử lý sẽ không chỉ ảnh hưởng đến numpy mà còn ảnh hưởng đến các thư viện phụ thuộc vào nó.

Lần này, tôi đã xem xét sơ qua về BLAS, sự khác biệt về tốc độ thực tế và cách kiểm tra xem BLAS nào đang được sử dụng, vì vậy tôi sẽ giới thiệu về nó.

BLAS và các loại của họ

BLAS là gì

Về BLAS, trang sau có giải thích rất dễ hiểu nên mình sẽ quote lại.

BLAS là viết tắt của Chương trình con đại số tuyến tính cơ bản.Tóm lại, đó là một thư viện các phép toán tuyến tính cơ bản.Ví dụ như phép nhân ma trận, phép tính định mức véc tơ, v.v.Vấn đề là ngừng thực hiện các tính toán này (phát triển lại bánh xe) và sử dụng các thư viện để viết mã một cách hiệu quả.

Cách sử dụng BLAS đơn giản

Vì BLAS cũng được sử dụng sau numpy, nên thời gian tính toán sẽ thay đổi tùy thuộc vào BLAS nào được gọi khi numpy được thực thi.

Các loại BLAS

Nhiều loại BLAS đã được phát triển.Chúng ta hãy xem xét một số ví dụ tiêu biểu.

mởBLAS

Một triển khai mã nguồn mở của BLAS.Trong numpy được cài đặt với pip, OpenBLAS được gọi nội bộ để thực hiện các phép tính.
Nó tương thích với nhiều loại CPU khác nhau và người ta nói rằng nó có thể đạt được tốc độ tương đương với Intel MKL dành cho CPU Sandy Bridge của Intel.Nó nổi tiếng với chức năng đa luồng và có vẻ như số lượng lõi và tốc độ tăng tốc rất tỷ lệ thuận.

Intel MKL (Thư viện hạt nhân toán học Intel)

BLAS do Intel phát triển. Chỉ hỗ trợ CPU của Intel và không thể sử dụng CPU của các nhà sản xuất khác. Vì nó được tối ưu hóa cho các CPU Intel như Xeon, Core i series và Atom, nên việc sử dụng intel MKL làm thư viện tính toán trên các máy tính sử dụng các CPU này làm CPU sẽ nhanh hơn.được cài đặt gọn gàng với "cài đặt conda" trong Anaconda hoặc Miniconda sử dụng intel MKL.

ATLAS (Phần mềm đại số tuyến tính tự động điều chỉnh)

Một trong những BLAS miễn phí.Như tên gợi ý, nó đặt các tham số tối ưu cho phần cứng được cài đặt bằng cách điều chỉnh để đạt được các phép tính tốc độ cao.

Sự khác biệt về thời gian tính toán do sự khác biệt trong BLAS

Việc BLAS được sử dụng đằng sau numpy ảnh hưởng đến tốc độ xử lý có nghĩa là nó ảnh hưởng đến tốc độ thực thi của các thư viện phụ thuộc vào numpy.Điều này cũng ảnh hưởng đến scipy, pandas, scikit-learning và tensorflow.

Rất nhiều kỹ thuật viên đang so sánh các điểm chuẩn về sự khác biệt của BLAS (cài đặt conda so với cài đặt pip), nhưng hãy lấy điểm chuẩn được xuất bản trên Khu vực dành cho nhà phát triển Intel®.
Tính toán ma trận bằng scipy cho biết thời gian cần thiết để nhân các ma trận phức tạp về phía bên phải và MKL intel có thể xử lý nhanh hơn ATLAS.

So sánh tính toán ma trận với scipy trên intel MKL và ATLAS
So sánh tính toán ma trận với scipy trên intel MKL và ATLAS
Trích dẫn bởi:https://software.intel.com/en-us/articles/numpyscipy-with-intel-mkl/

Sau đây là từ chính thức Anaconda. Với tensorflow được cài đặt bằng cài đặt conda hoặc cài đặt pip, chúng tôi đã so sánh số lượng hình ảnh được đào tạo mỗi giây cho từng mô hình học sâu và sự khác biệt lên tới 1 lần.

Sự khác biệt giữa pip (OpenBLAS) và conda (intel MKL) trong mỗi mô hình học sâu
Sự khác biệt giữa pip (OpenBLAS) và conda (intel MKL) trong mỗi mô hình học sâu
(CPU là Intel®Xeon®Gold 6130)
Trích dẫn bởi:https://www.anaconda.com/tensorflow-in-anaconda/

Những thứ khác như pandas và scikit learn cũng được so sánh (Hiệu suất của Intel so với Anaconda so với vanilla Python – điểm chuẩn cá nhân của tôi). Vì conda cài đặt và quản lý các thư viện của riêng nó, nên nó dường như có lợi thế hơn trong nhiều trường hợp.

Cách kiểm tra BLAS trong Python

__config__.show()chỉ cần chạy

nhập numpy dưới dạng np np.__config__.show()

>>
mkl_info: các thư viện = ['mkl_rt'] library_dirs = ['C:/Users/']define_macros = [('SCIPY_MKL_H', Không có), ('HAVE_CBLAS', Không có)] include_dirs = ['C:\\Tệp chương trình ( x86)\\IntelSWTools\\compilers_and_libraries_2019.0.117\\windows\\mkl', 'C:\\Program Files (x86)\\IntelSWTools\\compilers_and_libraries_2019.0.117\\windows\\mkl\\include', 'C: \\Program Files (x86)\\IntelSWTools\\compilers_and_libraries_2019.0.117\\windows\\mkl\\lib', 'C:/Users/programing/Miniconda3/envs/ML\\Library\\include']

Nếu mkl_info được hiển thị, intel MKL được sử dụng.