Spec-Zone.ru › NumPy 1.21

Создание из исходного кода

Здесь приведён общий обзор создания NumPy из исходного кода, а подробные инструкции для конкретных платформ приведены отдельно.

Предварительные требования

Для создания NumPy требуется установка следующего программного обеспечения:

  1. Python 3.6.x или новее

    Обратите внимание, что также необходимо установить заголовки Python для разработки, например, в Debian/Ubuntu нужно установить как python3 , так и python3-dev. В Windows и macOS это обычно не вызывает проблем.

  2. Компиляторы

    Для компиляции модулей расширения Python нужен C-компилятор. Различные модули NumPy используют библиотеки FORTRAN 77, поэтому также необходим установленный FORTRAN 77-компилятор.

    Обратите внимание, что NumPy разрабатывается в основном с использованием компиляторов GNU и тестируется с компиляторами MSVC и Clang. Компиляторы других поставщиков, таких как Intel, Absoft, Sun, NAG, Compaq, Vast, Portland, Lahey, HP, IBM, поддерживаются только в виде отзывов сообщества и могут не работать «из коробки». Рекомендуются компиляторы GCC 4.x (и более поздние версии). На ARM64 (aarch64) рекомендуются компиляторы GCC 8.x (и более поздние версии).

  3. Библиотеки линейной алгебры

    NumPy не требует установки каких-либо внешних библиотек линейной алгебры. Однако, если они доступны, скрипт настройки NumPy может их обнаружить и использовать для построения. Можно использовать множество различных наборов библиотек LAPACK, включая оптимизированные библиотеки LAPACK, такие как OpenBLAS или MKL. Выбор и расположение этих библиотек, а также пути включения и другие параметры сборки можно указать в файле site.cfg, расположенном в корневом репозитории NumPy, или в файле .numpy-site.cfg в вашем домашнем каталоге. Документация, а также указание приоритета поиска из переменных окружения приведены в примере файла site.cfg.example в репозитории NumPy или sdist.

  4. Cython

    Для построения NumPy вам понадобится последняя версия Cython.

Базовая установка

Для установки NumPy выполните:

pip install .

Для выполнения сборки на месте, которую можно запустить из папки с исходным кодом, выполните:

python setup.py build_ext --inplace

Примечание: инструкции по сборке для работы с самим NumPy см. в разделе Настройка и использование вашей среды разработки.

Тестирование

Обязательно протестируйте свои сборки. Для обеспечения стабильности работы убедитесь, что все тесты пройдены:

$ python runtests.py -v -m full

Для получения подробной информации о тестировании см. Тестирование сборок.

Параллельные сборки

Возможно выполнение параллельной сборки с помощью:

python setup.py build -j 4 install --prefix $HOME/.local

Это позволит скомпилировать numpy на 4 процессорах и установить его в указанный префикс. Для выполнения параллельной сборки на месте выполните:

python setup.py build_ext --inplace -j 4

Количество задач сборки также можно указать через переменную среды NPY_NUM_BUILD_JOBS.

Выбор компилятора Fortran

Компиляторы обнаруживаются автоматически; сборка с использованием конкретного компилятора может быть выполнена с помощью --fcompiler. Например, для выбора gfortran:

python setup.py build --fcompiler=gnu95

Дополнительная информация:

python setup.py build --help-fcompiler

Как проверить ABI библиотек BLAS/LAPACK

Один из относительно простых и надёжных способов проверки компилятора, используемого для построения библиотеки, — использование ldd для библиотеки. Если libg2c.so является зависимостью, это означает, что использовался g77 (примечание: g77 больше не поддерживается для построения NumPy). Если libgfortran.so является зависимостью, использовался gfortran. Если обе являются зависимостями, это означает, что использовались оба, что почти всегда является очень плохой идеей.

Ускоренные библиотеки BLAS/LAPACK

NumPy ищет оптимизированные библиотеки линейной алгебры, такие как BLAS и LAPACK. Есть определённый порядок поиска этих библиотек, как описано ниже и в файле site.cfg.example.

BLAS

Обратите внимание, что для правильной оптимизированной сборки NumPy требуются как интерфейсы BLAS, так и CBLAS.

Установленный порядок поиска библиотек:

  1. MKL
  2. BLIS
  3. OpenBLAS
  4. ATLAS
  5. BLAS (NetLIB)

Обнаружение библиотек BLAS можно обойти, определив переменную среды NPY_BLAS_LIBS, которая должна содержать точные флаги компоновщика, которые вы хотите использовать (интерфейс предполагается Fortran 77). Также определите NPY_CBLAS_LIBS (даже пустое значение, если CBLAS содержится в вашей библиотеке BLAS), чтобы активировать использование CBLAS и избежать медленного резервного кода для матричных вычислений.

Если вы хотите скомпилировать с OpenBLAS, но также доступен BLIS, вы можете предварительно определить порядок поиска через переменную среды NPY_BLAS_ORDER, которая представляет собой список имён, разделённых запятыми, используемый для определения того, что нужно искать. Например:

NPY_BLAS_ORDER=ATLAS,blis,openblas,MKL python setup.py build

будет отдавать предпочтение ATLAS, затем BLIS, затем OpenBLAS и в крайнем случае MKL. Если ни один из этих не существует, сборка завершится ошибкой (имена сравниваются в нижнем регистре).

В качестве альтернативы можно использовать ! или ^ для отмены всех элементов:

NPY_BLAS_ORDER='^blas,atlas' python setup.py build

разрешит использовать все, кроме библиотек NetLIB BLAS и ATLAS, порядок списка выше сохраняется.

Смешивание отрицаний и положительных значений, а также наличие нескольких отрицаний, приведёт к ошибке.

LAPACK

Установленный порядок поиска библиотек:

  1. MKL
  2. OpenBLAS
  3. libFLAME
  4. ATLAS
  5. LAPACK (NetLIB)

Обнаружение библиотек LAPACK можно обойти, определив переменную среды NPY_LAPACK_LIBS, которая должна содержать точные флаги компоновщика, которые вы хотите использовать (язык предполагается Fortran 77).

Если вы хотите скомпилировать с OpenBLAS, но также доступен MKL, вы можете предварительно определить порядок поиска через переменную среды NPY_LAPACK_ORDER, которая представляет собой список имён, разделённых запятыми. Например:

NPY_LAPACK_ORDER=ATLAS,openblas,MKL python setup.py build

будет отдавать предпочтение ATLAS, затем OpenBLAS и в крайнем случае MKL. Если ни один из этих не существует, сборка завершится ошибкой (имена сравниваются в нижнем регистре).

В качестве альтернативы можно использовать ! или ^ для отмены всех элементов:

NPY_LAPACK_ORDER='^lapack' python setup.py build

разрешит использовать все, кроме библиотеки LAPACK NetLIB, порядок списка выше сохраняется.

Смешивание отрицаний и положительных значений, а также наличие нескольких отрицаний, приведёт к ошибке.

Устарело начиная с версии 1.20: Нативные библиотеки macOS, предоставляемые Accelerate, не подходят для использования в NumPy, так как содержат ошибки, приводящие к неправильному результату в легко воспроизводимых условиях. Если поставщик исправит эти ошибки, библиотека может быть восстановлена, но до тех пор пользователи, выполняющие компиляцию самостоятельно, должны использовать другую библиотеку линейной алгебры или использовать встроенную (но медленную) стандартную библиотеку, см. следующий раздел.

Отключение ATLAS и других ускоренных библиотек

Использование ATLAS и других ускоренных библиотек в NumPy можно отключить с помощью:

NPY_BLAS_ORDER= NPY_LAPACK_ORDER= python setup.py build

или:

BLAS=None LAPACK=None ATLAS=None python setup.py build

64-битные BLAS и LAPACK

Можно указать NumPy использовать 64-битные библиотеки BLAS/LAPACK, установив переменную среды:

NPY_USE_BLAS_ILP64=1

при создании Numpy. Поддерживаются следующие 64-битные библиотеки BLAS/LAPACK:

  1. OpenBLAS ILP64 с суффиксом символа 64_ (openblas64_)
  2. OpenBLAS ILP64 без суффикса символа (openblas_ilp64)

Порядок их предпочтения определяется переменными среды NPY_BLAS_ILP64_ORDER и NPY_LAPACK_ILP64_ORDER. Значение по умолчанию — openblas64_,openblas_ilp64.

Примечание

Использование 64-битных BLAS/LAPACK без суффикса символа в программе, использующей также 32-битные BLAS/LAPACK, может привести к сбоям в определённых условиях (например, с встроенными интерпретаторами Python в Linux).

64-битная OpenBLAS с суффиксом символа 64_ получается путём компиляции OpenBLAS со следующими настройками:

make INTERFACE64=1 SYMBOLSUFFIX=64_

Суффикс символа предотвращает конфликты имён символов между 32-битными и 64-битными библиотеками BLAS/LAPACK.

Предоставление дополнительных флагов компилятора

Дополнительные флаги компилятора можно предоставить, установив переменные среды OPT, FOPT (для Fortran) и CC. При предоставлении параметров, которые должны улучшить производительность кода, убедитесь, что вы также установили -DNDEBUG, чтобы отладка кода не выполнялась.

© 2005–2022 NumPy Developers
Licensed under the 3-clause BSD License.
https://numpy.org/doc/1.21/user/building.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API