你好,
最近,在使用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
它会持续失败还是偶尔失败一次? 您是否有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
)以及Haswell
和Sandybridge
都具有访问冲突。
也许值得检查使用较新的OpenBLAS 0.3.10的numpy HEAD也失败。 也许您已经做到了?
@mattip不,我还没有尝试过。 您的意思是直接使用pip install git+https://github.com/numpy/numpy
从主服务器安装颠簸? 我可以试试看:)
关于您的问题@bashtage (失败的测试是否完全使用numba?numba 0.50在某些版本的Windows中存在错误,其中错误地利用了不可用的内在函数。这导致我在另一个项目中崩溃。)电子邮件,但似乎无法在该线程中看到...崩溃的测试同时使用numpy
和pyfftw
操作。 由于它突然出现此消息而导致崩溃,因此很难说出它真正崩溃的位置。 但是我不认为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)仅通过一次失败的测试即可运行,它写入了要相乘的矩阵,然后上传了工件,这是工件选项卡:
最后的.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位)。
我只是使用NumPy的master
分支逐字复制了大部分https://github.com/numpy/numpy/blob/master/azure-steps-windows.yml以首先重现该错误,并成功地它是段错误的。
然后我切换到mattip/issue-16913
,它失败并出现URL下载错误:
...在以下情况下,似乎没有适用于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上仍然无法使用。 至少由于我与工具链的混合,甚至获得良好的调试信息也是非常不规范的。