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)順序是:

  1. MKL
  2. BLIS
  3. OpenBLAS
  4. ATLAS
  5. 加速(MacOS)
  6. 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)順序是:

  1. MKL
  2. OpenBLAS
  3. libFLAME
  4. ATLAS
  5. 加速(MacOS)
  6. 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ù)倉庫