Numpy: np.dot crash pada beberapa sistem dengan numpy 1.14.5

Dibuat pada 6 Jul 2018  ·  61Komentar  ·  Sumber: numpy/numpy

Di salah satu sistem kami, cuplikan kode berikut menyebabkan error interpreter python:

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

Beberapa detail:

  • Windows 10
  • Python 3.5.2 di lingkungan virtual
  • numpy 1.14.5

Pada sistem lain perintah ini berfungsi dengan baik.

00 - Bug

Semua 61 komentar

Di mana Anda mendapatkan numpy Anda? pip? Anaconda? Apa yang dikatakan np.show_config() ?

Terima kasih atas tanggapannya. Saya telah menginstal numpy melalui 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

Apakah memutakhirkan ke runtime Microsoft Visual C terbaru di komputer
Tolong? Mungkin tersedia dari pembaruan windows atau dari:
https://support.microsoft.com/en-us/help/2977003/the-latest-supported-visual-c-downloads

@pv terima kasih atas petunjuknya, tetapi setelah menginstal runtime 2017 terbaru dan memulai ulang sistem, kesalahan masih ada.

Mungkin itu tidak ada hubungannya dengan masalah, tetapi sistem yang terpengaruh adalah Windows 10 yang berjalan di KVM.

Ketika saya menjalankan skrip pengujian di atas sebagai t.py dengan cara ini: python -u -m trace -t t.py , saya mendapatkan output berikut sebelum 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,

yang satu ini berhasil

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

yang satu ini rusak

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

Ada ide?

Setelah bermain-main dengan versi numpy yang berbeda, saya dapat mengatakan itu

  • numpy <= 1.13.1 tidak terpengaruh, sementara
  • numpy> = 1.13.3 dipengaruhi oleh masalah ini
  • numpy 1.13.2 tidak diuji karena tidak ada build di pypi

Saya tidak melihat perubahan yang jelas yang dapat menyebabkan hal ini. Karena masalah khusus untuk instalasi ini, mungkin berguna untuk melihat apakah ada sesuatu yang khusus tentang lingkungan, perangkat keras, dll. Saya curiga bahwa ada masalah perpustakaan di suatu tempat.

Dalam informasi apa yang Anda minati?

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.    

Saya mencari perbedaan dengan instalasi kerja Anda. Sepertinya sistem dasarnya adalah linux?

Ini bekerja pada:

  • semua instalasi Windows 10 fisik
  • di VM Windows 10 Hyper-V dengan host Windows 10

Saya tidak memiliki pengaturan Windows 10 lain yang serupa, saya dapat membandingkan sistem yang terpengaruh dengan.

Sepertinya sistem dasarnya adalah linux?

Persis: Debian GNU / Linux 9 (stretch)

Perubahan NumPy yang mungkin memicu ini adalah pengalihan ke OpenBLAS di Windows untuk 1.13.3. Saya akan menebak bahwa ada sesuatu yang perlu diubah dalam lingkungan numerik KVM.

Mungkin juga memeriksa apakah ada dll atlas yang mengambang.

Mungkin juga memeriksa apakah ada dll atlas yang mengambang.

Apa sebenarnya yang Anda maksud dengan kalimat ini?

Harus ada dll openblas untuk versi yang lebih baru, jadi saya bertanya-tanya apakah mungkin ada kebingungan dengan atlas dll yang lebih lama. Mungkin tidak. IIUC, numpy run, itu hanya mengembalikan hasil yang salah.

Numpy berjalan, tetapi untuk contoh di atas sebenarnya tidak ada yang ditarik kembali selain menyebabkan crash.

Kemungkinan lain adalah OpenBLAS mengeluarkan instruksi ilegal (SSE *) yang tidak didukung di lingkungan KVM. Saya tidak tahu apa yang diaktifkan di sana, bisakah Anda memeriksanya?

Anda dapat mengontrol OpenBlas dari variabel lingkungan. set OPENBLAS_VERBOSE=2 harus mencetak model prosesor default yang digunakan. Tampaknya tamu harus menggunakan model yang sama dengan perangkat keras host yang sebenarnya, jadi ada set OPENBLAS_CORETYPE=nehalem misalnya jika itu benar untuk mesin host Anda. Apakah NumPy berperilaku baik di mesin host? Jika demikian, Anda dapat menggunakan pengaturan verbose untuk mengetahui apa yang seharusnya digunakan oleh tamu

Info lagi tentang masalah ini?

Masalahnya masih ada tetapi saya belum bisa menguji hal-hal @mattip dan yang Anda sebutkan. Saya tidak akan dapat melakukan ini dalam dua minggu ke depan tetapi saya akan melakukannya setelah itu.

Ok terima kasih.

@ m55c55 Apakah Anda berhasil men-debug ini lagi?

Halo,
Saya dapat mengonfirmasi masalah ini, dan mungkin membantu dengan memberikan kasus penggunaan lain ...

Saya memiliki perilaku yang sangat mirip di mesin saya (instalasi linux baru):

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)]

Skrip python saya:

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

Skrip tidak crash dengan matriks yang sangat kecil.

Namun crash sebenarnya kritis: mesin langsung reboot dan banyak file rusak (mendapat bash saya dan modul numpy rusak selama penyelidikan saya).

Saya berasumsi maksud Anda np.dot(B, A.T) ? Bagaimana Anda mendapatkan NumPy? Jika Anda membangunnya sendiri, OpenBLAS versi berapa?

Tidak, harus np.dot(B, A) untuk memiliki dimensi yang selaras.

Saya mencoba mendapatkan numpy dari 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

Dan juga mencoba dari repositori 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

Baru saja mencoba di komputer lain yang menjalankan ubuntu 18 dan pip diinstal numpy ... dan tidak dapat mereproduksi crash. Tidak yakin dengan apa yang terjadi !

Halo, saya menemukan bug ini saat menjalankan fungsi corrcoef. Saya mengebor dan menemukan bahwa saya dapat mereproduksi crash dengan panggilan berikut np.dot(np.array([[0], [0]]), np.array([0, 0]).conj())

Saya menjalankan windows 10 di lingkungan 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 Tidak dapat mereproduksi. Apakah Anda yakin itu adalah bentuk yang gagal?
Masalah ini tentang menjalankan di dalam VM, jika penyiapan Anda berbeda, buka masalah baru.

>>> 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 maaf, saya tidak melihat bahwa ini terkait secara khusus dengan lingkungan VM karena hanya disebutkan di posting berikut. Beberapa dari balasan lain sepertinya menyebutkan masalah yang terjadi pada non-vms. Kesalahan saya dengan perintah np.dot, saya menyalin array dari debugger saya dengan tidak benar.

>>> 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

Namun saya sudah menemukan bahwa itu mungkin terkait dengan mkl native tidak memuat dengan benar, jadi ini mungkin memang masalah lain.

@Tommassino Apakah Anda juga mendapatkan numpy dari conda?

@ oleksandr-pavlyk: ada pemikiran?

@Tommassino Apakah Anda juga mendapatkan numpy dari conda?

Maaf untuk balasan terlambat, liburan ... Ya saya menggunakan conda numpy

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

Namun, seperti yang saya sebutkan di atas, ketika saya memperbarui mkl ( conda update mkl ) masalahnya hilang.

Saya kira kita mungkin bisa menutup ini? @Khemal karena Anda menjalankan linux, dapatkah Anda memposting keluaran https://gist.github.com/seberg/ce4563f3cb00e33997e4f80675b80953 di kotak tempat terjadinya kerusakan? Itu mungkin memberi tahu Anda / kami apa yang salah, karena ini sangat terkait dengan blas.

Kecuali memang ada masalah penghitungan referensi, tetapi saya akan terkejut dengan hal itu tidak sembarangan juga mengenai orang lain.

Hai.

Saya mengumpulkan beberapa penelusuran kembali tentang masalah ini.

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 ini adalah outputnya:

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 Saya mencoba hal-hal variabel lingkungan, yang Anda sebutkan:

Dengan os.environ["OPENBLAS_CORETYPE"] = "nehalem" itu bekerja, tetapi tanpa itu tidak akan berhasil.

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 Saya rasa Anda juga menggunakan mesin virtual atau lebih? Jika tidak, mungkinkah ada masalah dengan deteksi CPU di OpenBLAS? Jika ini adalah mesin virtual, saya pikir Anda mungkin harus menggunakan variabel lingkungan tersebut.

@seberg ya itu adalah mesin virtual

Ini terdengar seperti beberapa bug dalam cara OpenBLAS mendeteksi cpu. Bisakah Anda melaporkannya kepada mereka? Saya tidak dapat menemukan masalah terbuka kvm , tetapi ada beberapa yang sudah ditutup

Ya, saya akan segera melaporkannya.

Apakah ini masih berkembang biak?

Kecelakaan yang sama dengan 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)

Ini mungkin alasan kesalahan yang saya tangkap - Python mati dengan "Instruksi ilegal (core dumped)" saat mencoba menjalankan:

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

Solusi yang diusulkan:

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

tidak bekerja :(

Berikut adalah cerita lengkap dan konfigurasi:

$ 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)]

Info CPU (ini adalah mesin virtual):

$ 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 bagaimana Anda menginstal openblas? Versi mana yang Anda gunakan? Saat Anda memeriksa repositori github mereka, Anda dapat mengetahui versi mana yang berperilaku seperti itu.

openblas telah terinstal secara otomatis (sebagai ketergantungan sesuatu). Saya sudah mencoba untuk menghapusnya dan menginstalnya sekali lagi (melalui apt install) - tidak membantu

Saya berasumsi ini juga crash dengan array biasa (bukan np.matrix )? Alangkah baiknya untuk menghilangkan kode yang tidak digunakan lagi dari proses debug. Apakah ini berlaku di sistem Anda?

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

Bagaimana tentang

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

Saya berasumsi ini juga crash dengan array biasa (bukan np.matrix )? Alangkah baiknya untuk menghilangkan kode yang tidak digunakan lagi dari proses debug. Apakah ini berlaku di sistem Anda?

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

Crachesh dengan "Instruksi ilegal (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)

Memberikan:

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

@ Prokulski bagaimana Anda menginstal openblas? Versi mana yang Anda gunakan? Saat Anda memeriksa repositori github mereka, Anda dapat mengetahui versi mana yang berperilaku seperti itu.

openblas telah terinstal secara otomatis (sebagai ketergantungan sesuatu). Saya sudah mencoba untuk menghapusnya dan menginstalnya sekali lagi (melalui apt install) - tidak membantu

Ini masih belum menjawab pertanyaan tentang nomor versi.

Mereka mengubah sistem tentang bagaimana perpustakaan mendeteksi tipe CPU. Lebih baik hubungi mereka secara langsung karena numpy hanya menggunakan perpustakaan. Lihat misalnya masalah saya https://github.com/xianyi/OpenBLAS/issues/2067 sebagai referensi.

$ 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]

Saya telah menginstal libopenblas-dev, dan sekarang menjadi:

$ 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)

Anda dapat mencoba menyetel OPENBLAS_CORETYPE ke CPU sistem host. Numpy yang Anda dapatkan dengan pip install dari PyPI berisi OpenBLAS 0.3.7, yang seharusnya berisi perbaikan untuk ini. Jika Anda memilih untuk menggunakan pip install dan tidak menggunakan virtualenv, pastikan untuk menggunakan pip install --upgrade --user numpy untuk menghindari konflik dengan python sistem Anda.

Untuk menentukan versi OpenBLAS, Anda dapat menggunakan kode ini, yang akan melaporkan versi untuk OpenBLAS 0.3.5 dan lebih tinggi

    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 kode Anda memberikan "OpenBLAS get_config dikembalikan b'OpenBLAS 0.3.7 DYNAMIC_ARCH NO_AFFINITY Haswell MAX_THREADS = 64 '"

Mengatur OPENBLAS_CORETYPE ke Haswell (huruf kecil, upercase, apa pun) tidak membantu - Saya sudah mencoba ini sebelumnya.

Saya pikir masalahnya ada di mesin virtual KVM dan deteksi CPU yang buruk di blas. Aneh, bahwa beberapa hari sebelumnya semua pikiran baik-baik saja ...

Saya pikir Haswell adalah nilai yang salah untuk Anda, tetapi pencarian cepat di Google tidak menghasilkan jawaban yang baik untuk mendeteksi cpu host sekali di dalam mesin virtual.

Saya pikir Haswell adalah nilai yang salah untuk Anda, tetapi pencarian cepat di Google tidak menghasilkan jawaban yang baik untuk mendeteksi cpu host sekali di dalam mesin virtual.

Ya. Skylake akan lebih baik (jika Anda akan melihat cpuinfo), tetapi juga tidak membantu. Aku terjebak.
https://github.com/numpy/numpy/milestone/69 memberi harapan;)

Coba ini sebagai penentu kernel OpenBLAS, apakah salah satunya berfungsi?

export OPENBLAS_CORETYPE=prescott

dan dunnington, penryn, core2, nehalem, sandybridge

Semua orang mati.

Apakah KVM memungkinkan pengaturan jenis cpu? Apakah itu baru saja diperbarui?

Hanya untuk mengonfirmasi bahwa pengaturan inti berfungsi dengan benar, tambahkan:

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))'

Saya mendapat:

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

Dukungan mengatakan bahwa tidak ada yang berubah dengan prosesor terakhir kali.

Saya juga telah menarik dan memulai gambar buruh pelabuhan jupyter / tensorflow-notebook pada mesin ini dan contoh np.dot () yang dijalankan di Jupyter gagal dengan cara yang sama. Jadi, saya pikir ini masalah perangkat keras?

@prokulski jika Anda menggunakan kode dari komentar di atas , apakah Anda mendapatkan output Core: Prescott sebelum instruksi ilegal?

Karena ini tampaknya khusus untuk perangkat keras Anda, saya menghapusnya dari pencapaian 1,18.

Saya memiliki "Core: Presscot" dan kemudian matriks 2x2 dan TIDAK ADA instruksi ilegal.

Tanpa baris "ekspor OPENBLAS_CORETYPE = prescott" ada instruksi ilegal dan tidak ada matriks.

Sepertinya rutinitas untuk mendeteksi CPU Anda di dalam OpenBLAS bingung dengan KVM Anda. Bisakah Anda melaporkannya di pelacak masalah OpenBLAS sehingga mereka dapat mengetahui apa yang sedang terjadi?

Anda mungkin dapat membantu OpenBLAS dengan menelusuri semua jenis inti yang tercantum di atas, dan menemukan mana yang macet.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat