Linux下pip安裝的numpy(或scipy等)默認(rèn)是鏈接openblas編譯的瘩扼。實(shí)測(cè)在個(gè)人電腦下矩陣不大(大約10k)的情況下做矩陣運(yùn)算速度略?xún)?yōu)于Intel mkl,但是大矩陣下就明顯慢了眉尸,而且處理并行不夠智能。所以還是自己手動(dòng)鏈接編譯Intel mkl更好些玷室。
- 以Debian為例。Debian 12 (bookworm)現(xiàn)在默認(rèn)不讓在系統(tǒng)層面用pip安裝python package,必須新建虛擬環(huán)境(假設(shè)在個(gè)人用戶主目錄
/home/xxxx/
下創(chuàng)建虛擬環(huán)境文件夾venv):
$ python3 -m venv home/xxxx/venv
進(jìn)入虛擬環(huán)境:
$ source /home/xxxx/venv/bin/activate
- 根據(jù)官網(wǎng)說(shuō)明下載Intel mkl:https://www.intel.com/content/www/us/en/developer/tools/oneapi/base-toolkit-download.html?operatingsystem=linux&distributions=aptpackagemanager
$ sudo apt update
$ sudo apt install -y gpg-agent wget
$ wget -O- https://apt.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB | gpg --dearmor | sudo tee /usr/share/keyrings/oneapi-archive-keyring.gpg > /dev/null
$ echo "deb [signed-by=/usr/share/keyrings/oneapi-archive-keyring.gpg] https://apt.repos.intel.com/oneapi all main" | sudo tee /etc/apt/sources.list.d/oneAPI.list
$ sudo apt update
$ sudo apt install intel-basekit
當(dāng)前mkl的版本是2024.1,在我本地的安裝目錄是/opt/intel/oneapi/mkl/2024.1/
。
- 在用戶主目錄(
/home/xxxx/
)下創(chuàng)建numpy的配置文件.numpy-site.cfg
并輸入如下內(nèi)容炼邀,指明mkl的位置:
[mkl]
library_dirs = /opt/intel/oneapi/mkl/2024.1/lib/intel64
include_dirs = /opt/intel/oneapi/mkl/2024.1/include
libraries = mkl_rt
- 編譯numpy:
$ pip install numpy --no-binary :all:
編譯通過(guò)后成功鏈接了mkl庫(kù):
>>> import numpy
>>> numpy.show_config()
Build Dependencies:
blas:
detection method: pkgconfig
found: true
include directory: /opt/intel//oneapi//mkl/2024.1/lib/pkgconfig/../../include
lib directory: /opt/intel//oneapi//mkl/2024.1/lib/pkgconfig/../../lib
name: mkl-dynamic-lp64-seq
openblas configuration: unknown
pc file directory: /usr/local/share/pkgconfig
version: '2024.1'
實(shí)測(cè)矩陣運(yùn)算速度讓人滿意。
類(lèi)似的方法可以安裝其他python科學(xué)計(jì)算庫(kù)剪侮,比如numba拭宁,scipy等。
參考網(wǎng)址:https://www.yodiw.com/setup-numpy-with-oneapi-mkl-in-ubuntu/