<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Mar 4, 2016 at 4:42 AM, Matthew Brett <span dir="ltr"><<a href="mailto:matthew.brett@gmail.com" target="_blank">matthew.brett@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi,<br>
<br>
Summary:<br>
<br>
I propose that we upload Windows wheels to pypi.  The wheels are<br>
likely to be stable and relatively easy to maintain, but will have<br>
slower performance than other versions of numpy linked against faster<br>
BLAS / LAPACK libraries.<br>
<br>
Background:<br>
<br>
There's a long discussion going on at issue github #5479 [1], where<br>
the old problem of Windows wheels for numpy came up.<br>
<br>
For those of you not following this issue, the current situation for<br>
community-built numpy Windows binaries is dire:<br>
<br>
* We have not so far provided windows wheels on pypi, so `pip install<br>
numpy` on Windows will bring you a world of pain;<br>
* Until recently we did provide .exe "superpack" installers on<br>
sourceforge, but these became increasingly difficult to build and we<br>
gave up building them as of the latest (1.10.4) release.<br>
<br>
Despite this, popularity of Windows wheels on pypi is high.   A few<br>
weeks ago, Donald Stufft ran a query for the binary wheels most often<br>
downloaded from pypi, for any platform [2] . The top five most<br>
downloaded were (n_downloads, name):<br>
<br>
6646, numpy-1.10.4-cp27-none-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl<br>
5445, cryptography-1.2.1-cp27-none-win_amd64.whl<br>
5243, matplotlib-1.4.0-cp34-none-win32.whl<br>
5241, scikit_learn-0.15.1-cp34-none-win32.whl<br>
4573, pandas-0.17.1-cp27-none-win_amd64.whl<br>
<br>
So a) the OSX numpy wheel is very popular and b) despite the fact that<br>
we don't provide a numpy wheel for Windows, matplotlib, sckit_learn<br>
and pandas, that depend on numpy, are the 3rd, 4th and 5th most<br>
downloaded wheels as of a few weeks ago.<br>
<br>
So, there seems to be a large appetite for numpy wheels.<br>
<br>
Current proposal:<br>
<br>
I have now built numpy wheels, using the ATLAS blas / lapack library -<br>
the build is automatic and reproducible [3].<br>
<br>
I chose ATLAS to build against, rather than, say OpenBLAS, because<br>
we've had some significant worries in the past about the reliability<br>
of OpenBLAS, and I thought it better to err on the side of<br>
correctness.<br>
<br>
However, these builds are relatively slow for matrix multiply and<br>
other linear algebra routines compared numpy built against OpenBLAS or<br>
MKL (which we cannot use because of its license) [4].   In my very<br>
crude array test of a dot product and matrix inversion, the ATLAS<br>
wheels were 2-3 times slower than MKL.  Other benchmarks on Julia<br>
found about the same result for ATLAS vs OpenBLAS on 32-bit bit, but a<br>
much bigger difference on 64-bit (for an earlier version of ATLAS than<br>
we are currently using) [5].<br>
<br>
So, our numpy wheels likely to be stable and give correct results, but<br>
will be somewhat slow for linear algebra.<br></blockquote><div><br></div><div>I would not worry too much about this: at worst, this gives us back the situation where we were w/ so-called superpack, which have been successful in the past to spread numpy use on windows.</div><div><br></div><div>My main worry is whether this locks us into ATLAS  for a long time because of package depending on numpy blas/lapack (scipy, scikit learn). I am not sure how much this is the case.</div><div><br></div><div>David</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
I propose that we upload these ATLAS wheels to pypi.  The upside is<br>
that this gives our Windows users a much better experience with pip,<br>
and allows other developers to build Windows wheels that depend on<br>
numpy.  The downside is that these will not be optimized for<br>
performance on modern processors.  In order to signal that, I propose<br>
adding the following text to the numpy pypi front page:<br>
<br>
```<br>
All numpy wheels distributed from pypi are BSD licensed.<br>
<br>
Windows wheels are linked against the ATLAS BLAS / LAPACK library,<br>
restricted to SSE2 instructions, so may not give optimal linear<br>
algebra performance for your machine. See<br>
<a href="http://docs.scipy.org/doc/numpy/user/install.html" rel="noreferrer" target="_blank">http://docs.scipy.org/doc/numpy/user/install.html</a> for alternatives.<br>
```<br>
<br>
In a way this is very similar to our previous situation, in that the<br>
superpack installers also used ATLAS - in fact an older version of<br>
ATLAS.<br>
<br>
Once we are up and running with numpy wheels, we can consider whether<br>
we should switch to other BLAS libraries, such as OpenBLAS or BLIS<br>
(see [6]).<br>
<br>
I'm posting here hoping for your feedback...<br>
<br>
Cheers,<br>
<br>
Matthew<br>
<br>
<br>
[1] <a href="https://github.com/numpy/numpy/issues/5479" rel="noreferrer" target="_blank">https://github.com/numpy/numpy/issues/5479</a><br>
[2] <a href="https://gist.github.com/dstufft/1dda9a9f87ee7121e0ee" rel="noreferrer" target="_blank">https://gist.github.com/dstufft/1dda9a9f87ee7121e0ee</a><br>
[3] <a href="https://ci.appveyor.com/project/matthew-brett/np-wheel-builder" rel="noreferrer" target="_blank">https://ci.appveyor.com/project/matthew-brett/np-wheel-builder</a><br>
[4] <a href="http://mingwpy.github.io/blas_lapack.html#intel-math-kernel-library" rel="noreferrer" target="_blank">http://mingwpy.github.io/blas_lapack.html#intel-math-kernel-library</a><br>
[5] <a href="https://github.com/numpy/numpy/issues/5479#issuecomment-185033668" rel="noreferrer" target="_blank">https://github.com/numpy/numpy/issues/5479#issuecomment-185033668</a><br>
[6] <a href="https://github.com/numpy/numpy/issues/7372" rel="noreferrer" target="_blank">https://github.com/numpy/numpy/issues/7372</a><br>
_______________________________________________<br>
NumPy-Discussion mailing list<br>
<a href="mailto:NumPy-Discussion@scipy.org">NumPy-Discussion@scipy.org</a><br>
<a href="https://mail.scipy.org/mailman/listinfo/numpy-discussion" rel="noreferrer" target="_blank">https://mail.scipy.org/mailman/listinfo/numpy-discussion</a><br>
</blockquote></div><br></div></div>