【问题标题】:Building Numpy with Intel Compilers and MKL - CentOS 7使用英特尔编译器和 MKL 构建 Numpy - CentOS 7
【发布时间】:2015-01-06 21:13:50
【问题描述】:

目前我正在尝试使用 CentOS 7 上的英特尔编译器为英特尔的 MKL 构建 Numpy-1.9.1。我安装了英特尔 Parallel XE Studio 2015 C++ 和 Fortran for Linux,在我的终端中我可以同时使用“icc”和'ifort' 命令,它们都被发现没有问题。我也跑过:

$ source /opt/intel/composer_xe_2015/bin/compilervars.sh intel64

根据英特尔网页上的本指南,我正在尝试做我想做的事情:https://software.intel.com/en-us/articles/numpyscipy-with-intel-mkl,我尝试使用此命令构建 numpy:

$ sudo python setup.py config --compiler=intelem build_clib --compiler=intelem build_ext --compiler=intelem install

得到的消息是:

Running from numpy source directory.
/usr/lib64/python2.7/distutils/dist.py:267: UserWarning: Unknown distribution option: 'test_suite'
  warnings.warn(msg)
non-existing path in 'numpy/f2py': 'docs'
non-existing path in 'numpy/f2py': 'f2py.1'
F2PY Version 2
blas_opt_info:
blas_mkl_info:
  FOUND:
    libraries = ['mkl_rt', 'pthread']
    library_dirs = ['/opt/intel/composer_xe_2015/mkl/lib/intel64']
    define_macros = [('SCIPY_MKL_H', None)]
    include_dirs = ['/opt/intel/composer_xe_2015/mkl/include']

  FOUND:
    libraries = ['mkl_rt', 'pthread']
    library_dirs = ['/opt/intel/composer_xe_2015/mkl/lib/intel64']
    define_macros = [('SCIPY_MKL_H', None)]
    include_dirs = ['/opt/intel/composer_xe_2015/mkl/include']

non-existing path in 'numpy/lib': 'benchmarks'
lapack_opt_info:
openblas_lapack_info:
  libraries openblas not found in ['/usr/local/lib64', '/usr/local/lib', '/usr/lib64', '/usr/lib', '/usr/lib/']
  NOT AVAILABLE

lapack_mkl_info:
mkl_info:
  FOUND:
    libraries = ['mkl_rt', 'pthread']
    library_dirs = ['/opt/intel/composer_xe_2015/mkl/lib/intel64']
    define_macros = [('SCIPY_MKL_H', None)]
    include_dirs = ['/opt/intel/composer_xe_2015/mkl/include']

  FOUND:
    libraries = ['mkl_rt', 'pthread']
    library_dirs = ['/opt/intel/composer_xe_2015/mkl/lib/intel64']
    define_macros = [('SCIPY_MKL_H', None)]
    include_dirs = ['/opt/intel/composer_xe_2015/mkl/include']

  FOUND:
    libraries = ['mkl_rt', 'pthread']
    library_dirs = ['/opt/intel/composer_xe_2015/mkl/lib/intel64']
    define_macros = [('SCIPY_MKL_H', None)]
    include_dirs = ['/opt/intel/composer_xe_2015/mkl/include']

/usr/lib64/python2.7/distutils/dist.py:267: UserWarning: Unknown distribution option: 'define_macros'
  warnings.warn(msg)
running config
running build_clib
running build_src
build_src
building py_modules sources
building library "npymath" sources
Could not locate executable icc
Could not locate executable ecc
customize Gnu95FCompiler
Found executable /usr/bin/gfortran
customize Gnu95FCompiler
customize Gnu95FCompiler using config
C compiler: icc -O3 -g -fPIC -fp-model strict -fomit-frame-pointer -openmp -xhost

compile options: '-Inumpy/core/src/private -Inumpy/core/src -Inumpy/core -Inumpy/core/src/npymath -Inumpy/core/src/multiarray -Inumpy/core/src/umath -Inumpy/core/src/npysort -Inumpy/core/include -I/usr/include/python2.7 -c'
icc: _configtest.c
sh: icc: command not found
sh: icc: command not found
failure.
removing: _configtest.c _configtest.o
Traceback (most recent call last):
  File "setup.py", line 251, in <module>
    setup_package()
  File "setup.py", line 243, in setup_package
    setup(**metadata)
  File "/home/myles/Downloads/numpy-1.9.1/numpy/distutils/core.py", line 169, in setup
    return old_setup(**new_attr)
  File "/usr/lib64/python2.7/distutils/core.py", line 152, in setup
    dist.run_commands()
  File "/usr/lib64/python2.7/distutils/dist.py", line 953, in run_commands
    self.run_command(cmd)
  File "/usr/lib64/python2.7/distutils/dist.py", line 972, in run_command
    cmd_obj.run()
  File "/home/myles/Downloads/numpy-1.9.1/numpy/distutils/command/build_clib.py", line 63, in run
    self.run_command('build_src')
  File "/usr/lib64/python2.7/distutils/cmd.py", line 326, in run_command
    self.distribution.run_command(command)
  File "/usr/lib64/python2.7/distutils/dist.py", line 972, in run_command
    cmd_obj.run()
  File "/home/myles/Downloads/numpy-1.9.1/numpy/distutils/command/build_src.py", line 153, in run
    self.build_sources()
  File "/home/myles/Downloads/numpy-1.9.1/numpy/distutils/command/build_src.py", line 164, in build_sources
    self.build_library_sources(*libname_info)
  File "/home/myles/Downloads/numpy-1.9.1/numpy/distutils/command/build_src.py", line 299, in build_library_sources
    sources = self.generate_sources(sources, (lib_name, build_info))
  File "/home/myles/Downloads/numpy-1.9.1/numpy/distutils/command/build_src.py", line 386, in generate_sources
    source = func(extension, build_dir)
  File "numpy/core/setup.py", line 686, in get_mathlib_info
    raise RuntimeError("Broken toolchain: cannot link a simple C program")
RuntimeError: Broken toolchain: cannot link a simple C program

为此,我使用 CentOS 7 作为我的操作系统。似乎由于某种原因,构建脚本找不到 icc。

我需要使用英特尔编译器进行 numpy 构建,因为根据我收集到的信息,我需要使用英特尔编译器和英特尔 MKL 进行 numpy 构建,以便自动卸载到 Xeon Phi。如果有人为自动卸载到 Xeon Phi 构建了 numpy,或者只是在这个问题上使用英特尔编译器构建了 numpy,我将不胜感激有关修复此错误的意见。

【问题讨论】:

  • 尝试只运行构建命令而不使用sudo(首先运行sudo make clean 进行清理)。 sudo 命令可能正在使用root$PATH 而不是您自己的。如果是这种情况,将不会搜索 /opt/intel/bin(或 /opt/intel/composer_xe_2015/bin),从而导致 icc 出现 command not found 错误。
  • @MattDMo 哇,这只是我从未怀疑过的另一件事,它是 linux 的新手。事实证明这正是问题所在。英特尔指南假定了 root 访问权限,因此如果我在 root 中设置,该命令将正常工作。相反,我运行了没有sudo 的构建命令,然后运行了python setup.py installsudo,一切正常。我的 Numpy 现在可以完美地与我的至强 phi 配合使用。非常感谢!

标签: python linux numpy intel-mkl centos7


【解决方案1】:

在 Unix/Linux 系统上,sudo 命令 (SuperUser DO) 设置为使用环境变量为root 用户定义,而不是为运行命令的用户定义。如果您在非标准位置安装程序,然后需要以超级用户权限运行它,这可能会导致问题。例如,在 OS X 系统上(运行在 BSD Unix 上),/usr/local/bin 默认不包含在PATH 环境变量中。您可以设置您的用户帐户以将该目录包含在您的PATH 中,但是如果您尝试使用其中的程序使用sudo,它将找不到,除非您修改root 的环境(或系统环境)将/usr/local/bin包含在PATH中。

这可能是您的问题的原因。 iccifort 位于 (IIRC) 中的 /opt/intel/bin 和/或 /opt/intel/composer_xe_2015/bin 中(一个可能符号链接到另一个),并且您已将这些目录中的至少一个添加到您的 $PATH 环境变量中,但是使用sudo 执行构建命令时,找不到程序。为了解决这个问题,不要使用sudo 构建。首先,要清除任何剩余的临时文件,请运行

sudo make clean

然后运行

python setup.py config --compiler=intelem 

并确认一切设置正确。接下来,运行

python setup.py build_clib --compiler=intelem build_ext --compiler=intelem

构建一切。如果成功且没有错误,则可选择运行

python setup.py test

(我认为您不需要此目标的 compiler 参数)来验证构建,然后运行

sudo python setup.py install

将所有内容安装在系统的site-packages 目录中。这里需要sudo,因为site-packagesroot 所有。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-20
    • 1970-01-01
    • 2021-08-08
    • 2017-01-22
    • 1970-01-01
    • 2016-09-26
    • 1970-01-01
    相关资源
    最近更新 更多