Numpy: Windows-Radpaket (.whl) auf Pypi

Erstellt am 22. Jan. 2015  Â·  267Kommentare  Â·  Quelle: numpy/numpy

Bitte erstellen Sie Windows-Radpakete und stellen Sie diese auf Pypi.

Derzeit ist es möglich, Windows-Radpakete fĂŒr numpy hier herunterzuladen: http://www.lfd.uci.edu/~gohlke/pythonlibs/#numpy

Es wĂ€re toll, wenn die RĂ€der direkt auf dem Pypi-Server https://pypi.python.org/pypi/ verfĂŒgbar wĂ€ren, damit sie mit pip installiert werden können.

distribution

Hilfreichster Kommentar

oh ja, wir mĂŒssen möglicherweise herausfinden, wie wir unsere Veröffentlichungsverfahren hier aktualisieren können ... IIUC Die Benutzererfahrung im Moment ist, dass, sobald die Quellversion 1.11 hochgeladen wurde, alle Windows-Computer da draußen plötzlich von den Download-RĂ€dern wechselten (yay ), um zu versuchen, den Quellcode herunterzuladen und zu erstellen (boo). Ich denke, der "richtige" Weg, dies zu tun, besteht darin, dass wir, sobald die endgĂŒltige Veröffentlichung getaggt ist, alle BinĂ€rrĂ€der erstellen und hochladen, _bevor_ wir die sdist hochladen. So nervig das auch ist...

Alle 267 Kommentare

Gut gesagt - und tatsĂ€chlich steckt hinter den Kulissen viel Arbeit von @carlkl , um dies zu ermöglichen. Ich glaube, wir sind jetzt fast da - @carlkl - wann wirst du an die Öffentlichkeit gehen, meinst du?

Zum Kontext: Der Grund dafĂŒr ist nicht trivial, dass die BinĂ€rdateien, die Sie verlinkt haben
abhÀngig von Intels proprietÀrer Laufzeit- und Mathematikbibliothek, die
erschwert ihre Neuverteilung.

Ich habe die neuesten OpenBLAS-basierten Numpy- und Scipy-RÀder auf Binstar bereitgestellt. Sie können sie installieren mit:

pip install -i https://pypi.binstar.org/carlkl/simple numpy
pip install -i https://pypi.binstar.org/carlkl/simple scipy

Dies funktioniert fĂŒr Python-2.7 und fĂŒr Python-3.4. Die RĂ€der sind als "experimentell" gekennzeichnet. RĂŒckmeldungen sind willkommen.

Wenn Sie umfassende Tests wĂŒnschen, sollten Sie dies an die Liste senden :-)

Am Do, 22. Januar 2015 um 20:54 Uhr schrieb carlkl [email protected] :

Ich habe die neuesten OpenBLAS-basierten Numpy- und Scipy-RĂ€der auf Binstar bereitgestellt.
Sie können sie installieren mit:

pip install -i https://pypi.binstar.org/carlkl/simple numpy
pip install -i https://pypi.binstar.org/carlkl/simple scipy

Dies funktioniert fĂŒr Python-2.7 und fĂŒr Python-3.4. Die RĂ€der sind gekennzeichnet als
'Experimental'. RĂŒckmeldungen sind willkommen.

—
Antworten Sie direkt auf diese E-Mail oder zeigen Sie sie auf GitHub an
https://github.com/numpy/numpy/issues/5479#issuecomment -71096693.

Nathaniel J. Smith
Postdoktorand - Informatik - University of Edinburgh
http://vorpus.org

fwiw Ich persönlich wĂŒrde gerne die GrĂ¶ĂŸe der Standard-Ganzzahl in win64 Ă€ndern, bevor wir tatsĂ€chlich offizielle BinĂ€rdateien bereitstellen, obwohl es bei meinem letzten Vorschlag auch Widerstand gab, möglicherweise auch bei Anaconda und anderen BinĂ€rdateien von Drittanbietern, ist es wahrscheinlich schon zu spĂ€t: (

Apropos openblas, jemand hat Lust auf Debugging, ich habe es satt (sieht aus wie der gleiche Fehler, der scipy mit openblas bricht):

test_einsum_sums_float64 (test_einsum.TestEinSum) ... ==31931== Invalid read of size 16
==31931==    at 0x7B28EB9: ddot_k_NEHALEM (in /usr/lib/libopenblasp-r0.2.10.so)
==31931==    by 0x6DBDA90: DOUBLE_dot (arraytypes.c.src:3127)
==31931==    by 0x6E93DEC: cblas_matrixproduct (cblasfuncs.c:528)
==31931==    by 0x6E6B7B3: PyArray_MatrixProduct2 (multiarraymodule.c:994)
==31931==    by 0x6E6E29B: array_matrixproduct (multiarraymodule.c:2276)

Die verwendete OpenBLAS-Version ist 0.2.12. Ich hatte noch keine nennenswerten Probleme mit dieser Version.

Die scipy-Fehler werden nach https://gist.github.com/carlkl/b05dc6055fd42eba8cc7 kopiert.

Nur 32-Bit-Fehler aufgrund von http://sourceforge.net/p/mingw-w64/bugs/367

======================================================================
FAIL: test_nan_outputs2 (test_umath.TestHypotSpecialValues)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "D:\tools\wp_279\python-2.7.9rc1\lib\site-packages\numpy\core\tests\test_umath.py", line 411, in test_nan_outputs2
    assert_hypot_isinf(np.nan, np.inf)
  File "D:\tools\wp_279\python-2.7.9rc1\lib\site-packages\numpy\core\tests\test_umath.py", line 402, in assert_hypot_isinf
    "hypot(%s, %s) is %s, not inf" % (x, y, ncu.hypot(x, y)))
  File "D:\tools\wp_279\python-2.7.9rc1\lib\site-packages\numpy\testing\utils.py", line 53, in assert_
    raise AssertionError(smsg)
AssertionError: hypot(nan, inf) is nan, not inf

======================================================================
FAIL: test_umath_complex.TestCabs.test_cabs_inf_nan(<ufunc 'absolute'>, inf, nan, inf)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "D:\tools\wp_279\python-2.7.9rc1\lib\site-packages\nose\case.py", line 197, in runTest
    self.test(*self.arg)
  File "D:\tools\wp_279\python-2.7.9rc1\lib\site-packages\numpy\core\tests\test_umath_complex.py", line 523, in check_real_value
    assert_equal(f(z1), x)
  File "D:\tools\wp_279\python-2.7.9rc1\lib\site-packages\numpy\testing\utils.py", line 275, in assert_equal
    return assert_array_equal(actual, desired, err_msg, verbose)
  File "D:\tools\wp_279\python-2.7.9rc1\lib\site-packages\numpy\testing\utils.py", line 739, in assert_array_equal
    verbose=verbose, header='Arrays are not equal')
  File "D:\tools\wp_279\python-2.7.9rc1\lib\site-packages\numpy\testing\utils.py", line 628, in assert_array_compare
    chk_same_position(x_isnan, y_isnan, hasval='nan')
  File "D:\tools\wp_279\python-2.7.9rc1\lib\site-packages\numpy\testing\utils.py", line 608, in chk_same_position
    raise AssertionError(msg)
AssertionError: 
Arrays are not equal

x and y nan location mismatch:
 x: array([ nan])
 y: array(inf)

======================================================================
FAIL: test_umath_complex.TestCabs.test_cabs_inf_nan(<ufunc 'absolute'>, -inf, nan, inf)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "D:\tools\wp_279\python-2.7.9rc1\lib\site-packages\nose\case.py", line 197, in runTest
    self.test(*self.arg)
  File "D:\tools\wp_279\python-2.7.9rc1\lib\site-packages\numpy\core\tests\test_umath_complex.py", line 523, in check_real_value
    assert_equal(f(z1), x)
  File "D:\tools\wp_279\python-2.7.9rc1\lib\site-packages\numpy\testing\utils.py", line 275, in assert_equal
    return assert_array_equal(actual, desired, err_msg, verbose)
  File "D:\tools\wp_279\python-2.7.9rc1\lib\site-packages\numpy\testing\utils.py", line 739, in assert_array_equal
    verbose=verbose, header='Arrays are not equal')
  File "D:\tools\wp_279\python-2.7.9rc1\lib\site-packages\numpy\testing\utils.py", line 628, in assert_array_compare
    chk_same_position(x_isnan, y_isnan, hasval='nan')
  File "D:\tools\wp_279\python-2.7.9rc1\lib\site-packages\numpy\testing\utils.py", line 608, in chk_same_position
    raise AssertionError(msg)
AssertionError: 
Arrays are not equal

x and y nan location mismatch:
 x: array([ nan])
 y: array(inf)

Ich bin nicht anderer Meinung, wenn es darum geht, die Win64-Ganzzahl zu Àndern, aber ich denke, das ist
ein separates Thema, das von den RÀdern entkoppelt werden sollte. Wenn das das wÀre
Das erste Mal, dass Win64-Numpy-Builds allgemein verfĂŒgbar wurden, dann wĂ€re es
Es macht Sinn, sie zu verlinken, aber zu diesem Zeitpunkt gibt es bereits Tonnen von Benutzern
jahrelang benutzen sie nur cgholke oder anaconda oder was auch immer. Also lass uns
das als eigenstÀndige Diskussion behandeln?

(Streng genommen ist es eine Backcompat-Pause, aber trotzdem scheint es vernĂŒnftig zu sein
dass wir es vielleicht schaffen, da es tatsÀchlich reduziert
InkompatibilitĂ€t zwischen Plattformen – der gesamte portable Code muss 64-Bit verarbeiten
dtype=int bereits.)

Am Do, 22. Januar 2015 um 20:59 Uhr, Julian Taylor [email protected]
schrieb:

fwiw Ich persönlich möchte die GrĂ¶ĂŸe der Standard-Ganzzahl Ă€ndern in
win64 bevor wir tatsÀchlich offizielle BinÀrdateien bereitstellen, obwohl es einige gab
Widerstand auch, als ich es das letzte Mal vorgeschlagen habe, möglicherweise auch mit Anakonda und
andere BinÀrdateien von Drittanbietern ist es wahrscheinlich schon zu spÀt :(

Apropos openblas, jemand hat Lust auf Debugging, ich habe es satt
(sieht aus wie der gleiche Fehler, der scipy mit openblas bricht):

test_einsum_sums_float64 (test_einsum.TestEinSum) ... ==31931== UngĂŒltiges Lesen der GrĂ¶ĂŸe 16
==31931== bei 0x7B28EB9: ddot_k_NEHALEM (in /usr/lib/libopenblasp-r0.2.10.so)
==31931== von 0x6DBDA90: DOUBLE_dot (arraytypes.c.src:3127)
==31931== von 0x6E93DEC: cblas_matrixproduct (cblasfuncs.c:528)
==31931== von 0x6E6B7B3: PyArray_MatrixProduct2 (multiarraymodule.c:994)
==31931== von 0x6E6E29B: array_matrixproduct (multiarraymodule.c:2276)

—
Antworten Sie direkt auf diese E-Mail oder zeigen Sie sie auf GitHub an
https://github.com/numpy/numpy/issues/5479#issuecomment -71097408.

Nathaniel J. Smith
Postdoktorand - Informatik - University of Edinburgh
http://vorpus.org

Das interessiert mich auch. Gibt es eine Möglichkeit, den Prozess zu unterstĂŒtzen?

OpenBLAS kann mit INTERFACE64=1 kompiliert werden und numpy kann fĂŒr einen ersten Versuch mit -fdefault-integer-8 kompiliert werden.

Nur ein Kopf hoch. Die Verwendung von 64-Bit-Ganzzahlen in Blas ist eine schreckliche Idee. Halten Sie an, bevor Sie auf dieser Straße zu weit kommen. Matlab und Julia, bevor ich das Problem behoben habe, haben dies getan, und es bricht jede Bibliothek von Drittanbietern, die konventionelle 32-Bit-Ganzzahlen annimmt, in blas.

Was wir in Julia in den letzten 5 Monaten gemacht haben, ist, alle Symbole in openblas umzubenennen, um ihnen ein _64 -Suffix fĂŒr die 64-Bit-int-Version hinzuzufĂŒgen, auf diese Weise können Sie lineare Algebra ausfĂŒhren auf wirklich großen Arrays, wenn Sie möchten, aber das Laden externer Bibliotheken in den gleichen Prozess wird nicht durch Namensspiegelung segfault und versuchen, dgemm mit der falschen ABI aufzurufen.

Hey Leute, gibt es ein Update zu den Wheels-Dateien, die fĂŒr Numpy zur VerfĂŒgung gestellt werden?

Ist mir jetzt nicht bewusst.
Am 25. Juni 2015, 4:27 Uhr, schrieb "guyverthree" [email protected] :

Hey Leute, gibt es ein Update zu den Wheels-Dateien, fĂŒr die verfĂŒgbar gemacht werden?
Numpy?

—
Antworten Sie direkt auf diese E-Mail oder zeigen Sie sie auf GitHub an
https://github.com/numpy/numpy/issues/5479#issuecomment -115215236.

@guyverthree Christoph Gohlke veröffentlicht seit einiger Zeit NumPy mit Intels MKL als RÀdern .

Siehe auch meinen Blog-Beitrag zu NumPy-RĂ€dern . Ich habe einige NumPy-RĂ€der in meiner Dropbox mit Carl Kleffners modifizierter mingw-w64-Toolchain und Zhang Xianyis OpenBLAS-Port von GotoBLAS erstellt . Olivier Grisel suchte Hilfe bei der Änderung des NumPy-Buildbots, um die gleichen Schritte zu wiederholen, die in dem OpenBLAS-Google-Gruppen-Thread verwendet wurden, in dem ich poste.

Meine neueste Version ist auf binstar.org verfĂŒgbar, obwohl ich nicht sicher bin, ob anaconda.org jetzt der neue bevorzugte Name ist.
Die LaufrĂ€der fĂŒr py-2.6 .. 3.4 (32/64bit) sind ca. 2 Monate alt:

  • numpy-1.9.2
  • scipy-0.15.1
  • scikit-image-0.11.2

build mit meinem https://bitbucket.org/carlkl/mingw-w64-for-python und einem mehr oder weniger aktuellen OpenBLAS.
pip installieren:

  • pip install -i https://pypi.binstar.org/carlkl/simple numpy
  • pip install -i https://pypi.binstar.org/carlkl/simple scipy

+1 @carlkl und ich wĂŒnschte, diese könnten auch zum NumPy-Build in der KĂ€sefabrik hinzugefĂŒgt werden.

+1 Das wĂŒrde ich auch gerne sehen.

IMHO: Es mĂŒssen mindestens drei Probleme gelöst werden, bevor diese Builds akzeptiert werden:

  • die mingwpy-Patches fĂŒr das numpy-Repository mĂŒssen neu erstellt werden
  • es gibt noch keinen Build-Mechanismus außer dem manuellen Erstellen
  • Viele Windows-Pakete von Drittanbietern (von C. Gohlke bereitgestellt) hĂ€ngen explizit von numpy-MKL ab, da die BinĂ€rdateien fest gegen MKL-DLLs gelinkt sind. Dies kann sich in Zukunft Ă€ndern, da scipy nun einen Mechanismus fĂŒr eine implizite AbhĂ€ngigkeit von der scipy BLAS/Lapack-Implementierung bereitstellt. Die Installation von (numpy-MKL & scipy-MKL) ODER (numpy-OpenBLAS & scipy-OpenBLAS) sollte also in Zukunft fĂŒr alle anderen Pakete ausreichen.

@carlkl : FWIW, ich mache mir keine Sorgen um die Pakete von @cgohlke - das wird sich von selbst lösen (genauso wie es jetzt keine grĂ¶ĂŸeren Probleme gibt, weil Leute versuchen, scipy-MKL mit anaconda numpy zu kombinieren). Und ich mache mir nicht einmal wirklich Sorgen, dass es einen ausgefallenen Build-Mechanismus gibt – ein manueller Build ist in Ordnung, solange es eine Textdatei gibt, die die Schritte dokumentiert.

Das Hauptproblem, ĂŒber das ich mir Sorgen mache, ist die Nachhaltigkeit: Wenn wir dieses Zeug nicht im Upstream bekommen, mĂŒssen wir jedes Mal, wenn eine neue Version von gcc / mingw-w64 / msvc kommt, erneut validieren und Patches durchfĂŒhren aus, und es wird wahrscheinlich nicht passieren. Wir wollen nicht in die Falle tappen, wo wir anfangen, Builds bereitzustellen, aber dann wird dies mit der Zeit immer mĂŒhsamer, da wir uns dafĂŒr mit einem verschrobenen alten Compiler befassen mĂŒssen.

Aus diesem Grund habe ich versucht, die Finanzierung aufzurunden, um dies zu unterstĂŒtzen. +1 sind großartig und alles, aber wenn jemand etwas Geld spenden möchte oder ein Unternehmen kennt, das daran interessiert sein könnte, gcc allgemein fĂŒr Python nutzbar zu machen Erweiterungen auf Windows, dann schick mir eine E-Mail :-) ([email protected])

Wenn Sie $$ nicht haben, aber trotzdem helfen möchten, dann wĂ€re eine Möglichkeit, Patches an mingw-w64 zu senden, um deren UnterstĂŒtzung fĂŒr transzendente Funktionen wie sin und cos zu verbessern. (Es stellt sich heraus, dass das MSVC ABI mit allen anderen nicht einverstanden ist, wie die x87-FPU-Einheit konfiguriert werden sollte, sodass die meisten mathematischen Funktionen der kostenlosen Software nicht richtig funktionieren.) Zum GlĂŒck gibt es gute, lizenzkompatible Implementierungen in Androids " bionic" libc , also erfordert dies keine mathematischen ZauberkĂŒnste oder tiefe Einblicke in ABI-Probleme - es ist nur eine hauptsĂ€chlich mechanische Angelegenheit, die relevanten Quelldateien zu finden, zu extrahieren und sie dann an der richtigen Stelle im mingw-w64-Baum abzulegen. Auch hierzu können wir bei Interesse gerne nĂ€here Angaben machen.

Sollte numfocus nicht so etwas finanzieren? Wenn nicht, können wir vielleicht zurĂŒckgehen und uns erneut bei der PSF bewerben.

Über wie viel Geld reden wir?

+1 bitte RĂ€der fĂŒr Windows auf PyPI veröffentlichen https://pypi.python.org/pypi/numpy

Wenn Sie pip install numpy auf einer standardmĂ€ĂŸigen Python-Windows-Installation versuchen, erhalten Sie die berĂŒchtigte nicht hilfreiche Fehlermeldung "Unable to find vcvarsall.bat".

+1 wĂŒrde Windows-Benutzern wirklich helfen.

Kann deswegen nicht mit https://github.com/glumpy/glumpy spielen. Was sind die manuellen Build-Schritte, damit Numpy unter Windows funktioniert? Sieht so aus, als ob der AppVeyor-Job vorhanden ist , daher sollte es kein Problem sein, Artefakte auf GitHub hochzuladen .

Im Moment ist es buchstĂ€blich unmöglich, eine schnelle, BSD-lizenzierte Version von numpy unter Windows zu erstellen. Wir arbeiten daran, das zu beheben, aber es ist eine technische EinschrĂ€nkung; +1 haben keine Auswirkungen. (Der Appveyor-Job baut auf Windows auf, verwendet jedoch eine nicht optimierte lineare Algebra-Fallback-Bibliothek, die fĂŒr die echte Arbeit nicht wirklich geeignet ist.) Bis wir das geklĂ€rt haben, empfehle ich, RĂ€der von der Website von Christoph Gohlke herunterzuladen oder Anaconda zu verwenden oder eine andere wissenschaftliche Python-Distribution .

@njsmith kannst du genauer sein? Am besten mit genauen Befehlen, die nicht funktionieren. Im Moment ist dieses Zeug nicht umsetzbar.

Ich denke, "unmöglich" ist zu stark - aber es gibt sicherlich noch keinen offensichtlichen allgemeinen Weg nach vorne. Ich habe hier eine Wiki-Seite zum aktuellen Stand eingerichtet: https://github.com/numpy/numpy/wiki/Whats-with-Windows-builds . Bitte zögern Sie nicht, alle zu bearbeiten / zu Àndern, die Ihnen wichtig sind.

@techtonik : Es gibt keine "exakten Befehle, die nicht funktionieren", das Problem ist, dass es keine Compiler gibt, die die Kombination von Funktionen haben, die wir brauchen. mingwpy.github.io dokumentiert den aktuellen Stand unserer BemĂŒhungen, einen solchen Compiler zu erstellen.

@matthew-brett nett. We can't use MSVC++ on its own to compile scipy because we need a Fortran compiler. Es ist fĂŒr Scipy, oder? Warum wird es fĂŒr numpy benötigt?

@njsmith http://mingwpy.github.io/issues.html ist eine großartige Initiative mit einer guten Analyse. Schade, dass Upstream (Python) es nie unterstĂŒtzen wird (befĂŒrwortet die blinde Verwendung von MSVS). Aber ich versuche mir ein klares Bild vom aktuellen Stand zu machen.

  1. Ist es ein Problem, "eine offene Toolchain fĂŒr offene Arbeit zu haben" oder kann MSVS wirklich keinen C-Teil von Numpy kompilieren?
  2. gibt es immer noch AbstĂŒrze mit mingw-kompilierten Erweiterungen?

Um den Fokus vorerst einzuschrĂ€nken, nehmen wir an, es handelt sich nur um Python 2.7 + Win32. Es ist keine Leistung erforderlich (ich möchte nur die Anwendung ausfĂŒhren, um sie dort zu testen), aber Benchmark-Daten ĂŒber diese Leistung sind erforderlich.

Was ist also die nĂ€chste Aktion, die fĂŒr diese Konfiguration durchgefĂŒhrt werden sollte, um Windows Wheel von PyPI verfĂŒgbar zu machen?

@techtonik , auf https://anaconda.org/carlkl/numpy und https://anaconda.org/carlkl/scipy sind jetzt vorlĂ€ufige Versionen von numpy und scipy Wheels verfĂŒgbar. Die Leistung ist fast so gut wie die +MKL-RĂ€der von Gohlke. Ich bin zu Hause nicht auf Segfaults mit meiner Windows-Box gestoßen.

Mehrere Probleme mit diesem Ansatz wurden diskutiert und werden jetzt unter http://mingwpy.github.io (in Vorbereitung) zusammengefasst. Die Kombination der mingw-w64-basierten Toolchain namens _mingwpy_ und OpenBLAS ist der richtige Weg fĂŒr die Windows-Plattform.

_mingwpy_ hat eine spezielle Konfiguration, die im Vergleich zu den bekanntesten mingw-w64-basierten Toolchains, dh _mingw-builds_, _tdm_ ...

All dies und mehr wird unter https://github.com/mingwpy/mingwpy.github.io erklĂ€rt. FĂŒhlen Sie sich frei, dort Themen oder PRs zu eröffnen.

@techtonik : Ich denke, das ist ein ernsthaftes MissverstĂ€ndnis / eine falsche Darstellung der Position von Upstream python.org. Ich wĂŒrde sagen, dass sie sich weigern, die Aufspaltung der Windows-CPython-UnterstĂŒtzung in mehrere inkompatible ABIs zu fördern (und da stimme ich ihnen zu). Steve Dower, der die offiziellen Upstream-Windows-Builds verwaltet, hat uns geholfen herauszufinden, wie wir mingwpy mit diesen Builds kompatibel machen können.

IMO ist die Voraussetzung fĂŒr das Anbringen von Numpy-RĂ€dern auf Pypi, dass sie (a) leistungsstark, (b) wartbar, (c) entsprechend lizenziert sein sollten. Wenn Sie möchten, dass das Projekt andere Kriterien anwendet (dh dass wir uns bemĂŒhen sollten, RĂ€der mit schrecklicher Leistung bereitzustellen), dann besteht der nĂ€chste Schritt darin, eine E-Mail an die numpy-Mailingliste zu senden, in der Sie darauf hinweisen, dass Ihre Kriterien besser sind.

MSVS kann numpy selbst erstellen, aber keine der entsprechend lizenzierten hochwertigen BLAS-Implementierungen. Upstream mingw-w64 kann numpy + BLAS erstellen (mit Patches), aber das Ergebnis stĂŒrzt ab, wenn Sie versuchen, es mit Upstream-CPython zu verwenden. Carls mingwpy-Toolchain kann numpy + BLAS erstellen (mit Patches), und das Ergebnis funktioniert bei einigen Python-Versionen (aber nicht 3.5), aber die Toolchain ist in ihrem aktuellen Zustand fragil und nicht zu warten; buchstĂ€blich niemand außer Carl weiß, wie es gebaut wurde oder konnte es nachbauen. Niemand im numpy-Projekt ist bereit, sich dazu zu verpflichten, "offizielle Builds" mit einer Toolchain mit diesen EinschrĂ€nkungen bereitzustellen, daher konzentrieren wir uns darauf, diese zu beheben.

Es gibt mehrere trivial verfĂŒgbare Quellen fĂŒr hochwertige Numpy-Builds unter Windows. Ich bin wirklich neugierig: Warum bestehen Sie so darauf, dass wir einige Builds von geringer QualitĂ€t erstellen, nur damit sie auf PyPI sind?

@njsmith Ich wollte nur sagen, dass mein Anwendungsfall (der, wie ich zugebe, in keiner Weise eine Investition von Entwicklerressourcen rechtfertigen wĂŒrde) darin besteht, ein sehr einfaches Paket auf PyPI zu verteilen, das von matplotlib abhĂ€ngt, was wiederum hĂ€ngt von numpy ab.

FĂŒr meinen Anwendungsfall ist die Leistung kein Problem, aber in der Lage zu sein, einen Windows-Benutzer einfach pip install ____ meines Pakets zu haben, das matplotlib , numpy usw. rekursiv installiert, ist viel einfacher erklĂ€ren, als sie auf URLs zu verweisen, die auch installiert werden sollen, insbesondere fĂŒr Benutzer, die das Python-Build-Ökosystem nicht verstehen. Es dient also hauptsĂ€chlich einer Vereinfachung der Installationsanleitung.

Nochmals, ich versuche nicht, meinen Fall als Rechtfertigung zu verwenden, sondern wollte nur mitteilen, wie Sie neugierig waren.

@johnthagen : Oh, klar, keine Sorge! Ich verstehe völlig, warum dies im Allgemeinen wĂŒnschenswert ist; Wenn ich in diesen Kommentaren mĂŒrrisch rĂŒberkomme, liegt das genau daran, dass ich und andere im letzten Jahr viel Zeit damit verbracht haben, das Problem zu beheben :-). Ich habe @techtonik nur speziell gefragt, weil es irgendwie so klang, als ob sie sagten "Ich möchte nur eine kleine Anwendung ausprobieren, also ist mir die Leistung egal", aber wenn sie nur eine kleine Anwendung ausprobieren möchten, tue ich es nicht wissen, warum sie sich fĂŒr den PyPI-Teil interessieren :-)

(Es ist wichtig zu bedenken, dass jedes Rad, das wir auf pypi installieren, sofort von Zehntausenden von Menschen verwendet wird, von denen die meisten diesen Thread nicht lesen. Ich denke also, wir sind verpflichtet, sicherzustellen, dass was auch immer die wir aufstellen, wird in der Tat fĂŒr eine Vielzahl von AnwendungsfĂ€llen breit einsetzbar sein.)

Ich denke, es wĂ€re im Wesentlichen trivial, mit ATLAS 32-Bit-Numpy-RĂ€der fĂŒr Python 2.7 auszuliefern. Sie mĂŒssten wahrscheinlich SSE2 sein, also ohne SSE-Anweisungen abstĂŒrzen, aber das wĂŒrde nur einen sehr kleinen Teil der Benutzer betreffen. DafĂŒr könnten wir unsere aktuelle Release-Toolchain verwenden. Denken Sie daran, dass dies bedeuten wĂŒrde, dass pip ein binĂ€res Rad fĂŒr 32-Bit liefern wĂŒrde, aber auf die Quellinstallation fĂŒr 64-Bit zurĂŒckgreifen wĂŒrde. WĂ€re das nĂŒtzlich?

@njsmith Danke fĂŒr die Info! SchĂ€tze all deine harte Arbeit :)

Ich denke, es wĂ€re im Wesentlichen trivial, mit ATLAS 32-Bit-Numpy-RĂ€der fĂŒr Python 2.7 auszuliefern. Sie mĂŒssten wahrscheinlich SSE2 sein, also ohne SSE-Anweisungen abstĂŒrzen, aber das wĂŒrde nur einen sehr kleinen Teil der Benutzer betreffen. DafĂŒr könnten wir unsere aktuelle Release-Toolchain verwenden. Denken Sie daran, dass dies bedeuten wĂŒrde, dass pip ein binĂ€res Rad fĂŒr 32-Bit liefern wĂŒrde, aber auf die Quellinstallation fĂŒr 64-Bit zurĂŒckgreifen wĂŒrde. WĂ€re das nĂŒtzlich?

@matthew-brett das aktuelle numpy-vendor-Setup ist defekt, es gibt einen Segfault in fromfile . Die Handhabung von Datei-Handles ist irgendwie durcheinander, und wir sind uns nicht sicher, ob dies an einer Änderung der Wine-Version, der Ubuntu-Version oder (unwahrscheinlich) einer Änderung in numpy selbst liegt. Ich wĂŒrde sagen, dass es Zeitverschwendung ist, mehr Zeit damit zu verbringen - diese Zeit in mingwpy zu investieren ist viel produktiver.

Ich habe NumPy 1.10.4 sowohl mit OpenBLAS (Int32 Windows 64, v0.2.15 vorkompilierte BinĂ€rdatei) als auch mit MKL (mit einer Community-Lizenz auf MKL, dh kostenlose Verteilung) kompiliert. Aber... Ich kann SciPy nicht kompilieren - anscheinend sucht ein kleiner Teil nach dem gfortran-Compiler "Fortan-Compiler nicht gefunden", wenn jemand eine Idee hat, wie man dieses Problem beheben kann. Ich verwende ifort.exe, da Ananconda diese Builds als direkte Plug-Ins unterstĂŒtzt. Kompiliert fĂŒr Python 3.5 mit Microsoft Visual Studio Community 2015, wenn mir jemand helfen kann, herauszufinden, wie man dies fĂŒr die Verteilung verpacken kann .... dann werde ich auf github oder anaconda's Website hochladen. Bin dankbar.

@mrslezak : Das Beste, was Sie wahrscheinlich tun können, ist, auf der Mailingliste der scipy-Entwickler zu posten oder einen neuen Fehler auf scipy zu öffnen, anstatt auf zufÀllig vorhandene Fehler zu posten :-)

Ich bin wirklich neugierig: Warum bestehen Sie so darauf, dass wir einige Builds von geringer QualitÀt erstellen, nur damit sie auf PyPI sind?

Nur weil ich es satt habe, Yaks zu rasieren. Ich weiß, dass die Leute Leistung wollen, und es ist gut, dass jemand Ressourcen hat, aber fĂŒr mich persönlich ist die KomplexitĂ€t dieser Aufgabe enorm, daher kann ich nur hoffen, dass Sie dies schaffen, aber fĂŒr mich das kann nie passieren, oder es kann in zwei oder drei Jahren passieren, in denen Menschen weiterhin gegen WĂ€nde stoßen und Zeit in Stunden vergeuden, proportional zu den Downloads aller Windows-BinĂ€rdateien von PyPI, die die Installation von NumPy als direkte oder indirekte AbhĂ€ngigkeit erfordern.

Puh. Wahrscheinlich der lÀngste englische Satz, den ich in meinem ganzen Leben geschrieben habe. =)

@techtonik - Ich teile deine Frustration, ich denke, viele von uns sind deswegen frustriert.

@carlkl - Ich wĂŒrde mich ĂŒber Ihr Feedback hier freuen.

Es besteht eindeutig ein starker Druck auf uns, ein stumpfes Windows-Rad aufzustellen. Hier ist eine Liste der am hĂ€ufigsten heruntergeladenen RĂ€der fĂŒr jede Plattform von vor ein paar Wochen: https://gist.github.com/dstufft/1dda9a9f87ee7121e0ee . matplotlib, scikit-learn und pandas Windows Wheels kommen auf die Positionen 3, 4 und 5. Es wĂŒrde einen großen Markt fĂŒr numpy Windows Wheels geben.

Ich denke, die Fragen auf dem Tisch lauten:

1) Können wir uns dazu verpflichten, kurz- bis mittelfristig (z. B. 6 Monate) ein funktionierendes und nahezu optimales Numpy Wheel auf pypi zu bringen? Ich wĂŒrde sagen, die Antwort darauf ist ja (glĂŒcklich, Meinungsverschiedenheiten zu hören);
2) Lohnt es sich, in der Zwischenzeit ein nicht optimales Numpy-Rad aufzustellen, auf das andere aufbauen können?

Frage 2 ist die schwierigere. "Nicht optimal" könnte langsam (kein optimiertes Blas / Lapack) oder schwer zu unterstĂŒtzen bedeuten (keine Garantie, dass wir den Build in 6 Monaten wiederholen können).

Ich sehe Argumente gegen "langsam". Wir mĂŒssen aufpassen, dass, wenn Wheels fĂŒr Windows zu funktionieren beginnen, sie nicht sofort Stackoverflow-Fragen mit der Antwort "Laden Sie auf keinen Fall die numpy Wheels von pypi herunterladen" auslösen. Ich denke, diese Antworten wĂ€ren vernĂŒnftig und wĂŒrden lange genug anhalten, um uns zu verletzen.

Nicht optimale Bedeutung, schwer zu unterstĂŒtzen den Build-Prozess, ich denke, wir können damit leben, wenn wir wirklich entschlossen sind, bald eine langfristige Lösung zu finden.

Vor einiger Zeit habe ich ATLAS-BinĂ€rdateien fĂŒr Windows erstellt: http://nipy.bic.berkeley.edu/scipy_installers/atlas_builds/

Gehe ich richtig in der Annahme, dass wir mit diesen ATLAS-BinÀrdateien bereits numpy BinÀrdateien erstellen können, die alle Tests bestehen?

Warum stellen wir diese dann nicht auf?

1) Können wir uns dazu verpflichten, kurz- bis mittelfristig (z. B. 6 Monate) ein funktionierendes und nahezu optimales Numpy Wheel auf pypi zu bringen? Ich wĂŒrde sagen, die Antwort darauf ist ja (glĂŒcklich, Meinungsverschiedenheiten zu hören);

Ich wĂŒrde es hoffen, sonst bedeutet dies, dass wir bis dahin entweder unerwartete Probleme mit dem mingwpy-Vorschlag haben oder nicht zwischengespeichert haben, was er ermöglicht :)

2) Lohnt es sich, in der Zwischenzeit ein nicht optimales Numpy-Rad aufzustellen, auf das andere aufbauen können?

Ihre ATLAS-Builds scheinen mit Cygwin fertig zu sein? Oder ist das nur die Verzeichnisbenennung und Sie haben eine Version von MingwPy verwendet?

Ich denke, meine ATLAS-Builds wurden mit Cygwin erstellt, aber sie verknĂŒpfen nicht mit der Cygwin.dll, daher denke ich, dass sie fĂŒr das Erstellen mit MSVC sicher wĂ€ren.

mingwpy ist nicht in Schwierigkeiten, braucht aber seine Zeit. Das Erstellen der gcc-Toolchain, OpenBLAS und dann numpy/scipy mit verschiedenen Varianten erfordert Build- und Testzeit. Und ich werde keine BinÀrdateien veröffentlichen, ohne zuerst alle Build-Skripte zu veröffentlichen. Ein auf gcc-5.3.0 basierendes mingwpy ist fast fertig, ebenso OpenBLAS. Der nÀchste Schritt besteht darin, darauf basierende Numpy- und Scipy-RÀder zu bauen.

Diese Diskussion sowie die neuesten BeitrĂ€ge zum numpy-Thread "Multi-Distribution Linux-Wheels - bitte testen" fĂŒhrt zu der Frage, ob OpenBLAS die QualitĂ€t hat, die den Einsatz von Windows-numpy-Wheels auf Basis von OpenBLAS erlaubt. Aber ich bin mir nicht sicher, ob die Verwendung von Atlas stattdessen die bessere Lösung ist. Eventuell sollten mit beiden Varianten erstmal Numpy Wheels fĂŒr eine Testphase gebaut werden.

Ich vermute / hoffe, dass wir es irgendwie schaffen werden, dass OpenBLAS von akzeptabler QualitĂ€t ist. Aber bis dahin erscheint es mir vernĂŒnftig, mit ATLAS-Numpy-RĂ€dern zu beginnen, in der Erwartung, dass wir zu gegebener Zeit auf OpenBLAS-RĂ€der umsteigen können. Möglicherweise mĂŒssen wir jedoch den SSE2-Check fĂŒr die 32-Bit-Builds durchfĂŒhren: http://mingwpy.github.io/blas_lapack.html#atlas

Das Platzieren eines Fortschrittsfelds auf der obersten PyPI-Seite kann mehr Menschen auf das Problem aufmerksam machen (einschließlich derer, die möglicherweise spenden, um die Initiative zu unterstĂŒtzen). Das Feld kann die aktuelle Strategie, die Akzeptanzkriterien (Link zum Leistungstest?), den Status und die Aktion auflisten, die ausgefĂŒhrt wird, wenn die endgĂŒltige Version fertig ist (Hauptversion erhöhen?).

@matthew-brett mir ist immer noch nicht klar, ob dein Vorschlag, etwas hochzuwerfen, tragfĂ€hig ist. Welchen Compiler wĂŒrden Sie verwenden? Bei MingwPy haben wir einen klaren Plan, was zu tun ist, und das scheint jetzt zu frĂŒh. Bei einem anderen gcc sind wir wieder beim Problem der statischen VerknĂŒpfung und der Verteilung von DLL-Problemen.

Meine Idee war, numpy mit ATLAS mit MSVC zu kompilieren. NatĂŒrlich konnte das fĂŒr scipy nicht funktionieren, aber zumindest könnten die Leute mit dem Versand ihrer FensterrĂ€der beginnen, egal wie gebaut.

Ich habe das gerade versucht und einige Fehler der Form unresolved external symbol __gfortran_compare_string erhalten, daher nehme ich an, dass die ATLAS-BinÀrdateien einige baumelnde Verweise auf die gfortran-Laufzeit haben. @carlkl - irgendwelche VorschlÀge zum Debuggen?

Das Mischen von statischen Objektdateien, die von verschiedenen Compilern stammen, sollten Sie vermeiden, wie der Teufel Weihwasser meidet. In einigen FĂ€llen funktioniert es, aber fĂŒr andere Compilerkombinationen schlĂ€gt es fehl.
Übrigens: MS selbst unterstĂŒtzt oder empfiehlt das Mischen statischer Objekte aus verschiedenen Versionen ihres Visual Studio nicht offiziell.

Ich habe vor einigen Wochen einige Tests durchgefĂŒhrt, als diese Frage auftaucht: Kann die von mingwpy erstellte statische Bibliothek npymath.a mit MSVC-Compilern verwendet werden? GrundsĂ€tzlich kann es funktionieren, wenn dieser Bibliothek einige ausgewĂ€hlte Objekte aus den gcc-Laufzeitbibliotheken hinzugefĂŒgt werden. Ich bin zu dem Schluss gekommen, dass ein solcher Ansatz instabil und fragil ist.

Wenn Atlas eine Option zum Erstellen von Numpy Wheels ist, wĂŒrde ich versuchen, ihn als DLL zu erstellen, irgendwelche EinwĂ€nde?

Das Mischen von statischen Objektdateien, die von verschiedenen Compilern stammen, sollten Sie vermeiden, wie der Teufel Weihwasser meidet.

Ich habe das GefĂŒhl, dass https://mingwpy.github.io/motivation.html (Warum-Seite) eine sehr einfache und unkomplizierte ErklĂ€rung des Problems fĂŒr dynamisch geladene Module fehlt. Ich habe mit den Jungs von Far Manager gesprochen, deren Dateimanager fĂŒr Windows nativ ist, auf Plugins aufbaut, die aus in verschiedenen Sprachen geschriebenen .dlls geladen werden, und sie haben dieses Problem nicht mit "genau dem gleichen Compiler". Ich frage mich, warum Python es hat - es lĂ€dt auch Module aus .dlls..

@techtonik , mein Kommentar bezog sich auf das VerknĂŒpfen von Objektdateien, die von verschiedenen Compilern erstellt wurden, in eine einzige BinĂ€rdatei (DLL oder EXE). Das meinte ich mit _statische Objektdateien mischen_. Ein solcher Ansatz _kann_ in einigen gut getesteten Situationen funktionieren, wenn er mit Vorsicht gehandhabt wird. Aber es ist weit davon entfernt, eine robuste Methode zum Erstellen von BinĂ€rdateien zu sein.

Die InteroperabilitĂ€t von DLLs verschiedener Compiler in einem gemeinsamen Prozessraum ist eine ganz andere Sache. Normalerweise funktioniert ein solcher Ansatz in der Regel gut. Es muss sichergestellt werden, dass diese BinĂ€rdateien mit derselben MS-Laufzeit-DLL verknĂŒpft sind, wenn sie zB Dateideskriptoren gemeinsam nutzen. Es gibt auch andere mögliche ABI-Probleme, die behandelt werden mĂŒssen. Und natĂŒrlich benötigen Sie je nach verwendetem Compiler unterschiedliche Debugger zum Debuggen.

minwgpy ist ein Projekt zur UnterstĂŒtzung des Erstellens von Python-Erweiterungen mit Hilfe von mingw-w64 fĂŒr die Verwendung innerhalb der Standard-MSVC-CPython-Builds.

OK - ich habe es geschafft, numpy mit MSVC-VerknĂŒpfung gegen einen Build von ATLAS zu erstellen.

ATLAS baut hier:

http://nipy.bic.berkeley.edu/scipy_installers/atlas_builds/atlas-3.10.1-sse2-32.tgz

Es gibt einige einfache Anweisungen zum Erstellen der ATLAS-DLL.

Alle numpy-Tests bestehen, abgesehen von der f2py -SkriptprĂŒfung, ich denke, das ist ein harmloser Fehler.

Der letzte Schritt ist der Versand der dynamischen Bibliothek im Rad. @carlkl - wie machst du das derzeit am liebsten?

Gut zu hören, ich wĂŒrde auch gerne herausfinden, wie man ein Rad mit erstellt
BinÀrdateien enthalten - kann einen MKL-Build posten und andere OpenBlas testen lassen
eins.
Am 11. Februar 2016 um 13:28 schrieb "Matthew Brett" [email protected] :

OK - ich habe es geschafft, numpy mit MSVC-VerknĂŒpfung gegen einen Build von ATLAS zu erstellen.

ATLAS baut hier:

http://nipy.bic.berkeley.edu/scipy_installers/atlas_builds/atlas-3.10.1-sse2-32.tgz

Es gibt einige einfache Anweisungen, wie man den ATLAS baut
dll.

Alle numpy-Tests bestehen, abgesehen von der f2py-SkriptprĂŒfung, ich denke, das ist ein
gutartiges Versagen.

Der letzte Schritt ist der Versand der dynamischen Bibliothek im Rad. @carlkl
https://github.com/carlkl - was macht ihr aktuell am liebsten
das?

—
Antworten Sie direkt auf diese E-Mail oder zeigen Sie sie auf GitHub an
https://github.com/numpy/numpy/issues/5479#issuecomment -183021728.

Der letzte Schritt ist der Versand der dynamischen Bibliothek im Rad.

Und der SSE2-Check und das anmutige Rettungspaket?

@mrslezak - am einfachsten ist es, es in den Ordner numpy/core zu legen, da es beim Importieren von multiarray.pyd atomar in den Prozessraum geladen wird.

Der letzte Schritt ist der Versand der dynamischen Bibliothek im Rad

@matthew-brett: Ich bin mir zu 99% sicher, dass der "richtige" Weg dies ĂŒber SxS-Assemblys ist, deren Dokumentation rigoros schlecht ist, aber wahrscheinlich machbar ... Ich weiß, dass Sie Zeit damit verbracht haben, sie zu verstehen, und ich hab auch schon nachgelesen, wenn ihr euch also irgendwann mal hinsetzen und versuchen wollt, die Details auszuarbeiten, lasst es mich wissen :-).

(Das Problem bei allen anderen AnsÀtzen besteht darin, dass IIUC-Windows-Prozesse normalerweise einen einzigen globalen Namespace aller importierten DLLs verwalten. Dies bedeutet, dass, wenn zwei Erweiterungen beide eine Datei namens foo.dll liefern, die zuerst geladene Erweiterung ihre Version hat von foo.dll "win" und die andere Erweiterung wird es am Ende verwenden - das klassische "dll-Hölle"-Problem. Und IIUC kann dieses Verhalten nur durch die SxS-Maschinerie vermeiden, so hÀsslich es auch ist.)

Nathaniel - Ich habe mein VerstÀndnis von SxS-Assemblys hier niedergeschrieben: https://github.com/numpy/numpy/wiki/windows-dll-notes#side -by-side-assemblies

Meine letztendliche Schlussfolgerung war, dass es hoffnungslos war und dass auf jeden Fall die Umbenennung der DLL in einer fĂŒr jeden Prozess eindeutigen Weise eine vernĂŒnftige Alternative war.

Ralf - Vorschlag zur Formalisierung des HinzufĂŒgens von SSE2 usw. Hooks zum Installationsprozess: https://github.com/numpy/numpy/pull/7231

@matthew-brett: Ich habe diese Notizen gelesen, ja .... und seufz, hoffnungslos warum? Wegen der gleichen Verzeichnisprobleme? Und haben Sie eine Idee, wie Sie diese Umbenennung bewerkstelligen können? (Ich habe noch kein Äquivalent zu patchelf --replace fĂŒr PE-Dateien gefunden, und das Regenerieren .lib -Dateien ist nicht trivial – obwohl ich denke, dass es mingw-w64 verwendet, ist es nicht so schlimm, weil Sie können direkt gegen die .dll verlinken, zumindest wenn Sie libgfortran oder Ă€hnliches nicht umbenennen mĂŒssen...)

(Es ist möglich, dass es irgendwo auf dieser Liste ein PE-Äquivalent zu patchelf --replace gibt: http://www.woodmannsfortress.com/collaborative/tools/index.php/Category:Import_Editors)

Ich sehe kein Problem darin, satlas.dll (oder alternativ libopenblaspy.dll ) neben multiarray.pyd zu laden, da dieses Verzeichnis wĂ€hrend der DLL-Suche bevorzugt wird. Dieser Ansatz funktioniert aufgrund der Tatsache, dass diese DLL ĂŒber LoadLibraryEx von Python in den Prozessraum geladen wird. Der Ordner numpy/core muss verwendet werden, da hier das allererste Auftreten einer blas-abhĂ€ngigen Python-Erweiterung wĂ€hrend des Imports auftritt. Alle weiteren Versuche, eine DLL mit demselben Namen zu laden, werden einfach ignoriert, da diese DLL bereits in den Prozessraum geladen ist. Windows sucht nur nach dem Namen der DLL BTW.

Der DLL-Höllenstart Wenn eine solche Bibliothek von _weiteren_ DLLs abhĂ€ngig ist, ist dies jedoch nicht der Fall, da sowohl satlas.dll als auch libopenblaspy.dll eigenstĂ€ndig sind und nur von Standard-Windows-System-DLLs abhĂ€ngig sind. Dies wird normalerweise als statisch verknĂŒpfte DLLs bezeichnet - das bedeutet, dass der gcc-Laufzeitcode statisch verknĂŒpft ist.

_Zum Vergleich_: Um die MKL-Bibliotheken zu importieren, besteht der Ansatz darin, PATH temporÀr auf numpy/core zu erweitern. Dies schlÀgt leider fehl, wenn Àltere MKL-Bibliotheken in den Windows-Systemordnern abgelegt werden.

@matthew-brett @njsmith : DLL-Umbenennung: wozu ist es gut?

@carlkl : Der Fall, ĂŒber den wir uns Sorgen machen, ist, wenn numpy atlas.dll einschließt und auch scipy atlas.dll enthĂ€lt und der Benutzer irgendwann ein Upgrade von scipy (und eine neuere Version von atlas.dll erhĂ€lt) atlas.dll , die aus dem numpy-Paket stammt. Das ist schlecht, weil scipy davon abhĂ€ngig sein kann, dass die neuere Version vorhanden ist – also werden die Dinge zufĂ€llig brechen, je nachdem, welche Builds welcher Pakete beteiligt sind und in welcher Reihenfolge der Benutzer sie importiert. Dies geschieht, weil wenn numpy eine DLL namens atlas.dll enthĂ€lt, dann wird der Name atlas.dll im prozessweiten DLL-Namespace "beansprucht" und alle anderen Pakete daran gehindert, andere DLLs damit zu verwenden Name.

Zwei mögliche Lösungen sind (a) wenn das SxS-/Aktivierungskontext-Zeug zum Laufen gebracht werden kann, bietet es eine Möglichkeit, den prozessweiten DLL-Namespace zu deaktivieren, oder (b) wenn numpy numpy-atlas.dll enthÀlt und scipy scipy-atlas.dll enthÀlt, können diese den gleichen prozessweiten Namensraum teilen, ohne zu kollidieren.

Oder wenn beide von einem separaten clib_atlas -Paket abhĂ€ngen, das die DLL bereitstellt? Dann können die Anforderungen an die VersionsabhĂ€ngigkeit wie fĂŒr Python-Pakete ĂŒblich ausgedrĂŒckt werden.

@tkelman : Ich denke, wir mĂŒssen herausfinden, wie wir sowohl DLLs von Anbietern als auch separat vertriebene DLLs unterstĂŒtzen, da beide Optionen in verschiedenen Situationen geeignet sind. Und der VerkĂ€uferkoffer ist viel einfacher zu starten :-)

Ich glaube, die Side-by-Side-Lösung erfordert Admin-Rechte, um in Windows System32 zu installieren. Bitte tun Sie dies nicht.

Es gibt auch "private" nebeneinander liegende Assemblys, bei denen die Assemblys in Ihrem eigenen BinÀrbaum sitzen, aber es gibt eine Begrenzung von zwei Up-Directory-Pfadmarkierungen, die Sie verwenden können, um auf die Assembly zu zeigen, dh Sie können auf ..\..\some_assembly zeigen ..\..\..\some_assembly .

So kann beispielsweise scipy/first/second/third/something.pyd nur auf eine Side-by-Side-Assembly in den Verzeichnissen third oder second oder first zeigen, aber nicht in scipy (oder andere Verzeichnisse darin.

OK, ich habe einige RĂ€der zum Testen gebaut, hier:

http://nipy.bic.berkeley.edu/scipy_installers/atlas_builds/

Wie gewöhnlich:

pip install -f https://nipy.bic.berkeley.edu/scipy_installers/atlas_builds numpy

Ganz grobe Build-Automatisierung hier: https://github.com/matthew-brett/np-wheel-builder

RĂ€der bestehen alle Tests, abgesehen von einem falschen Fehler beim AusfĂŒhren des f2py-Skripts (ein Fehler in diesem Test, glaube ich).

Ich habe auch 64-Bit-Installer fĂŒr Pythons 2.7, 3.4, 3.5 unter derselben Webadresse erstellt.

@matthew-brett, ich habe keine Berechtigung, auf diese Dateien zuzugreifen.

@matthew-brett, SxS-Assembly-Technologie wird nicht mehr verwendet (seit VS2010), siehe https://en.wikipedia.org/wiki/Side-by-side_assembly.

Wie wĂ€re es mit dem HinzufĂŒgen von Versionsnummern zu den DLL-Dateinamen: libopenblaspy_0.15..dll oder libatlas_3.10.1.dll oder Ă€hnlich. Verwenden Sie dann eine _Proxy-DLL_, die als Weiterleitungs-DLL fĂŒr die versionierten DLLs verwendet wird. Numpy- und scipy-Erweiterungen sollten gegen eine Proxy-DLL namens _libblaslapack.dll_ erstellt werden.

Bei Verwendung von Atlas wĂŒrde dies im Prinzip das Laden einer optimierten Atlas-DLL zur Laufzeit ermöglichen. (nicht notwendig bei Verwendung von openblas)

All dies könnte mit Hilfe eines clib_openblas- und/oder clib_atlas-Pakets gehandhabt werden. (Jetzt muss ich lernen, wie man den Code fĂŒr eine Weiterleitungs-DLL generiert). Numpy selbst könnte entweder mit Atlas oder Openblas ausgestattet werden. Dies sollte geladen werden, wenn weder clib_openblas noch clib_atlas verfĂŒgbar ist.

@carlkl : Ich denke, die Wikipedia-Seite ist verwirrend und versuche zu sagen, dass VS 2010 nicht zufĂ€llig SxS _fĂŒr bestimmte Bibliotheken_ verwendet, aber SxS im Allgemeinen wird sicherlich immer noch verwendet (z. das Betriebssystem verwendet auch WinSxS fĂŒr seine Kernkomponenten.")

Ich glaube, Sie erstellen eine Weiterleitungs-DLL mit msvc, indem Sie eine spezielle .def-Datei schreiben und sie dann beim Generieren Ihrer .dll verwenden. Aber wie hilft eine Weiterleitungs-DLL? (Unter osx oder Linux denke ich, dass es ein nĂŒtzliches Tool sein kann, aber unter Windows haben Sie immer noch dieses nervige Problem mit dem globalen DLL-Namespace.)

@njsmith , wir sollten nach einer nachvollziehbaren Lösung suchen. Es stimmt, dass SxS Sitll existiert. Es wird normalerweise nicht mehr fĂŒr etwas anderes als das Betriebssystem selbst verwendet.

(1) Die einfachste Lösung ist IMHO, Blas Lapack statisch zu verknĂŒpfen. Dieser Ansatz erzeugt riesige BinĂ€rdateien und wird daher (zumindest von mir) nicht empfohlen.
(2) Die zweite einfachste Lösung besteht darin, die DLL in numpy/core zu installieren und das war's.
(3) Die dritte Lösung besteht darin, eine AbhĂ€ngigkeit von einem externen Blas/Lapack-Paket zu _erzwingen_, das versioniert wurde und einfach die Blas Lapack-DLL vorlĂ€dt. Die Verwendung von pip stellt sicher, dass die richtige Version der DLL verfĂŒgbar ist.
(3) Wenn eine solche eingeschrĂ€nkte AbhĂ€ngigkeit unerwĂŒnscht ist, könnte sie mit einer DLL erweitert werden, die von numpy und scipy selbst bereitgestellt wird. Diese DLLs sollten _nur in Situationen_ geladen werden, in denen keine externe DLL installiert ist. Das bedeutet, dass ein externes Blas/Lapack-Paket bevorzugt wird, aber nicht unbedingt erforderlich ist.
Das große Plus einer solchen Lösung ist, dass neuere fehlerbehaftete Versionen von openblas/atlas ohne Neuinstallation von numpy/scipy ausgetauscht werden können.
(4) Manifeste und SxS verwenden. @njsmith , können Sie die Details fĂŒr diesen Fall eintragen?

Entschuldigung - ich habe die Berechtigungen fĂŒr die RĂ€der korrigiert - funktionieren sie jetzt?

Es tut uns leid, dass ich Sie bezĂŒglich der SxS-Assemblys nicht zurĂŒckrufe. Mein "hoffnungsloser" Kommentar zu SxS war nicht sehr hilfreich, ich werde versuchen, ihn auszupacken.

Die Frage ist, ob wir "private" SxS-Assemblys verwenden sollten, bei denen es sich um SxS-Assemblys handelt, die wir in unserem eigenen BinĂ€rbaum hosten. SxS-Assemblys können auch "geteilt" werden. Freigegebene Assemblys gehen in Ihren Windows-Systemordner und mĂŒssen von einem MS-Installationspaket installiert werden . Ich denke, das bedeutet, dass freigegebene Assemblys nicht ĂŒber ein Rad installiert werden können und auf jeden Fall Admin-Berechtigungen benötigen, daher denke ich, dass wir freigegebene Assemblys als Option ablehnen können.

Was sind also die Probleme bei der Verwendung privater SxS-Assemblys?

Das erste Problem ist, dass wir einen ziemlich neuen Weg einschlagen wĂŒrden, wenn wir es versuchen wĂŒrden. Ich kenne kein anderes Open-Source-Projekt, das sie verwendet. Ich habe Steve Dower nach SxS-Assemblys gefragt. Steve arbeitet bei MS und ist aktueller Python-Windows-Betreuer. Er schlug vor, dass ich sie meide. Es schien, dass niemand, mit dem er arbeitete, mit ihnen vertraut war. Meine oben verlinkten Notizen waren ein Versuch, die wenigen FĂ€lle zu verstehen, von denen er wusste, dass jemand (anscheinend) sie erfolgreich verwendet. Es gibt nur sehr wenige gute Quellen, um sie zu erklĂ€ren.

Damit verbunden ist die Beobachtung, die Carl bereits vorgebracht hat, dass MS selbst ambivalent in Bezug auf ihre Verwendung zu sein scheint. Beispielsweise verwenden sie fĂŒr die MSVC-Laufzeit, eine offensichtliche Anwendung von SxS-Assemblys, stattdessen eindeutige DLL-Namen (MSVCR90.DLL, MSVCR100.DLL usw.).

Um SxS-Assemblys zu verwenden, mĂŒssten wir jedem kompilierten Modul, das eine andere DLL laden muss, einen Initialisierungs-Boilerplate-Code hinzufĂŒgen, um einen "Aktivierungskontext" zu erstellen. BEARBEITEN: Nathaniel erinnerte mich daran, dass Windows automatisch einen neuen Aktivierungskontext auslöst, wenn es Hinweise auf ein mit der DLL verbundenes Side-by-Side-Assembly-Manifest sieht (das in die DLL eingebettet sein kann, aber auch eine externe XML-Datei sein kann). .

Also nicht hoffnungslos, aber hart.

Es tut mir leid fĂŒr diese sehr grundlegende Frage, aber wenn ich unter Windows die Bibliothek foo.dll lade, die my_symbol in einem Erweiterungsmodul enthĂ€lt, was passiert, wenn ich die Bibliothek bar.dll lade, enthĂ€lt auch my_symbol , in einem anderen Erweiterungsmodul? Ich gehe davon aus, dass sie in meinem Prozess separat zugĂ€nglich sind, also wĂŒrde die erste Erweiterung foo: my_symbol und die zweite Erweiterung bar:my_symbol erhalten? Kann mir jemand eine Referenz nennen?

Wenn das richtig ist, brauchen wir zur Vermeidung der DLL-Hölle sicherlich nur einen DLL-Namen, der höchstwahrscheinlich nicht versehentlich im selben Prozess verwendet wird (wo der Benutzer nicht beabsichtigte, unsere exakte DLL zu verwenden).

Beim VerknĂŒpfen wird jedes Symbol an eine bestimmte DLL gebunden, die durch seinen Namen identifiziert wird. Zur Laufzeit ist darauf zu achten, dass die richtige DLL geladen wird, wenn mehr als eine DLL mit gleichem Namen gefunden wird. Daher ist die Suchreihenfolge wichtig.
Beispiel Mein anaconda.org numpy wheel verwendet die openblas-Bibliothek mit dem Namen libopenblas_py_.dll, um einen Namenskonflikt mit einer nicht standardmĂ€ĂŸigen libopenblas,dll, die von Julia verwendet wird, zu vermeiden.

Neuere Versionen von julia verwenden jetzt einen anderen Namen libopenblas64_ , um die nicht standardmĂ€ĂŸige ABI widerzuspiegeln, mit der wir bauen. Auf 32 Bit benennen wir keine Symbole oder den Bibliotheksnamen um, da es keinen großen Grund gibt, dort 64 Bit Ints zu wĂ€hlen.

Das Namensschattenen von Symbolen in Shared Libraries war unter Linux und OSX tatsĂ€chlich ein grĂ¶ĂŸeres Problem als unter Windows, aber aus GrĂŒnden der Konsistenz haben wir ĂŒberall dasselbe gemacht.

Das schließt jedoch die Möglichkeit nicht aus, dass wir bei 32 Bit, wo die ABIs gleich sind, es nicht geschafft haben, uns auf andere Weise zu brechen, z.

Ich habe den Bauprozess ein wenig aufpoliert - siehe https://github.com/matthew-brett/np-wheel-builder

Jetzt ist der Prozess einigermaßen automatisiert, ich glaube, es ist praktisch, diese RĂ€der ĂŒber die nĂ€chsten paar Releases hinweg weiterzuentwickeln, wenn es sein muss. Ich bin glĂŒcklich, dies als Windows-Release-Manager zu tun, bis mingwpy die Spezifikationen erfĂŒllt.

Ich habe diese RĂ€der auf 32-Bit- und 64-Bit-Python 2.7, 3.4, 3.5 und einigen anderen getestet, daher denke ich, dass sie in gutem Zustand sind.

Kann ich noch etwas tun, um euch allen zu versichern, dass es sich lohnt, auf Pypi zu setzen, wie das OP gefragt hat?

Hallo alle! Ich wollte nur in diese Diskussion einsteigen, weil ich frustriert war, dass ich seit einiger Zeit nicht in der Lage bin, numpy und scipy aus dem Quellcode zu installieren geht es an dieser Front weiter.

@matthew-brett: Dieses Automatisierungsskript ist großartig . Auch wenn es nicht ganz zu PyPI gelangt, scheint dies eine sehr praktikable Möglichkeit zu sein, numpy aus dem Quellcode zu erstellen (siehe dieses Problem, das ich hier geöffnet habe ). Es ist auch sehr nahe daran, scipy erstellen zu können, da ich alles bauen kann, aber dann scheinen die Tests irgendwo in Python einen Segfault zu verursachen.

Außerdem habe ich fĂŒr jeden, der tatsĂ€chlich numpy -RĂ€der gebaut hat, versucht, eine ausgefeilte, aktuelle Dokumentation zum Erstellen dieser Bibliotheken aus den Quellen zusammenzustellen, um das zu ersetzen, was derzeit online ist auch der Input der Leute an dieser Front!

Vielen Dank fĂŒr das Feedback - und Ihre Arbeit an der Dokumentation des Builds - das wĂ€re sehr nĂŒtzlich.

Ich schĂ€tze, Sie haben http://mingwpy.github.io gesehen - dort gibt es natĂŒrlich eine Menge Zeug, das speziell auf das mingw-w64-Projekt und die mingwpy-Toolchain zugeschnitten ist.

Danke @matthew-brett! Es passiert numpy.test() . Der f2py.py -Test war ein Problem in test_scripts() mit virtualenvs, das in numpy-SHAd3d2f8e behoben wurde, aber ich erhalte 3 Warnungen, 2 veraltete und 1 Laufzeit.

Eine letzte, hoffentlich kleine Anfrage, ist es möglich, ein Build-Badge auf Ihrem Repo-np-Wheel-Builder und/oder PyPI anzuzeigen? Sieht so aus, als hÀtte buildbot 0.8 sie, und es gibt sogar ein Python-Paket/-Repository, damit sie gut aussehen, BuildbotEightStatusShields-0.1 .

Außerdem bin ich neugierig, ich habe mich wegen der fehlenden Tuning-Parameter vom ATLAS Windows 64-Bit-Build abgeschreckt. Hat es tatsĂ€chlich "den ganzen Tag gedauert" oder gibt es eine Reihe von Architekturvorgaben?

Zur Info: Continuum hat gerade Anaconda mit optimiertem mkl numpy veröffentlicht. Ich glaube, sie haben diesen Thread ĂŒberwacht.

Jetzt fĂŒr Scipy-Builds mit denselben Atlas-Bibliotheken. Braucht es gfortran?

Ja. Andernfalls können Sie keine der .f -Dateien in scipy kompilieren. Viel GlĂŒck dabei! Wie ich bereits sagte, bin ich _wirklich nahe gekommen_, aber wenn Sie mit bestandenen Tests durchkommen, wĂ€re das großartig!

Ja, ich fĂŒrchte, der ATLAS-Build dauerte etwa 8 Stunden auf einer Maschine, die nichts anderes tat. Das ATLAS-Build-Skript befindet sich im np-wheel-builder-Repository .

Was die MKL -Neuigkeiten angeht, das ist großartig, wenn Sie ein conda -Benutzer sind, obwohl ich denke, dass die Verwendung einer Python-Distribution mit numpy und scipy vorinstalliert ist etwas, das seit einiger Zeit gefördert wird. Sprechen Sie mich an, wenn Sie auch die MKL-Bibliotheken selbst kostenlos erhalten können. :)

FĂŒr das Bauen mit gfortran - ich denke, mingwpy ist unsere beste Hoffnung.

@matthew-brett: Danke, dass Sie sich die Zeit genommen haben, ATLAS zu bauen! Ich habe zuvor versucht, Ihr Skript auszufĂŒhren, und es sind immer wieder Probleme aufgetreten, wahrscheinlich aufgrund von maschinenspezifischen InkompatibilitĂ€ten.

Entschuldigung fĂŒr die Probleme. Ich habe gerade die ATLAS-BinĂ€rdateien im np-wheel-builder-Repository erstellt, es war eine Neuinstallation von Windows Server 2012 und 64-Bit-Cygwin, wobei die genauen ATLAS- und Lapack-Versionen aufgelistet sind. Die von mir verwendeten Quellarchive befinden sich unter http://nipy.bic.berkeley.edu/scipy_installers/atlas_builds/. Wenn Sie eine andere Version von ATLAS haben, kann es leicht haarig werden.

Hmmm...das ist wahrscheinlich der Fall. Nochmals, sehr geschĂ€tzt angesichts der MĂŒhe, die Sie dafĂŒr aufgewendet haben. Wenn Sie einen Weg finden, Windows-kompatible ATLAS-Builds einzufĂŒhren, die nicht so viel Zeit und Ressourcen benötigen wie jetzt, wĂ€re das großartig!

@gfyoung

Sprechen Sie mich an, wenn Sie auch die MKL-Bibliotheken selbst kostenlos erhalten können. :)

Siehe https://software.intel.com/sites/campaigns/nest/ und https://registrationcenter.intel.com/en/forms/?productid=2558&licensetype=2 - oder meinst du Quelle?

@tkelman , habe es gerade auf der neuen Mingwpy -Projektseite von @carlk gesehen, aber die Intel-Community-Lizenz Nest hat kein Problem , und wie wÀre es ohne das?

@tkelman : Hoppla, ich bin mir nicht sicher, warum ich diese Community-Lizenzierung vergessen hatte. @tkelman bringt jedoch einen gĂŒltigen Punkt zur Sprache.

@tkelman : Du könntest es mit dem MinGW versuchen, aber nach meiner Erfahrung funktioniert das leider nicht. Aufgrund von KompatibilitĂ€tsproblemen werden Sie nicht einmal ĂŒber numpy hinauskommen.

@mikofski richtig, hilft bei scipy nicht, da es keine Compiler gibt. Die einzigen Optionen fĂŒr scipy-Builds sind heute mingwpy oder der all-gcc-all-the-time MSYS2-Build von Python (https://github.com/Alexpux/MINGW-packages/tree/master/mingw-w64- python-scipy). Letzteres wird natĂŒrlich nicht mit von msvc erstellten cpython- oder pypi-BinĂ€rdateien kompatibel sein, so dass es nicht alle Module jenseits von scipy ansprechen wird.

@matthew-brett: Was ist das Geschwindigkeitsdefizit dieser ATLAS-RĂ€der gegenĂŒber Openblas und / oder MKL?

Hat jemand ggA Fortran untersucht. Es wird auf der @carkl mingwpy-Projektseite nicht erwĂ€hnt. Ich habe es einmal versucht, bin ziemlich weit in den Kaninchenbau gegangen, aber ich kann mich nicht erinnern, was der Showstopper war. Ich denke, die Lizenz ist freizĂŒgig, obwohl sie Closed Source ist. Vielleicht spielt sich PGI Fortran mit msvc besser?

@mikofski : Ich habe es nicht vor mir, aber als ich mir letztes Jahr PGI ansah, erinnere ich mich, dass meine Schlussfolgerung war, dass es noch schlimmer war als Intel (in Bezug darauf, dass Sie gezwungen sind, Ihrer Lizenzierung FOSS-inkompatible EinschrĂ€nkungen hinzuzufĂŒgen). .

Okay, vielleicht können einige Fokusfonds auf eine BLIS/FLAME-Lösung fĂŒr x86-Architekturen ausgerichtet werden?

Offenbar wird Nvidia/PGI bis Ende dieses Jahres ihr Fortran-Frontend als Open Source zu LLVM beitragen. https://www.llnl.gov/news/nnsa-national-labs-team-nvidia-develop-open-source-fortran-compiler-technology

Okay, vielleicht können einige Fokusfonds auf eine BLIS/FLAME-Lösung fĂŒr x86-Architekturen ausgerichtet werden?

Denke nicht. BLIS sieht nach einem sehr ungesunden Projekt aus (und noch mehr libflame); wenig AktivitĂ€t in Bezug auf Commits, Mailinglisten-Traffic usw. Außerdem hatten sie erhebliche Mittel (https://github.com/flame/blis#funding), also ist es nicht so, dass ein paar tausend Dollar diese magisch machen werden Projekte reifen.

Ich verstehe nicht ganz, woher diese Diskussion kommt oder geht: Wir haben eine Notlösung, die Matthew fast abgeschlossen hat (mit ATLAS), und was noch wichtiger ist, wir haben eine langfristige Lösung, an der sehr aktiv gearbeitet wird (MingwPy + OpenBLAS). DarĂŒber hinaus wird OpenBLAS viel hĂ€ufiger verwendet; Die Verwendung dieses Projekts sowohl im Scipy-Stack als auch in Julia sollte es schneller reifen lassen.

@rgommers : Das GesprĂ€ch ging dahin, wo es hinging, weil @mikofski und ich beide versuchten, die @matthew-brett-Lösung zu verwenden, um scipy zu erstellen. Es scheint jedoch, dass wir beide mit dem gleichen Problem konfrontiert sind: dem Fortran-Compiler. Ich selbst habe versucht, die installierten gfortran.exe sowohl fĂŒr MinGW32 als auch fĂŒr MinGW64 zu verwenden, ohne viel Erfolg, da aus irgendeinem Grund viele ungelöste externe Dateien vorliegen.

Der Build von @gfyoung Matthew verwendet MSVC. Es macht keinen Sinn, gfortran mit MSVC zu verwenden, es ist bekannt, dass es nicht funktioniert. Die Zusammenfassung der Bausituation lautet:

  • Kein Fortran, dann können Sie jetzt MSVC verwenden.
  • Mit Fortran können Sie MingwPy, MSVC + ifort oder icc + ifort verwenden.
  • FĂŒr den Scipy-Stack wollen wir eine kostenlose Lösung, die RĂ€der fĂŒr Numpy, Scipy usw. baut. DafĂŒr ist MingwPy es.

@rgommers Es tut mir leid, dass ich die Konversation entgleist. Du hast völlig recht, @matthew-brett-Lösung fĂŒr numpy works, und das mingwpy-Projekt von @carlk wird bereits von num focus gefördert. Ich werde versuchen zu sehen, ob ich mein Unternehmen dazu bringen kann, es zu unterstĂŒtzen. Ich bin bereits ein num-Fokus-Mitglied. UngefĂ€hr auf halbem Weg durch scipy 2829 und ich denke, ich bin zu dem gleichen Schluss gekommen. Ich hoffe nur, es funktioniert. Kurzfristig werden wir @cgohlke weiter nutzen oder auf Anaconda umsteigen. Danke noch einmal!

Abgesehen davon, dass Builds auf pypi verschoben werden, ist vielleicht ein letztes Problem fĂŒr @matthew-brett ein Buildbot-Schild in seinem NP-Build-Skript-Repository? Danke! Dann kann das geschlossen werden?

Bevor dies geschlossen wird, kurze Frage: Ich habe @matthew-brett numpy so gebaut, dass es auf ATLAS zeigt. Wenn ich jedoch versuche, scipy mit ifort $ zu erstellen, greift es auch meine andere site.cfg -Datei auf, die MKL verwendet, die sich in meinem Home-Verzeichnis befindet. Ich bin tatsÀchlich in der Lage, erfolgreich gegen numpy zu bauen, und Tests bestehen bis auf ein paar Fehler aufgrund von winzigen Rundungsfehlern. Ich bin jedoch neugierig, was scipy gemacht hat, als ich es gebaut habe? Hat es die MKL-Bibliotheken verwendet oder hat es versucht, die ATLAS-Bibliotheken zu verwenden, die bereits mit numpy wurden?

Es gibt eine Zusammenfassung der Windows Fortran-Compiler in https://github.com/numpy/numpy/wiki/Numerical-software-on-Windows

@gfyoung - Ich gehe nur durch eine Kombination aus Raten und FerngedĂ€chtnis - ich glaube, dass scipy zuerst das site.cfg in seinem eigenen Verzeichnis aufnimmt, und wenn das fehlt, wird die Konfiguration des numpy-Builds abgerufen. Dies wiederum weist darauf hin, wo die Bibliotheken waren, als ich die RĂ€der gebaut habe. Sie mĂŒssten also site.cfg fĂŒr scipy umschreiben, um die Atlasbibliotheken des np-wheel-builder abzurufen - das Skript build_numpy.py erledigt das fĂŒr den numpy-Build.

BLIS sieht nach einem sehr ungesunden Projekt aus (und noch mehr libflame); wenig AktivitÀt in Bezug auf Commits, Mailinglistenverkehr usw.

Ich bin mir nicht sicher, ob ich sie ungesund nennen wĂŒrde, weil sie nicht versuchen, von der Community betriebene FOSS-Projekte zu sein; sie sind im Wesentlichen eine Ein-Personen-Show, und sie mögen es (zumindest im Moment) so. Ich bin seit ca. einem Jahr immer wieder mit ihnen in Kontakt, und die gute Nachricht ist, dass der Fokus ihrer BemĂŒhungen derzeit genau auf den Dingen liegt, die wir brauchen (Laufzeitkernelauswahl und Laufzeitthreading-Konfiguration); Die schlechte Nachricht ist, dass es nicht viel zu tun gibt, außer darauf zu warten, dass der eine Architekt die Dinge nach seinen WĂŒnschen neu arrangiert. Vielleicht werden 6 Monate einige Ergebnisse sehen?

Es hört sich so an, als ob BLIS usw. zu diesem Zeitpunkt eine ziemlich entfernte Option sind, und wir mĂŒssen fĂŒr den Fall planen, dass es nicht funktioniert.

Nathaniel - irgendwelche VorschlĂ€ge, wo man gute Benchmarks bekommt? Ich glaube, numpy.bench() tut nichts mehr. Ich habe versucht, asv auszufĂŒhren, aber viele Tests schlagen fehl, weil Windows numpy nicht ĂŒber complex256 verfĂŒgt.

Ich denke, die Teile von asv , die funktionieren, sind nĂŒtzlich? Oder sogar %timeit np.dot(big_array, other_big_array) wĂ€re nĂŒtzlich, um zumindest eine grobe Vorstellung davon zu bekommen, wo wir stehen :-)

Übrigens, hier ist eine allgemeine Lösung fĂŒr das globale Namespace-Problem der Windows-DLL, die es uns ermöglicht, ein Windows- delocate zu schreiben: https://github.com/njsmith/rell

Leider bricht der asv complex256-Fehler ganze Testsequenzen ĂŒber dtypes hinweg ab. Ich denke, es wĂ€re aber nicht allzu schwer zu beheben.

Einfach testen damit:

def test_dot():
    """
    Test the dot product
    """
    i = 1000
    a = random((i, i))
    b = numpy.linalg.inv(a)
    result = numpy.dot(a, b) - numpy.eye(i)

weist darauf hin, dass, wie Clint Whaley zuvor gewarnt hat, 64-Bit-ATLAS unter Windows nicht gut optimiert ist. Mit 64-Bit-MKL ĂŒber die RĂ€der von Christoph Gohlke:

In [9]: %timeit test_dot()
1 loop, best of 3: 764 ms per loop

Mit meinen RĂ€dern, gebaut mit 64-Bit ATLAS:

In [10]: %timeit test_dot()
1 loop, best of 3: 2.41 s per loop

Bei den 32-Bit-RĂ€dern (auf einem anderen 32-Bit-Rechner) ist der Unterschied viel geringer. MKL:

In [3]: %timeit test_dot()
1 loop, best of 3: 663 ms per loop

vs ATLAS:

In [4]: %timeit test_dot()
1 loop, best of 3: 1 s per loop

@rcwhaley - Ich melde dich, falls du hier ein paar Gedanken hast. Das ist ATLAS 3.10.1 ...

Hier ist ein weiterer Windows 64-Bit-Rechner mit einem moderneren Prozessor – zeigt auch eine ~3x Verlangsamung.

MKL:

In [3]: %timeit test_dot()
1 loop, best of 3: 400 ms per loop

ATLAS:

In [3]: %timeit test_dot()
1 loop, best of 3: 1.28 s per loop

Yup, komplexes 256-Problem nicht schwer zu beheben: https://github.com/numpy/numpy/pull/7251

3x ist viel, aber nicht annĂ€hernd so dramatisch wie bei lapack_lite oder? Ich denke, fĂŒr eine kurzfristige Lösung ist es OK. Und es ist nicht so, dass die alten 32-Bit-.exe-Installationsprogramme besser waren.

Übrigens, hier ist eine allgemeine Lösung fĂŒr das globale Namespace-Problem der Windows-DLL, die es uns ermöglicht, ein Windows-Delocate zu schreiben: https://github.com/njsmith/rell

schöne LizenzerklÀrung :)

@gfyoung 'site.cfg' wird gesucht in:

1) Verzeichnis der Hauptdatei setup.py, die ausgefĂŒhrt wird.
2) Heimatverzeichnis des Benutzers, der die Datei setup.py als ~/.numpy-site.cfg ausfĂŒhrt
3) Systemweites Verzeichnis (Speicherort dieser Datei...)

@rgommers Es tut mir leid, dass ich die Konversation entgleist.

Keine Sorge, nichts war entgleist.

Du hast völlig recht, @matthew-brett-Lösung fĂŒr numpy works, und das mingwpy-Projekt von @carlk wird bereits von num focus gefördert. Ich werde versuchen zu sehen, ob ich mein Unternehmen dazu bringen kann, es zu unterstĂŒtzen. Ich bin bereits ein num-Fokus-Mitglied. UngefĂ€hr auf halbem Weg durch scipy 2829 und ich denke, ich bin zu dem gleichen Schluss gekommen. Ich hoffe nur, es funktioniert. Kurzfristig werden wir @cgohlke weiter nutzen oder auf Anaconda umsteigen. Danke noch einmal!

Cool. Und schön zu sehen, dass Sie sich fĂŒr MingwPy interessieren. Beachten Sie, dass es jetzt eine eigene ML hat, die von Interesse sein könnte: https://groups.google.com/forum/#!forum/mingwpy

@rgommers , @matthew-brett : Ah, ja, es scheint, als ob es vorher mit MKL gebaut wurde. Ich habe mein site.cfg direkt auf den ATLAS-Build und scipy -Builds verwiesen, aber Segfaults wÀhrend der Tests. So nah!

@rgommers - ja - die Leistung ist ohne ATLAS (mit lapack_lite) viel schlechter:

In [2]: %timeit test_dot()
1 loop, best of 3: 17.7 s per loop

Ich denke, die verbleibende Frage hier ist, ob es sich lohnt, auf ein OpenBLAS numpy zu standardisieren (wenn alle numpy-Tests bestanden sind), und das Risiko in Kauf zu nehmen, dass dies in Projekten, die numpy verwenden, eher zu numerischen Fehlern fĂŒhrt.

Ein Argument dafĂŒr wĂ€re, dass es so aussieht, als mĂŒssten wir kurz- / mittelfristig in diese Richtung gehen, und es könnte besser sein, jetzt zu beginnen und uns auf die miserable Fehlersuche einzulassen, die dies mit sich bringt. Wenigstens sind wir in guter Gesellschaft der Julia-Maintainer.

Numpy hat auch eine ziemlich andere Reihe von Kompromissen zwischen Risikotoleranz und Leistung und das VerhĂ€ltnis von Benutzern zu Entwicklern als Julia. Daher denke ich, dass es fĂŒr numpy sehr sinnvoll sein könnte, einen konservativeren Ansatz zu verfolgen und als Standard langsam, aber zuverlĂ€ssig zu arbeiten, um Openblas als nicht standardmĂ€ĂŸige Option zuzulassen. Obwohl diese 8-stĂŒndigen Build-Zeiten nicht nach Spaß klingen, ist es kein Wunder, dass uns niemand nach der Verwendung von Atlas mit Julia gefragt hat.

daran arbeiten, openblas als nicht standardmĂ€ĂŸige Opt-in-Wahl zuzulassen

Das Problem ist, dass ich nicht wirklich sicher bin, wie dieser Prozess funktionieren könnte :-/. Wir haben keine gute Möglichkeit, alternative Builds an Benutzer zu verteilen (auf lange Sicht hoffe ich, dass wir Build-Varianten auf pypi als numpy[openblas] usw. erhalten, aber das wird nicht so schnell passieren) , wir haben keine Möglichkeit, die openblas-Builds zu verbessern, außer sie zu verteilen und auf Fehlerberichte zu warten, und die Hauptalternative zu ATLAS-Builds fĂŒr Leute, die motiviert sind, einen zu suchen, werden nicht openblas-Builds sein, sondern MKL baut von einem Drittanbieter :-/.

Ich denke, eine andere Option, die man auf den Tisch legen kann, wĂ€re, BLIS-Builds mit ihrem Referenz-/SSE2-Kernel zu verteilen. Da BLIS immer noch nur eine Build-Time-Konfiguration hat, ist dies nicht mit Openblas konkurrenzfĂ€hig, aber es könnte mit ATLAS konkurrenzfĂ€hig sein, und die Vorteile gegenĂŒber ATLAS sind, dass die Build-Zeit _viel_ schneller ist und die Chance, dass es eine gute langfristige Lösung ist sind schwer abzuschĂ€tzen, aber sicherlich besser als ATLAS, da es eine gute langfristige Lösung ist (die ich auf Null setzen wĂŒrde). Wenn wir sowieso etwas QA machen, dann wĂŒrden wir diese Energie zumindest auf etwas lenken, das eine Zukunft haben könnte.

Einige Fragen, die beantwortet werden mĂŒssen, bevor Sie diese Option ernsthaft in Betracht ziehen:

(1) Ich bin mir nicht sicher, ob die Multithreading-UnterstĂŒtzung von BLIS mit der von ATLAS konkurrenzfĂ€hig ist oder nicht (ich weiß, dass der Quellcode einige Multithreading-Optionen enthĂ€lt, und ich weiß, dass der Hauptentwickler dies noch nicht als "fertig" betrachtet) , dh konkurrenzfĂ€hig mit MKL, aber es gibt viel Platz zwischen ATLAS und MKL.)

(2) Übrigens habe ich auch keine Ahnung, wie BLIS in einem nicht abgestimmten Modus bei den obigen Benchmarks abschneidet.

(3) Ich habe nicht wirklich versucht, BLIS auf Windows zu bauen, und es gibt das Problem damit umzugehen, dass es nur ein BLAS ist, kein LAPACK - ich bin mir nicht sicher, wie groß das Problem fĂŒr Numpy ist.

Wie reagiert BLIS auf Fehlerberichte? Openblas scheint ziemlich gut zu sein
ĂŒber das.

Am Montag, 15. Februar 2016 um 15:48 Uhr, Nathaniel J. Smith <
[email protected]> schrieb:

daran arbeiten, openblas als nicht standardmĂ€ĂŸige Opt-in-Wahl zuzulassen

Das Problem ist, dass ich nicht wirklich sicher bin, wie dieser Prozess funktionieren könnte :-/.
Wir haben keine gute Möglichkeit, alternative Builds an Benutzer zu verteilen (im
Langfristig hoffe ich, dass wir Build-Varianten auf pypi als numpy bekommen können[openblas]
und so weiter, aber das wird so schnell nicht passieren), wir haben keine Möglichkeit,
die Openblas-Builds verbessern, außer sie zu verteilen und auf Fehler zu warten
Berichte und die wichtigste Alternative zu ATLAS-Builds fĂŒr Menschen, die
motiviert, einen zu suchen, werden keine Openblas-Builds sein, sondern MKL-Builds
von einem Dritten :-/.

Ich denke, eine andere Möglichkeit, auf den Tisch zu legen, wÀre die Verteilung von BLIS
Builds mit ihrem Referenz-/SSE2-Kernel. Weil BLIS immer noch nur gebaut hat
Zeitkonfiguration wird dies nicht mit Openblas konkurrieren, aber es könnte sein
konkurrenzfĂ€hig mit ATLAS, und die Vorteile gegenĂŒber ATLAS sind, dass der Bau
die Zeit ist _viel_ schneller, und die Chance, dass sie langfristig gut ist
Lösung sind schwer einzuschÀtzen, aber sicherlich besser als ATLAS eine gute
langfristige Lösung (die ich auf Null setzen wĂŒrde). Wenn wir QAing sind
sowieso etwas, dann wĂŒrden wir diese Energie zumindest auf etwas lenken
dass _könnte_ eine Zukunft haben.

Einige Fragen, die beantwortet werden mĂŒssen, bevor Sie ernsthaft darĂŒber nachdenken
Möglichkeit:

(1) Ich bin mir nicht sicher, ob die Multithreading-UnterstĂŒtzung von BLIS
konkurrenzfĂ€hig mit ATLAS (ich weiß, dass es einige Multi-Threading-Optionen in
die Quelle, und ich weiß, dass der Hauptentwickler dies nicht fĂŒr richtig hĂ€lt
"fertig" noch, dh konkurrenzfÀhig mit MKL, aber da ist viel Platz dazwischen
ATLAS und MKL.)

(2) Übrigens habe ich auch keine Ahnung, wie es mit BLIS im ungestimmten Modus geht
auf diesen Benchmarks oben.

(3) Ich habe nicht wirklich versucht, BLIS unter Windows zu erstellen, und es gibt die
Problem damit umzugehen, es ist nur ein BLAS, kein LAPACK - nicht sicher wie
ein großes Problem ist dies fĂŒr Numpy.

—
Antworten Sie direkt auf diese E-Mail oder zeigen Sie sie auf GitHub an
https://github.com/numpy/numpy/issues/5479#issuecomment -184387401.

Ich glaube, libflame ist das Lapack-Äquivalent in Blis. Es gibt eine Lapack2flame-KompatibilitĂ€tsschnittstelle, die in den Referenzdokumenten beschrieben ist.

Wie reagiert BLIS auf Fehlerberichte?

Wir wissen es noch nicht.

Ohne BLIS ausprobiert zu haben, denke ich, dass es sich wie Wahnsinn anhört, numpy Binaries zu versenden, die im Grunde genommen fĂŒr ein wenig aktives Ein-Mann-Projekt erstellt wurden, das nur sehr wenige Leute verwenden.

Ich habe in diesem Thread noch keinen guten Grund gesehen, vom MingwPy + OpenBLAS-Plan abzuweichen. No-scipy-ATLAS-MSVC-BinĂ€rdateien sind eine nette Notlösung, aber weniger wichtig als die mittel-/langfristige MingwPy-Lösung und wenn die Notlösung selbst zu einem großen Aufwand wird, dann wĂŒrde ich sagen, dass es den Aufwand nicht wert ist .

Die BLIS / libflame-Dokumente legen nahe, dass es ein einsamer Weg wĂ€re, wenn ich versuchen wĂŒrde, eine vollstĂ€ndige BLAS / LAPACK-Bibliothek unter Windows zu erstellen.

Ich mache das gerne, sobald die Entwickler zustimmen, dass das funktionieren sollte und unterstĂŒtzt wird.

ATLAS war lange Zeit die Standardbibliothek unter Linux. Es scheint nicht unvernĂŒnftig, sich vorzustellen, dass dies fĂŒr eine Weile bei Windows BSD-kompatiblen Builds der Fall sein könnte.

@tkelman - danke fĂŒr deine Analyse - ich denke du hast recht, dass numpy sich auf die Korrektheit konzentrieren muss. Es wĂ€re jedoch gut, sich zusammenzuschließen, um sich auf einige der anstrengenderen OpenBLAS-Bugs zu stĂŒtzen und umfassendere Tests zu entwickeln. Dieser OpenBLAS-Bug kommt mir in den Sinn - etwas obskur, sehr schwer zu debuggen.

Ich glaube fĂŒr dieses spezielle Problem, dass numpy Wheels auf pypi bereitgestellt werden, damit ein Gelegenheitsbenutzer des Pakets "x", das von "y" abhĂ€ngt (z heben die Arme hoch und sagen etwas wie "Python ist zu schwierig." und gehen Sie zurĂŒck zu MATLAB. Das Zen von Python sagt, dass es einen offensichtlichen Weg geben sollte, dies zu tun. Das heißt, insbesondere alles auf pypi von numpy hat ein gewisses Gewicht, dass es stabil ist, oder mehr als zufĂ€lliges Nebenprojekt, mit Ausnahme von cgohlke. Offensichtlich werden Entthought und Anakonda zumindest in der Industrie als stabiler wahrgenommen.

Ich denke, kurzfristig sollte der ATLAS-Build mit der Vorbehaltsbotschaft steigen, dass es nicht möglich ist, mit Scipy zu bauen. Wenn dieser Buildbot automatisiert werden kann, ist das erledigt, oder? ZukĂŒnftige 8-Stunden-ATLAS-Builds sollten hoffentlich selten sein. Vielleicht wird das Problem mit Windows 64bit eines Tages gelöst. Das SSE2-Ausnahmeproblem ist eine EnttĂ€uschung, daher eine weitere Warnmeldung auf pypi. Auch ATLAS ist bereits der Standard unter Linux und war der Standard in den vorherigen Superpack bdist_winst-Paketen, was diesen Weg noch mehr unterstĂŒtzt.

Dann haben Sie sich fĂŒr die nahe Zukunft bereits fĂŒr mingwpy entschieden. Hier gibt es viele Möglichkeiten, die jetzt nicht gelöst werden mĂŒssen.

Langfristig freue ich mich, dass Blis/Flame die Zukunft ist. Es ist ein bisschen beĂ€ngstigend, dass viele unserer mathematischen Werkzeuge vom FORTRAN-Code aus den 70er Jahren abhĂ€ngen. AC-only-Lösung ist ein großer Durchbruch und imo etwas, das man mit Begeisterung unterstĂŒtzen kann.

Aber mehr ist fĂŒr erfahrene Entwickler immer besser, daher ist es auch gut, die Dokumentation fĂŒr nicht standardmĂ€ĂŸige Optionen am Leben zu erhalten, wenn solche erfahrenen Entwickler die Zeit und Lust haben, dann zu bauen und zu testen.

Wenn Sie nicht versuchen, einen der optimierten Kernel in Blis zu verwenden, werden Sie wahrscheinlich nicht auf das Problem (Edit: Singular) stoßen, das ich dort seit 2014 geöffnet habe. Ich denke, das Build-System verwendet nur Symlinks fĂŒr die optimierten Kernel, so dass Sie das Git von msys2 nicht verwechseln, wenn Sie versuchen wĂŒrden, dort nur die Referenzkonfiguration zu erstellen. Das Erstellen von Cygwin hat zuletzt funktioniert, obwohl es schon einige Zeit her ist und ich mich nicht erinnern kann, was ich möglicherweise lokal Ă€ndern musste. Es lohnt sich, zu bauen, zu testen und zu vergleichen, wenn die Alternative Atlas ist, aber betrachten Sie es als unbewiesen und daher auf seine eigene Weise mit hohem Risiko, bis Sie es tun.

@mikofski um fair zu sein Lapack ist aus den 90ern, es ist wirklich der Fortran-Elefant im Raum.

@tkelman : Um es klar zu sagen, die von Ihnen eingereichten Probleme betrafen speziell das Windows-native Build-System, oder? Aus Neugier habe ich gerade versucht, Blis fĂŒr Windows unter Linux zu kompilieren (mit dem Cross-Compiler mingw-w64, der aus Debian-Paketen installiert wurde), und ich war ĂŒberrascht, dass es nur ~ 2 Minuten dauerte. Ich habe "./configure reference; make -j4 CC=x86_64-w64-mingw32-gcc AR=x86_64-w64-mingw32-ar CPICFLAGS=" gemacht und alles hat einfach funktioniert. ( CPICFLAGS= soll nur eine Reihe von Warnungen ĂŒber das "Ignorieren -fPIC , weil das die Standardeinstellung ist" unterdrĂŒcken, und wahrscheinlich musste ich AR nicht einmal ĂŒberschreiben, aber hey warum nicht.) Ich habe ein paar Warnungen ĂŒber printfs in bli_pool.c und bli_fprintm.c erhalten, die %ld verwenden, um intptr Ganzzahlen zu drucken, also gibt es wahrscheinlich ein paar LLP64-Knicke auszuarbeiten.

@rgommers :

Ohne BLIS ausprobiert zu haben, denke ich, dass es sich wie Wahnsinn anhört, numpy Binaries zu versenden, die im Grunde genommen fĂŒr ein wenig aktives Ein-Mann-Projekt erstellt wurden, das nur sehr wenige Leute verwenden.

Du hast absolut recht! Das Problem ist, dass alle unsere Optionen schrecklich sind :-(.

MKL hat also offensichtlich eine definitiv schlechte Lizenz.

ATLAS hat definitiv eine schlechte Leistung, die sich nie verbessern wird.

Und OpenBLAS, ich denke, wir haben an dieser Stelle die Beweise, ist einfach nicht wartbar und wird es wahrscheinlich nicht so bald werden :-(. Das Projekt ist fĂŒnf Jahre alt, es hat immer noch grundlegend kaputte Sachen wie Julians Beispiel von zufĂ€lligem volatile s und dem Threading-Code, der keine Mutexe verwendet, gibt es kein offensichtliches Interesse im Upstream, dieses Zeug zu reparieren, und es ist immer noch so, dass, sobald wir BinĂ€rdateien an eine kleine Gruppe (numpy-Diskussion) zum Testen senden , erhalten wir sofort 2-3 völlig mysteriöse, schwer oder unmöglich zu reproduzierende AbstĂŒrze und Fehler mit falschen Ergebnissen zurĂŒck.Und das BLIS-Papier argumentiert ziemlich ĂŒberzeugend, dass dies eher mit EinschrĂ€nkungen der grundlegenden GotoBLAS-Architektur zu tun hat als etwas, das leicht behoben werden kann, indem man einfach ein bisschen mehr Zeit damit aufwendet, Dinge zu polieren. verbrachte Zeit stabili Der alte fragile Code funktioniert nicht zu Ihren Gunsten. Beachten Sie, dass der am meisten reproduzierbare Fehler in der numpy-discussion-Liste einer ist, von dem wir vermuten, dass er im Core2-Kernel von OpenBLAS liegt, einer Mikroarchitektur, die vor 5 Jahren eingestellt wurde.)

Der Grund, warum ich BLIS immer wieder anspreche, ist nicht, dass ich denke, dass BLIS definitiv die Lösung ist, sondern als eine Art kalkulierten Optimismus: BLIS _könnte_ so schnell werden wie MKL/OpenBLAS, so zuverlĂ€ssig wie ATLAS/MKL und so offen fĂŒr die Community- BeitrĂ€ge als OpenBLAS; oder vielleicht auch nicht. Aber es scheint keine anderen Projekte zu geben, die eine wirkliche Hoffnung haben, all diese Kriterien zu erfĂŒllen. [Und das erwĂ€hnt noch nicht einmal die anderen Vorteile, wie die Tatsache, dass es nativ gestrided Arrays unterstĂŒtzen kann; Es ist nicht unvorstellbar, dass wir möglicherweise alle unsere schrecklichen BLAS-Versandcodes fĂŒr SonderfĂ€lle löschen können.]

IIUC, GotoBLAS wurde von einem einzigen Vollzeitentwickler (Kazushige Goto) betreut, der an der UT Austin mit Robert van de Geijn als PI arbeitete. BLIS wird von einem einzigen Vollzeitentwickler (Field G. Van-Zee) betreut, der an der UT Austin mit Robert van de Geijn als PI arbeitet. Es ist also nicht so, dass das nicht funktionieren kann :-) Aber ja, es wird nicht einfach wie von Zauberhand passieren, wenn wir warten - wenn es jemals eine Community von Entwicklern darum geben wird, dann wird es daran liegen, dass eine Community auftaucht Vorgarten mit Zelten wie "Hey, hier sind wir, wir ziehen ein und machen das fĂŒr uns, ich hoffe, es macht Ihnen nichts aus". Und was wir wirklich wissen mĂŒssen, um seine langfristige LebensfĂ€higkeit zu bestimmen, ist zum Beispiel "wie zuverlĂ€ssig ist es wirklich" und "wie anfĂ€llig fĂŒr Patches sind sie" und so weiter, was wir nicht wissen können, es sei denn, wir beginnen es zu testen und einzureichen Patches und so weiter.

Fazit: Ich weiß wirklich nicht, was unsere beste Option ist, aber unsere Zehen in das BLIS-Wasser zu stecken, scheint eine gute Idee zu sein; selbst wenn wir beschließen, dass wir warten wollen, dann lernen wir zumindest etwas.

Ich habe mehrere Ausgaben und ein oder zwei PR eingereicht. Die Tatsache, dass das Repository symbolische Links enthĂ€lt, bedeutet, dass das Erstellen von msys2 fehlerhaft ist (oder nur funktioniert, wenn Sie die msys2-Optionen auf eine bestimmte Weise festlegen). Cross-Building von Cygwin oder Linux (ich wĂŒrde Wein jedoch nicht zutrauen, die Tests durchzufĂŒhren) sollte funktionieren, hatte aber 2014 Probleme mit ausgerichtetem Malloc, und die sandigen Bridge-Kerne hatten in einem Test einen Segfault. Ich habe gerade die SandbrĂŒckenkerne auf dem neuesten Master of Blis mit einem Cygwin-Kreuz (auf einem neueren Skylake-Laptop) neu aufgebaut und der Segfault ist jetzt möglicherweise weg. Wer weiß, wann oder was es behoben hat, mĂŒsste halbieren.

Ich denke, dies wurde bereits erwĂ€hnt, aber wir könnten ATLAS-BinĂ€rdateien fĂŒr SSE2, SSE3, AVX erstellen und sie in eine Verzeichnisstruktur wie:

numpy/.lib/sse2/numpy-atlas.dll
numpy/.lib/sse3/numpy-atlas.dll
numpy/.lib/avx/numpy-atlas.dll

Wir könnten dann numpy/_distributor_init.py verwenden, um die aktuelle CPU zu ĂŒberprĂŒfen und die passende Bibliothek vorab zu laden.

Ich habe @njsmith vorgeschlagen, im Grunde dasselbe zu tun, aber fĂŒr GlĂŒck statt Atlas. Es lohnt sich auch zu vergleichen, wie gut das EinfĂ€deln in Blis im Vergleich zu Atlas funktioniert. Die blis-Referenzkonfiguration aktiviert standardmĂ€ĂŸig kein Threading, obwohl das Optimieren einer Definition in einer Header-Datei ausreichen sollte, um dies zu Ă€ndern.

Ich habe Appveyor eingerichtet, um die BinÀrdateien zu erstellen. Die aktuelle Iteration des Builds lÀuft hier: https://ci.appveyor.com/project/matthew-brett/np-wheel-builder/build/1.0.10

Gebaute RĂ€der kommen hier an: https://84c1a9a06db6836f5a98-38dee5dca2544308e91131f21428d924.ssl.cf2.rackcdn.com

Alle weiteren Knicke im Appveyor-Build sollten leicht auszubĂŒgeln sein, daher denke ich, dass diese RĂ€der bereit sind, auf pypi hochgeladen zu werden, wenn das erledigt ist, vermutlich irgendwann morgen.

@rgommers , @matthew-brett : BezĂŒglich site.cfg scheint Ihre Antwort nur auf numpy zuzutreffen. Es scheint, dass scipy nicht nach site.cfg im selben Verzeichnis wie setup.py sucht, sondern zuerst in Ihrem Home-Verzeichnis nach site.cfg sucht, bevor numpy als Vorgabe verwendet wird.

OK - Build-Skript lĂ€uft ohne Fehler, einschließlich Tests des installierten Rads: https://ci.appveyor.com/project/matthew-brett/np-wheel-builder/build/1.0.10

RĂ€der hier: http://58688808cd85529d4031-38dee5dca2544308e91131f21428d924.r12.cf2.rackcdn.com/

Ich habe sie auf einem anderen 64-Bit-Rechner und einem anderen 32-Bit-Rechner installiert und getestet.

Also, ich denke, diese sind einsatzbereit. Gibt es EinwÀnde gegen das Hochladen dieser auf pypi?

Es könnte eine gute Idee sein, eine Notiz zu pypi zu haben, die den Unterschied zwischen diesen RÀdern und denen von gohlke (mkl) erklÀrt / verlinkt , um Verwirrung durch Leute zu vermeiden, die sich fragen, warum die RÀder jetzt auf pypi erscheinen und was der Unterschied ist dazwischen sind.

Eine Nebenfrage, sorry, aber ich habe mich gefragt, was

  # Pin wheel to 0.26 to avoid Windows ABI tag for built wheel
  - pip install wheel==0.26

im Appveyor-Skript bedeutet?

Guter Vorschlag zur ErklĂ€rung - ich werde versuchen, dies fĂŒr diese vorhandene Version hinzuzufĂŒgen.

Wheel > 0.26 fĂŒgt dem Windows-Rad ein zusĂ€tzliches ABI-Tag hinzu. Wheel==0.26 gibt einen Radnamen wie diesen:

numpy-1.10.4-cp27-none-win32.whl

Mit Wheel > 0.26 erhalten Sie ein zusÀtzliches ABI-Tag wie folgt:

numpy-1.10.4-cp27-cp27m-win32.whl

(glaube ich) - das spezifiziert die Windows ABI. Dies ist Ă€rgerlich, da frĂŒhere Pip diese Jungs nicht installieren werden, daher scheint mir der No-ABI-Name vorerst besser zu sein.

OK - ich schlage vor, diesen Text zur aktuellen pypi-Seite hinzuzufĂŒgen:

Alle von pypi vertriebenen Numpy-RĂ€der sind BSD-lizensiert.

Windows-RĂ€der sind mit der ATLAS BLAS / LAPACK-Bibliothek verknĂŒpft, die auf SSE2-Anweisungen beschrĂ€nkt ist, sodass Ihre Maschine möglicherweise keine optimale lineare Algebra-Leistung bietet. Siehe http://docs.scipy.org/doc/numpy/user/install.html fĂŒr Alternativen.

Ich wĂŒrde anders sagen:

Diese Windows-RĂ€der haben eine suboptimale Leistung der linearen Algebra (Link zu Benchmarks wie http://speed.python.org), da sie mit der ATLAS BLAS / LAPACK-Bibliothek verknĂŒpft sind, die auf SSE2-Anweisungen beschrĂ€nkt ist (und die nicht eingeschrĂ€nkten Anweisungen sollten) da sein?). Wenn Sie Leistung benötigen, können Sie das mingwpy-Projekt unterstĂŒtzen, das darauf abzielt, auf dieser Plattform kompilierte Python-Erweiterungen mehr Leistung zu bringen. Sehen ??? fĂŒr Details und http://docs.scipy.org/doc/numpy/user/install.html fĂŒr Alternativen.

Nun - die aktuellen numpy / scipy-Versionen von mingwpy verwenden openblas, aber ich denke, das hat nichts mit mingwpy vs MSVC als Compiler zu tun. Wir könnten openblas auch mit diesen RĂ€dern versenden, aber ich machte mir Sorgen, dass openblas noch nicht zuverlĂ€ssig genug war, um es in einem von uns unterstĂŒtzten Standardrad zu verwenden.

OpenBlas scheint stabil genug zu sein, ich weiß, dass Anaconda es fĂŒr ihr Linux verwendet
baut jetzt. Es gibt keine aktualisierten Windows Python 3.5 x64-Builds
dort zeigen Benchmarks, dass es MKL in etwa gleich ist. Ich wĂŒrde es auf jeden Fall versuchen, wenn
jemand könnte ein Rad zusammenbauen.
Am 16. Februar 2016, 22:36 Uhr, schrieb "Matthew Brett" [email protected] :

Nun - mingwpys aktuelle numpy / scipy-Versionen verwenden Openblas, aber ich
denke, das hat nichts mit mingwpy vs MSVC als Compiler zu tun. Wir könnten auch versenden
openblas mit diesen RĂ€dern, aber ich war besorgt, dass openblas noch nicht war
zuverlĂ€ssig genug, um in einem von uns unterstĂŒtzten Standardrad verwendet zu werden.

—
Antworten Sie direkt auf diese E-Mail oder zeigen Sie sie auf GitHub an
https://github.com/numpy/numpy/issues/5479#issuecomment -185017546.

In Ordnung. Ich bin nur verwirrt ĂŒber die Quelle der suboptimalen Leistung - ich benutze diese BLAS-Bibliotheken nicht und weiß nicht, was sie tun und was der Unterschied ist . =) Ich dachte, dass das Fehlen eines offenen Compilers mit optimaler Leistung das Problem ist.

@mrslezak : In Bezug auf OpenBLAS kann ich dem durchaus zustimmen. Das bereitgestellte OpenBLAS-Paket auf Cygwin, gekoppelt mit dem Lapack-Paket, scheint in der Lage zu sein, sowohl NumPy als auch SciPy problemlos zu erstellen.

@mrslezak : Wo finde ich Informationen zu den Benchmarks? Ich versuche, eine Dokumentation zum Erstellen von Quellcode aus Windows fĂŒr scipy.org zu schreiben, und das wĂ€re eine großartige Referenz fĂŒr jeden, der Leistung mit diesen Bibliotheken benötigt.

Vielleicht ist der Shotgun-Ansatz die richtige Idee? Etwas wie:

  • Stabil: ATLAS mit Leistung, sse2 Vorbehalte
  • Dev: OpenBLAS siehe mingwpy und binstar
  • Alt: MKL @cgohlke , MKL @continuum und @enthought
    Achtung: BinÀrdateien sind nicht kompatibel.
    Links fĂŒr weitere Informationen bei scipy und Matthew Bretts github numpy Wiki

@techtonik Ich wĂŒrde erwarten, dass GCC bei gleichwertigem Code, den alle diese Compiler erstellen können, etwas schlechter abschneidet als MSVC oder ICC. Das Problem ist das Fehlen eines kostenlosen (python.org-cpython-kompatiblen) Compilers, der eine konkurrenzfĂ€hige Version von Lapack erstellen kann, die sich in Fortran befindet (SciPy hat auch andere Fortran-Komponenten). Der reine BLAS-Teil von OpenBLAS (und wahrscheinlich auch Atlas) kann tatsĂ€chlich mit MSVC gebaut werden, aber MSVC kann keines der Teile bauen, die eine Inline-Montage erfordern, also wird es auch nicht wettbewerbsfĂ€hig sein.

Ich habe kein 64-Bit-MKL zur Hand (ich habe vielleicht irgendwo ein 32-Bit-MKL von Conda, wenn ich graben gehe), aber hier sind einige Benchmarks, die in Julia ausgefĂŒhrt werden und die Atlas-DLL vergleichen, die @matthew-brett mit Referenz und Sand gebaut hat. Bridge-Konfigurationen von BLIS und den OpenBLAS-Build, der mit Julia geliefert wird https://gist.github.com/54da587b01b7fb163103

Zusammenfassung: openblas (auf einem Skylake ist der neueste Openblas-Kernel Haswell) ist 23x schneller als Atlas, 44x schneller als Referenz-Blis und 5,5x schneller als Sandybridge-Blis. Ich könnte Haswell Blis versuchen, um zu sehen, wie viel nÀher es ist.

Hum - Ich nehme an, Sie haben nicht zufĂ€llig Build-Skripte fĂŒr Ihre BLIS-Kompilierungen herumliegen?

Glauben Sie, dass es sich lohnen wĂŒrde, BLIS-Builds fĂŒr eine Reihe von Prozessoren zu erstellen und zur Laufzeit einen auszuwĂ€hlen? Gibt es eine kleine Untergruppe von Prozessoren, die den Großteil der Leistung fĂŒr die meisten Prozessoren abdecken wĂŒrde?

Es steht in den Kommentaren, aber hier (ausgefĂŒhrt in Cygwin 64)

cd build
for i in reference dunnington sandybridge haswell bulldozer piledriver carrizo; do
  mkdir -p ../build64$i
  cd ../build64$i
  ../configure $i
  cp /usr/x86_64-w64-mingw32/sys-root/mingw/bin/lib* .
  make -j8 all test CC=x86_64-w64-mingw32-gcc CPICFLAGS="" BLIS_ENABLE_DYNAMIC_BUILD=yes
done

Folgendes ist verfĂŒgbar: https://github.com/flame/blis/tree/master/config

In Bezug auf Intel x86 wĂŒrden die Referenz, Dunnington, Sandybridge und Haswell einen recht guten Bereich abdecken. Auch Bulldozer, Piledriver und Carrizo fĂŒr AMD (das kĂŒrzlich die Entwicklung von ACML zugunsten von BLIS eingestellt hat, also zumindest eine Stimme dafĂŒr).

Es gibt einen Code zur automatischen Erkennung in https://github.com/flame/blis/tree/master/build/auto-detect , der möglicherweise wiederverwendbar ist (der derzeit nur zur Konfigurationszeit in BLIS ausgefĂŒhrt wird, aber das bedeutet nicht, dass es so ist konnte nicht fĂŒr andere Zwecke wiederverwendet werden), je nachdem, ob in Python bereits ein StĂŒck CPU-Familien-Identifikationscode herumliegt, den Sie verwenden möchten.

abhĂ€ngig davon, ob in Python bereits ein StĂŒck CPU-Familien-Identifikationscode herumliegt

Hilft das? http://stackoverflow.com/a/35154827/239247

Sie wollen hauptsĂ€chlich die davon abgeleitete Prozessorfamilie, aber https://github.com/flame/blis/blob/master/build/auto-detect/cpuid_x86.c ist nicht gerade lang oder kompliziert. Die numexpr-Quelle, die von SO dort verlinkt ist, fĂŒhrt einen Regex-Abgleich fĂŒr die String-Ausgabe durch (zumindest unter Linux) und sieht nicht so aus, als ob sie viele aktuelle Architekturen aufgelistet hĂ€tte.

openblas ist 3,4x schneller als Haswell Blis und 17x schneller als Dunnington (im Grunde das gleiche wie Nehalem Penryn, denke ich) Blis. Interessant ist, dass ich glaube, dass das Multithreading bei diesen LĂ€ufen nicht reibungslos funktioniert. Das Standard-Setup aktiviert openmp fĂŒr sandybridge und haswell, vielleicht wĂŒrden die mingw-pthreads besser funktionieren. Die Einstellung OMP_NUM_THREADS schien keinen großen Unterschied zu machen.

Ich glaube, dass ATLAS 3.11 auf 64 Bit viel besser sein sollte als die 3.10-Version, aber ich kann es im Moment nicht bauen und hoffe auf Hilfe von Clint Whaley.

Tony - Ich nehme an, Sie haben keine Zeit / Energie, um das 32-Bit-ATLAS-Rad zu testen? Es sollte relativ viel besser sein.

Ich bevorzuge es, mit diesen ATLAS-RĂ€dern fortzufahren, damit andere Verpacker sich darauf verlassen können, dass wir irgendeine Art von Rad liefern. Wenn wir einen guten Weg finden, die Leistung zu verbessern, wird bald eine neue numpy-Version erscheinen, und selbst fĂŒr 1.10.4 können wir immer eine Wartungsversion erstellen, um die RĂ€der zu aktualisieren.

@matthew-brett: kurze Frage, warum kann numpy die ATLAS -Builds auf Cygwin nicht erkennen? Ich konnte sie in einer nativen Windows-Umgebung einwandfrei erkennen, aber als ich versuchte, Ihr Skript in Cygwin auszufĂŒhren, wurde numpy nicht mit ATLAS kompiliert.

Wenn Sie Cygwins Python verwenden, benötigen Sie wahrscheinlich eine von Cygwin erstellte Version von Atlas, damit die Dinge kompatibel sind.

32-Bit-Julia scheint die 32-Bit-Atlas-DLL nicht zu öffnen. Nicht sicher warum, vielleicht weil wir bereits eine 32-Bit-Openblas haben und die Symbolnamen widersprĂŒchlich sind?

Aber @matthew-brett-Version ist mit Cygwin gebaut, und deshalb bin ich verwirrt.

Cygwin-Build-Umgebung, querkompiliert zu einer mingw-Bibliothek. Sehen Sie, wie es mit msvcrt.dll und nicht mit cygwin1.dll verknĂŒpft ist?

atlas-depwalker

Sobald ich den Kommentar gepostet hatte, vermutete ich plötzlich, dass dies der Fall sein könnte. Leider sieht es so aus, als mĂŒsste ich es von Grund auf neu bauen. Danke @tkelmann !

dlopen-Problem herausgefunden (ref https://github.com/matthew-brett/np-wheel-builder/pull/1 und https://github.com/JuliaLang/julia/issues/15117 versteckte die nĂŒtzliche Version von die Fehlermeldung).

Auf 32 Bit ist Atlas 3,6 mal langsamer als Openblas. 32-Bit-Openblas ist 3x langsamer als 64-Bit-Openblas fĂŒr das gleiche GrĂ¶ĂŸenproblem. Die neuesten paar Kernel-Familien sind in openblas auf 32-Bit-Systemen nicht aktiviert.

...
Fazit: Ich weiß wirklich nicht, was unsere beste Option ist, aber unsere Zehen in das BLIS-Wasser zu stecken, scheint eine gute Idee zu sein; selbst wenn wir beschließen, dass wir warten wollen, dann lernen wir zumindest etwas.

Das ist wahrscheinlich nĂŒtzlich, zumindest einige Tests/Benchmarking. Aber zu diesem Zeitpunkt hat es so ziemlich nichts mit unseren _Windows_-Problemen zu tun. BLIS ist derzeit nur Linux; Es gibt eine offene PR fĂŒr OSX-Build-UnterstĂŒtzung, und Windows ist sehr weit entfernt. Und noch schlimmer, ich habe es gestern auf 32-Bit-Linux ausprobiert und selbst das funktioniert nicht. ./configure auto && make stĂŒrzt bei einigen Assembler-Codes fĂŒrchterlich ab (fĂŒr sandybridge ). Ich kann nur reference bauen.

Also denke ich, dass Schritt 0 darin besteht, UnterstĂŒtzung fĂŒr BLIS in numpy.distutils hinzuzufĂŒgen (hat das meiste bereits funktioniert), Schritt 1 zum Testen unter Linux, um zu sehen, dass mindestens reference funktioniert, Schritt 2 etwas Benchmarking, ..., Schrittetwas unter Windows.

@matthew-brett Ihr vorgeschlagener Text fĂŒr PyPI scheint mir in Ordnung zu sein. Welche pip -Versionen ignorieren den Namen mit ABI-Tag? Pip nervt Sie heutzutage sehr, sich selbst zu aktualisieren, daher wĂŒrde ich erwarten, dass viele Leute die neueste Version haben. Und Versionen, die >1(.5) Jahre alt waren, installierten standardmĂ€ĂŸig ĂŒberhaupt keine RĂ€der.

@rgommers Meine obigen Tests waren unter Windows. Nicht MSVC, aber mingwpy oder openblas werden dort nicht viel anders machen - Clang wĂŒrde wahrscheinlich funktionieren, braucht aber eine Reorganisation in Blis, um Symlinks zu vermeiden.

Ich habe Julias oder Numpys Tests gegen Blis nicht durchgefĂŒhrt, aber Blis hat seine eigenen Unit-Tests bestanden. Die Dinge liefen viel besser als meine Erfahrung von 2014 ließ mich denken, dass sie es tun wĂŒrden. Sie mĂŒssen noch herausfinden, wie Multithreading richtig funktioniert, aber damit haben Sie möglicherweise bereits eine wettbewerbsfĂ€hige Leistung.

Scheint, dass die Referenzkonfiguration das einzige Ding in Blis ist, das derzeit fĂŒr 32-Bit-x86 funktioniert. Das wĂŒrde das Schreiben neuer Assembler-Mikrokernel erfordern, von denen ich glaube , dass dies nicht der Fall ist, siehe die Kommentare von njsmith unten.

@tkelman , bezĂŒglich OpenBLAS-Kernel fĂŒr 32-Bit https://github.com/numpy/numpy/issues/5479#issuecomment -185096062: laut einer priv. Nachricht, die ich vor einiger Zeit von Werner Saar bekam, es gibt niemanden, der an Intel 32-Bit-Kernels fĂŒr neuere Architekturen arbeitet. Dies ist also eine Tatsache, die sich in Zukunft wahrscheinlich nicht Ă€ndern wird. Der Fokus liegt auf Intel 64bit und ARM Prozessoren.

@tkelman , zur C-Laufzeit https://github.com/numpy/numpy/issues/5479#issuecomment -185055210: IMHO ist dies nicht kritisch, da ATLAS und OpenBLAS die Ressourcen der C-Laufzeit nicht teilen (Dateideskriptoren und Heap ). _Hoffentlich habe ich recht_. FĂŒr ATLAS-Builds kann es nĂŒtzlich sein, die StackgrĂ¶ĂŸe zu erhöhen. Dies kann beim Verlinken als Flag angegeben werden, dh:

-Wl,--stack,16777216

zu den Diskussionen ATLAS vs. OpenBLAS: Dank @matthew-brett gibt es jetzt SSE2-basierte ATLAS-DLLs. Dieser Atlas-Build sollte mit einem OpenBLAS-Build gegen ein SSE2-fĂ€higes Ziel verglichen werden (oder einfach OPENBLAS_CORETYPE=NORTHWOOD setzen - im Grunde PENTIUM4), um die CPU-Laufzeiterkennung zu deaktivieren. NatĂŒrlich kann ein generischer OpenBLAS-Build dank der CPU-Laufzeiterkennung viel mehr CPU-Varianten ausnutzen. Dies ist einer der GrĂŒnde, warum OpenBLAS im Vergleich zu ATLAS leistungsfĂ€higer ist. Eine andere Frage ist die ZuverlĂ€ssigkeit von OpenBLAS. Vielleicht könnte ein Repository mit gesammelten BLAS-, LAPACK-Tests helfen.

zu BLIS/Flame: interessant, aber zumindest fĂŒr heute eine hoch hĂ€ngende Frucht.

Die Entscheidungsfindung zwischen ATLAS und OpenBLAS ist mir jedoch nicht klar.

Ralf - pip 8 wird die RĂ€der mit den neuen Windows ABI-Tags installieren, pip 7 nicht. Pip 7 und Pip 8 installieren die RĂ€der ohne die ABI-Tags ohne Vorwarnung.

Es gibt immer noch viele Pip 7s da draußen, es wurde im August 2015 veröffentlicht - daher wĂŒrde ich viel lieber bei dem kompatibleren Namen bleiben, zumindest fĂŒr eine Weile.

+1 bei der Untersuchung von BLIS. Das scheint eine gute langfristige Lösung zu sein. Haben wir Eigen ĂŒberhaupt in Betracht gezogen? Sie unterstĂŒtzen den Aufbau einer partiellen LAPACK-Schnittstelle und die Lizenz fĂŒr den grĂ¶ĂŸten Teil des Codes ist MPL2. Das mag fĂŒr NumPy gut genug sein.

Ich habe anhand des BLIS-CPU-Erkennungscodes festgestellt, dass er sehr oft auf die Referenzimplementierung zurĂŒckgreift, wenn er keine AVX-Anweisungen findet, die noch ziemlich neu sind.

Ian: Dies ist der Zustand fĂŒr Eigen seit ungefĂ€hr einem Jahr: http://mingwpy.github.io/blas_lapack.html#eigen - daher glaube ich, dass es etwas Arbeit wĂ€re, eine brauchbare Bibliothek fĂŒr Numpy zu erstellen.

Und noch schlimmer, ich habe es gestern auf 32-Bit-Linux ausprobiert und selbst das funktioniert nicht. ./configure auto && make stĂŒrzt bei einigen Assembler-Codes (fĂŒr Sandybridge) fĂŒrchterlich ab. Ich kann nur Referenz bauen.

Wenn Sie sich den Inhalt von config/ ansehen -- die verschiedenen benannten "Konfigurationen" (wie "sandybridge", "haswell") sind eigentlich vorgefertigte "Starter"-Konfigurationen, die eine Reihe vordefinierter Einstellungen enthalten (nicht nur CPU-Tuning-bezogene Einstellungen, aber auch Threading-Modus-Einstellungen, Compiler-Einstellungen usw.). Und die Konfiguration namens "Sandybridge" ist eine x86-64-Konfiguration. Klingt nach einem Fehler, der von der Autokonfiguration ausgewĂ€hlt wurde, aber ja, auf x86-32 wird es nicht funktionieren :-). BLIS scheint mit 32-Bit-x86-Kernels ausgeliefert zu werden (siehe kernels/x86 ), obwohl es im Moment so aussieht, als wĂŒrde keine der vorgefertigten Konfigurationen sie verwenden. Das Erstellen neuer Konfigurationen ist meist trivial; Die einzige Magie befindet sich in der Datei bli_kernel.h , die den inneren Kernel + einige PuffergrĂ¶ĂŸen benennt. Wir könnten Upstream nachfragen, ob sie VorschlĂ€ge fĂŒr x86-32 haben.

Ebenfalls:

BLIS ist derzeit nur Linux; Es gibt eine offene PR fĂŒr OSX-Build-UnterstĂŒtzung und Windows ist sehr weit entfernt

Ein paar Kommentare weiter oben, @tkelman erstellt und testet BLIS unter Windows :-)

Der vorherige rohe test_dot Benchmark mit OpenBLAS 0.2.12:

In [2]: %timeit test_dot()
1 loop, best of 3: 449 ms per loop

Im Vergleich zu (vorheriges Ergebnis von) MKL

In [9]: %timeit test_dot()
1 loop, best of 3: 764 ms per loop

64-Bit-ATLAS:

In [10]: %timeit test_dot()
1 loop, best of 3: 2.41 s per loop

Wenn ich also openblas und MKL (danke, conda) seriell mit der Haswell BLIS-Konfiguration vergleiche, liegen sie alle innerhalb von höchstens 10-20% auf dgemm. Hier ist eine Dockerdatei, die erfolgreich auf Docker Hub aufgebaut wurde, um Windows-DLLs jeder Konfiguration quer zu kompilieren (außer Bulldozer, der nicht richtig verlinkt wurde https://github.com/flame/blis/pull/37#issuecomment-185480513, na ja) : https://github.com/tkelman/docker-mingw/blob/09c7cadd5d682066cea89b3b97bfe8ba783bbfd5/Dockerfile.opensuse

Vielleicht möchten Sie versuchen, etwas Ähnliches wie Travis' services: docker -Konfiguration anzuschließen und mit der Bereitstellung binĂ€rer Artefakte fĂŒr Github-Releases/bintray/was auch immer zu spielen.

Ich habe mir die BLIS-CPU-Erkennung angesehen -> Vorlagencode: https://raw.githubusercontent.com/flame/blis/master/build/auto-detect/cpuid_x86.c

Hier ist eine Python-Umschreibung, die ein bisschen liberaler sein sollte, wenn es um die Annahme einer der erweiterten Vorlagen geht (es ist wahrscheinlicher, dass das Betriebssystem AVX verwenden kann als der C-Code): https://gist.github.com/matthew-brett /a53778f99b7062cc332d

Auf allen Maschinen, auf denen ich getestet habe, gibt dieser Algorithmus 'Referenz' zurĂŒck - wahrscheinlich, weil ich alte Maschinen habe, die niemand sonst verwenden wollte, um sie fĂŒr meine Buildbot-Farm zu retten.

Das Kompilieren von numpy gegen die Referenz-BLIS ohne Lapack ergibt Folgendes auf meinem groben Benchmark:

In [6]: %timeit test_dot()
1 loop, best of 3: 16.2 s per loop

Nur das Punktprodukt von zwei (1000, 1000) Arrays betrÀgt 12 Sekunden. Wie Tony auch festgestellt hat, ist Referenz BLIS die schlechteste unserer Optionen, ungefÀhr der bibliotheksfreie Standard-Build von numpy mit lapack_lite.

Ich denke, wir werden entweder mehr Vorlagen fĂŒr Ă€ltere Maschinen oder eine großzĂŒgigere CPU-Erkennung -> Vorlagenzuordnung benötigen, um auf einer Vielzahl von Maschinen eine angemessene Leistung zu erzielen.

@matthew-brett wann können wir erwarten, dass die neuen ATLAS 64-Bit-Windows-RĂ€der hochgefahren sind? Welche Version? v1.10.2? Werden sie nur bei pypi oder auch bei Source Forge sein? Werden Sie irgendeine Art von AnkĂŒndigung machen? Vielen Dank!

@matthew-brett wie war das VerhĂ€ltnis zwischen Atlas und Referenzblis fĂŒr Sie auf derselben Maschine? Vergleichbar mit dem Faktor von etwa 2, den ich gesehen habe? Ich habe Multithreading in Blis zum Laufen gebracht, ich habe nur nicht richtig rtfm (https://github.com/flame/blis/wiki/Multithreading), es wird nicht automatisch aktiviert und es gibt 4 verschiedene Umgebungsvariablen zum Spielen . Mit diesem Patch https://gist.github.com/0fc9497a75411fcc0ec5 um pthread-basierte parallele Blis fĂŒr alle Configs zu aktivieren und BLIS_JC_NT=1 BLIS_IC_NT=2 BLIS_JR_NT=2 BLIS_IR_NT=2 zu setzen, ist die Haswell Blis grundsĂ€tzlich mit mkl und openblas auf meinem Rechner verbunden. Wenn ich nur BLIS_JR_NT auf 2 setze, ist die parallele Referenz-Blis weitestgehend auf den Atlas aufgeholt und mit 3 Threads schneller.

@tkelman IMO wĂ€re es nĂŒtzlich, wenn Sie Ihre Fortschritte bei BLIS auf den NumPy GitHub Wiki-Seiten dokumentieren könnten. Ich denke auch, dass es interessant sein könnte, einen Ă€hnlichen Plan wie mingwpy fĂŒr die Herstellung eines NumPy-BLIS-FLAME-Rads (und eines SciPy-BLIS-FLAME-Rads, wenn ĂŒberhaupt möglich?) vorzuschlagen.

@tkelman : um sicherzustellen, dass ich klar bin - Ihr Atlas ist eingefÀdelt, oder?
Eine andere zu berĂŒcksichtigende Sache ist das HinzufĂŒgen -msse2 oder Ă€hnlichem zu den reference Build-Einstellungen -- es sieht so aus, als ob es standardmĂ€ĂŸig maximal kompatibel ist und es dem Compiler nicht erlaubt, SSE zu verwenden, aber zumindest in numpy-land Ich weiß, dass wir aus anderen GrĂŒnden sowieso auf SSE2 als unterstĂŒtzte Mindestkonfiguration aufsteigen...

Ich weiß nicht, ob FLAME im Moment relevant ist oder nicht im Vergleich zu regulĂ€rem LAPACK - wir möchten fragen.

Vielleicht sollten wir eine neue Ausgabe fĂŒr die BLIS-Sachen eröffnen, anstatt diese weiter zu ĂŒberladen :-)

FĂŒr diesen Thread - ich denke, wir können bereits ein Rad mit verschiedenen zur Laufzeit ausgewĂ€hlten BLIS-Kernels liefern, indem die gleichen Regeln verwendet werden, die BLIS zur Build-Zeit verwendet, aber ich denke, das wĂŒrde dazu fĂŒhren, dass viele Maschinen mit Referenz-BLIS und daher schlechter sind Leistung als 64-Bit-ATLAS, obwohl 64-Bit-ATLAS unter Windows besonders schlecht ist (fĂŒr ATLAS).

Aber - wenn der Referenz-Build schneller ist als der 64-Bit-ATLAS - sagen wir mit -msse2 - wÀre das eine echte Option.

SSE2 ist die Mindestkonfiguration fĂŒr 64-Bit, daher ist es sicher, etwas wie -mfpmath=sse -msse2 fĂŒr die Referenzkompilierung zu verwenden.

Vielleicht sollten wir eine neue Ausgabe fĂŒr die BLIS-Sachen eröffnen, anstatt diese weiter zu ĂŒberladen :-)

Das wĂ€re eine gute Idee (Bearbeiten: Darf ich vorschlagen, dass es den Titel "Occupy BLIS" trĂ€gt, angesichts der Meinung von @njsmith ĂŒber Rasen in https://github.com/numpy/numpy/issues/5479#issuecomment-184472378?) . Ich denke, es wĂŒrde ausreichen, wenn @matthew-brett mit dem Hochladen seiner vorhandenen Atlas-RĂ€der fortfĂ€hrt, um dieses vorerst zu schließen, wobei die zukĂŒnftige Arbeit neuen Problemen ĂŒberlassen bleibt.

um sicher zu gehen, dass ich klar bin - Ihr Atlas ist eingefÀdelt, oder?

Mein Atlas ist die DLL von https://github.com/matthew-brett/np-wheel-builder/tree/d950904f19309db103e676d876ea681b6a6b882e/atlas-builds , aber ich muss noch sehen, dass mehr als 1 Thread erfolgreich verwendet wird. Fehlt mir eine Umgebungsvariable?

Eine andere zu berĂŒcksichtigende Sache ist das HinzufĂŒgen -msse2 oder Ă€hnlichem zu den reference Build-Einstellungen -- es sieht so aus, als ob es standardmĂ€ĂŸig maximal kompatibel ist und es dem Compiler nicht erlaubt, SSE zu verwenden

SSE2 ist Teil der x86_64-Spezifikation, daher wĂ€re dies nur bei 32 Bit relevant. In Julia fĂŒgen wir -march=pentium4 fĂŒr unsere 32-Bit-Builds hinzu.

Ich weiß nicht, ob FLAME im Moment relevant ist oder nicht im Vergleich zu regulĂ€rem LAPACK - wir möchten fragen.

Flamme noch nicht angerĂŒhrt, aber es lohnt sich, damit zu spielen. Irgendwann können Sie WIndows Clang möglicherweise als Backup-Plan-Alternative zu mingwpy verwenden. (Bearbeiten: TatsĂ€chlich repariert dies das Fortran in Scipy nicht, also vielleicht nicht)

@matthew-brett: Ich denke (könnte falsch sein) der dunnington -Kernel erfordert nur SSE3, von dem die Steam-Hardwareumfrage behauptet, dass es auf 99,94% der Maschinen vorhanden ist (im Vergleich zu 99,99% fĂŒr SSE2). Es scheint also falsch zu sein, wenn Sie feststellen, dass die meisten Systeme damit nicht umgehen können - ich weiß nicht, ob das ein Fehler in ihrem CPU-Code ist, ob Sie irgendwie einen wirklich nicht reprĂ€sentativen Satz von Testmaschinen haben oder nach meinem VerstĂ€ndnis von dem, was dieser Kernel benötigt.

Ich habe oben eine Python-Neufassung des CPU-Erkennungscodes gepostet. Ich vermute, die Vorlagenauswahl ist konservativ und verweist standardmĂ€ĂŸig darauf, wo eine andere Vorlage möglicherweise funktioniert hat.

Um mich selbst daran zu erinnern, auf BLIS zu verlinken, brauchte ich ein site.cfg wie:

[blas]
blas_libs = numpy-blis-reference
library_dirs = c:\code\blis\test\lib
include_dirs = c:\code\blis\test\include

Ich habe dies auch getan, ich gehe davon aus, dass es notwendig ist (Patch relativ zu numpy 1.10.4):

diff --git a/numpy/distutils/system_info.py b/numpy/distutils/system_info.py
index d7eb49e..3cb7f95 100644
--- a/numpy/distutils/system_info.py
+++ b/numpy/distutils/system_info.py
@@ -1680,18 +1680,11 @@ class blas_info(system_info):
         info = self.check_libs(lib_dirs, blas_libs, [])
         if info is None:
             return
-        if platform.system() == 'Windows':
-            # The check for windows is needed because has_cblas uses the
-            # same compiler that was used to compile Python and msvc is
-            # often not installed when mingw is being used. This rough
-            # treatment is not desirable, but windows is tricky.
-            info['language'] = 'f77'  # XXX: is it generally true?
-        else:
-            lib = self.has_cblas(info)
-            if lib is not None:
-                info['language'] = 'c'
-                info['libraries'] = [lib]
-                info['define_macros'] = [('HAVE_CBLAS', None)]
+        lib = self.has_cblas(info)
+        if lib is not None:
+            info['language'] = 'c'
+            info['libraries'] = [lib]
+            info['define_macros'] = [('HAVE_CBLAS', None)]
         self.set_info(**info)

     def has_cblas(self, info):

Dienstprogramm zur Laufzeiterkennung der CPU: https://github.com/matthew-brett/x86cpu

Ich denke, dies könnte ein Kandidat fĂŒr die Aufnahme in numpy selbst sein, aber wir können auch das einzelne kompilierte cpuinfo -Modul in den numpy-Baum fĂŒr das Windows-Rad kopieren.

Hallo zusammen. Ein Gedanke: Wenn Sie mehrere verschiedene Numpy Wheels veröffentlichen möchten, die mit verschiedenen Vektorbibliotheken erstellt wurden, können Sie verschiedene PyPI-Paketnamen verwenden

  1. https://pypi.python.org/pypi/numpy/1.8.1
  2. https://pypi.python.org/pypi/numpy-mkl
  3. https://pypi.python.org/pypi/numpy-atlas

Ich habe 2 registriert, um zu versuchen, Gohlkes RÀder hochzuladen, aber PyPI hat sie abgelehnt. Gerne können Sie die URL aufrufen.

gh-7294 fĂŒgt numpy.distutils BLIS-UnterstĂŒtzung hinzu. WĂ€re toll, wenn jemand ĂŒberprĂŒfen könnte, ob dies wie erwartet funktioniert.

Es gibt immer noch viele Pip 7s da draußen, es wurde im August 2015 veröffentlicht - daher wĂŒrde ich viel lieber bei dem kompatibleren Namen bleiben, zumindest fĂŒr eine Weile.

Pip 7.0 ist noch nicht so alt, also macht es Sinn.

... BLIS scheint mit 32-Bit-x86-Kernels ausgeliefert zu werden (siehe kernels/x86), obwohl es im Moment so aussieht, als wĂŒrde keine der vorgefertigten Konfigurationen sie verwenden

Das erklÀrt es, danke.

Danke Ralf - werde ich testen.

Mir ist klar, dass dies möglicherweise einen neuen Thread benötigt, aber wir sind jetzt sehr nahe daran, die BLIS-Builds fĂŒr eine Veröffentlichung verwenden zu können.

Ich denke, alles, was wir jetzt brauchen, sind empfohlene Vorlagen fĂŒr eine Maschine mit SSE2 und eine Maschine mit SSE3, die etwas schneller arbeiten als der ATLAS 64-Bit-Windows-Build.

Mir ist klar, dass dies möglicherweise einen neuen Thread benötigt, aber wir sind jetzt sehr nahe daran, die BLIS-Builds fĂŒr eine Veröffentlichung verwenden zu können.

Äh, technisch mag es möglich sein, dass es funktioniert, aber es ist immer noch kein guter Plan, solche Builds ĂŒber die Mauer zu werfen. Wir hatten noch nicht einmal ernsthafte Tests von BLIS unter Linux oder OS X. Also unter Windows, wo die BLIS-FAQ sagt :

Support for building in Windows is also a long-term goal of ours. 
The Windows build system exists as a separate entity within the top-level
windows directory. However, this feature is still experimental and should not 
(yet) be expected to work reliably. Please contact the developers on the blis-devel 
mailing list for the latest on the Windows build system.

, es ist definitiv zu frĂŒh. Neben dem Testen ist auch Benchmarking eine gute Idee, denke ich.

Sicher - aber wie Tony gezeigt hat, ist es eigentlich nicht schwer, BLIS fĂŒr Windows mit Cross-Compiling zu erstellen. Das Experimentelle - glaube ich - ist ihr MSVC-Build-System, das wir nicht verwenden.

Im Moment schlage ich nur vor, BLIS fĂŒr das Windows-Rad zu verwenden, aber es wĂ€re natĂŒrlich sehr gut, es auch fĂŒr die Manylinux-Builds zum Laufen zu bringen.

Ich stimme voll und ganz zu, dass wir BLIS nicht verwenden sollten, wenn wir im Durchschnitt keine signifikante Leistungssteigerung erzielen, und im Moment glaube ich nicht, dass wir dies tun, außer bei sehr neuen Prozessoren. Das könnte mit ein paar neuen Vorlagen trivial behoben werden, ich wĂŒrde gerne wissen, ob dies der Fall wĂ€re.

Der Korrektheit halber stimme ich auch zu. Wie wÀre es, wenn wir das zeigen

a) Alle numpy Tests bestehen auf allen Versionen von Windows;
b) Alle numpy- und scipy-Tests bestehen auf dem Manylinux-System?

Wir können die BLIS-Vorlage zur Laufzeit auswÀhlbar machen und alle Kernel auf einer modernen Maschine testen. Ich kann auch auf einigen alten bösen Maschinen testen.

Im Moment schlage ich nur vor, BLIS fĂŒr das Windows-Rad zu verwenden, aber es wĂ€re natĂŒrlich sehr gut, es auch fĂŒr die Manylinux-Builds zum Laufen zu bringen.

manylinux ist meiner Meinung nach weniger wichtig, da wir dort Paketmanager mit einem vollen Stack haben sowie Benutzer, die Dinge viel einfacher kompilieren können. Sehen wir uns zuerst das ganze Manylinux-Konzept an, bevor wir uns in diesem numpy + BLAS / LAPACK-Kontext darum kĂŒmmern:)

FĂŒr Windows sind unsere Prios meiner Meinung nach:

1) eine Full-Stack-Lösung (benötigt MingwPy, mit einem von OpenBLAS/ATLAS/BLIS)
2) Notbehelfs-BinÀrrÀder (wir haben eines, das mit Ihrem ATLAS-Build hochgefahren wird)
3) Erhöhung der Leistung von (1). Hier könnte BLIS ins Spiel kommen.

Mit BLIS unter Windows mĂŒssen Sie also imho nicht in Eile sein.

Ich stimme voll und ganz zu, dass wir BLIS nicht verwenden sollten, wenn wir im Durchschnitt keine signifikante Leistungssteigerung erzielen, und im Moment glaube ich nicht, dass wir dies tun, außer bei sehr neuen Prozessoren. Das könnte mit ein paar neuen Vorlagen trivial behoben werden, ich wĂŒrde gerne wissen, ob dies der Fall wĂ€re.

Zugegeben, es sollte einen signifikanten Gewinn geben, damit es Sinn macht. Es ist ein bisschen schwer zu ĂŒbersehen, wie viel Arbeit tatsĂ€chlich benötigt wird.

Der Korrektheit halber stimme ich auch zu. Wie wÀre es, wenn wir das zeigen

a) Alle numpy Tests bestehen auf allen Versionen von Windows;
b) Alle numpy- und scipy-Tests bestehen auf dem Manylinux-System?

Das klingt gut. Es wÀre sinnvoll, auch scikit-learn einzubeziehen, es ist ein ziemlich bedeutender Linal-Benutzer.

Mir war nicht bewusst, dass blis und libflame Teil der ACML-Codebasis sind, die vor einiger Zeit als Open Source veröffentlicht wurde:

http://developer.amd.com/community/blog/2015/08/07/open-source-strikes-again-accelerated-math-libraries-at-amd/
http://developer.amd.com/tools-and-sdks/opencl-zone/acl-amd-compute-libraries/

Trotzdem: Wie löst man das Problem, 4 verschiedene beschleunigte BLAS/Lapack-Implementierungen fĂŒr numpy/scipy build mit MSVC oder mingwpy zu vergleichen, um auf zahlreichen CPU-Architekturen getestet zu werden: Pentium4 bis Skylake?

Schöner Fund @carlk , ich habe gesehen, dass sie angekĂŒndigt haben, acml fallen zu lassen und acl zu öffnen, aber ich erinnere mich nicht, dass sie blis/libflame angenommen haben. Die bsd-Lizenz ist eine sehr gute Nachricht! Gibt es eine Möglichkeit, mit AMD und Shpc in ut Austin zusammenzuarbeiten, um Numpy und Julia ins Visier zu nehmen?

Ich war in der Lage, die libblis.a mit msys2 und der Haswell-Konfiguration out-of-the-box zu kompilieren und alle Tests durch das Patchen der Kernel-Symlinks zu bestehen, aber ich konnte libflame nicht bauen - ich bekam den gleichen Fehler "Argumentenliste zu lang" wie in mein blis-discuss-Mailinglisten-Post. Ich persönlich konnte auch nicht herausfinden, wie ich von Lapack aus auf libblis.a verlinke, aber ich habe mich nicht sehr bemĂŒht.

Ist es mit der Community-Lizenzierung von MKL nicht möglich, ein MKL-Rad auf pypi bereitzustellen, sind die Lizenzen wirklich inkompatibel? Oder ist es einfach nicht möglich, Scipy ohne ifort zu bauen?

Ein Problem, und es gehört wahrscheinlich zu scipy, das nicht erwĂ€hnt wurde, sind die verbleibenden Fortran-Dateien in scipy. Entschuldigung fĂŒr die Noob-Frage, aber warum mĂŒssen wir sie verwenden? FĂŒr mich scheint Fortran und das Fehlen eines kostenlosen Multiplattform-Compilers hier das eigentliche Problem zu sein. Ist das nicht das Ziel von mingwpy, das zu lösen. Unter der Voraussetzung entweder kostenloser MKL oder einer zukĂŒnftigen magischen Acl-Blis/Flame könnte jeder mit einem C-Compiler den Scipy-Stack davon bauen, wĂ€ren die *.f-Dateien nicht.

@mikofski , schön zu hören, dass Blis mit msys2 kompiliert werden kann. Gilt das auch fĂŒr libflame? Ich denke, wir brauchen libflame fĂŒr die Lapack-API.
Persönlich _ist_ möglich_, ein MSVC-kompiliertes numpy zu haben und es zusammen mit einem mingwpy-kompilierten scipy zu verwenden. Sie mĂŒssen -mlong-double-64 zu den gcc-Flags hinzufĂŒgen, um sicherzustellen, dass long doubles == double ist.

Es ist schwierig, dieses Verhalten zum Standard fĂŒr gcc zu machen, ich spiele seit einer Woche mit diesem Problem :(

Ich komme morgen mit Scipy Wheels. Diese basieren auf Atlas, der von den numpy Wheels von @matthew-brett bereitgestellt wird.

Trotzdem bin ich momentan dafĂŒr, OpenBLAS zu verwenden.

Ein Problem, und es gehört wahrscheinlich zu scipy, das nicht erwĂ€hnt wurde, sind die verbleibenden Fortran-Dateien in scipy. Entschuldigung fĂŒr die Noob-Frage, aber warum mĂŒssen wir sie verwenden?

Weil es eine Menge sehr nĂŒtzlicher und leistungsstarker Code ist. Und es ist nicht nur BLAS/LAPACK - viele scipy.sparse.linalg , scipy.linalg , scipy.special und scipy.interpolate sind zum Beispiel Fortran. Außerdem ist Scipy nicht das einzige Projekt mit Fortran-Code, es gibt andere Pakete wie bvp_solver sowie eigenen Fortran-Code, den sie mit f2py verpackt haben.

In der Tat, netter Fund, Carl.

Trotzdem: Wie löst man das Problem, 4 verschiedene beschleunigte BLAS/Lapack-Implementierungen fĂŒr numpy/scipy build mit MSVC oder mingwpy zu vergleichen, um auf zahlreichen CPU-Architekturen getestet zu werden: Pentium4 bis Skylake?

Dies erfordert in der Tat ein anstĂ€ndiges automatisiertes Build/Test/Benchmark-Framework. Wir mĂŒssen uns nicht mit sehr alten CPU-Architekturen herumschlagen (solange die Dinge dort funktionieren, ist es in Ordnung) und auch nicht mit MSVC, wĂŒrde ich meinen. Aber es wird noch etwas Arbeit sein, dies richtig einzurichten.

@rgommers danke!

Hallo zusammen. Ein Gedanke: Wenn Sie mehrere verschiedene Numpy Wheels veröffentlichen möchten, die mit verschiedenen Vektorbibliotheken erstellt wurden, können Sie verschiedene PyPI-Paketnamen verwenden

https://pypi.python.org/pypi/numpy/1.8.1
https://pypi.python.org/pypi/numpy-mkl
https://pypi.python.org/pypi/numpy-atlas

Ich habe 2 registriert, um zu versuchen, Gohlkes RÀder hochzuladen, aber PyPI hat sie abgelehnt. Gerne können Sie die URL aufrufen.

@hickford bitte mach das nicht. Es bricht die MKL-Lizenz, um BinĂ€rdateien wie diese weiterzuverteilen (es sei denn, Sie haben eine persönliche Lizenz), und dies ist nicht der richtige Weg. In Zukunft möchten wir vielleicht einige Geschmacksrichtungen ĂŒber Extras verteilen ( numpy[atlas] , numpy[openblas] etc.).

Außerdem ist es wahrscheinlich nicht das Richtige, die RĂ€der eines anderen auf PyPi neu zu verteilen, ohne zu fragen....

Mingwpy und alle Fortran-Probleme, die auf die VerknĂŒpfung mit derselben c-Laufzeit wie cpython angewiesen sind, sind auf @carlkl begrenzt. Das Experimentieren mit BLIS löst weniger Probleme, kann jedoch von jedem unabhĂ€ngig durchgefĂŒhrt werden. Ich habe leider meinen persönlichen Zeitvorrat zum Anschauen von BLIS gerade erschöpft, aber siehe #7294.

Tony - vielen Dank fĂŒr deine Hilfe, sie war von unschĂ€tzbarem Wert.

Ich habe einen Build des spĂ€teren ATLAS (3.11.38) auf 64-Bit hinzugefĂŒgt

https://github.com/matthew-brett/np-wheel-builder

Dies ist ein serieller (ohne Threads) Build, aufgrund von Problemen beim Kompilieren von 3.11.38 unter Windows, aber er sollte etwas schneller sein als 3.10.1 und befindet sich in meinem einfachen Benchmark:

In [2]: %timeit test_dot()
1 loop, best of 3: 1.65 s per loop

im Vergleich zum frĂŒheren 3.10.1-Build (siehe oben):

In [10]: %timeit test_dot()
1 loop, best of 3: 2.41 s per loop

@tkelman - können Sie diesen Build mit Julia vergleichen?

Es tut uns leid, hier mit einer vorherigen Anmerkung zu MKL-BinÀrdateien einzuspringen - Intel bietet die
Community-Version, die eine Weiterverteilung ermöglichen sollte, da sie fĂŒr alle kostenlos ist ...
Am 2. MĂ€rz 2016, 15:08 Uhr schrieb "Matthew Brett" [email protected] :

Ich habe einen Build des spĂ€teren ATLAS (3.11.38) auf 64-Bit hinzugefĂŒgt

https://github.com/matthew-brett/np-wheel-builder

Dies ist ein serieller (ohne Threads) Build, aufgrund von Problemen beim Kompilieren von 3.11.38
unter Windows, aber es sollte etwas schneller sein als 3.10.1 und ist auf meinem simple
Benchmark:

In [2]: %timeit test_dot()
1 Schleife, Best of 3: 1,65 s pro Schleife

im Vergleich zum frĂŒheren 3.10.1-Build (siehe oben):

In [10]: %timeit test_dot()
1 Schleife, Best of 3: 2,41 s pro Schleife

@tkelman https://github.com/tkelman - können Sie diesen Build vergleichen?
Julia?

—
Antworten Sie direkt auf diese E-Mail oder zeigen Sie sie auf GitHub an
https://github.com/numpy/numpy/issues/5479#issuecomment -191431331.

@mrslezak - Die Lizenz erlaubt die Weiterverteilung, macht den Weiterverteiler jedoch fĂŒr alle Anwaltskosten haftbar, wenn Intel aufgrund der Verwendung der Software verklagt wird. Außerdem kann die resultierende BinĂ€rdatei nicht BSD-lizenziert werden. Siehe: http://mingwpy.github.io/blas_lapack.html#intel -math-kernel-library

Könnte dies durch HinzufĂŒgen von "sofern vorhanden, ohne Haftung fĂŒr irgendwelche" vermieden werden
monetĂ€re Verluste, die aus seiner Verwendung resultieren können" oder etwas Ähnliches?
Am 2. MĂ€rz 2016, 18:22 Uhr, schrieb "Matthew Brett" [email protected] :

@mrslezak https://github.com/mrslezak - die Lizenz erlaubt
Weiterverteilung, macht jedoch den Weiterverteiler fĂŒr eventuelle Anwaltskosten haftbar, wenn
Intel wird wegen der Verwendung der Software verklagt. Auch die resultierenden
Binary kann nicht BSD-lizenziert werden. Sehen:
http://mingwpy.github.io/blas_lapack.html#intel -math-kernel-library

—
Antworten Sie direkt auf diese E-Mail oder zeigen Sie sie auf GitHub an
https://github.com/numpy/numpy/issues/5479#issuecomment -191505500.

Ich glaube nicht, dass das funktionieren wĂŒrde, weil wir der Lizenz von Intel zustimmen mĂŒssen und die Lizenz von Intel besagt, dass wir fĂŒr ihre Anwaltskosten haften, wenn sie verklagt werden. Ich denke, wir könnten in unserer Lizenzvereinbarung von Benutzern verlangen, dass sie Intel nicht verklagen, und wenn sie Intel verklagen und Intel uns um das Geld bittet, können wir versuchen, den Benutzer auf diese GebĂŒhren zu verklagen, aber trotzdem - wenn wir das auf unsere Lizenz wĂŒrde uns noch weiter von BSD entfernen und verlangen, dass der Benutzer ausdrĂŒcklich zustimmt, was bei von pip montierten RĂ€dern nicht praktikabel ist.

Das Erstellen von ATLAS fĂŒr SSE3 bietet nur einen Leistungsvorteil von 5% im Vergleich zum SSE2-ATLAS, aber der Build war schwierig und ich musste die offensichtlichsten Aktivierungsflags fĂŒr SSE3 deaktivieren und einfach -msse3 verwenden.

Ich habe eine Mail an die numpy-Mailingliste geschrieben und vorgeschlagen, diese RĂ€der einzusetzen: https://mail.scipy.org/pipermail/numpy-discussion/2016-March/075125.html

@matthew-brett Als jemand, der Windows mit Python-Anwendungen unterstĂŒtzt, vielen Dank.

@matthew-brett, ich habe 2 Ausgaben zu Ihrem Atlas-Build-Scripts-Repository hinzugefĂŒgt.
Siehe https://github.com/matthew-brett/atlas-build-scripts/issues

Das erste https://github.com/matthew-brett/atlas-build-scripts/issues/1 ist wichtig, da numpy-atlas.dll zu viele Symbole exportiert und somit eine weitere Verwendung mit mingwpy verhindert, ohne den Import zu hacken BĂŒcherei.

@matthew-brett Entschuldigung, ich war ein bisschen beschĂ€ftigt, um noch mehr Benchmarking zu machen. War einer der frĂŒheren Atlas-Builds multithreaded? Ich konnte den ersten Build nicht auf mehreren Kernen ausfĂŒhren. Das Wesentliche sollte ziemlich einfach zu handhaben sein, auch wenn Sie mit Julia nicht sehr vertraut sind. Oder waren Sie hauptsĂ€chlich an neuerer Hardware interessiert, als Ihnen zur VerfĂŒgung steht?

Keine Sorge - ich habe nicht erwartet, dass Sie alles fallen lassen und Benchmarks ausfĂŒhren.

TatsÀchlich war mein neuestes Atlas-Build nicht multithreaded - ATLAS 3.11 braucht noch etwas Arbeit, damit das Threading anscheinend unter Windows funktioniert.

Bei den Benchmarks dachte ich, es wĂ€re einfacher, sie mit den anderen von Ihnen ausgefĂŒhrten Benchmarks zu vergleichen, und ich habe nur alte Hardware mit Windows - ich vermute, der Treffer ist auf Ihrem Computer viel grĂ¶ĂŸer als auf meinem.

Windows-RĂ€der sind jetzt auf pypi verfĂŒgbar: https://pypi.python.org/pypi/numpy/1.10.4

Entschuldigung Tony - ja, die vorherigen 3.10 ATLAS-Builds waren (oder schienen) Multithreading zu sein.

Ich denke, wir können dieses Thema jetzt schließen. Vielleicht @matthew-brett du solltest deinen https://github.com/matthew-brett/np-wheel-builder unter die numpy org ĂŒbertragen oder vielleicht als PR zum numpy-repo unter dem tools -Ordner beitragen.

Ralf - irgendwelche VorschlÀge, wohin np-wheel-builder gehen sollte? numpy / VerkÀufer vielleicht?

Ich wĂŒrde ein separates neues Repo ( numpy-wheel-builder ?) unter der numpy org bevorzugen, denke ich. Es gibt Überschneidungen mit numpy-vendor im Zweck, aber nicht viel im Code. Dieses Repo ist ziemlich groß, ist wirklich fĂŒr die AusfĂŒhrung unter Wine gedacht, und die darin enthaltene gcc-Toolchain ist veraltet.

Gut fĂŒr mich - OK mit euch allen, um das zu schaffen?

Gut fĂŒr mich, aber wenn es Windows-spezifisch ist (im Moment ist es AFAICT?), dann sollte der Repo-Name "windows" enthalten :-). Oder es könnte dort sein, wo wir die analoge Infrastruktur auch fĂŒr andere RĂ€der platzieren. Ich wĂŒrde es auch gerne direkt in das numpy Repo stecken, wenn es klein genug ist, um Sinn zu machen. Was auch immer funktioniert :-)

Repo hat ziemlich große ATLAS-BinĂ€rdateien darin, wĂŒrde das numpy Repo zu keinem guten Zweck machen, denke ich.

Wie wÀre es mit win-wheel-builder ?

Wie wÀre es mit windows-wheel-builder . Ich bin kein Fan von win ;)

Wie wĂ€re es damit, es nicht Windows-spezifisch zu machen und die Macosx- und zukĂŒnftige Manylinux1-Rad-Build-Konfiguration an einem Ort zu haben?

Ansonsten +1 fĂŒr "windows" ĂŒber "win".

Wie wĂ€re es damit, es nicht Windows-spezifisch zu machen und die Macosx- und zukĂŒnftige Manylinux1-Rad-Build-Konfiguration an einem Ort zu haben?

WĂ€re einfacher, Dinge auf allen Plattformen zu Ă€ndern. Aber ich wĂŒrde erwarten, dass OS X und Linux nur Build-Skripte benötigen, wĂ€hrend wir fĂŒr Windows die riesigen ATLAS-BinĂ€rdateien haben. Wenn alles in einem Repo landet, können die ATLAS-BinĂ€rdateien irgendwie getrennt werden (vielleicht mit git-lfs)?

Verwenden Sie großen Dateispeicher (LFS) auf github fĂŒr BinĂ€rdateien

@rgommers : Ich denke, wir werden bald auch Atlas-oder-andere-blas-BinĂ€rdateien fĂŒr Linux und möglicherweise auch fĂŒr osx fĂŒhren (zB wenn wir entscheiden, dass wir es satt haben, Multiprocessing zu beschleunigen).

könnte anfangen, Github-Releases oder Bintray oder Ă€hnliches zu verwenden, anstatt sie einzuchecken ... aber nicht so, als ob sie allzu groß wĂ€ren, bis Sie anfangen, in DYNAMIC_ARCH -aktivierte Openblas-Builds oder die entsprechenden Kombinationen mehrerer Blis-Konfigurationen einzusteigen

Wie wÀre es, das Repo vorerst als windows-wheel-builder einzurichten und umzugestalten / umzubenennen, wenn klarer ist, was wir mit Linux / OSX machen werden?

Klingt gut fĂŒr mich.

bei mir auch gut

Ich glaube, ich brauche Admin-Rechte fĂŒr die numpy-Organisation - oder kann ich geben
Jemand hat Administratorrechte fĂŒr das Repo, und er kann es tun, nehme ich an.​

@matthew-brett: Ich bin sehr verwirrt ĂŒber die Berechtigungsseite von Github (und insbesondere die von Numpy ist ein Durcheinander), aber wenn Sie mich zum Administrator des Repositorys machen oder das Repository an mich ĂŒbertragen möchten, kann ich es in numpy/ verschieben

Ich habe das Repo an @njsmith ĂŒbertragen ...

Gibt es ein numpy Appveyor-Konto? Kann jemand Appveyor-Builds fĂŒr dieses Repository aktivieren?

Ich glaube, wir verwenden das Appveyor -Konto von @charris...

Ja, siehe hier https://ci.appveyor.com/project/charris/numpy/history

Am Mittwoch, 16. MĂ€rz 2016 um 12:15 Uhr, Nathaniel J. Smith <
[email protected]> schrieb:

Ich glaube, wir verwenden @charris https://github.com/charris 's Appveyor
Konto...

—
Sie erhalten dies, weil Sie erwÀhnt wurden.
Antworten Sie direkt auf diese E-Mail oder zeigen Sie sie auf GitHub an
https://github.com/numpy/numpy/issues/5479#issuecomment -197064930

Eigentlich habe ich gerade einen neuen Gruppenaccount fĂŒr numpy bei appveyor erstellt (wollte das sowieso machen, und das hat mich dazu veranlasst, es tatsĂ€chlich zu tun :-)) und dort aktiviert:
https://ci.appveyor.com/project/numpy/windows-wheel-builder

@njsmith Wie hast du das geschafft? Zuletzt habe ich nachgesehen, dass jemand die Administratoren bitten muss, Projektkonten zu erstellen, und die Möglichkeit, andere hinzuzufĂŒgen, war nicht vollstĂ€ndig transparent.

Wenn das Konto funktioniert, möchte ich die Verantwortung fĂŒr die Numpy-Tests ĂŒbertragen.

@charris : ĂŒberprĂŒfe deine E-Mail :-). Ich habe gerade ein individuelles Konto mit numpy-steering-council @googlegroups.com als Einzelperson erstellt. Ich wusste nicht, dass es Projektkonten gibt... Wollen wir eins?

Um der Warteschlange willen möchten Sie wahrscheinlich verschiedene Projekte auf verschiedene Konten verteilen

Der Nachteil der Verwendung der numpy-steering-concil-Mail besteht darin, dass Appveyor Benachrichtigungen sendet, wenn ein ZusammenfĂŒhrungstest fehlschlĂ€gt. Wenn die Appveyor-Leute heutzutage etwas Besseres haben, wĂ€re es gut, das zu verwenden, aber angesichts des Durcheinanders, das ihre BenutzeroberflĂ€che in der Vergangenheit angerichtet hat, wĂŒrde ich nicht darauf wetten.

@tkelman Guter Punkt. Außerdem wollen wir wahrscheinlich etwas Offizielleres, wenn wir Geld ausgeben, um eine schnellere Warteschlange zu erhalten.

@charris : Ich habe gerade versucht, das Testen von numpy/numpy im neuen Appveyor-Konto zu aktivieren und auch alle Benachrichtigungen zu deaktivieren und auch alle relevanten numpy Github-Teams als Administratoren auf dem Konto hinzuzufĂŒgen - mal sehen, was passiert vermuten...

@matthew-brett: Mir fĂ€llt ein, dass der eleganteste Ansatz darin besteht, die BLAS-Builds irgendwo wie numpy/windows-build-tools zu verstauen, aber die eigentlichen Wheel-Build-Tools aus dem echten numpy/numpy -Repository als auszufĂŒhren Teil des Appveyor-Builds - sie könnten die BLAS-BinĂ€rdateien bei Bedarf herunterziehen.

Danke fĂŒr die ganze tolle Arbeit! Wird numpy 1.11.0 Window Wheels bald zu pypi hinzugefĂŒgt? https://pypi.python.org/pypi/numpy

oh ja, wir mĂŒssen möglicherweise herausfinden, wie wir unsere Veröffentlichungsverfahren hier aktualisieren können ... IIUC Die Benutzererfahrung im Moment ist, dass, sobald die Quellversion 1.11 hochgeladen wurde, alle Windows-Computer da draußen plötzlich von den Download-RĂ€dern wechselten (yay ), um zu versuchen, den Quellcode herunterzuladen und zu erstellen (boo). Ich denke, der "richtige" Weg, dies zu tun, besteht darin, dass wir, sobald die endgĂŒltige Veröffentlichung getaggt ist, alle BinĂ€rrĂ€der erstellen und hochladen, _bevor_ wir die sdist hochladen. So nervig das auch ist...

@njsmith das wĂ€re schön, aber ein paar Minuten Verzögerung (oder sogar ein paar Stunden) Verzögerung wĂ€ren fĂŒr mich in Ordnung.

Nur zur Verdeutlichung sind die aktuellen Windows-whl-Dateien auf PyPI fĂŒr die 1.11.0-Version Build gegen ATLAS? Gibt es ein Build-Skript, das geteilt werden kann?

Ja, die RĂ€der sind gegen ATLAS gebaut, aber wir denken darĂŒber nach, auf OpenBLAS umzusteigen, wenn wir von den Ergebnissen ĂŒberzeugt sind.

Build wird ĂŒber Appveyor automatisiert: https://github.com/numpy/windows-wheel-builder

23735 downloads in the last day . =)

Es könnte möglich sein, ein hidden -Release zu erstellen - zumindest gibt es eine Option im PyPI-Formular https://pypi.python.org/pypi?%3Aaction=submit_form und es einblenden, wenn alle Dateien fertig sind.

Leider verhindert die versteckte Veröffentlichungsfunktion, dass die Leute diese Veröffentlichung ĂŒber die Befehlszeile erhalten, sondern nur, dass sie die Veröffentlichung ĂŒber die pypi-GUI sehen:

https://sourceforge.net/p/pypi/support-requests/428/

Ich habe die 64-Bit-Windows-Installation von numpy ausprobiert und das funktioniert großartig, also danke an alle, die daran gearbeitet haben.

Was ich mich frage ist, ob es immer noch einen Plan gibt, dasselbe mit Scipy Wheels zu tun? Wartet dies auf die Entscheidung, zu OpenBLAS zu wechseln?

Auf https://bitbucket.org/carlkl/mingw-w64-for-python/downloads gibt es einige TestrÀder von scipy-0.17.0 . Diese RÀder wurden mit mingwpy gegen @matthew-bretts Builds von numpy gebaut https://pypi.python.org/pypi/numpy/1.10.4

Am Do, 28. April 2016 um 12:48 Uhr schrieb carlkl [email protected] :

Auf https://bitbucket.org/carlkl/mingw-w64-for-python/downloads gibt es
einige TestrÀder von scipy-0.17.0 . Diese RÀder wurden gebaut mit
mingwpy gegen @matthew-brett https://github.com/matthew-brett 's
Builds von numpy https://pypi.python.org/pypi/numpy/1.10.4

Tut mir leid, wenn du es schon gesagt hast, und ich habe es verpasst - aber bekommst du einen Test?
Fehler bei diesen RĂ€dern?

Verlinken Sie auf den ATLAS, der in den numpy Wheels geliefert wird?

@matthew-brett, ich habe diese Builds vor einem Monat angekĂŒndigt, weiß aber nicht mehr wo. Wie auch immer, diese Builds verknĂŒpfen mit dem Numpy-Atlas, der von Ihren Numpy-RĂ€dern geliefert wird.

scipy-0.17.0-cp35-cp35m-win##.whl werden gegen die _falsche_ C-Laufzeit msvcrt.dll gelinkt. FĂŒr Scipy scheint dies in Ordnung zu sein. Testprotokolle sind hier: https://gist.github.com/carlkl/9e9aa45f49fedb1a1ef7

Ist das das richtige Protokoll? Es hat NumPy is installed in D:\devel\py\python-3.4.4\lib\site-packages\numpy am Ende.

Ich habe mich gefragt, ob wir kurz davor sind, ein Scipy Wheel bereitzustellen, auch wenn es gefĂ€hrlich mit der falschen MSVC-Laufzeit verknĂŒpft ist, aber es sieht so aus, als ob es fĂŒr diesen Build viel zu viele Fehler gibt.

Erhalten Sie weniger Fehler fĂŒr den 64-Bit-Build? FĂŒr den aktuell besten Build gegen openblas 0.2.18 ?

64bit hat nur 6 Fehler, alle mit:

FAIL: test_continuous_basic.test_cont_basic(<scipy.stats._continuous_distns.nct_gen object ...

Ich weiß: Das schreit nach einem Vergleich mit OpenBLAS. Wie Sie vielleicht bemerkt haben, stecke ich jedoch aus mehreren GrĂŒnden seit den letzten 4 Wochen fest. Hoffentlich verbessert sich die Situation weiter.

@matthew-brett, ich wĂŒrde mich freuen, numpy MSVC-Builds mit OpenBLAS zu verwenden. Meine neusten Builds sind hier:

Als ob mingwpy, conda-forge, Anaconda und Canopy nicht genug wĂ€ren, kommt hier die Intel Distribution fĂŒr Python zum kostenlosen Download . Es enthĂ€lt nur die numerischen Tools (SciPy, NumPy, Numba, Scikit-Learn) sowie einige Extras (mpi4py Intel MP-Schnittstelle und pyDAAL-Datenanalyse) und verwendet Conda.

Keine Sorge, die Lizenz lÀuft am 29.10.2016 ab, also sind diese Intel-Builds nur ein
Betatest gefolgt von wahrscheinlich einer MKL+ etc. LizenzgebĂŒhr. OpenBLAS-Builds
wird die Open-Source-Lösung bleiben, also danke fĂŒr die Bereitstellung dieser
baut.
Am 28. April 2016, 19:21 Uhr schrieb "Mark Mikofski" [email protected] :

Als ob Mingwpy, Conda-Forge, Anaconda und Canopy nicht genug wÀren, kommt hier
die Intel-Distribution fĂŒr Python
https://software.intel.com/en-us/python-distribution und kostenlos
herunterladen
https://software.intel.com/en-us/articles/intel-distribution-for-python-support-and-documentation.
Es enthÀlt nur die numerischen Werkzeuge (SciPy, NumPy, Numba, Scikit-Learn)
plus einige Extras (mpi4py Intel mp-Schnittstelle und pyDAAL-Datenanalyse) und
verwendet conda.

—
Sie erhalten dies, weil Sie erwÀhnt wurden.
Antworten Sie direkt auf diese E-Mail oder zeigen Sie sie auf GitHub an
https://github.com/numpy/numpy/issues/5479#issuecomment -215600103

FĂŒr 1.11.1 sieht es so aus, als ob auf PyPi fĂŒr Python 3.5 amd64 ein Windows-Rad fehlt.

Gibt es dafĂŒr einen bestimmten Grund? Wenn ich zu 1.11.0 gehe (https://pypi.python.org/pypi/numpy/1.11.0), ist das Rad da.

Danke fĂŒr den Bericht - ich glaube, wir haben zu frĂŒh hochgeladen, und daher bevor alle RĂ€der gebaut wurden. Ich habe das fehlende Rad hochgeladen. Es sieht so aus, als ob wir einen Test brauchen, um sicherzustellen, dass dies nicht noch einmal passiert.

Ich habe das fehlende Rad hochgeladen.

Ich habe es gerade getestet und es funktioniert super!

Vielen Dank fĂŒr all die Arbeit, die geleistet wurde, um die Windows-RĂ€der verfĂŒgbar zu machen.

Schließen des Problems -- RĂ€der waren fĂŒr die letzten paar Releases verfĂŒgbar.

Ich verstehe, dass dieses Thema abgeschlossen ist, aber ich denke, wir sollten erwÀgen, es wieder zu öffnen.

Dies bleibt ein Problem fĂŒr Windows-Benutzer, die versuchen, ihren wissenschaftlichen Stack zum Laufen zu bringen, ohne auf Conda zurĂŒckgreifen zu mĂŒssen. Ich muss immer noch die @cgohlke 'MKL'-Builds verwenden, siehe dieses verwandte Scipy-Problem , das offen bleibt. Obwohl RĂ€der geschaffen werden, die nicht mit scipy kompatibel sind, sind sie fĂŒr viele nicht verwendbar.

@waynenilsen Sie haben die Anweisungen zum Einbau der neuen RÀder im Mailinglisten-Thread, der in der gerade erwÀhnten Ausgabe verlinkt ist:

https://github.com/scipy/scipy/issues/5461#issuecomment -326744515

Also wenn du es tust

pip install -f https://7933911d6844c6c53a7d-47bd50c35cd79bd838daf386af554a83.ssl.cf2.rackcdn.com/ --pre scipy

es sollte fĂŒr dich funktionieren.

FĂŒr Numpy ist nichts mehr zu tun, also ist das Problem geschlossen. Der
Das Scipy-Problem ist noch offen und wird wahrscheinlich in der nÀchsten Zeit behoben
Freisetzung.

Das funktioniert bei mir super @Juanlu001 Ich freue mich schon sehr darauf, wenn das auf pypi ist!

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen