Numpy: np.dot plante sur certains systèmes avec numpy 1.14.5

Créé le 6 juil. 2018  ·  61Commentaires  ·  Source: numpy/numpy

Sur l'un de nos systèmes, l'extrait de code suivant entraîne un plantage de l'interpréteur python:

import numpy as np
A = np.matrix([[1.], [3.]])
B = np.matrix([[2., 3.]])
np.dot(A, B)

Quelques détails:

  • Windows 10
  • Python 3.5.2 dans un environnement virtuel
  • numpy 1.14.5

Sur d'autres systèmes, cette commande fonctionne très bien.

00 - Bug

Tous les 61 commentaires

Où trouvez-vous votre numpy? pépin? Anaconda? Que dit np.show_config() ?

Merci pour votre réponse. J'ai installé numpy via pip.

>>> import numpy as np
>>> np.show_config()
blas_mkl_info:
  NOT AVAILABLE
openblas_lapack_info:
    library_dirs = ['C:\\projects\\numpy-wheels-jc1cl\\numpy\\build\\openblas']
    libraries = ['openblas']
    define_macros = [('HAVE_CBLAS', None)]
    language = f77
blis_info:
  NOT AVAILABLE
lapack_mkl_info:
  NOT AVAILABLE
openblas_info:
    library_dirs = ['C:\\projects\\numpy-wheels-jc1cl\\numpy\\build\\openblas']
    libraries = ['openblas']
    define_macros = [('HAVE_CBLAS', None)]
    language = f77
lapack_opt_info:
    library_dirs = ['C:\\projects\\numpy-wheels-jc1cl\\numpy\\build\\openblas']
    libraries = ['openblas']
    define_macros = [('HAVE_CBLAS', None)]
    language = f77
blas_opt_info:
    library_dirs = ['C:\\projects\\numpy-wheels-jc1cl\\numpy\\build\\openblas']
    libraries = ['openblas']
    define_macros = [('HAVE_CBLAS', None)]
    language = f77

Effectue la mise à niveau vers le dernier runtime Microsoft Visual C sur la machine
Aidez-moi? Peut-être disponible depuis Windows Update ou depuis:
https://support.microsoft.com/en-us/help/2977003/the-latest-supported-visual-c-downloads

@pv merci pour l'indice, mais après l'installation du dernier moteur d'exécution 2017 et le redémarrage du système, l'erreur existe toujours.

Cela n'a peut-être rien à voir avec le problème, mais le système affecté est un Windows 10 fonctionnant dans un KVM.

Lorsque j'exécute le script de test ci-dessus en tant que t.py de cette manière: python -u -m trace -t t.py , j'obtiens la sortie suivante avant le crash:

t.py(4): A = np.matrix([[1.], [3.]])
 --- modulename: defmatrix, funcname: __new__
defmatrix.py(213):         if isinstance(data, matrix):
defmatrix.py(221):         if isinstance(data, N.ndarray):
defmatrix.py(232):         if isinstance(data, str):
defmatrix.py(236):         arr = N.array(data, dtype=dtype, copy=copy)
defmatrix.py(237):         ndim = arr.ndim
defmatrix.py(238):         shape = arr.shape
defmatrix.py(239):         if (ndim > 2):
defmatrix.py(241):         elif ndim == 0:
defmatrix.py(243):         elif ndim == 1:
defmatrix.py(246):         order = 'C'
defmatrix.py(247):         if (ndim == 2) and arr.flags.fortran:
defmatrix.py(248):             order = 'F'
defmatrix.py(250):         if not (order or arr.flags.contiguous):
defmatrix.py(253):         ret = N.ndarray.__new__(subtype, shape, arr.dtype,
defmatrix.py(254):                                 buffer=arr,
defmatrix.py(255):                                 order=order)
 --- modulename: defmatrix, funcname: __array_finalize__
defmatrix.py(259):         self._getitem = False
defmatrix.py(260):         if (isinstance(obj, matrix) and obj._getitem): return
defmatrix.py(261):         ndim = self.ndim
defmatrix.py(262):         if (ndim == 2):
defmatrix.py(263):             return
defmatrix.py(256):         return ret
t.py(5): B = np.matrix([[2., 3.]])
 --- modulename: defmatrix, funcname: __new__
defmatrix.py(213):         if isinstance(data, matrix):
defmatrix.py(221):         if isinstance(data, N.ndarray):
defmatrix.py(232):         if isinstance(data, str):
defmatrix.py(236):         arr = N.array(data, dtype=dtype, copy=copy)
defmatrix.py(237):         ndim = arr.ndim
defmatrix.py(238):         shape = arr.shape
defmatrix.py(239):         if (ndim > 2):
defmatrix.py(241):         elif ndim == 0:
defmatrix.py(243):         elif ndim == 1:
defmatrix.py(246):         order = 'C'
defmatrix.py(247):         if (ndim == 2) and arr.flags.fortran:
defmatrix.py(248):             order = 'F'
defmatrix.py(250):         if not (order or arr.flags.contiguous):
defmatrix.py(253):         ret = N.ndarray.__new__(subtype, shape, arr.dtype,
defmatrix.py(254):                                 buffer=arr,
defmatrix.py(255):                                 order=order)
 --- modulename: defmatrix, funcname: __array_finalize__
defmatrix.py(259):         self._getitem = False
defmatrix.py(260):         if (isinstance(obj, matrix) and obj._getitem): return
defmatrix.py(261):         ndim = self.ndim
defmatrix.py(262):         if (ndim == 2):
defmatrix.py(263):             return
defmatrix.py(256):         return ret
t.py(6): print(np.dot(A, B))
 --- modulename: defmatrix, funcname: __array_finalize__
defmatrix.py(259):         self._getitem = False
defmatrix.py(260):         if (isinstance(obj, matrix) and obj._getitem): return
defmatrix.py(261):         ndim = self.ndim
defmatrix.py(262):         if (ndim == 2):
defmatrix.py(263):             return

Hmm,

celui-ci fonctionne

A = np.matrix([[1.], [3.]])
B = np.matrix([[2., 3.]])
print(np.dot(A.astype(np.float16), B.astype(np.float16)))

celui-ci plante

A = np.matrix([[1.], [3.]])
B = np.matrix([[2., 3.]])
print(np.dot(A.astype(np.float32), B.astype(np.float32)))

Une idée?

Après avoir joué avec différentes versions numpy, je peux dire que

  • numpy <= 1.13.1 n'est pas affecté, tandis que
  • numpy> = 1.13.3 est concerné par ce problème
  • numpy 1.13.2 n'a pas été testé car il n'y a pas de build sur pypi

Je ne vois aucun changement évident qui pourrait conduire à cela. Comme le problème est spécifique à cette installation, il peut être utile de voir s'il y a quelque chose de spécial dans l'environnement, le matériel, etc. Je soupçonne qu'il y a un problème de bibliothèque quelque part.

Quelles informations vous intéressent?

OS Name Microsoft Windows 10 Pro
Version 10.0.16299 Build 16299
Other OS Description    Not Available
OS Manufacturer Microsoft Corporation
System Name <REMOVED>
System Manufacturer QEMU
System Model    Standard PC (i440FX + PIIX, 1996)
System Type x64-based PC
System SKU  
Processor   Common KVM processor, 1996 Mhz, 4 Core(s), 4 Logical Processor(s)
BIOS Version/Date   SeaBIOS rel-1.11.0-0-g63451fca13-prebuilt.qemu-project.org, 4/1/2014
SMBIOS Version  2.8
Embedded Controller Version 255.255
BIOS Mode   Legacy
Platform Role   Desktop
Secure Boot State   Unsupported
PCR7 Configuration  Binding Not Possible
Windows Directory   C:\WINDOWS
System Directory    C:\WINDOWS\system32
Boot Device \Device\HarddiskVolume1
Locale  Austria
Hardware Abstraction Layer  Version = "10.0.16299.371"
User Name   Not Available
Time Zone   W. Europe Daylight Time
Installed Physical Memory (RAM) 4.00 GB
Total Physical Memory   4.00 GB
Available Physical Memory   1.94 GB
Total Virtual Memory    8.00 GB
Available Virtual Memory    5.27 GB
Page File Space 4.00 GB
Page File   C:\pagefile.sys
Virtualization-based security   Not enabled
Device Encryption Support   Reasons for failed automatic device encryption: TPM is not usable, PCR7 binding is not supported, Hardware Security Test Interface failed and device is not InstantGo, Un-allowed DMA capable bus/device(s) detected, Disabled by policy, TPM is not usable
A hypervisor has been detected. Features required for Hyper-V will not be displayed.    

Je recherche des différences avec vos installations fonctionnelles. On dirait que le système de base est Linux?

Cela fonctionne sur:

  • toutes les installations physiques de Windows 10
  • dans une machine virtuelle Windows 10 Hyper-V avec un hôte Windows 10

Je n'ai pas d'autre configuration similaire de Windows 10 avec laquelle je pourrais comparer le système affecté.

On dirait que le système de base est Linux?

Exactement: Debian GNU / Linux 9 (stretch)

Le changement NumPy qui a probablement déclenché cela a été le passage à OpenBLAS sous Windows pour la version 1.13.3. Je vais deviner qu'il y a quelque chose à peaufiner dans l'environnement numérique KVM.

Peut également vérifier s'il y a une DLL d'atlas flottant.

Peut également vérifier s'il y a une DLL d'atlas flottant.

Que voulez-vous dire exactement par cette phrase?

Il devrait y avoir une dll openblas pour les versions ultérieures, donc je me demande s'il pourrait y avoir une certaine confusion avec une dll atlas plus ancienne. Probablement pas, cependant. IIUC, numpy fonctionne, il renvoie simplement les mauvais résultats.

Numpy s'exécute, mais pour l'exemple ci-dessus, il ne retransmet en fait rien mais conduit à un crash.

Une autre possibilité est qu'OpenBLAS émette une instruction illégale (SSE *) non prise en charge dans l'environnement KVM. Je ne sais pas ce qui y est activé, pouvez-vous vérifier?

Vous pouvez contrôler OpenBlas à partir de variables d'environnement. set OPENBLAS_VERBOSE=2 devrait afficher le modèle de processeur par défaut utilisé. Il semble que l'invité doit utiliser le même modèle que le matériel hôte réel, donc il y a set OPENBLAS_CORETYPE=nehalem par exemple si cela est correct pour votre machine hôte. NumPy se comporte-t-il correctement sur la machine hôte? Si c'est le cas, vous pouvez utiliser le paramètre détaillé pour savoir ce que l'invité doit utiliser

Plus d'informations sur ce problème?

Le problème existe toujours mais je n'ai pas encore pu tester les choses @mattip et que vous avez mentionnées. Je ne pourrai pas le faire dans les deux prochaines semaines, mais je le ferai plus tard.

OK merci.

@ m55c55 Avez-vous réussi à déboguer encore ceci?

Bonjour,
Je peux confirmer ce problème et pourrais vous aider en donnant un autre cas d'utilisation ...

J'ai un comportement très similaire sur ma machine (nouvelle installation Linux):

Linux 4.15.0-42-generic #45-Ubuntu SMP Thu Nov 15 19:32:57 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

Ubuntu 18.04.1 LTS

numpy (1.15.4)

>>> np.show_config()
blas_mkl_info:
  NOT AVAILABLE
blis_info:
  NOT AVAILABLE
openblas_info:
    libraries = ['openblas', 'openblas']
    library_dirs = ['/usr/local/lib']
    language = c
    define_macros = [('HAVE_CBLAS', None)]
blas_opt_info:
    libraries = ['openblas', 'openblas']
    library_dirs = ['/usr/local/lib']
    language = c
    define_macros = [('HAVE_CBLAS', None)]
lapack_mkl_info:
  NOT AVAILABLE
openblas_lapack_info:
    libraries = ['openblas', 'openblas']
    library_dirs = ['/usr/local/lib']
    language = c
    define_macros = [('HAVE_CBLAS', None)]
lapack_opt_info:
    libraries = ['openblas', 'openblas']
    library_dirs = ['/usr/local/lib']
    language = c
    define_macros = [('HAVE_CBLAS', None)]

Mon script python:

import numpy as np
A = np.random.randn(100, 3000)
B = np.random.randn(3000, 100)
np.dot(B, A)

Le script ne plante pas avec de très petites matrices.

Cependant, le crash est en fait critique: la machine redémarre instantanément et de nombreux fichiers sont corrompus (mon bash et le module numpy ont été cassés lors de mon enquête).

Je suppose que vous voulez dire np.dot(B, A.T) ? Comment avez-vous obtenu NumPy? Si vous avez construit vous-même, quelle version d'OpenBLAS?

Non, il devrait être np.dot(B, A) pour avoir des dimensions alignées.

J'ai essayé d'obtenir numpy de pip (1.15.4)

➜  ~ pip3 install numpy
Collecting numpy
  Using cached https://files.pythonhosted.org/packages/ff/7f/9d804d2348471c67a7d8b5f84f9bc59fd1cefa148986f2b74552f8573555/numpy-1.15.4-cp36-cp36m-manylinux1_x86_64.whl

Et aussi essayé à partir de référentiels ubuntu (1.13.3)

➜  ~ apt-cache show python3-numpy
Package: python3-numpy
Architecture: amd64
Version: 1:1.13.3-2ubuntu1
Priority: optional
Section: python
Source: python-numpy
Origin: Ubuntu
Maintainer: Ubuntu Developers <[email protected]>
Original-Maintainer: Sandro Tosi <[email protected]>
Bugs: https://bugs.launchpad.net/ubuntu/+filebug
Installed-Size: 10670
Provides: python3-f2py, python3-numpy-abi9, python3-numpy-api11, python3-numpy-dev, python3.6-numpy
Depends: python3 (<< 3.7), python3 (>= 3.6~), python3.6:any, python3:any (>= 3.4~), libblas3 | libblas.so.3, libc6 (>= 2.14), liblapack3 | liblapack.so.3
Suggests: gcc (>= 4:4.6.1-5), gfortran, python-numpy-doc, python3-dev, python3-nose (>= 1.0), python3-numpy-dbg
Filename: pool/main/p/python-numpy/python3-numpy_1.13.3-2ubuntu1_amd64.deb
Size: 1942804
MD5sum: 7b84ea9967f987a292b64f5bc5b6d65f
SHA1: 73fd8354b7106ac81b8add37947173aad515a9d5
SHA256: 3098ad88b8404cbeee66cc6eef96b13ea87eda848900d7cb754fd0bf280741bf

Je viens d'essayer sur un autre ordinateur exécutant ubuntu 18 et pip installé numpy ... et ne peut pas reproduire le plantage. Pas sûr de ce qui se passe !

Bonjour, j'ai rencontré ce bug lors de l'exécution de la fonction corrcoef. J'ai approfondi et j'ai trouvé que je pouvais reproduire le crash avec l'appel suivant np.dot(np.array([[0], [0]]), np.array([0, 0]).conj())

Im exécutant Windows 10 dans un environnement anaconda.

np.__version__

1.14.2

np.show_config ()

mkl_info:
    libraries = ['mkl_rt']
    library_dirs = ['C:/Users/tommassino/AppData/Local/Continuum/Anaconda3/envs/project-conda\\Library\\lib']
    define_macros = [('SCIPY_MKL_H', None), ('HAVE_CBLAS', None)]
    include_dirs = ['C:\\Program Files (x86)\\IntelSWTools\\compilers_and_libraries_2016.4.246\\windows\\mkl', 'C:\\Program Files (x86)\\IntelSWTools\\compilers_and_libraries_2016.4.246\\windows\\mkl\\include', 'C:\\Program Files (x86)\\IntelSWTools\\compilers_and_libraries_2016.4.246\\windows\\mkl\\lib', 'C:/Users/tommassino/AppData/Local/Continuum/Anaconda3/envs/project-conda\\Library\\include']
blas_mkl_info:
    libraries = ['mkl_rt']
    library_dirs = ['C:/Users/tommassino/AppData/Local/Continuum/Anaconda3/envs/project-conda\\Library\\lib']
    define_macros = [('SCIPY_MKL_H', None), ('HAVE_CBLAS', None)]
    include_dirs = ['C:\\Program Files (x86)\\IntelSWTools\\compilers_and_libraries_2016.4.246\\windows\\mkl', 'C:\\Program Files (x86)\\IntelSWTools\\compilers_and_libraries_2016.4.246\\windows\\mkl\\include', 'C:\\Program Files (x86)\\IntelSWTools\\compilers_and_libraries_2016.4.246\\windows\\mkl\\lib', 'C:/Users/tommassino/AppData/Local/Continuum/Anaconda3/envs/project-conda\\Library\\include']
blas_opt_info:
    libraries = ['mkl_rt']
    library_dirs = ['C:/Users/tommassino/AppData/Local/Continuum/Anaconda3/envs/project-conda\\Library\\lib']
    define_macros = [('SCIPY_MKL_H', None), ('HAVE_CBLAS', None)]
    include_dirs = ['C:\\Program Files (x86)\\IntelSWTools\\compilers_and_libraries_2016.4.246\\windows\\mkl', 'C:\\Program Files (x86)\\IntelSWTools\\compilers_and_libraries_2016.4.246\\windows\\mkl\\include', 'C:\\Program Files (x86)\\IntelSWTools\\compilers_and_libraries_2016.4.246\\windows\\mkl\\lib', 'C:/Users/tommassino/AppData/Local/Continuum/Anaconda3/envs/project-conda\\Library\\include']
lapack_mkl_info:
    libraries = ['mkl_rt']
    library_dirs = ['C:/Users/tommassino/AppData/Local/Continuum/Anaconda3/envs/project-conda\\Library\\lib']
    define_macros = [('SCIPY_MKL_H', None), ('HAVE_CBLAS', None)]
    include_dirs = ['C:\\Program Files (x86)\\IntelSWTools\\compilers_and_libraries_2016.4.246\\windows\\mkl', 'C:\\Program Files (x86)\\IntelSWTools\\compilers_and_libraries_2016.4.246\\windows\\mkl\\include', 'C:\\Program Files (x86)\\IntelSWTools\\compilers_and_libraries_2016.4.246\\windows\\mkl\\lib', 'C:/Users/tommassino/AppData/Local/Continuum/Anaconda3/envs/project-conda\\Library\\include']
lapack_opt_info:
    libraries = ['mkl_rt']
    library_dirs = ['C:/Users/tommassino/AppData/Local/Continuum/Anaconda3/envs/project-conda\\Library\\lib']
    define_macros = [('SCIPY_MKL_H', None), ('HAVE_CBLAS', None)]
    include_dirs = ['C:\\Program Files (x86)\\IntelSWTools\\compilers_and_libraries_2016.4.246\\windows\\mkl', 'C:\\Program Files (x86)\\IntelSWTools\\compilers_and_libraries_2016.4.246\\windows\\mkl\\include', 'C:\\Program Files (x86)\\IntelSWTools\\compilers_and_libraries_2016.4.246\\windows\\mkl\\lib', 'C:/Users/tommassino/AppData/Local/Continuum/Anaconda3/envs/project-conda\\Library\\include']

@Tommassino Impossible de se reproduire. Êtes-vous sûr que ce sont les formes qui échouent?
Ce problème concerne l'exécution dans une VM, si votre configuration est différente, veuillez ouvrir un nouveau problème.

>>> import sys
>>> print(sys.version)
3.6.6 (default, Sep 12 2018, 18:26:19) 
[GCC 8.0.1 20180414 (experimental) [trunk revision 259383]]
>>> import numpy as np
>>> np.__version__
'1.14.2'
>>> np.dot(np.array([[0], [0]]), np.array([0, 0]).conj())
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: shapes (2,1) and (2,) not aligned: 1 (dim 1) != 2 (dim 0)

@mattip Ah désolé, je n'ai pas remarqué que cela était spécifiquement lié à un environnement VM car il n'était mentionné que dans les messages suivants. Certaines des autres réponses semblent mentionner le problème survenant sur les non-vms. Mon erreur avec la commande np.dot, j'ai copié les tableaux de mon débogueur de manière incorrecte.

>>> import sys
>>> import numpy as np
>>> print(sys.version)
3.6.6 | packaged by conda-forge | (default, Jul 26 2018, 11:48:23) [MSC v.1900 64 bit (AMD64)]
>>> print(np.__version__)
1.14.2
>>> X = np.array([0., 0.])
>>> X_T = np.array([0., 0.])
>>> print(X)
[0. 0.]
>>> print(X_T)
[0. 0.]
>>> print(np.dot(X, X_T.conj()))
Process finished with exit code 2

Cependant, j'ai déjà trouvé que cela pouvait être lié au chargement incorrect des natifs de mkl, donc cela pourrait en effet être un autre problème.

@Tommassino Avez-vous également eu des problèmes de conda?

@ oleksandr-pavlyk: des pensées?

@Tommassino Avez-vous également eu des problèmes de conda?

Désolé pour la réponse tardive, les vacances ... Oui, j'utilise un conda numpy

> conda list --no-pip | grep numpy
numpy                     1.14.2           py36h5c71026_1

Cependant, comme je l'ai mentionné ci-dessus, lorsque j'ai mis à jour mkl ( conda update mkl ), le problème a disparu.

Je suppose que nous pouvons probablement fermer cela? @Khemal puisque vous utilisez Linux, pouvez-vous publier la sortie de https://gist.github.com/seberg/ce4563f3cb00e33997e4f80675b80953 sur la boîte où le crash se produit? Cela pourrait vous / nous dire ce qui ne va pas, car c'est assez certainement lié au blas.

À moins qu'il y ait vraiment un problème de comptage de références, mais je serais surpris que cela ne frappe pas au hasard également d'autres personnes.

Salut.

J'ai recueilli des informations sur le problème.

Python 3.6.7
numpy (1.15.4)

(.kfr-test-env) root<strong i="9">@whatever</strong>:/app# gdb python3
(gdb) run testcode.py 
Starting program: /app/.kfr-test-env/bin/python3 testcode.py
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
[New Thread 0x7ffff3c1b700 (LWP 29704)]

Thread 1 "python3" received signal SIGILL, Illegal instruction.
0x00007ffff4a5c204 in dgemm_oncopy_OPTERON_SSE3 () from /app/.kfr-test-env/lib/python3.6/site-packages/numpy/core/../.libs/libopenblasp-r0-8dca6697.3.0.dev.so
(gdb) bt
#0  0x00007ffff4a5c204 in dgemm_oncopy_OPTERON_SSE3 () from /app/.kfr-test-env/lib/python3.6/site-packages/numpy/core/../.libs/libopenblasp-r0-8dca6697.3.0.dev.so
#1  0x00007ffff6520630 in ?? () from /app/.kfr-test-env/lib/python3.6/site-packages/numpy/core/../.libs/libopenblasp-r0-8dca6697.3.0.dev.so
#2  0x00000000000000e0 in ?? ()
#3  0x00007ffff41275db in dgemm_tt () from /app/.kfr-test-env/lib/python3.6/site-packages/numpy/core/../.libs/libopenblasp-r0-8dca6697.3.0.dev.so
#4  0x00007ffff4052088 in cblas_dgemm () from /app/.kfr-test-env/lib/python3.6/site-packages/numpy/core/../.libs/libopenblasp-r0-8dca6697.3.0.dev.so
#5  0x00007ffff676d28f in ?? () from /app/.kfr-test-env/lib/python3.6/site-packages/numpy/core/multiarray.cpython-36m-x86_64-linux-gnu.so
#6  0x00007ffff6732c36 in ?? () from /app/.kfr-test-env/lib/python3.6/site-packages/numpy/core/multiarray.cpython-36m-x86_64-linux-gnu.so
#7  0x00007ffff673400a in ?? () from /app/.kfr-test-env/lib/python3.6/site-packages/numpy/core/multiarray.cpython-36m-x86_64-linux-gnu.so
#8  0x00000000005030d5 in _PyCFunction_FastCallDict (kwargs=<optimized out>, nargs=<optimized out>, args=<optimized out>, 
    func_obj=<built-in method dot of module object at remote 0x7ffff6a535e8>) at ../Objects/methodobject.c:231
#9  _PyCFunction_FastCallKeywords (kwnames=<optimized out>, nargs=<optimized out>, stack=<optimized out>, func=<optimized out>) at ../Objects/methodobject.c:294
#10 call_function.lto_priv () at ../Python/ceval.c:4837
#11 0x0000000000506859 in _PyEval_EvalFrameDefault () at ../Python/ceval.c:3335
#12 0x0000000000504c28 in PyEval_EvalFrameEx (throwflag=0, f=Frame 0xadeb18, for file testcode.py, line 10, in <module> ()) at ../Python/ceval.c:4166
#13 _PyEval_EvalCodeWithName.lto_priv.1761 () at ../Python/ceval.c:4166
#14 0x0000000000506393 in PyEval_EvalCodeEx (closure=0x0, kwdefs=0x0, defcount=0, defs=0x0, kwcount=0, kws=0x0, argcount=0, args=0x0, locals=<optimized out>, 
    globals=<optimized out>, _co=<optimized out>) at ../Python/ceval.c:4187
#15 PyEval_EvalCode (co=<optimized out>, globals=<optimized out>, locals=<optimized out>) at ../Python/ceval.c:731
#16 0x0000000000634d52 in run_mod () at ../Python/pythonrun.c:1025
#17 0x0000000000634e0a in PyRun_FileExFlags () at ../Python/pythonrun.c:978
#18 0x00000000006385c8 in PyRun_SimpleFileExFlags () at ../Python/pythonrun.c:419
#19 0x00000000006387a5 in PyRun_AnyFileExFlags () at ../Python/pythonrun.c:81
#20 0x000000000063915a in run_file (p_cf=0x7fffffffe2fc, filename=<optimized out>, fp=<optimized out>) at ../Modules/main.c:340
#21 Py_Main () at ../Modules/main.c:810
#22 0x00000000004a6f10 in main (argc=2, argv=0x7fffffffe4f8) at ../Programs/python.c:69

@seberg voici la sortie:

Probing Multiarray
------------------
OpenBLAS:
    num threads: 2
    version info: DYNAMIC_ARCH NO_AFFINITY Opteron MAX_THREADS=64

Probing Linalg
--------------
OpenBLAS:
    num threads: 2
    version info: DYNAMIC_ARCH NO_AFFINITY Opteron MAX_THREADS=64

LDD information:
----------------
running: ldd /app/.kfr-test-env/lib/python3.6/site-packages/numpy/core/multiarray.cpython-36m-x86_64-linux-gnu.so
    linux-vdso.so.1 (0x00007ffe941ef000)
    libopenblasp-r0-8dca6697.3.0.dev.so => /app/.kfr-test-env/lib/python3.6/site-packages/numpy/core/../.libs/libopenblasp-r0-8dca6697.3.0.dev.so (0x00007f9319cea000)
    libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f931994c000)
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f931972d000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f931933c000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f931c800000)
    libgfortran-ed201abd.so.3.0.0 => /app/.kfr-test-env/lib/python3.6/site-packages/numpy/core/../.libs/libgfortran-ed201abd.so.3.0.0 (0x00007f9319042000)
running: ldd /app/.kfr-test-env/lib/python3.6/site-packages/numpy/linalg/_umath_linalg.cpython-36m-x86_64-linux-gnu.so
    linux-vdso.so.1 (0x00007ffda69d5000)
    libopenblasp-r0-8dca6697.3.0.dev.so => /app/.kfr-test-env/lib/python3.6/site-packages/numpy/linalg/../.libs/libopenblasp-r0-8dca6697.3.0.dev.so (0x00007f12097c1000)
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f12095a2000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f12091b1000)
    libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f1208e13000)
    libgfortran-ed201abd.so.3.0.0 => /app/.kfr-test-env/lib/python3.6/site-packages/numpy/linalg/../.libs/libgfortran-ed201abd.so.3.0.0 (0x00007f1208b19000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f120c0ee000)

@mattip J'ai essayé les choses de variable d'environnement, que vous avez mentionnées:

Avec le os.environ["OPENBLAS_CORETYPE"] = "nehalem" ça marche, mais sans ça ne marche pas.

import os
os.environ["OPENBLAS_VERBOSE"] = "2"
os.environ["OPENBLAS_CORETYPE"] = "nehalem"
import numpy as np

A = np.matrix([[1.], [3.]])
B = np.matrix([[2., 3.]])
ret = np.dot(A, B)
print(ret)

@kfrendrich Je suppose que vous êtes également sur une machine virtuelle ou alors? Sinon, il y a peut-être un problème avec la détection du processeur dans OpenBLAS? S'il s'agit d'une machine virtuelle, je pense que vous devrez peut-être simplement utiliser ces variables d'environnement.

@seberg oui c'est une machine virtuelle

Cela ressemble à un bug dans la façon dont OpenBLAS détecte le processeur. Pourriez-vous leur en faire part? Je n'ai pas trouvé kvm problème fermés

Oui, je les rapporterai bientôt.

Cela se reproduit-il toujours?

Le même crash avec numpy 1.17.3.

$ python
>>> import numpy as np
>>> A = np.matrix([[1.0], [3.0]])
>>> B = np.matrix([[2.0, 3.0]])
>>> ret = np.dot(A, B)
Illegal instruction (core dumped)

C'est probablement la raison de l'erreur que j'ai attrapée - Python meurt avec "l'instruction illégale (core dumped)" en essayant d'exécuter:

import matplotlib.pyplot as plt
fig = plt.figure(figsize=(10,10))

Proposition de solution:

import os
os.environ["OPENBLAS_VERBOSE"] = "2"
os.environ["OPENBLAS_CORETYPE"] = "nehalem"
import numpy as np

ne fonctionne pas :(

Voici l'histoire complète et la configuration:

$ python
Python 3.6.8 (default, Oct  9 2019, 14:04:01)
[GCC 8.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> import numpy as np
>>> print(sys.version)
3.6.8 (default, Oct  9 2019, 14:04:01)
[GCC 8.3.0]
>>> print(np.__version__)
1.17.3
>>> np.show_config()
blas_mkl_info:
  NOT AVAILABLE
blis_info:
  NOT AVAILABLE
openblas_info:
    libraries = ['openblas', 'openblas']
    library_dirs = ['/usr/local/lib']
    language = c
    define_macros = [('HAVE_CBLAS', None)]
blas_opt_info:
    libraries = ['openblas', 'openblas']
    library_dirs = ['/usr/local/lib']
    language = c
    define_macros = [('HAVE_CBLAS', None)]
lapack_mkl_info:
  NOT AVAILABLE
openblas_lapack_info:
    libraries = ['openblas', 'openblas']
    library_dirs = ['/usr/local/lib']
    language = c
    define_macros = [('HAVE_CBLAS', None)]
lapack_opt_info:
    libraries = ['openblas', 'openblas']
    library_dirs = ['/usr/local/lib']
    language = c
    define_macros = [('HAVE_CBLAS', None)]

Informations sur le processeur (il s'agit de la machine virtuelle):

$ cat /proc/cpuinfo
processor       : 0
vendor_id       : GenuineIntel
cpu family      : 6
model           : 85
model name      : Intel Xeon Processor (Skylake)
stepping        : 4
microcode       : 0x1
cpu MHz         : 2199.998
cache size      : 4096 KB
physical id     : 0
siblings        : 1
core id         : 0
cpu cores       : 1
apicid          : 0
initial apicid  : 0
fpu             : yes
fpu_exception   : yes
cpuid level     : 13
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc rep_good nopl cpuid tsc_known_freq pni pclmulqdq ssse3 cx16 pcid sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm pti fsgsbase smep erms
bugs            : cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs
bogomips        : 4399.99
clflush size    : 64
cache_alignment : 64
address sizes   : 46 bits physical, 48 bits virtual
power management:

processor       : 1
vendor_id       : GenuineIntel
cpu family      : 6
model           : 85
model name      : Intel Xeon Processor (Skylake)
stepping        : 4
microcode       : 0x1
cpu MHz         : 2199.998
cache size      : 4096 KB
physical id     : 1
siblings        : 1
core id         : 0
cpu cores       : 1
apicid          : 1
initial apicid  : 1
fpu             : yes
fpu_exception   : yes
cpuid level     : 13
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc rep_good nopl cpuid tsc_known_freq pni pclmulqdq ssse3 cx16 pcid sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm pti fsgsbase smep erms
bugs            : cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs
bogomips        : 4399.99
clflush size    : 64
cache_alignment : 64
address sizes   : 46 bits physical, 48 bits virtual
power management:

processor       : 2
vendor_id       : GenuineIntel
cpu family      : 6
model           : 85
model name      : Intel Xeon Processor (Skylake)
stepping        : 4
microcode       : 0x1
cpu MHz         : 2199.998
cache size      : 4096 KB
physical id     : 2
siblings        : 1
core id         : 0
cpu cores       : 1
apicid          : 2
initial apicid  : 2
fpu             : yes
fpu_exception   : yes
cpuid level     : 13
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc rep_good nopl cpuid tsc_known_freq pni pclmulqdq ssse3 cx16 pcid sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm pti fsgsbase smep erms
bugs            : cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs
bogomips        : 4399.99
clflush size    : 64
cache_alignment : 64
address sizes   : 46 bits physical, 48 bits virtual
power management:

processor       : 3
vendor_id       : GenuineIntel
cpu family      : 6
model           : 85
model name      : Intel Xeon Processor (Skylake)
stepping        : 4
microcode       : 0x1
cpu MHz         : 2199.998
cache size      : 4096 KB
physical id     : 3
siblings        : 1
core id         : 0
cpu cores       : 1
apicid          : 3
initial apicid  : 3
fpu             : yes
fpu_exception   : yes
cpuid level     : 13
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc rep_good nopl cpuid tsc_known_freq pni pclmulqdq ssse3 cx16 pcid sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm pti fsgsbase smep erms
bugs            : cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs
bogomips        : 4399.99
clflush size    : 64
cache_alignment : 64
address sizes   : 46 bits physical, 48 bits virtual
power management:

@prokulski comment avez-vous installé openblas? Quelle version utilisez-vous? Lorsque vous vérifiez leur référentiel github, vous pouvez quelle version doit se comporter de quelle manière.

openblas a été installé automatiquement (en tant que dépendance de quelque chose). J'ai essayé de le supprimer et de l'installer à nouveau (via apt install) - n'a pas aidé

Je suppose que cela plante également avec les tableaux réguliers (au lieu de np.matrix )? Ce serait bien d'éliminer le code obsolète du débogage. Cela se comporte-t-il sur votre système?

>>> import numpy as np
>>> A = np.array([[1.0], [3.0]])
>>> B = np.array([[2.0, 3.0]])
>>> ret = np.dot(A, B)

Que diriez-vous

>>> import numpy as np
>>> A = np.array([[1.0], [3.0]])
>>> B = np.array([[2.0, 3.0]])
>>> ret = np.matmul(A, B)

Je suppose que cela plante également avec les tableaux réguliers (au lieu de np.matrix )? Ce serait bien d'éliminer le code obsolète du débogage. Cela se comporte-t-il sur votre système?

>>> import numpy as np
>>> A = np.array([[1.0], [3.0]])
>>> B = np.array([[2.0, 3.0]])
>>> ret = np.dot(A, B)

Crachesh avec "Instruction illégale (core dumped)"

>>> import numpy as np
>>> A = np.array([[1.0], [3.0]])
>>> B = np.array([[2.0, 3.0]])
>>> ret = np.matmul(A, B)

Donne:

>>> ret
array([[2., 3.],
       [6., 9.]])

@prokulski comment avez-vous installé openblas? Quelle version utilisez-vous? Lorsque vous vérifiez leur référentiel github, vous pouvez quelle version doit se comporter de quelle manière.

openblas a été installé automatiquement (en tant que dépendance de quelque chose). J'ai essayé de le supprimer et de l'installer à nouveau (via apt install) - n'a pas aidé

Cela ne répond toujours pas à la question sur le numéro de version.

Ils ont changé le système sur la façon dont la bibliothèque détecte le type de CPU. Mieux vaut les contacter directement car numpy n'utilise que la bibliothèque. Voir par exemple mon numéro https://github.com/xianyi/OpenBLAS/issues/2067 comme référence.

$ apt list *blas* | grep installed
libblas-dev/bionic,now 3.7.1-4ubuntu1 amd64 [installed,automatic]
libblas3/bionic,now 3.7.1-4ubuntu1 amd64 [installed,automatic]
libgslcblas0/bionic,now 2.4+dfsg-6 amd64 [installed,automatic]

J'ai installé libopenblas-dev, et maintenant c'est:

$ apt list *blas* | grep installed
libblas-dev/bionic,now 3.7.1-4ubuntu1 amd64 [installed,automatic]
libblas3/bionic,now 3.7.1-4ubuntu1 amd64 [installed,automatic]
libgslcblas0/bionic,now 2.4+dfsg-6 amd64 [installed,automatic]
libopenblas-base/bionic,now 0.2.20+ds-4 amd64 [installed,automatic]
libopenblas-dev/bionic,now 0.2.20+ds-4 amd64 [installed]

Python:

$ python
Python 3.6.8 (default, Oct  9 2019, 14:04:01)
[GCC 8.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy as np
>>> A = np.matrix([[1.0], [3.0]])
>>> B = np.matrix([[2.0, 3.0]])
>>> ret = np.dot(A, B)
Illegal instruction (core dumped)

Vous pouvez essayer de définir OPENBLAS_CORETYPE sur le processeur du système hôte. Le numpy que vous obtenez avec pip install du PyPI contient OpenBLAS 0.3.7, qui devrait contenir un correctif pour cela. Si vous choisissez d'utiliser pip install et n'utilisez pas de virtualenv, assurez-vous d'utiliser pip install --upgrade --user numpy pour éviter les conflits avec le python de votre système.

Pour déterminer la version d'OpenBLAS, vous pouvez utiliser ce code, qui signalera la version pour OpenBLAS 0.3.5 et plus

    import numpy
    import ctypes

    dll = ctypes.CDLL(numpy.core._multiarray_umath.__file__)
    get_config = dll.openblas_get_config
    get_config.restype=ctypes.c_char_p
    res = get_config()
    print('OpenBLAS get_config returned', str(res))

@mattip votre code donne "OpenBLAS get_config retourné b'OpenBLAS 0.3.7 DYNAMIC_ARCH NO_AFFINITY Haswell MAX_THREADS = 64 '"

Définir OPENBLAS_CORETYPE sur Haswell (minuscules, majuscules, où que ce soit) n'aide pas - j'ai essayé cela plus tôt.

Je pense que le problème est dans la machine virtuelle KVM et la mauvaise détection du processeur dans blas. Étrange, que quelques jours plus tôt, tout allait bien ...

Je pense que Haswell est la mauvaise valeur pour vous, mais une recherche rapide sur Google ne fournit pas de bonnes réponses pour détecter le processeur hôte une fois à l'intérieur d'une machine virtuelle.

Je pense que Haswell est la mauvaise valeur pour vous, mais une recherche rapide sur Google ne fournit pas de bonnes réponses pour détecter le processeur hôte une fois à l'intérieur d'une machine virtuelle.

Oui. Skylake serait mieux (si vous voyez cpuinfo), mais n'aide pas non plus. Je suis coincé.
https://github.com/numpy/numpy/milestone/69 donne de l'espoir;)

Essayez-les en tant que spécificateurs de noyau OpenBLAS, est-ce que l'un d'entre eux fonctionne?

export OPENBLAS_CORETYPE=prescott

et dunnington, penryn, core2, nehalem, sandybridge

Tout le monde meurt.

Le KVM permet-il de définir le type de processeur? At-il été récemment mis à jour?

Juste pour confirmer que le réglage du noyau fonctionne correctement, ajoutez:

export OPENBLAS_VERBOSE=2
export OPENBLAS_CORETYPE=prescott
python -c 'import numpy as np; A = np.array([[1.0], [3.0]]); B = np.array([[2.0, 3.0]]); print(np.dot(A, B))'

Je reçois:

Core: Prescott
[[2. 3.]
 [6. 9.]]

Le support a déclaré que rien n'avait changé avec les processeurs la dernière fois.

J'ai également extrait et démarré l'image docker jupyter / tensorflow-notebook sur cette machine et l'exemple np.dot () exécuté dans Jupyter échoue de la même manière. Donc, je pense que c'est un problème matériel?

@prokulski si vous utilisez le code du commentaire ci - Core: Prescott avant l'instruction illégale?

Comme cela semble être spécifique à votre matériel, je le supprime du jalon 1.18.

J'ai "Core: Presscot" puis matrice 2x2 et AUCUNE instruction illégale.

Sans la ligne "export OPENBLAS_CORETYPE = prescott", il y a instruction illégale et pas de matrice.

Il semble que la routine de détection de votre CPU dans OpenBLAS soit confondue avec votre KVM. Pourriez-vous le signaler sur l' outil de suivi des problèmes OpenBLAS afin qu'ils puissent comprendre ce qui se passe?

Vous pouvez probablement aider OpenBLAS en parcourant tous les types de noyau énumérés ci-dessus et en trouvant ceux qui plantent.

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