Numpy: 带有numpy 1.19.0的Azure CI(Windows实例)上的错误

创建于 2020-07-20  ·  53评论  ·  资料来源: numpy/numpy

你好,
最近,在使用Windows实例( vmImage: 'windows-2019' )在Azure Pipelines上为我的项目运行测试时,我开始遇到问题。 我们进行了更深入的挖掘(请参阅此对话https://developercommunity.visualstudio.com/content/problem/1102472/azure-pipeline-error-with-windows-vm.html?childToView=1119179#comment-1119179)问题出在我们安装numpy 1.19.0而不是numpy 1.8.5 -我可以看到numpy 1.19.0是在6月20日放到PyPI上的,这大约是我们的测试开始失败的时候。 像以前成功的构建一样,强制环境安装numpy 1.8.5似乎可以解决问题。

我只想报告此事,因为我认为这是其他人可能已经开始注意到的事情(但是很难确定numpy是问题所在……或者至少看起来是这样)。

期待您的回音,
并且很乐意对我的azure管道设置进行任何更改,以帮助解决问题。

错误信息:

此版本可以在numpy 1.18.5上正常工作: https ://dev.azure.com/matteoravasi/PyLops/_build/results = 46 = logs = 011e1ec8-6569-5e69-4f06-baf193d1351e
使用numpy 1.19.0在同一提交上进行构建失败: https ://dev.azure.com/matteoravasi/PyLops/_build/results = 43 = results

该错误非常神秘,我在上面解释的与我有关。 无论如何,这里:

2020-07-06T13:56:01.6879900Z Windows fatal exception: Current thread 0xaccess violation00001798
2020-07-06T13:56:01.6880280Z 
2020-07-06T13:56:01.6880589Z  (most recent call first):
2020-07-06T13:56:01.6880973Z   File "<__array_function__ internals>", line 6 in vdot
2020-07-06T13:56:05.3412520Z ##[debug]Exit code: -1073741819

所有53条评论

它会持续失败还是偶尔失败一次? 您是否有Windows开发人员可以尝试在本地计算机上构建项目?

你好
谢谢!

它多次连续失败..那时我想到要问Azure开发人员(我最初的猜测是他们的VM设置可能有所更改)。

该链接与我与一位发现该问题的微软开发人员进行了讨论: https :

不幸的是,我没有任何人可以尝试在本地Windows计算机上构建项目:(

然后,我们将需要一套清晰的步骤来重现

azure-pipelines.yml是否可以工作?

这是我们目前使用的注释(https://github.com/equinor/pylops/blob/master/azure-pipelines.yml)...您可以看到它是使用Python 3.7的相当标准的设置,将依赖项安装在requirements-dev.txt文件(https://github.com/equinor/pylops/blob/master/requirements-dev.txt)中,然后运行测试。

正如我已经提到的,如果我注释掉并强制numpy 1.18.5一切正常运行,似乎是要打破的新版本1.19

在Azure上运行的映像的Windows主版本和次版本是什么? 即, OS Version systeminfo打印什么?

我可以在此处找到Azure管道中使用的Azure VM的详细信息: https : &tabs=yaml以及指向的链接安装的软件https://github.com/actions/virtual-environments/blob/master/images/win/Windows2019-Readme.md

我不确定如何在Azure管道上运行systeminfo ,有什么建议吗?

它从命令行运行,并将输出转储到终端,因此您可以将其作为命令添加到运行中。

您可以在CI上运行的PR中执行此操作,以查看其内容。 我问,因为Windows和pip NumPy的19041版本存在问题。

答案在第二个链接中:

操作系统版本:10.0.17763 Build 1282

所以我的想法没有结果。

您说您知道Windows最新的pip wheel存在一些问题,可能与之相关吗?

它实际上是(可能是)19041年引入的Windows错误。但是您使用的版本要旧得多,所以这不是问题。

它不影响Conda NumPy,仅影响pip NumPy,因为这似乎与Windows和OpenBlas有关。

我知道了:)我收到一封电子邮件,指出1.9.1已发布。 我将尝试重新触发Azure管道,该管道现在将安装最新版本,并查看其是否有效,将告知您

OpenBlas中的错误。

这是一个再现示例:

import numpy as np
nr = 12000
v = np.random.randn(nr) + 1j * np.random.randn(nr)
np.vdot(v, v)
# also access violations
v @ v
# also access violations

无符号调试信息为:

Exception thrown at 0x0000000068DBB8F0 (libopenblas.NOIJJG62EMASZI6NYURL6JBKM4EVBGM7.gfortran-win_amd64.dll)
in python.exe: 0xC0000005: Access violation reading location 0x0000000000000000.

请注意,数组必须很大(10k传递,12k不需要)才能触发错误。

快速检查:

$env:OPENBLAS_VERBOSE=2
$env:OPENBLAS_CORETYPE=Prescott

通过但默认内核( Zen )以及HaswellSandybridge都具有访问冲突。

也许值得检查使用较新的OpenBLAS 0.3.10的numpy HEAD也失败。 也许您已经做到了?

@mattip不,我还没有尝试过。 您的意思是直接使用pip install git+https://github.com/numpy/numpy从主服务器安装颠簸? 我可以试试看:)

关于您的问题@bashtage (失败的测试是否完全使用numba?numba 0.50在某些版本的Windows中存在错误,其中错误地利用了不可用的内在函数。这导致我在另一个项目中崩溃。)电子邮件,但似乎无法在该线程中看到...崩溃的测试同时使用numpypyfftw操作。 由于它突然出现此消息而导致崩溃,因此很难说出它真正崩溃的位置。 但是我不认为pyfftw使用numba,至少它不是它们的依赖项之一

我刚刚尝试直接从GitHub存储库安装NumPy的HEAD,并且Windows构建运行到完成-没有突然崩溃: https ://dev.azure.com/matteoravasi/PyLops/_build/results?buildId=54&view=logs&j

有趣的是,有些将NumPy作为依赖项的库似乎无法正确安装(不确定原因),并且所有操作系统的某些测试都失败了,但至少这不是像以前一样完全崩溃...

使用每晚没有错误:

pip install -i https://pypi.anaconda.org/scipy-wheels-nightly/simple numpy

我刚刚尝试直接从GitHub存储库安装NumPy的HEAD

除非您明确将其内置,否则它没有OpenBLAS。默认情况下,您会得到一个带有pip install git+https://github.com/numpy/numpy.git的慢速通用BLAS。

看起来我们可能想将OpenBLAS升级为1.19.2,因此进行标记。

我想我在Azure上的最新--pre构建(numpy-1.20.0.dev0 + a0028bc)可能遇到相同的问题:

Current thread 0x000003d0 (most recent call first):
  File "<__array_function__ internals>", line 5 in dot
  File "D:\a\1\s\mne\minimum_norm\inverse.py", line 732 in _assemble_kernel

有问题的行是:

K = np.dot(eigen_leads, trans)

如果有帮助,我可以尝试将阵列保存到磁盘并通过Azure工件将其取出。

看起来像。 您使用的是与我正常工作相同的前提。

您可能要添加

$env:OPENBLAS_VERBOSE=2

要么

set OPENBLAS_VERBOSE=2

您的模板,以了解正在使用哪个内核。

如果有帮助,我可以尝试将阵列保存到磁盘并通过Azure工件将其取出。

知道dtypes和维度可能就足够了。

好的,仅使用numpy + scipy + matplotlib + pytest(和deps)仅通过一次失败的测试即可运行,它写入了要相乘的矩阵,然后上传了工件,这是工件选项卡:

https://dev.azure.com/mne-tools/mne-python/_build/results?buildId=8330&view=artifacts&type=publishedArtifacts

最后的.npz应该是失败的(27 MB)。 在Linux上,它在本地很不错:

>>> import numpy as np
>>> data = np.load('1595525222.9485037.npz')
>>> np.dot(data['a'], data['b']).shape
(23784, 305)
>>> data['a'].shape, data['a'].dtype, data['b'].shape, data['b'].dtype
((23784, 305), dtype('>f4'), (305, 305), dtype('float64'))
>>> data['a'].flags, data['b'].flags
(  C_CONTIGUOUS : False
  F_CONTIGUOUS : True
  OWNDATA : False
  WRITEABLE : True
  ALIGNED : True
  WRITEBACKIFCOPY : False
  UPDATEIFCOPY : False
,   C_CONTIGUOUS : True
  F_CONTIGUOUS : False
  OWNDATA : True
  WRITEABLE : True
  ALIGNED : True
  WRITEBACKIFCOPY : False
  UPDATEIFCOPY : False
)

正在努力使OPENBLAS_VERBOSE工作,但似乎每次我使用pytest -s都不捕获它实际通过的输出时。 不过,这可能只是偶然,我们将看到...

有趣的是,我现在也可以在上面的复制器中看到它。

如果将OPENBLAS_CORETYPE为Prescott或Nehalem,则看不到它。 我确实在Zen,Sandybridge和Haswell身上看到了它。

我无法使用Windows上npz中的数据在本地复制。

我无法使用Windows上npz中的数据在本地复制。

在Azure上的FWIW上,我可以使用保存-加载-往返的数据重现它,因为现在它在执行的代码中倒数第二行失败:

    import mne, os.path as op, time
    fname = op.join(op.dirname(mne.__file__), '..', 'bad', f'{time.time()}.npz')
    np.savez_compressed(fname, a=eigen_leads, b=trans)
    print(eigen_leads.flags)
    print(trans.flags)
    data = np.load(fname)
    np.dot(data['a'], data['b'])  # <-- fails here
    K = np.dot(eigen_leads, trans)   # <-- used to fail here before I added the above lines

因此,由于np.savez / np.load步骤,在Azure端至少没有丢失。

我正在尝试使用OPENBLAS_CORETYPE: 'nehalem'运行,以查看是否有帮助。

因此,也许实际上这里有两个不同的错误?

另外,设置OPENBLAS_VERBOSE: 2似乎没有任何效果,不确定为什么

设置详细之后,添加命令

python -c“ import numpy”

我猜Pytest可能正在吃这个。

2020年7月23日星期四,19:04埃里克·拉森(Eric Larson) [email protected]写道:

另外,设置OPENBLAS_VERBOSE:2似乎没有任何效果,不是
确定为什么

-
您收到此邮件是因为有人提到您。
直接回复此电子邮件,在GitHub上查看
https://github.com/numpy/numpy/issues/16913#issuecomment-663151960 ,或
退订
https://github.com/notifications/unsubscribe-auth/ABKTSRNS5QRT6CC3ZQ6DQYDR5B3TTANCNFSM4PCRVE6A

此命令在本地甚至不会给我任何详细的输出:

OPENBLAS_VERBOSE=2 python -c "import numpy as np, glob; data = np.load(glob.glob('bad/*.npz')[0]); a, b = data['a'], data['b']; print(np.dot(a, b).shape)"

但是也许我的系统OpenBLAS太旧了。 我将提交对Azure的提交,以使其在失败后自行运行。

看起来像Azure上的OPENBLAS_VERBOSE说“ Core:Haswell”。 我不知道那是否正确。

我在https://github.com/xianyi/OpenBLAS/issues/2732中报告了该错误,他们建议可以在master中修复该错误,请参阅https://github.com/xianyi/OpenBLAS/issues/2728 。 不过,不知道最好的测试方法。

@mattip我们是否知道MacPython / openblas-libs#35已将其关闭? 我们是否不必等到下一个星期结束?

@charris我认为此问题仍未解决,可能需要

有复制者的人可以尝试用此提交构建numpy以获得最新的OpenBLAS二进制文件吗? 所以像(错别字的人)

git add remote mattip https://github.com/mattip/numpy.git
git fetch mattip  issue-16913
git checkout issue-16913
python tools/openblas_support.py
# copy the output openblas.a to a local directory and make sure numpy uses it
mkdir openblas
copy /path/to/openblas.a openblas
set OPENBLAS=openblas
python -c "from tools import openblas_support; openblas_support.make_init('numpy')"
pip install --no-build-isolation --no-use-pep517 .

如果尚未安装gfortran,则应使用choco install -y mingw

...这是用于Windows

如果尚未安装gfortran和choco install -y mingw

仅32位需要吗?

https://github.com/numpy/numpy/blob/master/azure-steps-windows.yml#L29 -L31

一旦弄清了/path/to/openblas.a是什么-我大概会通过运行tools/openblas_support.py (?),尝试使用上面的choco install -y mingw建议。

是的, python tools/openblas_support.py打印出在哪里可以找到openblas.a

您需要gfortran。 天蓝色的计算机已安装mingw 64位。 如果您使用的是32位,则调用会有所不同。 您还需要设置-m32 (但仅适用于32位)。

...在以下情况下,似乎没有适用于64位Windows的32位OpenBLAS:

https://anaconda.org/multibuild-wheels-staging/openblas-libs/files

我想我可以添加标签以使其使用64位OpenBLAS?

2个在那里,还有1个正在建造中。 应该在一小时之内起来。

同时,我添加了:

        NPY_USE_BLAS_ILP64: '1'
        OPENBLAS_SUFFIX: '64_'

它建立得很好。 不再存在段错误! 为确保确定,我将重新运行几次。 当32位OpenBLAS Win64库打开时,可以随意ping我,我可以轻松删除这些行并重新测试。

您运行完整测试套件的任何更改:-)

python -c "import numpy; numpy.test('full')"

看起来32位的已经启动了,并且也可以使用

我现在将运行完整的测试套件

您不应该在其他问题上浪费更多时间-我可以等到下周再测试每周一次,希望它将有BLAS。

请注意,通过将提交推送到master分支,我们可以随时运行夜间构建。

好吧,我将等到看到一个新的,看看Windows 10 2004的问题是否已解决。

@bashtage对此有任何更新吗?

OpenBLAS在最新版本的Windows上仍然无法使用。 至少由于我与工具链的混合,甚至获得良好的调试信息也是非常不规范的。

此页面是否有帮助?
0 / 5 - 0 等级