Numpy: Buggy Accelerate Backend bei Verwendung von numpy 1.19

Erstellt am 9. Apr. 2020  ·  31Kommentare  ·  Quelle: numpy/numpy

Numpy 1.19 kann aufgrund eines Laufzeitfehlers in MacOS 10.14.6 nicht importiert werden. Der Polyfit-Sanity-Test gab eine Warnung aus, wahrscheinlich aufgrund der Verwendung eines fehlerhaften Accelerate-Backends. Wenn Sie selbst kompiliert haben, finden Sie Informationen unter site.cfg.example. Andernfalls melden Sie dies dem Anbieter, der NumPy bereitgestellt hat.

Beispiel für Reproduktionscode:

import numpy as np

Fehlermeldung:

RuntimeError: Polyfit Sanity Test hat eine Warnung ausgegeben, wahrscheinlich aufgrund der Verwendung eines fehlerhaften Accelerate-Backends. Wenn Sie selbst kompiliert haben, finden Sie Informationen unter site.cfg.example. Andernfalls melden Sie dies dem Anbieter, der NumPy bereitgestellt hat.
RankWarning: Polyfit ist möglicherweise schlecht konditioniert

Traceback (letzter Anruf zuletzt):
Datei "/Users/billyzhaoyh/anaconda/envs/simulation/lib/python3.7/runpy.py", Zeile 183, in _run_module_as_main
mod_name, mod_spec, code = _get_module_details(mod_name, _Error)
Datei "/Users/billyzhaoyh/anaconda/envs/simulation/lib/python3.7/runpy.py", Zeile 109, in _get_module_details
__import__(pkg_name)
Datei "/Users/billyzhaoyh/Desktop/Simulation/reina-model/calc/__init__.py", Zeile 1, in
aus .utils importieren calcfunc
Datei "/Users/billyzhaoyh/Desktop/Simulation/reina-model/calc/utils.py", Zeile 9, in
aus utils.quilt import load_datasets
Datei "/Users/billyzhaoyh/Desktop/Simulation/reina-model/utils/quilt.py", Zeile 4, in
Quilt importieren
Datei "/Users/billyzhaoyh/anaconda/envs/simulation/lib/python3.7/site-packages/quilt/__init__.py", Zeile 87, in
aus .tools.command import (
Datei "/Users/billyzhaoyh/anaconda/envs/simulation/lib/python3.7/site-packages/quilt/tools/command.py", Zeile 24, in
importiere numpy als np
Datei "/Users/billyzhaoyh/Desktop/Simulation/reina-model/src/numpy/numpy/__init__.py", Zeile 286, in
RuntimeError(msg) erhöhen
RuntimeError: Polyfit Sanity Test hat eine Warnung ausgegeben, wahrscheinlich aufgrund der Verwendung eines fehlerhaften Accelerate-Backends. Wenn Sie selbst kompiliert haben, finden Sie Informationen unter site.cfg.example. Andernfalls melden Sie dies dem Anbieter, der NumPy bereitgestellt hat.
RankWarning: Polyfit ist möglicherweise schlecht konditioniert

Numpy/Python-Versionsinformationen:


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

Hilfreichster Kommentar

Eine etwas einfachere Lösung:

$ 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

Per https://twitter.com/pradyunsg/status/1317081239526936576?s=20 kann dies nun mit einem eingebauten pip Befehl erfolgen:

$ 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

Dies hat den zusätzlichen Vorteil, dass das Rad nicht neu aufgebaut werden muss und alle zukünftigen pip install numpy 's auf pypy3 funktionieren.

Alle 31 Kommentare

Dies ist beabsichtigt. Hast du die Fehlermeldung gelesen? Ist es unklar?

Wie kann ich diesen Fehler beheben, indem ich das Accelerate-Backend aktualisiere? Ich hatte eine Suche und glaube nicht, dass ich das für mein MacOS aktualisieren kann.

@billlyzhaoyh Anfordern, OpenBLAS zu verwenden, während stattdessen auf MacOS erstellt wird. Verwenden Sie site.cfg im Stammverzeichnis des Repo, um mit derselben zu erstellen.

Schließen. Wir empfehlen dringend, Accelerate nicht zu verwenden.

Schließen. Wir empfehlen dringend, Accelerate nicht zu verwenden.

Klar, wie verwenden wir es nicht ? Ich habe den gleichen Fehler erhalten, wenn ich einfach import numpy in meinem macOS ausgeführt habe

Wenn Sie Ihr eigenes NumPy bauen, holen Sie sich OpenBlas. Sie können python3 tools/openblas_support.py verwenden, um dasjenige herunterzuladen, mit dem das offizielle Rad gebaut wurde. Wenn Sie NumPy eines Anbieters verwenden, fragen Sie ihn, warum er Accelerate verwendet.

Wenn Sie Ihr eigenes NumPy bauen, holen Sie sich OpenBlas. Sie können python3 tools/openblas_support.py verwenden, um dasjenige herunterzuladen, mit dem das offizielle Rad gebaut wurde. Wenn Sie NumPy eines Anbieters verwenden, fragen Sie ihn, warum er Accelerate verwendet.

Ich baue definitiv nicht alleine. Ich verwende macOS und führe pip3 install -U numpy , daher bin ich mir nicht sicher, welchen "Anbieter" Sie damit meinen.

Pip kann aus der Quelle hinter Ihrem Rücken bauen. Wenn die Installation länger als ein paar Sekunden dauert, wird es möglicherweise kompiliert. Um Pip zu zwingen, nur Binärräder zu verwenden und niemals zu kompilieren, verwenden Sie

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

Können Sie versuchen, Ihr Numpy zu deinstallieren und mit dem Argument --only-binary :all: installieren?

Dies hat das Problem für mich behoben. (Ich habe pip durch pip3 ... und die numpy-Version von heute ist 1.19.1)
https://gist.github.com/yatsu/47bdde35e8abbe7d14bbe730342aa9e0#file -numpy-openblas-macos-pip-sh

BEARBEITEN: Einfügen der vollständigen Lösung für den Fall, dass das Wesentliche gelöscht wird :)

# 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

Eine etwas einfachere Lösung:

$ 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

Per https://twitter.com/pradyunsg/status/1317081239526936576?s=20 kann dies nun mit einem eingebauten pip Befehl erfolgen:

$ 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

Dies hat den zusätzlichen Vorteil, dass das Rad nicht neu aufgebaut werden muss und alle zukünftigen pip install numpy 's auf pypy3 funktionieren.

Abgesehen von den Problemumgehungen, warum erzeugt das standardmäßige Build-Verhalten ein kaputtes Rad, das nicht einmal import ? Es scheint, als ob es "absichtlich" wäre, so ein kaputtes Artefakt zu bauen, so oder so ein Fehler; Ein Selbsttest am Ende des Builds, der abbricht, wenn er sich in diesem Zustand befindet, wäre eine willkommene Ergänzung. (Vor allem, wenn es eine hilfreiche Fehlermeldung wie "versuchen Sie brew install openblas " oder ähnliches liefern könnte.)

Der Versuch, nach dem Build zu importieren, klingt nach einer guten Idee.

Warum weigern Sie sich nicht einfach, auf macOS zu bauen, wenn openblas nicht gefunden wird?

Neben OpenBLAS gibt es verschiedene gültige Blas-Backends. Das einzige ungültige ist Beschleunigen. Leider bietet macOS keine Möglichkeit, uns mitzuteilen, dass Accelerate bereitgestellt wird. Wir können dies nur zur Laufzeit erkennen, indem wir eine bekannte schlechte Berechnung auslösen. Wenn Sie herausfinden können, wie Sie Accelerate früher erkennen können, wäre das großartig. Das Beste, was wir bisher hatten, war, einen Symlink zu erkennen, aber das ist sehr zerbrechlich.

Wenn Python-Poetry-Benutzer auf diesen Thread stoßen, möchte ich nur hinzufügen, dass die Lösung von @glyph auch funktioniert, wenn Sie nur die letzte Zeile durch OPENBLAS="$(brew --prefix openblas)" poetry add numpy ersetzen

Ich habe eine frühere Version von numpy ausprobiert und sie hat bei mir funktioniert
pip3 install numpy==1.18.0

Ich hoffe das hilft

1.18.0 deinstallieren und installieren - hat bei mir funktioniert! großes Lob an die oben genannten ^^

Ich bin hier, um zu berichten, dass der Vorschlag, openblas zu verwenden, nicht funktioniert. Das stürzt ab:

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.

während dies ohne Probleme funktioniert:

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

@fny Überprüfen Sie die Ausgabe, um zu sehen, ob pip ein zwischengespeichertes Rad verwendet. In diesem Fall müssen Sie möglicherweise den Cache leeren.

@fny siehe https://github.com/numpy/numpy/issues/15947#issuecomment -686159427 für aktualisierte Anweisungen

Kann jemand einen Link bereitstellen, in dem man lesen kann, warum Accelerate eine schlechte BLAS-Implementierung ist, die nicht verwendet werden sollte? Ich habe versucht zu googeln "warum Apple Accelerator eine schlechte Blase ist" und habe nichts gefunden.

Ich weiß nicht, wo eine umfassende Aufschlüsselung ist, aber Accelerate hat Threading-Probleme, einige falsche Ergebnisse und zeigt eine veraltete Version von LAPACK.

Als Referenz schlägt diese Lösung fehl. Warum funktioniert das nicht? Und warum ist das überhaupt notwendig?

@orome wie "warum" Apple fragen. Sie sind diejenigen, bei denen Sie das System gekauft haben und die fehlerhafte Software liefern, die das meist ehrenamtliche Team von NumPy umgehen muss. Jede Wut sollte auf sie gerichtet sein, nicht auf uns.

@orome wie "warum" Apple fragen ... Jegliche Wut sollte auf sie gerichtet sein, nicht auf uns.

Da ist es definitiv (wieder) gerichtet!

Dies hat das Problem für mich behoben. (Ich habe pip durch pip3 ... und die numpy-Version von heute ist 1.19.1)
https://gist.github.com/yatsu/47bdde35e8abbe7d14bbe730342aa9e0#file -numpy-openblas-macos-pip-sh

BEARBEITEN: Einfügen der vollständigen Lösung für den Fall, dass das Wesentliche gelöscht wird :)

# 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

Das hat bei mir irgendwie nicht funktioniert. Ich habe OpenBLAS aus dem Quellcode kompiliert und in /opt/OpenBLAS installiert und jedes Vorkommen von $(brew --prefix openblas) durch /opt/OpenBLAS . Meine Python 3-Installation erfolgt über die Xcode-Befehlszeilentools, daher habe ich pip3 install --user . anstelle von pip3 install . . Ansonsten habe ich mich genau an das Skript gehalten. Nachdem ich jedoch python3 -c "import numpy" , ist die Fehlermeldung genau wie zuvor:

RuntimeError: Polyfit Sanity Test hat eine Warnung ausgegeben, wahrscheinlich aufgrund der Verwendung eines fehlerhaften Accelerate-Backends. Wenn Sie selbst kompiliert haben, finden Sie Informationen unter site.cfg.example. Andernfalls melden Sie dies dem Anbieter, der NumPy bereitgestellt hat.
RankWarning: Polyfit ist möglicherweise schlecht konditioniert

Irgendwelche Ideen, warum das passiert sein könnte?

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

Problembeschreibung

Ich habe eine Neuinstallation von macOS Big Sur und eine Neuinstallation von Python3.9 über Homebrew durchgeführt ( brew install python3 ). Danach habe ich pip3 mit dem Befehl brew install pip installiert und wollte Pandas installieren, aber ich erhalte immer die folgende Fehlermeldung. Ich habe mit allen oben aufgeführten Befehlen versucht, Pandas auf macOS Big Sur und Python3 zu installieren...

Kann jemand helfen? Dies sind die einzigen tatsächlich installierten Pakete:

Paketversion


Pip 20.2.4
Setuptools 50.3.2
Rad 0.35.1

Erwartete Ausgabe

Ausgabe von pip install pandas

Anforderungen zum Bauen des Rads erhalten ... Fehler
FEHLER: Befehl fehlgeschlagen mit Exit-Status 1:
Befehl: /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/folders/zv/ 0q58rjv549bd4qjdqlrwlvl40000gn/T/tmpzr3sthd6
cwd: /private/var/folders/zv/0q58rjv549bd4qjdqlrwlvl40000gn/T/pip-install-pvlaq6iq/pandas
Gesamtausgabe (23 Zeilen):
init_dgelsd fehlgeschlagen init
Traceback (letzter Anruf zuletzt):
Datei "/usr/local/lib/python3.9/site-packages/pip/_vendor/pep517/_in_process.py", Zeile 280, in
hauptsächlich()
Datei "/usr/local/lib/python3.9/site-packages/pip/_vendor/pep517/_in_process.py", Zeile 263, in main
json_out['return_val'] = Hook(**hook_input['kwargs'])
Datei "/usr/local/lib/python3.9/site-packages/pip/_vendor/pep517/_in_process.py", Zeile 114, in get_requires_for_build_wheel
Return-Hook (config_settings)
Datei "/private/var/folders/zv/0q58rjv549bd4qjdqlrwlvl40000gn/T/pip-build-env-ly4c8n5_/overlay/lib/python3.9/site-packages/setuptools/build_meta.py", Zeile 149, in get_build_requires ._for
Rückgabe von self._get_build_requires(
Datei "/private/var/folders/zv/0q58rjv549bd4qjdqlrwlvl40000gn/T/pip-build-env-ly4c8n5_/overlay/lib/python3.9/site-packages/setuptools/build_meta.py", Zeile 130, in _get_build_require
self.run_setup()
Datei "/private/var/folders/zv/0q58rjv549bd4qjdqlrwlvl40000gn/T/pip-build-env-ly4c8n5_/overlay/lib/python3.9/site-packages/setuptools/build_meta.py", Zeile 253, in run_setup
super(_BuildMetaLegacyBackend,
Datei "/private/var/folders/zv/0q58rjv549bd4qjdqlrwlvl40000gn/T/pip-build-env-ly4c8n5_/overlay/lib/python3.9/site-packages/setuptools/build_meta.py", Zeile 145, in run_setup
exec(compile(code, __file__, 'exec'), locals())
Datei "setup.py", Zeile 488, in
importiere numpy als np
Datei "/private/var/folders/zv/0q58rjv549bd4qjdqlrwlvl40000gn/T/pip-build-env-ly4c8n5_/overlay/lib/python3.9/site-packages/numpy/__init__.py", Zeile 286, in
RuntimeError(msg) erhöhen
RuntimeError: Polyfit Sanity Test hat eine Warnung ausgegeben, wahrscheinlich aufgrund der Verwendung eines fehlerhaften Accelerate-Backends. Wenn Sie selbst kompiliert haben, finden Sie Informationen unter site.cfg.example. Andernfalls melden Sie dies dem Anbieter, der NumPy bereitgestellt hat.
RankWarning: Polyfit ist möglicherweise schlecht konditioniert


FEHLER: Befehl fehlgeschlagen mit Exit-Status 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/folders/zv/0q58rjv549bd4qjdqlrwlvl40000gn/T/tmpzr3sthd6 Überprüfen Sie die Protokolle auf die vollständige Befehlsausgabe.

In dieser Ausgabe Pandas#37880 heißt es, dass es sich bei der neuesten Version von macOS um ein kleines Problem handelt. Irgendeine Hilfe??

Vielen Dank im Voraus!

gleiches Problem mit gleichem Fehler

Dies funktionierte bei mir unter 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 

Dieses Thema ist geschlossen. Wenn Sie MacOS 11 mit einem von HomeBrew installierten Python verwenden, sollten Sie ab November 2020 brew install NumPy nicht pip install numpy . Bitte kommentieren Sie hier nicht, öffnen Sie eine neue Ausgabe, wenn Sie durch sorgfältiges Lesen von gh-17784 nicht herausfinden, was los ist.

Diese Schritte haben mir geholfen, das Problem zu lösen:
https://gist.github.com/mohammadnassiri/31ca8f4f2298d8694a8327814631455c

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen

Verwandte Themen

inducer picture inducer  ·  3Kommentare

toddrjen picture toddrjen  ·  4Kommentare

qualiaa picture qualiaa  ·  3Kommentare

perezpaya picture perezpaya  ·  4Kommentare

keithbriggs picture keithbriggs  ·  3Kommentare