Numpy: Buggy Accelerate Backend lors de l'utilisation de numpy 1.19

Créé le 9 avr. 2020  ·  31Commentaires  ·  Source: numpy/numpy

Numpy 1.19 ne peut pas importer en raison d'une erreur d'exécution dans MacOS 10.14.6. Le test de santé mentale de Polyfit a émis un avertissement, probablement en raison de l'utilisation d'un backend Accelerate buggy. Si vous avez compilé vous-même, consultez site.cfg.example pour plus d'informations. Sinon, signalez-le au fournisseur qui a fourni NumPy.

Exemple de code de reproduction :

import numpy as np

Message d'erreur:

RuntimeError : le test d'intégrité de Polyfit a émis un avertissement, probablement en raison de l'utilisation d'un backend Accelerate bogué. Si vous avez compilé vous-même, consultez site.cfg.example pour plus d'informations. Sinon, signalez-le au fournisseur qui a fourni NumPy.
RankWarning : Polyfit peut être mal conditionné

Traceback (appel le plus récent en dernier) :
Fichier "/Users/billyzhaoyh/anaconda/envs/simulation/lib/python3.7/runpy.py", ligne 183, dans _run_module_as_main
mod_name, mod_spec, code = _get_module_details(mod_name, _Error)
Fichier "/Users/billyzhaoyh/anaconda/envs/simulation/lib/python3.7/runpy.py", ligne 109, dans _get_module_details
__import__(nom_paquet)
Fichier "/Users/billyzhaoyh/Desktop/Simulation/reina-model/calc/__init__.py", ligne 1, dans
à partir de .utils importer calcfunc
Fichier "/Users/billyzhaoyh/Desktop/Simulation/reina-model/calc/utils.py", ligne 9, dans
depuis utils.quilt importer load_datasets
Fichier "/Users/billyzhaoyh/Desktop/Simulation/reina-model/utils/quilt.py", ligne 4, dans
importer une courtepointe
Fichier "/Users/billyzhaoyh/anaconda/envs/simulation/lib/python3.7/site-packages/quilt/__init__.py", ligne 87, dans
à partir de .tools.command import (
Fichier "/Users/billyzhaoyh/anaconda/envs/simulation/lib/python3.7/site-packages/quilt/tools/command.py", ligne 24, dans
importer numpy en tant que np
Fichier "/Users/billyzhaoyh/Desktop/Simulation/reina-model/src/numpy/numpy/__init__.py", ligne 286, dans
augmenter RuntimeError(msg)
RuntimeError : le test d'intégrité de Polyfit a émis un avertissement, probablement en raison de l'utilisation d'un backend Accelerate bogué. Si vous avez compilé vous-même, consultez site.cfg.example pour plus d'informations. Sinon, signalez-le au fournisseur qui a fourni NumPy.
RankWarning : Polyfit peut être mal conditionné

Informations sur la version Numpy/Python :


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

Commentaire le plus utile

Une solution un peu plus simple :

$ 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

Selon https://twitter.com/pradyunsg/status/1317081239526936576?s=20, cela peut maintenant être fait avec une commande pip intégrée :

$ 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

Cela a l'avantage supplémentaire que la roue n'aura pas besoin d'être reconstruite et que tout futur pip install numpy sur pypy3 fonctionnera.

Tous les 31 commentaires

C'est par conception. As-tu lu le message d'erreur ? C'est pas clair ?

alors comment puis-je corriger cette erreur en mettant à jour le backend Accelerate ? J'ai fait une recherche et je ne pense pas pouvoir la mettre à jour pour mon MacOS.

@billlyzhaoyh Demande d'utiliser OpenBLAS tout en construisant sur MacOS à la place. Utilisez site.cfg dans le répertoire racine du référentiel pour créer à l'aide de celui-ci.

Fermeture. Nous vous déconseillons fortement d'utiliser Accelerate.

Fermeture. Nous vous déconseillons fortement d'utiliser Accelerate.

Bien sûr, comment ne pas l' utiliser ? J'ai eu la même erreur en exécutant simplement import numpy dans mon macOS

Si vous construisez votre propre NumPy, obtenez OpenBlas. Vous pouvez utiliser python3 tools/openblas_support.py pour télécharger celui utilisé pour construire la roue officielle. Si vous utilisez NumPy d'un fournisseur, demandez-lui pourquoi il utilise Accelerate.

Si vous construisez votre propre NumPy, obtenez OpenBlas. Vous pouvez utiliser python3 tools/openblas_support.py pour télécharger celui utilisé pour construire la roue officielle. Si vous utilisez NumPy d'un fournisseur, demandez-lui pourquoi il utilise Accelerate.

Je ne construis certainement pas tout seul. J'utilise macOS et j'exécute pip3 install -U numpy , donc je ne suis pas sûr de ce que "fournisseur" entendez-vous par là.

Pip peut construire à partir de la source derrière votre dos. Si l'installation prend plus de quelques secondes, il s'agit peut-être d'une compilation. Pour forcer pip à n'utiliser que des roues binaires et à ne jamais compiler, utilisez

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

Pouvez-vous essayer de désinstaller votre numpy et de l'installer avec l'argument --only-binary :all: ?

Cela a résolu le problème pour moi. (J'ai remplacé pip par pip3 ... et la version numpy d'aujourd'hui sera 1.19.1)
https://gist.github.com/yatsu/47bdde35e8abbe7d14bbe730342aa9e0#file -numpy-openblas-macos-pip-sh

EDIT : coller la solution complète au cas où l'essentiel serait supprimé :)

# 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

Une solution un peu plus simple :

$ 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

Selon https://twitter.com/pradyunsg/status/1317081239526936576?s=20, cela peut maintenant être fait avec une commande pip intégrée :

$ 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

Cela a l'avantage supplémentaire que la roue n'aura pas besoin d'être reconstruite et que tout futur pip install numpy sur pypy3 fonctionnera.

À part les solutions de contournement, pourquoi le comportement de construction par défaut produit-il une roue cassée qui ne peut même pas import ? Il semble que ce soit "par conception" de construire un artefact aussi cassé soit un bogue de toute façon; un auto-test à la fin de la construction qui s'interrompt s'il se trouve dans cet état serait un ajout bienvenu. (Surtout si cela pouvait fournir un message d'erreur utile comme "essayez brew install openblas " ou quelque chose comme ça.)

Essayer d'importer après la construction semble être une bonne idée.

Pourquoi ne pas simplement refuser de construire sur macOS si openblas n'est pas trouvé ?

Il existe plusieurs backends blas valides, en plus d'OpenBLAS. Le seul invalide est Accélérer. Malheureusement, macOS ne fournit pas un moyen de nous dire qu'ils fournissent Accelerate, nous ne pouvons le détecter qu'au moment de l'exécution en déclenchant un mauvais calcul connu. Si vous pouvez trouver comment détecter Accelerate plus tôt, ce serait formidable. Le mieux que nous ayons eu jusqu'à présent est de détecter un lien symbolique, mais c'est très fragile.

Si des utilisateurs de python-poetry rencontrent ce fil, je voudrais juste ajouter que la solution de @glyph fonctionne également si vous remplacez simplement la dernière ligne par OPENBLAS="$(brew --prefix openblas)" poetry add numpy

J'ai essayé une version précédente de numpy et cela a fonctionné pour moi
pip3 installer numpy==1.18.0

J'espère que cette aide

désinstaller et installer 1.18.0 -- a fonctionné pour moi ! bravo à ce qui précède ^^

Je suis ici pour signaler que la suggestion d'utiliser openblas ne fonctionne pas. Cela plante :

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.

alors que cela fonctionne sans aucun problème:

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

@fny vérifie la sortie pour voir si pip utilise une roue en cache. Vous devrez peut-être vider le cache dans ce cas.

@fny voir https://github.com/numpy/numpy/issues/15947#issuecomment -686159427 pour des instructions mises à jour

Quelqu'un peut-il fournir un lien où l'on peut savoir pourquoi Accelerate est une mauvaise implémentation BLAS qui ne devrait pas être utilisée ? J'ai essayé de rechercher sur Google "pourquoi Apple accélérer est un mauvais blas" et je n'ai rien trouvé.

Je ne sais pas où se trouve une panne complète, mais Accelerate a des problèmes de threading, des résultats erronés et expose une version obsolète de LAPACK.

Pour référence, cette solution échoue. Pourquoi ça ne marche pas ? Et pourquoi tout cela est-il même nécessaire ?

@orome quant au "pourquoi" demandez à Apple. Ce sont ceux à qui vous avez acheté le système et qui livrent un logiciel bogué que l'équipe principalement bénévole de NumPy doit contourner. Toute colère devrait être dirigée contre eux, pas contre nous.

@orome quant au "pourquoi" demandez à Apple ... Toute colère devrait être dirigée contre eux, pas contre nous.

C'est définitivement là qu'il est dirigé (encore) !

Cela a résolu le problème pour moi. (J'ai remplacé pip par pip3 ... et la version numpy d'aujourd'hui sera 1.19.1)
https://gist.github.com/yatsu/47bdde35e8abbe7d14bbe730342aa9e0#file -numpy-openblas-macos-pip-sh

EDIT : coller la solution complète au cas où l'essentiel serait supprimé :)

# 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

Cela n'a pas fonctionné pour moi. J'ai compilé OpenBLAS à partir des sources et l'ai installé dans /opt/OpenBLAS , et j'ai remplacé chaque occurrence de $(brew --prefix openblas) par /opt/OpenBLAS . Mon installation Python 3 provient des outils de ligne de commande Xcode, j'ai donc utilisé pip3 install --user . au lieu de pip3 install . . A part ça, j'ai suivi le script à la lettre. Cependant, après avoir exécuté python3 -c "import numpy" , le message d'erreur est exactement comme avant :

RuntimeError : le test d'intégrité de Polyfit a émis un avertissement, probablement en raison de l'utilisation d'un backend Accelerate bogué. Si vous avez compilé vous-même, consultez site.cfg.example pour plus d'informations. Sinon, signalez-le au fournisseur qui a fourni NumPy.
RankWarning : Polyfit peut être mal conditionné

Des idées pourquoi cela a pu arriver?

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

Description du problème

J'ai effectué une nouvelle installation de macOS Big Sur et une nouvelle installation de Python3.9 via Homebrew ( brew install python3 ). Après cela, j'ai installé pip3 avec la commande brew install pip et je voulais installer Pandas mais j'obtiens toujours l'erreur suivante. J'ai essayé avec toutes les commandes répertoriées ci-dessus pour installer Pandas sur macOS Big Sur et Python3...

N'importe qui peut aider ? Voici les seuls packages réellement installés :

Version du package


pépin 20.2.4
outils de configuration 50.3.2
roue 0.35.1

Production attendue

Sortie de pip install pandas

Obtention des exigences pour construire la roue ... erreur
ERREUR : commande erronée avec état de sortie 1 :
commande: / 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 / dossiers / ZV / 0q58rjv549bd4qjdqlrwlvl40000gn/T/tmpzr3sthd6
cwd : /private/var/folders/zv/0q58rjv549bd4qjdqlrwlvl40000gn/T/pip-install-pvlaq6iq/pandas
Sortie complète (23 lignes) :
init_dgelsd a échoué à l'initialisation
Traceback (appel le plus récent en dernier) :
Fichier "/usr/local/lib/python3.9/site-packages/pip/_vendor/pep517/_in_process.py", ligne 280, dans
principale()
Fichier "/usr/local/lib/python3.9/site-packages/pip/_vendor/pep517/_in_process.py", ligne 263, dans main
json_out['return_val'] = crochet(**hook_input['kwargs'])
Fichier "/usr/local/lib/python3.9/site-packages/pip/_vendor/pep517/_in_process.py", ligne 114, dans get_requires_for_build_wheel
crochet de retour (config_settings)
Fichier "/private/var/folders/zv/0q58rjv549bd4qjdqlrwlvl40000gn/T/pip-build-env-ly4c8n5_/overlay/lib/python3.9/site-packages/setuptools/build_meta.py", ligne 149, dans get_build_for
return self._get_build_requires(
Fichier "/private/var/folders/zv/0q58rjv549bd4qjdqlrwlvl40000gn/T/pip-build-env-ly4c8n5_/overlay/lib/python3.9/site-packages/setuptools/build_meta.py", ligne 130, dans _require_build_
self.run_setup()
Fichier "/private/var/folders/zv/0q58rjv549bd4qjdqlrwlvl40000gn/T/pip-build-env-ly4c8n5_/overlay/lib/python3.9/site-packages/setuptools/build_meta.py", ligne 253, dans run_setup
super(_BuildMetaLegacyBackend,
Fichier "/private/var/folders/zv/0q58rjv549bd4qjdqlrwlvl40000gn/T/pip-build-env-ly4c8n5_/overlay/lib/python3.9/site-packages/setuptools/build_meta.py", ligne 145, dans run_setup
exec(compile(code, __file__, 'exec'), locaux())
Fichier "setup.py", ligne 488, dans
importer numpy en tant que np
Fichier "/private/var/folders/zv/0q58rjv549bd4qjdqlrwlvl40000gn/T/pip-build-env-ly4c8n5_/overlay/lib/python3.9/site-packages/numpy/__init__.py", ligne 286, dans
augmenter RuntimeError(msg)
RuntimeError : le test d'intégrité de Polyfit a émis un avertissement, probablement en raison de l'utilisation d'un backend Accelerate bogué. Si vous avez compilé vous-même, consultez site.cfg.example pour plus d'informations. Sinon, signalez-le au fournisseur qui a fourni NumPy.
RankWarning : Polyfit peut être mal conditionné


ERREUR: Commande errored avec l' état de la sortie 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 Vérifiez les journaux pour la sortie complète de la commande.

Dans ce numéro, Pandas#37880, ils disent qu'il s'agit d'un problème numpy avec la dernière version de macOS. De l'aide??

Merci d'avance!

même problème avec la même erreur

Cela a fonctionné pour moi sur 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 

Ce problème est clos. Si vous utilisez MacOS 11 avec un python que vous avez installé à partir de HomeBrew, à partir de novembre 2020, vous devriez utiliser brew install NumPy non pip install numpy . Veuillez ne pas commenter ici, ouvrez un nouveau numéro si une lecture attentive de gh-17784 ne vous aide pas à comprendre ce qui se passe.

Ces étapes m'ont aidé à résoudre le problème :
https://gist.github.com/mohammadnassiri/31ca8f4f2298d8694a8327814631455c

Cette page vous a été utile?
0 / 5 - 0 notes

Questions connexes

kevinzhai80 picture kevinzhai80  ·  4Commentaires

navytux picture navytux  ·  4Commentaires

astrofrog picture astrofrog  ·  4Commentaires

marcocaccin picture marcocaccin  ·  4Commentaires

perezpaya picture perezpaya  ·  4Commentaires