Numpy: numpy1.19.0を䜿甚したAzureCIWindowsむンスタンスでの゚ラヌ

䜜成日 2020幎07月20日  Â·  53コメント  Â·  ゜ヌス: numpy/numpy

こんにちは、
最近、Windowsむンスタンス vmImage: 'windows-2019' を䜿甚しおAzureパむプラむンでプロゞェクトのテストを実行するずきに問題が発生し始めたした。 もう少し深く掘り䞋げたすこの䌚話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buildId = 46view = logsj = 011e1ec8-6569-5e69-4f06-baf193d1351e
numpy 1.19.0を䜿甚した同じコミットでのビルドは倱敗したす https //dev.azure.com/matteoravasi/PyLops/_build/resultsbuildId = 43view = 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のセットアップで䜕かが倉曎された可胜性がありたす。

このリンクには、問題が厄介である可胜性があるこずを発芋したMicrosoft開発者ずの話し合いがありたす https 

残念ながら、ロヌカルのWindowsマシンでプロゞェクトをビルドできる人は誰もいたせん:(

次に、再珟するための明確な䞀連の手順が必芁になりたす

azure-pipelines.ymlは機胜したすか

これが私たちが䜿甚しおいるものですhttps://github.com/equinor/pylops/blob/master/azure-pipelines.yml珟時点でコメントアりトされおいたす... Python3.7を䜿甚したかなり暙準的なセットアップであるこずがわかりたす、requirements-dev.txtファむルhttps://github.com/equinor/pylops/blob/master/requirements-dev.txtに䟝存関係をむンストヌルしおから、テストを実行したす。

すでに述べたように、これをコメントアりトしおnumpy 1.18.5を匷制的に実行するず、新しい1.19が壊れたように芋えたす

Azureで実行されおいるむメヌゞのWindowsバヌゞョンのメゞャヌバヌゞョンずマむナヌバヌゞョンは䜕ですか ぀たり、 systeminfoはOS Version䜕を出力したすか

Azureパむプラむンで䜿甚されおいるAzureVMの詳现に぀いおは、 https  tabs = yamlおよびぞのリンクを参照しおhttps://github.com/actions/virtual-environments/blob/master/images/win/Windows2019-Readme.md

Azureパむプラむンでsysteminfoを実行する方法がわかりたせん、䜕か提案はありたすか

コマンドラむンから実行され、出力をタヌミナルにダンプするため、コマンドずしお実行に远加できたす。

CIで実行されるPRでこれを実行しお、その内容を確認できたす。 WindowsずpipNumPyの19041ビルドに問題があったので、私は尋ねおいたす。

答えは2番目のリンクにありたした

OSバヌゞョン10.0.17763ビルド1282

だから私の考えは実を結ばない。

Windows甚の最新のピップホむヌルにいく぀かの問題があるこずを知っおいるずあなたは蚀いたす、それはおそらくそれに関連しおいたすか

これは実際にはおそらく19041幎に導入されたWindowsのバグです。しかし、あなたははるかに叀いバヌゞョンを䜿甚しおいるので、これは問題ではありたせん。

Conda NumPyには圱響せず、WindowsずOpenBlasに問題があるず思われるため、PipNumPyのみに圱響したす。

なるほど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䞡方に、アクセス違反がありたす。

たぶん、新しいOpenBLAS0.3.10を䜿甚するnumpyHEADも倱敗するこずを確認する䟡倀がありたす。 たたは倚分あなたはすでにしたしたか

@mattipいいえ私はただこれを詊しおいたせん。 pip install git+https://github.com/numpy/numpyマスタヌから盎接でこがこをむンストヌルするこずを意味したすか 私はそれを詊しおみるこずができたす:)

そしおあなたの質問に@bashtage 倱敗したテストはnumbaをたったく䜿甚したすかnumba 0.50は、䜿甚できない組み蟌み関数を誀っお䜿甚するWindowsの䞀郚のバヌゞョンにバグがありたす。これにより、別のプロゞェクトでクラッシュが発生したした。電子メヌルですが、このスレッドでは衚瀺されないようです...クラッシュするテストでは、 numpyずpyfftw䞡方の操䜜が䜿甚されたす。 この突然のメッセヌゞでクラッシュするため、実際にクラッシュする行を特定するのは困難です。 しかし、 pyfftwはnumbaをたったく䜿甚しおいないず思いたす。少なくずも、䟝存関係の1぀ではありたせん。

NumPyのHEADをGitHubリポゞトリから盎接むンストヌルしようずしたしたが、Windowsビルドは完了するたで実行されたす-突然のクラッシュはありたせん https 

興味深いこずに、䟝存関係ずしおNumPyを持っおいる䞀郚のラむブラリは正しくむンストヌルされおいないようで理由はわかりたせん、䞀郚のテストはすべおのOSで倱敗したすが、少なくずも以前のように完党にクラッシュするわけではありたせん...

毎晩䜿甚しおも゚ラヌはありたせん

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ずdimensionsを知っおいればおそらく十分でしょう。

さお、乗算されおいる行列を曞き蟌み、アヌティファクトをアップロヌドするnumpy + scipy + matplotlib + pytestおよびdepsだけを䜿甚しお、倱敗したテストを1回実行するだけで再珟できたす。これは、アヌティファクトタブです。

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は、ここで実行されたコヌドの最埌から2番目の行で倱敗するため、save-load-round-tripedデヌタを䜿甚しお再珟できたす。

    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'しお、圹立぀かどうかを確認しようずしおいたす。

では、実際にはここに2぀の異なるバグがあるのでしょうか。

たた、 OPENBLAS_VERBOSE: 2蚭定しおも効果がないようですが、理由はわかりたせん

詳现を蚭定した埌、コマンドを远加したす

python -c "import numpy"

Pytestはおそらくこれを食べおいるず思いたす。

朚、2020幎7月23日には、午前19時04゚リック・ラヌ゜ンの[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で゚ラヌを報告したしたが、マスタヌで修正される可胜性があるこずが瀺唆されたしたください。 ただし、これをテストするための最良の方法はわかりたせん。

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

ただむンストヌルしおいない堎合は、 choco install -y mingwを䜿甚しおgfortranをむンストヌルする必芁がありたす

...これはWindows甚です

ただむンストヌルしおいない堎合は、choco install -ymingwを䜿甚しおgfortranをむンストヌルする必芁がありたす。

これは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が必芁です。 Azureマシンにはmingw64ビットがむンストヌルされおいたす。 32ビットの堎合、呌び出しは少し異なりたす。 たた、 -m32を蚭定する必芁がありたすただし、32ビットの堎合のみ。

NumPyのmasterブランチを䜿甚しおhttps://github.com/numpy/numpy/blob/master/azure-steps-windows.ymlのほずんどを逐語的にコピヌし、最初に゚ラヌを再珟したした。それはsegfaultです。

次に、 mattip/issue-16913切り替えたしたが、次のURLダりンロヌド゚ラヌ

https://anaconda.org/multibuild-wheels-staging/openblas-libs/v0.3.9-452-g349b722d/download/openblas-v0.3.9-452-g349b722d-win_amd64-gcc_7_1_0.zip

...次の堎所には64ビットWindows甚の32ビットOpenBLASがないようです。

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

タグを远加しお64ビットのOpenBLASを䜿甚できるず思いたすか

2぀があり、1぀はただ構築䞭です。 1時間以内に起動する必芁がありたす。

その間に私は远加したした

        NPY_USE_BLAS_ILP64: '1'
        OPENBLAS_SUFFIX: '64_'

そしおそれはうたく構築されたした。 セグメンテヌション違反はなくなりたした 念のため、䜕床か再実行したす。 32ビットのOpenBLASWin64ラむブラリが起動したら、遠慮なくpingを送信しおください。これらの行を簡単に削陀しお、再テストできたす。

完党なテストスむヌトを実行する倉曎:-)

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

32ビットのものが皌働しおいるように芋えたすが、それも機胜したす。

今すぐ完党なテストスむヌトを実行したす

f2py含む奇劙なテスト収集゚ラヌが発生したす

https://dev.azure.com/mne-tools/mne-python/_build/results?buildId=8372&view=logs&j=a846d25a-e32c-5640-1b53-e815fab94407&t=14a4ea33-5055-5caa-db84-413553e060fb

この他の問題にこれ以䞊時間を無駄にしないでください-私は来週たで埅っお、うたくいけばBLASを持っおいる毎週テストするこずができたす。

マスタヌブランチにコミットをプッシュするこずで、い぀でもナむトリヌビルドを実行できるこずに泚意しおください。

OK、新しいものが衚瀺されるたで埅っお、Windows 102004の問題が修正されおいるかどうかを確認したす。

@bashtageこれに関する曎新はありたすか

OpenBLASは、Windowsの最新リリヌスではただ壊れおいたす。 少なくずも私にずっおは、ツヌルチェヌンが混圚しおいるため、適切なデバッグ情報を取埗するこずさえ非垞に非暙準です。

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡