IntelのMathKernelLibraryに対して構築されたNumPyを使用しています。私はvirtualenvを使用しており、通常はpipを使用してパッケージをインストールします。
ただし、NumPyがMKLライブラリを見つけるには、コンパイルする前にNumPyソースディレクトリにsite.cfgファイルを作成してから、手動でビルドしてインストールする必要があります。このプロセス全体をスクリプト化することはできましたが、もっと簡単な解決策を望んでいました。
バージョン管理下でこの目的に使用できる標準のsite.cfgファイルがあります。パッケージをビルドする前に特定のファイルをソースディレクトリにコピーするように指示するpipコマンドラインオプションはありますか?
または、site.cfgファイルでライブラリパスを指定する代わりに設定できる環境変数はありますか?これが私が使用するsite.cfgファイルです。 Intelのサイト からほぼ逐語的に取得されました。
[mkl]
library_dirs = /opt/intel/composer_xe_2013.1.117/mkl/lib/intel64
include_dirs = /opt/intel/composer_xe_2013.1.117/mkl/include
mkl_libs = mkl_rt
lapack_libs =
参考までに、私はUbuntu、Python 2.7、およびNumPy1.6を実行しています。
ソースから( https://github.com/numpy/numpy/blob/master/site.cfg.example ):
Easy_installのような自動インストールを支援するために、ユーザーのホームディレクトリでファイル〜/ .numpy-site.cfgもチェックされます。
それは実行可能な解決策ですか?それでも、グローバル.numpy-site.cfgを使用してホームディレクトリをプリロードする必要がありますが、その後のビルドやインストールをいじくり回す必要はありません。
私はこれを自動化するためのスクリプトをまとめることになりました。それが他の誰かを助けることができる場合に備えて、ここにあります。 Python 2.7でテストしましたが、大幅な変更を加えなくても他の場所で機能するはずです。
from __future__ import unicode_literals
import io
import os.path
import re
import subprocess
import urllib2
# This downloads, builds, and installs NumPy against the MKL in the
# currently active virtualenv
file_name = 'numpy-1.6.2.tar.gz'
url = ('http://sourceforge.net/projects/numpy/files/NumPy/1.6.2/'
'numpy-1.6.2.tar.gz/download')
def main():
# download NumPy and unpack it
file_data = urllib2.urlopen(url).read()
with io.open(file_name, 'wb') as fobj:
fobj.write(file_data)
subprocess.check_call('tar -xvf {0}'.format(file_name), Shell=True)
base_name = re.search(r'(.*)\.tar\.gz$', file_name).group(1)
os.chdir(base_name)
# write out a site.cfg file in the build directory
site_cfg = (
'[mkl]\n'
'library_dirs = /opt/intel/composer_xe_2013.1.117/mkl/lib/intel64\n'
'include_dirs = /opt/intel/composer_xe_2013.1.117/mkl/include\n'
'mkl_libs = mkl_rt\n'
'lapack_libs =\n')
with io.open('site.cfg', 'wt', encoding='UTF-8') as fobj:
fobj.write(site_cfg)
# build and install NumPy
subprocess.check_call('python setup.py build', Shell=True)
subprocess.check_call('python setup.py install', Shell=True)
if __name__ == '__main__':
main()
IntelのMathKernel Libraryを使用するためにNumPyをインストールするという目標は、MKL + NumPyをインストールするために Intelが作成したpips であるため、はるかに簡単になりました。
pip uninstall numpy -y # if the standard numpy is present
pip install intel-numpy
と同様 intel-scipy
、intel-scikit-learn
、pydaal
、tbb4py
、mkl_fft
、mkl_random
、および必要に応じて下位レベルのパッケージ。繰り返しになりますが、virtualenvにすでにインストールされている場合は、最初に標準パッケージをアンインストールする必要があります。
注:
標準のNumPy、SciPy、およびScikit-Learnパッケージがすでにインストールされている場合は、競合を回避するために、これらのパッケージのIntel®バリアント(intel-numpyなど)をインストールする前にパッケージをアンインストールする必要があります。前述のように、pydaalはintel-numpyを使用するため、最初に標準のNumpyライブラリ(インストールされている場合)を削除してから、pydaalをインストールすることが重要です。
NumPyを構成する方法(OpenBLASを使用するなど)についての質問:
[openblas]
libraries = openblas
library_dirs = /opt/OpenBLAS/lib
include_dirs = /opt/OpenBLAS/include
~/.numpy-site.cfg
として保存します手動でダウンロードせずにソースからnumpyをインストールします(--force-reinstall
は既存のパッケージを置き換えます):
pip install numpy --no-binary numpy --force-reinstall
ボーナス:同じファイル~/.numpy-site.cfg
がOpenBLASにscipyをインストールするために機能します:
pip install scipy --no-binary scipy
またはそれらを一緒にインストールします:
pip install numpy scipy --no-binary numpy,scipy --force-reinstall
9月2019:まだPython 2.7を使用している場合は、numpyをインストールしてからscipyをインストールします。 試行 それらを一緒にインストールすると、次のようになります。
install numpy==1.14.6 scipy==1.0.1 --no-binary numpy,scipy
を要求した場合でも)、次にRuntimeError: Python version >= 3.5 required
で失敗します。