Tampaknya kecepatan perhitungan berubah tergantung pada BLAS yang digunakan di Numpy [Python]

2019 6 年 月 日 4

Dalam "numpy", pustaka operasi numerik yang disebut BLAS bertanggung jawab atas pemrosesan yang sebenarnya.

Bergantung pada apakah Anda menginstal numpy dengan "conda install" atau "pip install", BLAS yang digunakan akan berubah, dan bergantung pada BLAS mana yang Anda gunakan, kecepatan pemrosesan tidak hanya memengaruhi numpy tetapi juga pustaka yang bergantung padanya.

Kali ini, kami mengulas BLAS secara singkat, perbedaan kecepatan yang sebenarnya, dan cara memeriksa BLAS mana yang digunakan, jadi kami akan memperkenalkannya.

BLAS dan jenisnya

Apa itu BLAS

Mengenai BLAS, penjelasan di situs berikut sangat mudah dipahami, jadi saya akan mengutipnya.

BLAS adalah singkatan dari Subprogram Aljabar Linear Dasar.Singkatnya, ini adalah perpustakaan operasi linier dasar.Misalnya, perkalian matriks, perhitungan norma vektor, dll.Intinya adalah berhenti menerapkan perhitungan ini (mengembangkan kembali roda) dan menggunakan pustaka untuk membuat kode secara efisien dan efisien.

Penggunaan sederhana BLAS

Karena BLAS juga digunakan di belakang numpy, dikatakan bahwa waktu perhitungan akan bervariasi tergantung pada BLAS mana yang dipanggil saat numpy dijalankan.

Jenis BLAS

Berbagai jenis BLAS telah dikembangkan.Mari kita lihat beberapa contoh yang representatif.

BukaBLAS

Implementasi open source dari BLAS.Di numpy diinstal dengan pip, OpenBLAS dipanggil secara internal untuk melakukan perhitungan.
Ini kompatibel dengan berbagai CPU, dan dikatakan dapat mencapai kecepatan yang sama dengan Intel MKL untuk CPU Intel Sandy Bridge.Ini terkenal dengan fungsi multithreading-nya, dan tampaknya jumlah core dan speedupnya proporsional.

Intel MKL (Perpustakaan Kernel Matematika Intel)

BLAS dikembangkan oleh Intel. Hanya CPU Intel yang didukung, dan CPU pabrikan lain tidak dapat digunakan. Karena dioptimalkan untuk CPU Intel seperti Xeon, seri Core i, dan Atom, lebih cepat menggunakan intel MKL sebagai pustaka kalkulasi pada komputer yang menggunakan ini sebagai CPU.numpy diinstal dengan "conda install" di Anaconda atau Miniconda menggunakan intel MKL.

ATLAS (Perangkat Lunak Aljabar Linier yang Disetel Secara Otomatis)

Salah satu BLAS gratis.Seperti namanya, ini menetapkan parameter optimal untuk perangkat keras yang akan dipasang dengan penyetelan untuk mencapai kalkulasi kecepatan tinggi.

Perbedaan waktu perhitungan karena perbedaan BLAS

Fakta bahwa BLAS digunakan di belakang numpy memengaruhi kecepatan pemrosesan berarti hal itu memengaruhi kecepatan eksekusi perpustakaan yang bergantung pada numpy.Ini juga memengaruhi scipy, panda, scikit-learn, dan tensorflow.

Banyak teknisi membandingkan tolok ukur untuk perbedaan BLAS (conda install vs. pip install), tapi mari kita ambil yang dipublikasikan di Intel® Developer Zone.
Perhitungan matriks dengan scipy menunjukkan waktu yang diperlukan untuk perkalian matriks kompleks ke kanan, dan intel MKL dapat memproses lebih cepat daripada ATLAS.

Membandingkan perhitungan matriks dengan scipy pada intel MKL dan ATLAS
Membandingkan perhitungan matriks dengan scipy pada intel MKL dan ATLAS
Sumber:https://software.intel.com/en-us/articles/numpyscipy-with-intel-mkl/

Berikut ini dari pejabat Anaconda. Membandingkan jumlah gambar yang dapat dilatih per detik untuk setiap model deep learning dengan tensorflow yang diinstal oleh conda install atau pip install, selisihnya hingga 1 kali lipat.

Perbedaan antara pip (OpenBLAS) dan conda (intel MKL) pada masing-masing model deep learning
Perbedaan antara pip (OpenBLAS) dan conda (intel MKL) pada masing-masing model deep learning
(CPU adalah Intel®Xeon®Gold 6130)
Sumber:https://www.anaconda.com/tensorflow-in-anaconda/

Lainnya seperti panda dan scikit belajar juga dibandingkan (Kinerja Intel vs. Anaconda vs. vanilla Python – tolok ukur pribadi saya). Karena conda menginstal dan mengelola perpustakaannya sendiri, tampaknya memiliki keuntungan dalam banyak kasus.

Cara memeriksa BLAS dengan Python

__config__.show()lari saja

impor numpy sebagai np np.__config__.show()

>>
mkl_info: library = ['mkl_rt'] library_dirs = ['C:/Users/'] define_macros = [('SCIPY_MKL_H', Tidak ada), ('HAVE_CBLAS', Tidak ada)] include_dirs = ['C:\\Program Files ( 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']

Jika mkl_info ditampilkan, intel MKL digunakan.