NumPy從源碼構(gòu)建
此處給出了從源代碼構(gòu)建NumPy的一般概述,以及單獨(dú)給出的特定平臺(tái)的詳細(xì)說明。
先決條件
構(gòu)建NumPy需要安裝以下軟件:
基本安裝
要安裝NumPy運(yùn)行:
pip install .
要執(zhí)行可以從源文件夾運(yùn)行的就地構(gòu)建:
python setup.py build_ext --inplace
NumPy構(gòu)建系統(tǒng)使用setuptools
(從numpy 1.11.0開始,之前很簡(jiǎn)單distutils
)和numpy.distutils
。使用virtualenv
應(yīng)該按預(yù)期工作。
注意:有關(guān)在NumPy上進(jìn)行開發(fā)工作的構(gòu)建說明,請(qǐng)參閱 設(shè)置和使用開發(fā)環(huán)境。
測(cè)試
確保測(cè)試您的構(gòu)建。為了確保一切都保持穩(wěn)定,請(qǐng)查看是否所有測(cè)試都通過:
$ python runtests.py -v -m full
有關(guān)測(cè)試的詳細(xì)信息,請(qǐng)參閱測(cè)試版本。
并行構(gòu)建
從NumPy 1.10.0起,它也可以用以下方式進(jìn)行并行構(gòu)建:
python setup.py build -j 4 install --prefix $HOME/.local
這將在4個(gè)CPU上編譯numpy并將其安裝到指定的前綴中。要執(zhí)行并行的就地構(gòu)建,請(qǐng)運(yùn)行:
python setup.py build_ext --inplace -j 4
也可以通過環(huán)境變量指定構(gòu)建作業(yè)的數(shù)量
NPY_NUM_BUILD_JOBS
。
FORTRAN ABI不匹配
兩個(gè)最受歡迎的開源fortran編譯器是g77和gfortran。不幸的是,它們不兼容ABI,
這意味著你應(yīng)該避免混合使用彼此構(gòu)建的庫。特別是,如果您的blas / lapack / atlas是使用g77構(gòu)建的,
那么在構(gòu)建numpy和scipy時(shí) 必須 使用g77;
相反,如果你的地圖集是用gfortran 構(gòu)建的,你 必須 用gfortran
建立numpy / scipy。這適用于可能使用了不同F(xiàn)ORTRAN編譯器的大多數(shù)其他情況。
選擇fortran編譯器
用gfortran構(gòu)建:
python setup.py build --fcompiler=gnu95
有關(guān)更多信息,請(qǐng)運(yùn)行幫助命令:
python setup.py build --help-fcompiler
如何檢查BLAS / LAPACK /地圖集ABI
檢查用于構(gòu)建庫的編譯器的一種相對(duì)簡(jiǎn)單且可靠的方法是在庫上使用ldd。
如果libg2c.so是依賴項(xiàng),則表示已使用g77。
如果libgfortran.so是依賴項(xiàng),則使用gfortran。
如果兩者都是依賴關(guān)系,這意味著兩者都已被使用,這幾乎總是一個(gè)非常糟糕的主意。
加速BLAS / LAPACK庫
NumPy搜索優(yōu)化的線性代數(shù)庫,如BLAS和LAPACK。搜索這些庫有特定的順序,如下所述。
BLAS
庫的默認(rèn)順序是:
- MKL
- BLIS
- OpenBLAS
- ATLAS
- 加速(MacOS)
- BLAS(NetLIB)
如果您希望針對(duì)OpenBLAS進(jìn)行構(gòu)建,但您也可以使用BLIS,則可以通過環(huán)境變量預(yù)定義搜索順序,該變量
NPY_BLAS_ORDER
是用于確定要搜索內(nèi)容的上述名稱的逗號(hào)分隔列表,例如:
NPY_BLAS_ORDER=ATLAS,blis,openblas,MKL python setup.py build
我更喜歡使用ATLAS,然后是BLIS,然后是OpenBLAS,最后是MKL。如果這些都不存在,則構(gòu)建將失?。Q將比較小寫)。
LAPACK
庫的默認(rèn)順序是:
- MKL
- OpenBLAS
- libFLAME
- ATLAS
- 加速(MacOS)
- LAPACK(NetLIB)
如果您希望針對(duì)OpenBLAS進(jìn)行構(gòu)建,但您也可以使用MKL,則可以通過環(huán)境變量預(yù)定義搜索順序,該變量
NPY_LAPACK_ORDER
是以逗號(hào)分隔的上述名稱列表,例如:
NPY_LAPACK_ORDER=ATLAS,openblas,MKL python setup.py build
我希望使用ATLAS,然后使用OpenBLAS,作為最后的手段使用MKL。如果這些都不存在,則構(gòu)建將失?。Q將比較小寫)。
禁用ATLAS和其他加速庫
可以通過以下方式禁用在NumPy中使用ATLAS和其他加速庫:
NPY_BLAS_ORDER= NPY_LAPACK_ORDER= python setup.py build
要么:
BLAS=None LAPACK=None ATLAS=None python setup.py build
提供額外的編譯器標(biāo)志
額外的編譯器標(biāo)記可以通過設(shè)置來提供OPT
,
FOPT
(Fortran的),和CC
環(huán)境變量。提供應(yīng)該提高代碼性能的選項(xiàng)時(shí),請(qǐng)確保還要設(shè)置-DNDEBUG
為不執(zhí)行調(diào)試代碼。
使用ATLAS支持構(gòu)建
Ubuntu的
您可以使用以下命令為優(yōu)化的ATLAS安裝必要的包:
sudo apt-get install libatlas-base-dev
作者:柯廣的網(wǎng)絡(luò)日志 ? NumPy從源碼構(gòu)建
微信公眾號(hào):Java大數(shù)據(jù)與數(shù)據(jù)倉庫