Numpy: تعطل np.dot على بعض الأنظمة ذات الإصدار 1.14.5

تم إنشاؤها على ٦ يوليو ٢٠١٨  ·  61تعليقات  ·  مصدر: numpy/numpy

في أحد أنظمتنا ، يؤدي مقتطف الشفرة التالي إلى تعطل مترجم Python:

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

بعض التفاصيل:

  • نظام التشغيل Windows 10
  • Python 3.5.2 في بيئة افتراضية
  • numpy 1.14.5

في الأنظمة الأخرى ، يعمل هذا الأمر بشكل جيد.

00 - Bug

ال 61 كومينتر

من أين تحصل على عضلاتك؟ نقطة؟ اناكوندا؟ ماذا يقول np.show_config() ؟

شكرا لك على الرد. لقد قمت بتثبيت numpy through 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

هل الترقية إلى أحدث وقت تشغيل Microsoft Visual C على الجهاز
مساعدة؟ ربما متاح من تحديث windows أو من:
https://support.microsoft.com/en-us/help/2977003/the-latest-supported-visual-c-downloads

pv شكرًا على التلميح ، ولكن بعد تثبيت أحدث وقت تشغيل 2017 وإعادة تشغيل النظام ، لا يزال الخطأ موجودًا.

ربما لا علاقة له بالمشكلة ، لكن النظام المتأثر هو Windows 10 يعمل في KVM.

عندما أقوم بتشغيل البرنامج النصي التجريبي أعلاه كـ t.py بهذه الطريقة: python -u -m trace -t t.py ، أحصل على المخرجات التالية قبل الانهيار:

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

حسنًا ،

هذا واحد يعمل

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

هذا واحد تحطم

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

اي فكرة؟

بعد اللعب مع إصدارات مختلفة من numpy يمكنني قول ذلك

  • numpy <= 1.13.1 لا يتأثر ، بينما
  • numpy> = 1.13.3 يتأثر بهذه المشكلة
  • numpy 1.13.2 لم يتم اختباره لأنه لا يوجد بناء على pypi

لا أرى أي تغييرات واضحة يمكن أن تؤدي إلى ذلك. نظرًا لأن المشكلة خاصة بهذا التثبيت ، فقد يكون من المفيد معرفة ما إذا كان هناك شيء مميز حول البيئة والأجهزة وما إلى ذلك. أشك في وجود مشكلة في المكتبة في مكان ما.

ما هي المعلومات التي تهتم بها؟

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.    

أنا أبحث عن اختلافات مع منشآت العمل الخاصة بك. يبدو أن النظام الأساسي لينكس؟

يعمل على:

  • جميع عمليات تثبيت Windows 10 المادية
  • في Windows 10 Hyper-V VM مع مضيف Windows 10

ليس لدي أي إعداد Windows 10 مماثل آخر ، يمكنني مقارنة النظام المتأثر بـ.

يبدو أن النظام الأساسي لينكس؟

بالضبط: Debian GNU / Linux 9 (امتداد)

كان تغيير NumPy الذي من المحتمل أن يكون هذا هو التبديل إلى OpenBLAS على Windows لـ 1.13.3. سأخمن أن هناك شيئًا يحتاج إلى التغيير والتبديل في بيئة KVM الرقمية.

قد تتحقق أيضًا مما إذا كان هناك أطلس dll يطفو حوله.

قد تتحقق أيضًا مما إذا كان هناك أطلس dll يطفو حوله.

ماذا تقصد بالضبط بهذه الجملة؟

يجب أن يكون هناك ملف openblas dll للإصدارات الأحدث ، لذلك أتساءل عما إذا كان هناك بعض الالتباس مع أطلس dll الأقدم. على الأرجح لا. IIUC ، عمليات تشغيل غير متوقعة ، تقوم فقط بإرجاع النتائج الخاطئة.

يعمل Numpy ، ولكن على سبيل المثال أعلاه ، فإنه في الواقع لا يعيد إدارة أي شيء ولكنه يؤدي إلى وقوع حادث.

الاحتمال الآخر هو إصدار OpenBLAS لإرشادات غير قانونية (SSE *) غير مدعومة في بيئة KVM. لا أعرف ما الذي تم تمكينه هناك ، هل يمكنك التحقق؟

يمكنك التحكم في OpenBlas من متغيرات البيئة. set OPENBLAS_VERBOSE=2 بطباعة نموذج المعالج الافتراضي المستخدم. يبدو أن الضيف يجب أن يستخدم نفس طراز الأجهزة المضيفة الفعلية ، لذلك هناك set OPENBLAS_CORETYPE=nehalem على سبيل المثال إذا كان هذا صحيحًا لجهازك المضيف. هل يعمل NumPy بشكل صحيح على الجهاز المضيف؟ إذا كان الأمر كذلك ، يمكنك استخدام الإعداد المطول لمعرفة ما يجب أن يستخدمه الضيف

مزيد من المعلومات حول هذه المشكلة؟

لا تزال المشكلة قائمة ولكني لم أتمكن بعد من اختبار الأشياء mattip والتي ذكرتها. لن أتمكن من القيام بذلك في غضون الأسبوعين المقبلين ، لكنني سأفعل ذلك بعد ذلك.

حسنا، شكرا.

@ m55c55 هل تمكنت من تصحيح هذا أكثر من ذلك؟

مرحبا،
يمكنني تأكيد هذه المشكلة ، وقد أساعد من خلال تقديم حالة استخدام أخرى ...

لدي سلوك مشابه جدًا على جهازي (تثبيت 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)]

نصي بيثون:

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

لا يتعارض النص مع المصفوفات الصغيرة جدًا.

ومع ذلك ، فإن الانهيار أمر بالغ الأهمية في الواقع: يقوم الجهاز بإعادة التشغيل على الفور وتلف العديد من الملفات (تم تعطيل وحدة bash الخاصة بي والوحدة الرقمية أثناء التحقيق).

أفترض أنك تعني np.dot(B, A.T) ؟ كيف حصلت على NumPy؟ إذا كنت قد بنيت بنفسك ، فما هو إصدار OpenBLAS؟

لا ، يجب أن يكون np.dot(B, A) لتتوافق الأبعاد.

حاولت الحصول على عدد من النقاط من النقطة (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

وجربت أيضًا من مستودعات 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

جربت للتو على كمبيوتر آخر يقوم بتشغيل ubuntu 18 و pip مثبت numpy ... ولا يمكن إعادة إنتاج التعطل. غير متأكد ما يجري !

مرحبًا ، لقد واجهت هذا الخطأ عند تشغيل وظيفة curcoef. لقد قمت بالتنقيب ووجدت أنه يمكنني إعادة إنتاج العطل بالمكالمة التالية np.dot(np.array([[0], [0]]), np.array([0, 0]).conj())

أنا أقوم بتشغيل windows 10 في بيئة أناكوندا.

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 لا يمكن أن تتكاثر. هل أنت متأكد من أن هذه هي الأشكال التي فشلت؟
تتعلق هذه المشكلة بالتشغيل داخل جهاز افتراضي ، إذا كان الإعداد مختلفًا ، فيرجى فتح مشكلة جديدة.

>>> 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 آسف ، لم ألاحظ أن هذا مرتبط على وجه التحديد ببيئة VM حيث تم ذكرها فقط في المشاركات التالية. يبدو أن بعض الردود الأخرى تشير إلى المشكلة التي تحدث في non-vms. خطئي في الأمر np.dot ، لقد قمت بنسخ المصفوفات من مصحح الأخطاء الخاص بي بشكل غير صحيح.

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

ومع ذلك ، فقد وجدت بالفعل أنه قد يكون مرتبطًا بأصحاب mkl الذين لا يتم تحميلهم بشكل صحيح ، لذلك قد تكون هذه مشكلة أخرى بالفعل.

Tommassino هل حصلت أيضًا على numpy من Conda؟

@ oleksandr-Pavlyk: أي أفكار؟

Tommassino هل حصلت أيضًا على numpy من Conda؟

آسف على الرد المتأخر والعطلات ... نعم أنا أستخدم كوندا numpy

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

ومع ذلك ، كما ذكرت أعلاه ، عندما قمت بتحديث mkl ( conda update mkl ) اختفت المشكلة.

أعتقد أنه يمكننا إغلاق هذا على الأرجح؟ Khemal بما أنك تقوم بتشغيل linux ، هل يمكنك نشر إخراج https://gist.github.com/seberg/ce4563f3cb00e33997e4f80675b80953 في المربع الذي يحدث فيه التعطل؟ قد يخبرك هذا / لنا ما هو الخطأ ، لأن هذا يرتبط بالتأكيد إلى حد كبير بلاس.

ما لم يكن هناك بالفعل مشكلة في عد المراجع ، لكنني سأفاجأ بعدم إصابة أشخاص آخرين بشكل عشوائي.

مرحبا.

لقد جمعت بعض التتبع حول هذه المشكلة.

بايثون 3.6.7
نومبي (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 هذا هو الإخراج:

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 جربت متغيرات البيئة التي ذكرتها:

مع os.environ["OPENBLAS_CORETYPE"] = "nehalem" يعمل ، لكن بدونه لا يعمل.

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 أعتقد أنك أيضًا على جهاز افتراضي أو ما شابه؟ خلاف ذلك ، ربما هناك مشكلة في اكتشاف وحدة المعالجة المركزية في OpenBLAS؟ إذا كان هذا جهازًا افتراضيًا ، أعتقد أنه قد يتعين عليك فقط استخدام متغيرات البيئة هذه.

seberg نعم إنها آلة افتراضية

يبدو هذا وكأنه خطأ في الطريقة التي يكتشف بها OpenBLAS وحدة المعالجة المركزية. هل يمكنك إبلاغهم بذلك؟ لم أتمكن من العثور على إصدار kvm مفتوح ، ولكن هناك عدد قليل منها مغلق

نعم ، سأبلغ عنهم قريبًا.

هل ما زال هذا يتكاثر؟

نفس التعطل مع 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)

ربما يكون هذا هو سبب الخطأ الذي اكتشفته - تموت بايثون مع "التعليمات غير القانونية (تم إغراق النواة)" عند محاولة التشغيل:

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

الحل المقترح:

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

لا يعمل :(

هنا القصة الكاملة والتكوين:

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

معلومات وحدة المعالجة المركزية (هذه آلة افتراضية):

$ 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 كيف قمت بتثبيت openblas؟ اي إصدار تستعمل؟ عندما تتحقق من مستودع github الخاص بهم ، يمكنك تحديد الإصدار الذي يجب أن يتصرف بهذه الطريقة.

تم تثبيت openblas تلقائيًا (كاعتماد على شيء ما). لقد حاولت إزالته وتثبيته مرة أخرى (عبر تثبيت apt) - لم يساعد

أفترض أن هذا أيضًا تعطل مع المصفوفات العادية (بدلاً من np.matrix )؟ سيكون من الجيد إزالة التعليمات البرمجية المهملة من تصحيح الأخطاء. هل هذا يتصرف على نظامك؟

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

ماذا عن

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

أفترض أن هذا أيضًا تعطل مع المصفوفات العادية (بدلاً من np.matrix )؟ سيكون من الجيد إزالة التعليمات البرمجية المهملة من تصحيح الأخطاء. هل هذا يتصرف على نظامك؟

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

كراشش مع "تعليمات غير قانونية (الأساسية ملقاة)"

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

يعطي:

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

prokulski كيف قمت بتثبيت openblas؟ اي إصدار تستعمل؟ عندما تتحقق من مستودع github الخاص بهم ، يمكنك تحديد الإصدار الذي يجب أن يتصرف بهذه الطريقة.

تم تثبيت openblas تلقائيًا (كاعتماد على شيء ما). لقد حاولت إزالته وتثبيته مرة أخرى (عبر تثبيت apt) - لم يساعد

هذا لا يزال لا يجيب على السؤال حول رقم الإصدار.

قاموا بتغيير النظام حول كيفية اكتشاف المكتبة لنوع وحدة المعالجة المركزية. من الأفضل الاتصال بهم مباشرة لأن numpy يستخدم المكتبة فقط. انظر على سبيل المثال مشكلتي https://github.com/xianyi/OpenBLAS/issues/2067 كمرجع.

$ 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-dev ، والآن هو:

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

يمكنك محاولة تعيين OPENBLAS_CORETYPE على وحدة المعالجة المركزية للنظام المضيف. الرقم الذي تحصل عليه بـ pip install من PyPI يحتوي على OpenBLAS 0.3.7 ، والذي يجب أن يحتوي على إصلاح لهذا. إذا اخترت استخدام pip install ولم تكن تستخدم virtualenv ، فتأكد من استخدام pip install --upgrade --user numpy لتجنب التعارض مع نظام python.

لتحديد إصدار OpenBLAS ، يمكنك استخدام هذا الرمز ، والذي سيبلغ عن إصدار OpenBLAS 0.3.5 والإصدارات الأحدث

    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 يعطي الرمز الخاص بك "OpenBLAS get_config عاد b'OpenBLAS 0.3.7 DYNAMIC_ARCH NO_AFFINITY Haswell MAX_THREADS = 64"

لا يساعد إعداد OPENBLAS_CORETYPE على Haswell (أحرف صغيرة ، أو أحرف كبيرة ، أو أي شيء آخر) - لقد جربت هذا سابقًا.

أعتقد أن المشكلة تكمن في الجهاز الظاهري KVM واكتشاف وحدة المعالجة المركزية السيئة في blas. غريب ، أنه قبل بضعة أيام كان كل تفكير على ما يرام ...

أعتقد أن Haswell هي القيمة الخاطئة بالنسبة لك ، لكن البحث السريع في google لا يأتي بإجابات جيدة لاكتشاف وحدة المعالجة المركزية المضيفة مرة واحدة داخل جهاز افتراضي.

أعتقد أن Haswell هي القيمة الخاطئة بالنسبة لك ، لكن البحث السريع في google لا يأتي بإجابات جيدة لاكتشاف وحدة المعالجة المركزية المضيفة مرة واحدة داخل جهاز افتراضي.

نعم. سيكون Skylake أفضل (إذا رأيت معلومات وحدة المعالجة المركزية) ، ولكنه لا يساعد أيضًا. انا عالق.
https://github.com/numpy/numpy/milestone/69 يعطي الأمل ؛)

جرب هذه كمحددات OpenBLAS kernel ، هل يعمل أي منها؟

export OPENBLAS_CORETYPE=prescott

و دانينغتون ، بنرين ، كور 2 ، نيهاليم ، ساندي بريدج

الكل سوف يموت.

هل تسمح KVM بتعيين نوع وحدة المعالجة المركزية؟ هل تم تحديثه مؤخرا؟

فقط للتأكد من أن الإعداد الأساسي يعمل بشكل صحيح ، أضف:

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

انا حصلت:

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

قال الدعم أنه لم يتغير شيء مع المعالجات آخر مرة.

لقد قمت أيضًا بسحب وبدء تشغيل دفتر docker image jupyter / tensorflow -ebook على هذا الجهاز وفشل مثال np.dot () الذي تم تشغيله في Jupyter بنفس الطريقة. لذا ، أعتقد أن هذه مشكلة في الأجهزة؟

prokulski إذا كنت تستخدم الكود من التعليق أعلاه ، فهل تحصل على الناتج Core: Prescott قبل التعليمات غير القانونية؟

نظرًا لأن هذا يبدو خاصًا بجهازك ، فأنا أقوم بإزالته من 1.18 نقطة رئيسية.

لدي "Core: Presscot" ثم مصفوفة 2x2 ولا توجد تعليمات غير قانونية.

بدون سطر "تصدير OPENBLAS_CORETYPE = prescott" هناك تعليمات غير قانونية ولا توجد مصفوفة.

يبدو بطريقة ما أن روتين اكتشاف وحدة المعالجة المركزية الخاصة بك داخل OpenBLAS مرتبك بواسطة KVM. هل يمكنك الإبلاغ عن ذلك في أداة تعقب المشكلات OpenBLAS حتى يتمكنوا من معرفة ما يحدث؟

ربما يمكنك مساعدة OpenBLAS من خلال التنقل بين جميع الأنواع الأساسية المذكورة أعلاه ، والعثور على الأنواع التي تتعطل.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات

القضايا ذات الصلة

Foadsf picture Foadsf  ·  3تعليقات

keithbriggs picture keithbriggs  ·  3تعليقات

dmvianna picture dmvianna  ·  4تعليقات

toddrjen picture toddrjen  ·  4تعليقات

inducer picture inducer  ·  3تعليقات