Numpy: Buggy Accelerate Backend ao usar numpy 1.19

Criado em 9 abr. 2020  ·  31Comentários  ·  Fonte: numpy/numpy

O Numpy 1.19 não pode importar devido a um erro de tempo de execução no MacOS 10.14.6. O teste de sanidade da Polyfit emitiu um aviso, provavelmente devido ao uso de um back-end Accelerate cheio de erros. Se você mesmo compilou, consulte site.cfg.example para obter informações. Caso contrário, relate isso ao fornecedor que forneceu o NumPy.

Reproduzindo exemplo de código:

import numpy as np

Mensagem de erro:

RuntimeError: o teste de sanidade da Polyfit emitiu um aviso, provavelmente devido ao uso de um back-end Accelerate cheio de erros. Se você mesmo compilou, consulte site.cfg.example para obter informações. Caso contrário, relate isso ao fornecedor que forneceu o NumPy.
RankWarning: Polyfit pode estar mal condicionado

Traceback (última chamada mais recente):
Arquivo "/Users/billyzhaoyh/anaconda/envs/simulation/lib/python3.7/runpy.py", linha 183, em _run_module_as_main
mod_name, mod_spec, code = _get_module_details (mod_name, _Error)
Arquivo "/Users/billyzhaoyh/anaconda/envs/simulation/lib/python3.7/runpy.py", linha 109, em _get_module_details
__import __ (pkg_name)
Arquivo "/Users/billyzhaoyh/Desktop/Simulation/reina-model/calc/__init__.py", linha 1, em
from .utils import calcfunc
Arquivo "/Users/billyzhaoyh/Desktop/Simulation/reina-model/calc/utils.py", linha 9, em
de utils.quilt import load_datasets
Arquivo "/Users/billyzhaoyh/Desktop/Simulation/reina-model/utils/quilt.py", linha 4, em
importar colcha
Arquivo "/Users/billyzhaoyh/anaconda/envs/simulation/lib/python3.7/site-packages/quilt/__init__.py", linha 87, em
de .tools.command import (
Arquivo "/Users/billyzhaoyh/anaconda/envs/simulation/lib/python3.7/site-packages/quilt/tools/command.py", linha 24, em
importar numpy como np
Arquivo "/Users/billyzhaoyh/Desktop/Simulation/reina-model/src/numpy/numpy/__init__.py", linha 286, em
aumentar RuntimeError (msg)
RuntimeError: o teste de sanidade da Polyfit emitiu um aviso, provavelmente devido ao uso de um back-end Accelerate cheio de erros. Se você mesmo compilou, consulte site.cfg.example para obter informações. Caso contrário, relate isso ao fornecedor que forneceu o NumPy.
RankWarning: Polyfit pode estar mal condicionado

Informações sobre a versão Numpy / Python:


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

Comentários muito úteis

Uma solução um pouco mais simples:

$ 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

Por https://twitter.com/pradyunsg/status/1317081239526936576?s=20 isso agora pode ser feito com um comando pip integrado:

$ 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

Isso tem o benefício adicional de que a roda não precisará ser reconstruída e quaisquer pip install numpy futuros em pypy3 funcionarão.

Todos 31 comentários

Isso ocorre por design. Você leu a mensagem de erro? Não está claro?

então, como posso corrigir esse erro, atualizando o back-end do Accelerate? Fiz uma pesquisa e acho que não posso atualizá-la para o meu MacOS.

@billlyzhaoyh Solicitação para usar o OpenBLAS ao compilar no MacOS. Use site.cfg no diretório root repo para construir usando o mesmo.

Fechando. Recomendamos fortemente não usar o Accelerate.

Fechando. Recomendamos fortemente não usar o Accelerate.

Claro, como não o usamos? Recebi o mesmo erro ao apenas executar import numpy simples no meu macOS

Se você estiver construindo seu próprio NumPy, obtenha o OpenBlas. Você pode usar python3 tools/openblas_support.py para baixar o usado para construir a roda oficial. Se você estiver usando o NumPy de um provedor, pergunte por que eles estão usando o Accelerate.

Se você estiver construindo seu próprio NumPy, obtenha o OpenBlas. Você pode usar python3 tools/openblas_support.py para baixar o usado para construir a roda oficial. Se você estiver usando o NumPy de um provedor, pergunte por que eles estão usando o Accelerate.

Definitivamente, não estou construindo sozinho. Estou usando o macOS e executo pip3 install -U numpy , então não tenho certeza de que "provedor" você quer dizer com isso.

Pip pode construir a partir da fonte pelas suas costas. Se demorar mais do que alguns segundos para instalar, ele pode estar compilando. Para forçar o pip a usar apenas rodas binárias e nunca compilar, use

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

Você pode tentar desinstalar seu numpy e instalar com o argumento --only-binary :all: ?

Isso resolveu o problema para mim. (Substituí pip por pip3 ... e a versão numpy a partir de hoje será 1.19.1)
https://gist.github.com/yatsu/47bdde35e8abbe7d14bbe730342aa9e0#file -numpy-openblas-macos-pip-sh

EDIT: Colando a solução completa no caso de a essência ser excluída :)

# 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

Uma solução um pouco mais simples:

$ 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

Por https://twitter.com/pradyunsg/status/1317081239526936576?s=20 isso agora pode ser feito com um comando pip integrado:

$ 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

Isso tem o benefício adicional de que a roda não precisará ser reconstruída e quaisquer pip install numpy futuros em pypy3 funcionarão.

Soluções alternativas à parte, por que o comportamento de compilação padrão produz uma roda quebrada que não pode nem mesmo import ? Parece que construir um artefato quebrado é um bug de qualquer maneira; um autoteste no final da construção que aborta se se encontrar neste estado seria uma adição bem-vinda. (Especialmente se puder fornecer uma mensagem de erro útil como "tente brew install openblas " ou algo assim.)

Tentar importar após a construção parece uma boa ideia.

Por que não simplesmente se recusar a construir no macOS se o openblas não for encontrado?

Existem vários back-ends de blas válidos, além do OpenBLAS. O único inválido é Acelerar. Infelizmente, o macOS não fornece uma maneira de nos informar que está fornecendo o Accelerate, só podemos detectá-lo em tempo de execução, acionando um cálculo incorreto conhecido. Se você conseguir descobrir como detectar o Accelerate mais cedo, isso seria ótimo. O melhor que tivemos até agora é detectar um link simbólico, mas é muito frágil.

Se algum usuário de poesia python encontrar este tópico, gostaria apenas de acrescentar que a solução de @glyph também funciona se você substituir a última linha por OPENBLAS="$(brew --prefix openblas)" poetry add numpy

Eu tentei uma versão anterior do numpy e funcionou para mim
pip3 install numpy == 1.18.0

Espero que esta ajuda

desinstalar e instalar 1.18.0 - funcionou para mim! kuddos para o acima ^^

Estou aqui para relatar que a sugestão de usar o openblas não funciona. Isso trava:

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.

enquanto isso funciona sem problemas:

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

@fny verifique a saída para ver se pip está usando uma roda em cache. Você pode ter que limpar o cache nesse caso.

@fny consulte https://github.com/numpy/numpy/issues/15947#issuecomment -686159427 para obter instruções atualizadas

Alguém pode fornecer um link onde se possa ler sobre por que Accelerate é uma implementação BLAS ruim que não deve ser usada? Eu tentei googling "por que acelerar a maçã é um blas ruim" e não encontrei nada.

Não sei onde está uma análise abrangente, mas Accelerate tem problemas de threading, alguns resultados errados e expõe uma versão desatualizada do LAPACK.

Para referência, esta solução falha. Por que não está funcionando? E por que tudo isso é mesmo necessário?

@orome quanto ao "porquê", pergunte à Apple. Eles são aqueles de quem você comprou o sistema e estão enviando um software cheio de erros que a equipe majoritariamente de voluntários da NumPy precisa contornar. Qualquer raiva deve ser dirigida a eles, não a nós.

@orome quanto ao "porquê", pergunte à Apple ... Qualquer raiva deve ser dirigida a eles, não a nós.

É definitivamente para onde é direcionado (de novo)!

Isso resolveu o problema para mim. (Substituí pip por pip3 ... e a versão numpy a partir de hoje será 1.19.1)
https://gist.github.com/yatsu/47bdde35e8abbe7d14bbe730342aa9e0#file -numpy-openblas-macos-pip-sh

EDIT: Colando a solução completa no caso de a essência ser excluída :)

# 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

Isso de alguma forma não funcionou para mim. Compilei o OpenBLAS a partir do código-fonte e instalei-o em /opt/OpenBLAS e substituí todas as ocorrências de $(brew --prefix openblas) por /opt/OpenBLAS . Minha instalação do Python 3 é feita a partir das ferramentas de linha de comando do Xcode, então usei pip3 install --user . vez de pip3 install . . Tirando isso, segui exatamente o roteiro. No entanto, depois de executar python3 -c "import numpy" , a mensagem de erro é exatamente como antes:

RuntimeError: o teste de sanidade da Polyfit emitiu um aviso, provavelmente devido ao uso de um back-end Accelerate cheio de erros. Se você mesmo compilou, consulte site.cfg.example para obter informações. Caso contrário, relate isso ao fornecedor que forneceu o NumPy.
RankWarning: Polyfit pode estar mal condicionado

Alguma ideia de por que isso pode ter acontecido?

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

Descrição do Problema

Fiz uma instalação limpa do macOS Big Sur e uma instalação limpa do Python3.9 via Homebrew ( brew install python3 ). Depois disso, instalei o pip3 com o comando brew install pip e queria instalar o Pandas, mas sempre recebo o seguinte erro. Tentei com todos os comandos listados acima instalar o Pandas no macOS Big Sur e Python3 ...

Alguém pode ajudar? Estes são os únicos pacotes realmente instalados:

Versão do pacote


pip 20.2.4
ferramentas de configuração 50.3.2
roda 0.35.1

Saída Esperada

Resultado de pip install pandas

Obtendo requisitos para construir a roda ... erro
ERRO: Comando errou com status de saída 1:
comando: / 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
Saída completa (23 linhas):
init_dgelsd falhou no init
Traceback (última chamada mais recente):
Arquivo "/usr/local/lib/python3.9/site-packages/pip/_vendor/pep517/_in_process.py", linha 280, em
a Principal()
Arquivo "/usr/local/lib/python3.9/site-packages/pip/_vendor/pep517/_in_process.py", linha 263, no principal
json_out ['return_val'] = gancho (** hook_input ['kwargs'])
Arquivo "/usr/local/lib/python3.9/site-packages/pip/_vendor/pep517/_in_process.py", linha 114, em get_requires_for_build_wheel
gancho de retorno (config_settings)
Arquivo "/private/var/folders/zv/0q58rjv549bd4qjdqlrwlvl40000gn/T/pip-build-env-ly4c8n5_/overlay/lib/python3.9/site-packages/setuptools/build_meta.py", linha 149 para get_requires
return self._get_build_requires (
Arquivo "/private/var/folders/zv/0q58rjv549bd4qjdqlrwlvl40000gn/T/pip-build-env-ly4c8n5_/overlay/lib/python3.9/site-packages/setuptools/build_meta.py", linha 130, em _getes_buildes
self.run_setup ()
Arquivo "/private/var/folders/zv/0q58rjv549bd4qjdqlrwlvl40000gn/T/pip-build-env-ly4c8n5_/overlay/lib/python3.9/site-packages/setuptools/build_meta.py", linha 253, em run_setup
super (_BuildMetaLegacyBackend,
Arquivo "/private/var/folders/zv/0q58rjv549bd4qjdqlrwlvl40000gn/T/pip-build-env-ly4c8n5_/overlay/lib/python3.9/site-packages/setuptools/build_meta.py", linha 145, em run_setup
exec (compilar (código, __file__, 'exec'), locals ())
Arquivo "setup.py", linha 488, em
importar numpy como np
Arquivo "/private/var/folders/zv/0q58rjv549bd4qjdqlrwlvl40000gn/T/pip-build-env-ly4c8n5_/overlay/lib/python3.9/site-packages/numpy/__init__.py", linha 286, em
aumentar RuntimeError (msg)
RuntimeError: o teste de sanidade da Polyfit emitiu um aviso, provavelmente devido ao uso de um back-end Accelerate cheio de erros. Se você mesmo compilou, consulte site.cfg.example para obter informações. Caso contrário, relate isso ao fornecedor que forneceu o NumPy.
RankWarning: Polyfit pode estar mal condicionado


ERRO: Comando com erro com status de saída 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 Verifique os logs para saída de comando completa.

Nesta edição, Pandas # 37880, eles dizem que é um problema entediante com a versão mais recente do macOS. Qualquer ajuda??

Desde já, obrigado!

mesmo problema com o mesmo erro

Isso funcionou para mim no 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 

Este problema foi encerrado. Se você estiver usando o MacOS 11 com um python instalado a partir do HomeBrew, a partir de novembro de 2020 deve usar brew install NumPy not pip install numpy . Não comente aqui, abra um novo problema se uma leitura cuidadosa de gh-17784 não ajudar você a descobrir o que está acontecendo.

Essas etapas me ajudaram a resolver o problema:
https://gist.github.com/mohammadnassiri/31ca8f4f2298d8694a8327814631455c

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

manuels picture manuels  ·  3Comentários

amuresan picture amuresan  ·  4Comentários

navytux picture navytux  ·  4Comentários

Kreol64 picture Kreol64  ·  3Comentários

astrofrog picture astrofrog  ·  4Comentários