Numpy: Buggy Accelerate Backend при использовании numpy 1.19

Созданный на 9 апр. 2020  ·  31Комментарии  ·  Источник: numpy/numpy

Numpy 1.19 не может импортировать из-за ошибки времени выполнения в MacOS 10.14.6. Тест на работоспособность Polyfit выдал предупреждение, скорее всего, из-за использования бэкэнда Accelerate с ошибками. Если вы компилировали самостоятельно, см. Site.cfg.example для получения информации. В противном случае сообщите об этом поставщику, предоставившему NumPy.

Воспроизведение примера кода:

import numpy as np

Сообщение об ошибке:

RuntimeError: тест на работоспособность Polyfit выдал предупреждение, скорее всего, из-за использования бэкэнда Accelerate с ошибками. Если вы компилировали самостоятельно, см. Site.cfg.example для получения информации. В противном случае сообщите об этом поставщику, предоставившему NumPy.
RankWarning: Polyfit может быть плохо подготовлен

Отслеживание (последний вызов последний):
Файл "/Users/billyzhaoyh/anaconda/envs/simulation/lib/python3.7/runpy.py", строка 183, в _run_module_as_main
имя_мода, спецификация_мода, код = _get_module_details (имя_мода, _Error)
Файл "/Users/billyzhaoyh/anaconda/envs/simulation/lib/python3.7/runpy.py", строка 109, в _get_module_details
__import __ (имя_пакета)
Файл "/Users/billyzhaoyh/Desktop/Simulation/reina-model/calc/__init__.py", строка 1, в
из .utils import calcfunc
Файл "/Users/billyzhaoyh/Desktop/Simulation/reina-model/calc/utils.py", строка 9, в
из utils.quilt import load_datasets
Файл "/Users/billyzhaoyh/Desktop/Simulation/reina-model/utils/quilt.py", строка 4, в
импортное одеяло
Файл "/Users/billyzhaoyh/anaconda/envs/simulation/lib/python3.7/site-packages/quilt/__init__.py", строка 87, в
из .tools.command import (
Файл "/Users/billyzhaoyh/anaconda/envs/simulation/lib/python3.7/site-packages/quilt/tools/command.py", строка 24, в
импортировать numpy как np
Файл "/Users/billyzhaoyh/Desktop/Simulation/reina-model/src/numpy/numpy/__init__.py", строка 286, в
поднять RuntimeError (msg)
RuntimeError: тест на работоспособность Polyfit выдал предупреждение, скорее всего, из-за использования бэкэнда Accelerate с ошибками. Если вы компилировали самостоятельно, см. Site.cfg.example для получения информации. В противном случае сообщите об этом поставщику, предоставившему NumPy.
RankWarning: Polyfit может быть плохо подготовлен

Информация о версии Numpy / Python:


Python 3.7.6
Numpy -e git + https://github.com/numpy/numpy.git@078ac01a85c4db46e7f148829c2e0d0e0f30c36f#egg = numpy

Самый полезный комментарий

Чуть более простое решение:

$ rm -v ~/Library/Caches/pip/wheels/<em i="7">/</em>/<em i="8">/</em>/<em i="9">numpy</em> # clear the pip wheel cache of any built numpy wheels

Согласно https://twitter.com/pradyunsg/status/1317081239526936576?s=20 теперь это можно сделать с помощью встроенной команды pip :

$ pip cache remove numpy
$ brew install openblas # make sure OpenBLAS is installed
$ # activate your pypy3 virtualenv
$ OPENBLAS="$(brew --prefix openblas)" pip install numpy # let numpy's setup.py know where OpenBLAS is installed

Это дает дополнительное преимущество в том, что колесо не нужно перестраивать, и любые будущие pip install numpy на pypy3 будут работать.

Все 31 Комментарий

Это сделано намеренно. Вы прочитали сообщение об ошибке? Это непонятно?

Итак, как я могу исправить эту ошибку, обновив бэкэнд Accelerate? У меня был поиск, и я не думаю, что смогу обновить его для своей MacOS.

@billlyzhaoyh Запрос на использование OpenBLAS при сборке на MacOS. Используйте site.cfg в корневом каталоге репозитория, чтобы использовать его.

Закрытие. Мы настоятельно не рекомендуем использовать Accelerate.

Закрытие. Мы настоятельно не рекомендуем использовать Accelerate.

Конечно, как нам это не использовать? Я получил ту же ошибку, когда просто запустил простой import numpy в моей macOS

Если вы создаете свой собственный NumPy, получите OpenBlas. Вы можете использовать python3 tools/openblas_support.py чтобы загрузить тот, который использовался для создания официального колеса. Если вы используете NumPy провайдера, спросите их, почему они используют Accelerate.

Если вы создаете свой собственный NumPy, получите OpenBlas. Вы можете использовать python3 tools/openblas_support.py чтобы загрузить тот, который использовался для создания официального колеса. Если вы используете NumPy провайдера, спросите их, почему они используют Accelerate.

Я определенно не строю самостоятельно. Я использую macOS и запускаю pip3 install -U numpy , поэтому я не уверен, что вы имеете в виду под «поставщиком».

Пип может строить из источника за вашей спиной. Если установка занимает больше нескольких секунд, возможно, он компилируется. Чтобы заставить pip использовать только двоичные колеса и никогда не компилировать, используйте

pip3 install --upgrade --only-binary :all: <package>

Можете ли вы попробовать удалить свой numpy и установить с аргументом --only-binary :all: ?

Это устранило проблему для меня. (Я заменил pip на pip3 ... и текущая версия numpy будет 1.19.1)
https://gist.github.com/yatsu/47bdde35e8abbe7d14bbe730342aa9e0#file -numpy-openblas-macos-pip-sh

РЕДАКТИРОВАТЬ: Вставка полного решения на случай, если суть будет удалена :)

# Setup HomeBrew if not already installed: https://brew.sh/
brew install openblas
mkdir /tmp/numpy_local
cd /tmp/numpy_local
pip3 download --no-binary :all: --no-deps numpy
unzip numpy-*.zip  # (assuming there's only one version in this folder)
cd numpy-1.19.1 # the version may be a later version than this

cat > site.cfg <<EOF
[openblas]
libraries = openblas
library_dirs = $(brew --prefix openblas)/lib
include_dirs = $(brew --prefix openblas)/include
runtime_library_dirs = $(brew --prefix openblas)/lib
EOF

pip3 install .
# cleanup
cd /tmp
rm -rf numpy_local

Чуть более простое решение:

$ rm -v ~/Library/Caches/pip/wheels/<em i="7">/</em>/<em i="8">/</em>/<em i="9">numpy</em> # clear the pip wheel cache of any built numpy wheels

Согласно https://twitter.com/pradyunsg/status/1317081239526936576?s=20 теперь это можно сделать с помощью встроенной команды pip :

$ pip cache remove numpy
$ brew install openblas # make sure OpenBLAS is installed
$ # activate your pypy3 virtualenv
$ OPENBLAS="$(brew --prefix openblas)" pip install numpy # let numpy's setup.py know where OpenBLAS is installed

Это дает дополнительное преимущество в том, что колесо не нужно перестраивать, и любые будущие pip install numpy на pypy3 будут работать.

Хотя обходные пути в сторону, почему поведение сборки по умолчанию - сломанное колесо, которое не может даже import ? Похоже, что создание такого сломанного артефакта «по замыслу» в любом случае является ошибкой; Самопроверка в конце сборки, которая прерывается, если она оказывается в этом состоянии, была бы долгожданным дополнением. (Особенно, если он может предоставить полезное сообщение об ошибке, например «попробуйте brew install openblas » или что-то подобное.)

Попытка импортировать после сборки кажется хорошей идеей.

Почему бы просто не отказаться от сборки на macOS, если openblas не найден?

Помимо OpenBLAS, существуют различные действующие серверные части Blas. Единственный недопустимый - Accelerate. К сожалению, macOS не позволяет нам сообщить, что они предоставляют Accelerate, мы можем обнаружить это только во время выполнения, запустив заведомо неверный расчет. Если бы вы могли выяснить, как обнаружить Accelerate раньше, это было бы здорово. Лучшее, что у нас было до сих пор, - это обнаружение символической ссылки, но это очень хрупко.

Если кто-то из пользователей python-поэзии наткнется на эту решение @glyph также работает, если вы просто замените последнюю строку на OPENBLAS="$(brew --prefix openblas)" poetry add numpy

Я пробовал предыдущую версию numpy, и она сработала для меня
pip3 install numpy == 1.18.0

Надеюсь на эту помощь

удалить и установить 1.18.0 - у меня сработало! Престижность к вышесказанному ^^

Я здесь, чтобы сообщить, что предложение использовать openblas не работает. Это вылетает:

OPENBLAS="$(brew --prefix openblas)" pip install numpy
python -c 'import numpy'

# =>  RuntimeError: Polyfit sanity test emitted a warning, most likely due to using a buggy Accelerate backend. If you compiled yourself, see site.cfg.example for information. Otherwise report this to the vendor that provided NumPy.

пока это работает без проблем:

pip install numpy==1.18.0
python -c 'import numpy'

@fny проверяет вывод, чтобы увидеть, использует ли pip кешированное колесо. В этом случае вам, возможно, придется очистить кеш.

@fny см. https://github.com/numpy/numpy/issues/15947#issuecomment -686159427 для обновленных инструкций.

Может ли кто-нибудь предоставить ссылку, где можно прочитать о том, почему Accelerate - плохая реализация BLAS, которую не следует использовать? Я пробовал погуглить "почему яблоко ускорение - плохой бла" и ничего не нашел.

Я не знаю, где находится исчерпывающая разбивка, но Accelerate имеет проблемы с потоками, некоторые неправильные результаты и предоставляет устаревшую версию LAPACK.

Для справки это решение не работает. Почему это не работает? И зачем это вообще нужно?

@orome насчет "почему" спросите у Apple. Это те, у кого вы купили систему и поставляют программное обеспечение с ошибками, над которым должна работать команда NumPy, состоящая в основном из добровольцев. Любой гнев должен быть направлен на них, а не на нас.

@orome насчет «почему» спросите Apple ... Любой гнев должен быть направлен на них, а не на нас.

Это определенно то, куда он направлен (снова)!

Это устранило проблему для меня. (Я заменил pip на pip3 ... и текущая версия numpy будет 1.19.1)
https://gist.github.com/yatsu/47bdde35e8abbe7d14bbe730342aa9e0#file -numpy-openblas-macos-pip-sh

РЕДАКТИРОВАТЬ: Вставка полного решения на случай, если суть будет удалена :)

# Setup HomeBrew if not already installed: https://brew.sh/
brew install openblas
mkdir /tmp/numpy_local
cd /tmp/numpy_local
pip3 download --no-binary :all: --no-deps numpy
unzip numpy-*.zip  # (assuming there's only one version in this folder)
cd numpy-1.19.1 # the version may be a later version than this

cat > site.cfg <<EOF
[openblas]
libraries = openblas
library_dirs = $(brew --prefix openblas)/lib
include_dirs = $(brew --prefix openblas)/include
runtime_library_dirs = $(brew --prefix openblas)/lib
EOF

pip3 install .
# cleanup
cd /tmp
rm -rf numpy_local

У меня это как-то не сработало. Я скомпилировал OpenBLAS из исходного кода и установил его в /opt/OpenBLAS и заменил каждое вхождение $(brew --prefix openblas) на /opt/OpenBLAS . Моя установка Python 3 выполняется из инструментов командной строки Xcode, поэтому я использовал pip3 install --user . вместо pip3 install . . В остальном я точно следовал сценарию. Однако после того, как я запустил python3 -c "import numpy" , сообщение об ошибке будет таким же, как и раньше:

RuntimeError: тест на работоспособность Polyfit выдал предупреждение, скорее всего, из-за использования бэкэнда Accelerate с ошибками. Если вы компилировали самостоятельно, см. Site.cfg.example для получения информации. В противном случае сообщите об этом поставщику, предоставившему NumPy.
RankWarning: Polyfit может быть плохо подготовлен

Есть идеи, почему это могло произойти?

pip install pandas
pip3 install pandas
pip3 install pandas --no-build-isolation --no-cache-dir
sudo pip3 install pandas --no-cache-dir

Описание проблемы

Я выполнил чистую установку macOS Big Sur и чистую установку Python3.9 через Homebrew ( brew install python3 ). После этого я установил pip3 с помощью команды brew install pip и хотел установить Pandas, но всегда получаю следующую ошибку. Я пробовал со всеми перечисленными выше командами установить Pandas на macOS Big Sur и Python3 ...

Кто-нибудь может помочь? Это единственные фактически установленные пакеты:

Версия пакета


пункт 20.2.4
setuptools 50.3.2
колесо 0.35.1

Ожидаемый результат

Вывод pip install pandas

Получение требований для сборки колеса ... ошибка
ОШИБКА: Ошибка команды со статусом выхода 1:
команда: / usr / local / opt / [email protected]/bin/python3.9 /usr/local/lib/python3.9/site-packages/pip/_vendor/pep517/_in_process.py get_requires_for_build_wheel / var / папки / zv / 0q58rjv549bd4qjdqlrwlvl40000gn / T / tmpzr3sthd6
cwd: / частный / var / папки / zv / 0q58rjv549bd4qjdqlrwlvl40000gn / T / pip-install-pvlaq6iq / pandas
Полный вывод (23 строки):
init_dgelsd не удалось запустить
Отслеживание (последний вызов последний):
Файл "/usr/local/lib/python3.9/site-packages/pip/_vendor/pep517/_in_process.py", строка 280, в
главный()
Файл "/usr/local/lib/python3.9/site-packages/pip/_vendor/pep517/_in_process.py", строка 263, в основном
json_out ['return_val'] = крючок (** hook_input ['kwargs'])
Файл "/usr/local/lib/python3.9/site-packages/pip/_vendor/pep517/_in_process.py", строка 114, в get_requires_for_build_wheel
хук возврата (config_settings)
Файл "/private/var/folders/zv/0q58rjv549bd4qjdqlrwlvl40000gn/T/pip-build-env-ly4c8n5_/overlay/lib/python3.9/site-packages/setuptools/build_meta.py", строка 149_heel_requires, в get_requires
вернуть self._get_build_requires (
Файл "/private/var/folders/zv/0q58rjv549bd4qjdqlrwlvl40000gn/T/pip-build-env-ly4c8n5_/overlay/lib/python3.9/site-packages/setuptools/build_meta.py", строка 130, в _get_buires
self.run_setup ()
Файл "/private/var/folders/zv/0q58rjv549bd4qjdqlrwlvl40000gn/T/pip-build-env-ly4c8n5_/overlay/lib/python3.9/site-packages/setuptools/build_meta.py", строка 253, в run_setup
super (_BuildMetaLegacyBackend,
Файл "/private/var/folders/zv/0q58rjv549bd4qjdqlrwlvl40000gn/T/pip-build-env-ly4c8n5_/overlay/lib/python3.9/site-packages/setuptools/build_meta.py", строка 145, в run_setup
exec (компиляция (код, __file__, 'exec'), locals ())
Файл "setup.py", строка 488, в
импортировать numpy как np
Файл "/private/var/folders/zv/0q58rjv549bd4qjdqlrwlvl40000gn/T/pip-build-env-ly4c8n5_/overlay/lib/python3.9/site-packages/numpy/__init__.py", строка 286, в
поднять RuntimeError (msg)
RuntimeError: тест на работоспособность Polyfit выдал предупреждение, скорее всего, из-за использования бэкэнда Accelerate с ошибками. Если вы компилировали самостоятельно, см. Site.cfg.example для получения информации. В противном случае сообщите об этом поставщику, предоставившему NumPy.
RankWarning: Polyfit может быть плохо подготовлен


ОШИБКА: ошибка команды со статусом выхода 1: / usr / local / opt / [email protected]/bin/python3.9 /usr/local/lib/python3.9/site-packages/pip/_vendor/pep517/_in_process.py get_requires_for_build_wheel / var / folder / zv / 0q58rjv549bd4qjdqlrwlvl40000gn / T / tmpzr3sthd6 Проверьте журналы для полного вывода команд.

В этом выпуске Pandas # 37880 говорится, что это проблема с последней версией macOS. Любая помощь??

Заранее спасибо!

та же проблема с той же ошибкой

Это сработало для меня на MacOS 11.0.1 Big Sur, Python 3.8.2 :

pip3 install --force-reinstall numpy\<1.19
pip3 install --upgrade wheel

brew install libjpeg # optional
pip3 install pillow # optional
pip3 install matplotlib

....

Successfully installed matplotlib-3.3.3 

Этот вопрос закрыт. Если вы используете MacOS 11 с питоном, установленным из HomeBrew, с ноября 2020 года вы должны использовать brew install NumPy не pip install numpy . Пожалуйста, не комментируйте здесь, откройте новый выпуск, если внимательное чтение gh-17784 не поможет вам понять, что происходит.

Эти шаги помогли мне решить проблему:
https://gist.github.com/mohammadnassiri/31ca8f4f2298d8694a8327814631455c

Была ли эта страница полезной?
0 / 5 - 0 рейтинги