Windows ํ ํจํค์ง๋ฅผ ๋ง๋ค์ด Pypi์ ์ฌ๋ ค์ฃผ์ธ์.
ํ์ฌ ์ฌ๊ธฐ์์ numpy์ฉ Windows ํ ํจํค์ง๋ฅผ ๋ค์ด๋ก๋ํ ์ ์์ต๋๋ค. http://www.lfd.uci.edu/~gohlke/pythonlibs/#numpy
ํ ์ด Pypi ์๋ฒ https://pypi.python.org/pypi/ ์์ ์ง์ ์ฌ์ฉ ๊ฐ๋ฅํ์ฌ pip๋ก ์ค์นํ ์ ์๋ค๋ฉด ์ข์ ๊ฒ์ ๋๋ค.
์ข์ ๋ง์์ ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ค์ ๋ก @carlkl ์ด ์ด๋ฅผ ์คํํ๊ธฐ ์ํด ๋ค์์ ๋ง์ ๋ ธ๋ ฅ์ ๊ธฐ์ธ์ด๊ณ ์์ต๋๋ค. ๋๋ ์ฐ๋ฆฌ๊ฐ ์ด์ ๊ฑฐ์ ๋ค ์๋ค๊ณ ์๊ฐํฉ๋๋ค - @carlkl - ์ธ์ ๊ณต๊ฐํ ๊ฒ ๊ฐ์ต๋๊น?
์ปจํ
์คํธ: ์ด๊ฒ์ด ์ฌ์ํ์ง ์์ ์ด์ ๋ ์ฐ๊ฒฐํ ๋ฐ์ด๋๋ฆฌ๊ฐ
Intel์ ๋
์ ๋ฐํ์ ๋ฐ ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์์กดํ๊ธฐ ์ํด
์ฌ๋ฐฐํฌ๋ฅผ ๋ณต์กํ๊ฒ ๋ง๋ญ๋๋ค.
binstar์ ์ต์ OpenBLAS ๊ธฐ๋ฐ numpy ๋ฐ scipy ํ ์ ๋ฐฐํฌํ์ต๋๋ค. ๋ค์์ ์ฌ์ฉํ์ฌ ์ค์นํ ์ ์์ต๋๋ค.
ํ ์ค์น -i https://pypi.binstar.org/carlkl/simple numpy
ํ ์ค์น -i https://pypi.binstar.org/carlkl/simple scipy
์ด๊ฒ์ python-2.7 ๋ฐ python-3.4์์ ์๋ํฉ๋๋ค. ๋ฐํด๋ '์คํ์ฉ'์ผ๋ก ํ์๋ฉ๋๋ค. ํผ๋๋ฐฑ์ ํ์ํฉ๋๋ค.
๊ด๋ฒ์ํ ํ ์คํธ๋ฅผ ์ํ๋ค๋ฉด ์ด๊ฒ์ ๋ชฉ๋ก์ผ๋ก ๋ณด๋ด์ผ ํฉ๋๋ค :-)
2015๋ 1์ 22์ผ ๋ชฉ์์ผ ์คํ 8์ 54๋ถ์ carlkl [email protected] ์์ ๋ค์๊ณผ ๊ฐ์ด ์ผ์ต๋๋ค.
binstar์ ์ต์ OpenBLAS ๊ธฐ๋ฐ numpy ๋ฐ scipy ํ ์ ๋ฐฐํฌํ์ต๋๋ค.
๋ค์์ ์ฌ์ฉํ์ฌ ์ค์นํ ์ ์์ต๋๋ค.ํ ์ค์น -i https://pypi.binstar.org/carlkl/simple numpy
ํ ์ค์น -i https://pypi.binstar.org/carlkl/simple scipy์ด๊ฒ์ python-2.7 ๋ฐ python-3.4์์ ์๋ํฉ๋๋ค. ๋ฐํด๋ ๋ค์๊ณผ ๊ฐ์ด ํ์๋ฉ๋๋ค.
'์คํ์ '์ด๋ค. ํผ๋๋ฐฑ์ ํ์ํฉ๋๋ค.โ
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ฑฐ๋ GitHub์์ ํ์ธํ์ธ์.
https://github.com/numpy/numpy/issues/5479#issuecomment -71096693.
๋๋ค๋์ J. ์ค๋ฏธ์ค
๋ฐ์ฌํ ์ฐ๊ตฌ์ - ์ ๋ณดํ - University of Edinburgh
http://vorpus.org
fwiw ์ ๋ ๊ฐ์ธ์ ์ผ๋ก ๊ณต์ ๋ฐ์ด๋๋ฆฌ๋ฅผ ์ ๊ณตํ๊ธฐ ์ ์ win64์ ๊ธฐ๋ณธ ์ ์ ํฌ๊ธฐ๋ฅผ ๋ณ๊ฒฝํ๊ณ ์ถ์ต๋๋ค. ํ์ง๋ง ์ ๊ฐ ๋ง์ง๋ง์ผ๋ก ์ ์ํ์ ๋๋ ์ฝ๊ฐ์ ์ ํญ์ด ์์์ต๋๋ค. ๋ํ ์๋ง๋ ์ด๋ฏธ ๋๋ฌด ๋ฆ์์ ๊ฒ์ ๋๋ค. (
๋ํ Openblas์ ๋ํด ๋งํ๋ฉด ๋๊ตฐ๊ฐ ๋๋ฒ๊น ์ ์ข์ํ์ง๋ง ์ง์ณค์ต๋๋ค (openblas๋ก scipy๋ฅผ ๊นจ๋ ๋์ผํ ์คํจ์ฒ๋ผ ๋ณด์ ๋๋ค).
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)
์ฌ์ฉ๋ OpenBLAS ๋ฒ์ ์ 0.2.12์ ๋๋ค. ๋๋ ์์ง ์ด ๋ฒ์ ์์ ์ฌ๊ฐํ ๋ฌธ์ ๋ฅผ ๊ฒฝํํ์ง ์์์ต๋๋ค.
scipy ์คํจ๋ https://gist.github.com/carlkl/b05dc6055fd42eba8cc7์ ๋ณต์ฌ๋ฉ๋๋ค.
http://sourceforge.net/p/mingw-w64/bugs/367 ๋ก ์ธํ 32๋นํธ ์ ์ฉ numpy ์ค๋ฅ
======================================================================
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)
๋๋ win64 ์ ์ ํฌ๊ธฐ๋ฅผ ๋ณ๊ฒฝํ๋ ๊ฒ์ ๋์ํ์ง ์์ง๋ง ๊ทธ๊ฒ์ด
๋ฐํด์์ ๋ถ๋ฆฌ๋์ด์ผ ํ๋ ๋ณ๋์ ๋ฌธ์ . ์ด๋ฌ๋ค๋ฉด
์ฒ์์ผ๋ก win64 numpy ๋น๋๊ฐ ๋๋ฆฌ ์ฌ์ฉ ๊ฐ๋ฅํด์ง๋ฉด
๊ทธ๊ฒ๋ค์ ์ฐ๊ฒฐํ๋ ๊ฒ์ด ํฉ๋ฆฌ์ ์ด์ง๋ง ์ด ์์ ์์ ์ด๋ฏธ ์๋ง์ ์ฌ์ฉ์๊ฐ ์์ต๋๋ค.
๋ช ๋
๋์ ๊ทธ๋ค์ cgholke๋ anaconda ๋ฑ์ ์ฌ์ฉํ๊ณ ์์ต๋๋ค. ๊ทธ๋์ ํ์
๊ทธ๊ฒ์ ๋
๋ฆฝ์ ์ธ ํ ๋ก ์ผ๋ก ์ทจ๊ธํฉ๋๊น?
(์๋ฐํ ๋งํ๋ฉด backcompat break์ง๋ง ๊ทธ๋๋ ๊ทธ๋ด์ธํด ๋ณด์ธ๋ค.
์ค์ ๋ก ๊ฐ์ํ๋ฏ๋ก
ํ๋ซํผ ๊ฐ ๋นํธํ์ฑ -- ๋ชจ๋ ์ด์ ๊ฐ๋ฅํ ์ฝ๋๋ 64๋นํธ๋ฅผ ์ฒ๋ฆฌํด์ผ ํฉ๋๋ค.
dtype=int ์ด๋ฏธ.)
2015๋
1์ 22์ผ ๋ชฉ์์ผ ์คํ 8์ 59๋ถ, Julian Taylor [email protected]
์ผ๋ค:
fwiw ๊ฐ์ธ์ ์ผ๋ก ๊ธฐ๋ณธ ์ ์์ ํฌ๊ธฐ๋ฅผ ๋ณ๊ฒฝํ๊ณ ์ถ์ต๋๋ค.
์ฐ๋ฆฌ๊ฐ ์ค์ ๋ก ๊ณต์ ๋ฐ์ด๋๋ฆฌ๋ฅผ ์ ๊ณตํ๊ธฐ ์ ์ win64
๋ด๊ฐ ๋ง์ง๋ง์ผ๋ก ๊ทธ๊ฒ์ ์ ์ํ์ ๋ ์ ํญ๋, ์๋ง๋ ์๋์ฝ๋ค์
๋ค๋ฅธ ํ์ฌ ๋ฐ์ด๋๋ฆฌ๋ ์ด๋ฏธ ๋๋ฌด ๋ฆ์์ต๋๋ค.๋ํ Openblas์ ๋ํด ๋งํ๋ฉด ๋๋ฒ๊น ์ ์ข์ํ๋ ์ฌ๋์ด ์์ต๋๋ค. ๋๋ ๊ทธ๊ฒ์ ์ง์ณค์ต๋๋ค.
(openblas๋ก scipy๋ฅผ ๊นจ๋ ๊ฒ๊ณผ ๋์ผํ ์คํจ์ฒ๋ผ ๋ณด์ ๋๋ค):test_einsum_sums_float64 (test_einsum.TestEinSum) ... ==31931== ํฌ๊ธฐ 16์ ์๋ชป๋ ์ฝ๊ธฐ
==31931== 0x7B28EB9์์: ddot_k_NEHALEM(/usr/lib/libopenblasp-r0.2.10.so์์)
==31931== 0x6DBDA90 ๊ธฐ์ค: DOUBLE_dot(arraytypes.c.src:3127)
==31931== 0x6E93DEC ๊ธฐ์ค: cblas_matrixproduct(cblasfuncs.c:528)
==31931== 0x6E6B7B3 ๊ธฐ์ค: PyArray_MatrixProduct2(multiarraymodule.c:994)
==31931== 0x6E6E29B ๊ธฐ์ค: array_matrixproduct(multiarraymodule.c:2276)โ
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ฑฐ๋ GitHub์์ ํ์ธํ์ธ์.
https://github.com/numpy/numpy/issues/5479#issuecomment -71097408.
๋๋ค๋์ J. ์ค๋ฏธ์ค
๋ฐ์ฌํ ์ฐ๊ตฌ์ - ์ ๋ณดํ - University of Edinburgh
http://vorpus.org
์ ๋ ์ด๊ฒ์ ๊ด์ฌ์ด ์์ต๋๋ค. ํ๋ก์ธ์ค๋ฅผ ์ง์ํ๋ ๋ฐฉ๋ฒ์ด ์์ต๋๊น?
OpenBLAS๋ INTERFACE64=1
๋ก ์ปดํ์ผํ ์ ์๊ณ numpy๋ ์ฒซ ๋ฒ์งธ ์๋์์ -fdefault-integer-8
๋ก ์ปดํ์ผํ ์ ์์ต๋๋ค.
๊ทธ๋ฅ ๋จธ๋ฆฌ ์๋ก. blas์์ 64๋นํธ ์ ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๋์ฐํ ์๊ฐ์ ๋๋ค. ๊ทธ ๊ธธ์ ๋๋ฌด ๋ฉ๋ฆฌ ๋จ์ด์ง๊ธฐ ์ ์ ๋ฉ์ถ์ญ์์ค. ๋ด๊ฐ ๊ฐ์ ์์ ํ๊ธฐ ์ ์ Matlab๊ณผ Julia๋ ์ด ์์ ์ ์ํํ์ผ๋ฉฐ blas์์ ๊ธฐ์กด์ 32๋นํธ ์ ์๋ฅผ ๊ฐ์ ํ๋ ๋ชจ๋ ํ์ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ค๋จํฉ๋๋ค.
์ฐ๋ฆฌ๊ฐ ์ง๋ ~5๊ฐ์ ๋์ Julia์์ ์ํํ ์์
์ ์ค์ ๋ก openblas์ ๋ชจ๋ ๊ธฐํธ ์ด๋ฆ์ ๋ณ๊ฒฝํ์ฌ 64๋นํธ int ๋ฒ์ ์ ๋ํด _64
์ ๋ฏธ์ฌ๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์
๋๋ค. ๊ทธ๋ ๊ฒ ํ๋ฉด ์ ํ ๋์ํ์ ์ํํ ์ ์์ต๋๋ค. ์ํ๋ ๊ฒฝ์ฐ ์ ๋ง ๊ฑฐ๋ํ ๋ฐฐ์ด์ ์์ง๋ง ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋์ผํ ํ๋ก์ธ์ค์ ๋ก๋ํ๋ฉด ์ด๋ฆ ์๋์๊ณผ ์๋ชป๋ ABI๋ก dgemm
ํธ์ถ์ ์๋ํ์ฌ segfault๊ฐ ๋ฐ์ํ์ง ์์ต๋๋ค.
์ฌ๋ฌ๋ถ, Numpy์์ ์ฌ์ฉํ ์ ์๋ ๋ฐํด ํ์ผ์ ๋ํ ์ ๋ฐ์ดํธ๊ฐ ์์ต๋๊น?
๋ด๊ฐ ์ง๊ธ ์๊ณ ์๋ ๊ฒ์ ์๋๋๋ค.
2015๋
6์ 25์ผ ์ค์ 4์ 27๋ถ์ "guyverthree" [email protected] ์ด ์์ฑํ์ต๋๋ค.
์๋ ํ์ธ์ ์ฌ๋ฌ๋ถ, ์ฌ์ฉ ๊ฐ๋ฅํ ๋ฐํด ํ์ผ์ ๋ํ ์ ๋ฐ์ดํธ๊ฐ ์์ต๋๊น?
๋ํผ?โ
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ฑฐ๋ GitHub์์ ํ์ธํ์ธ์.
https://github.com/numpy/numpy/issues/5479#issuecomment -115215236.
@guyverthree Christoph Gohlke๋ Intel์ MKL์ ๋ฐํด๋ก ์ฌ์ฉํ์ฌ NumPy๋ฅผ ์ถ์ ํ๊ณ ์์ต๋๋ค.
๋ํ NumPy ๋ฐํด์ ๋ํ ๋ด ๋ธ๋ก๊ทธ ๊ฒ์๋ฌผ์ ์ฐธ์กฐํ์ญ์์ค. Carl Kleffner์ ์์ ๋ mingw-w64 ๋๊ตฌ ์ฒด์ธ ๊ณผ Zhang Xianyi์ GotoBLAS OpenBLAS ํฌํธ๋ฅผ ์ฌ์ฉํ์ฌ Dropbox์์ NumPy ํ ์ ๋ง๋ค์์ต๋๋ค. Olivier Grisel์ ๋ด๊ฐ ๊ฒ์ํ OpenBLAS Google ๊ทธ๋ฃน ์ค๋ ๋ ์์ ์ฌ์ฉ๋ ๊ฒ๊ณผ ๋์ผํ ๋จ๊ณ๋ฅผ ๋ฐ๋ณตํ๋๋ก NumPy ๋น๋๋ด์ ์์ ํ๋ ๋ฐ ๋์์ ์ฐพ๊ณ ์์์ต๋๋ค.
๋ด ์ต์ ๋ฒ์ ์ binstar.org์์ ๊ตฌํ ์ ์์ง๋ง anaconda.org๊ฐ ํ์ฌ ์ ํธ๋๋ ์๋ก์ด ์ด๋ฆ์ธ์ง ํ์คํ์ง ์์ต๋๋ค.
py-2.6 .. 3.4(32/64๋นํธ)์ฉ ํ ์ ์ฝ 2๊ฐ์์
๋๋ค.
๋ด https://bitbucket.org/carlkl/mingw-w64-for-python ๋ฐ ๋ค์ ์ต๊ทผ์ OpenBLAS๋ก ๋น๋ํ์ญ์์ค.
ํ ์ค์น:
pip install -i https://pypi.binstar.org/carlkl/simple numpy
pip install -i https://pypi.binstar.org/carlkl/simple scipy
+1 @carlkl ๊ทธ๋ฆฌ๊ณ ์ด๊ฒ์ด ์น์ฆ ๊ณต์ฅ์ NumPy ๋น๋ ์๋ ์ถ๊ฐ๋ ์ ์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
+1 ๋๋ ์ด๋ฐ ์ผ์ด ์ผ์ด๋๋ ๊ฒ์ ๋ณด๊ณ ์ถ๋ค.
IMHO: ์ด ๋น๋๊ฐ ์น์ธ๋๊ธฐ ์ ์ ํด๊ฒฐํด์ผ ํ ๋ฌธ์ ๊ฐ ์ ์ด๋ ์ธ ๊ฐ์ง ์์ต๋๋ค.
@carlkl : FWIW, ์ ๋ @cgohlke ์ ํจํค์ง์ ๋ํด ๋ณ๋ก ๊ฑฑ์ ํ์ง ์์ต๋๋ค. ๊ทธ๋ฌ๋ฉด ์ ์ ๋ก ํด๊ฒฐ๋ ๊ฒ์ ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ ๋ ๋ฉ์ง ๋น๋ ๋ฉ์ปค๋์ฆ์ด ์๋ค๋ ์ฌ์ค์ ๋ํด ๋ณ๋ก ๊ฑฑ์ ํ์ง๋ ์์ต๋๋ค. ๋จ๊ณ๋ฅผ ๋ฌธ์ํํ๋ ํ ์คํธ ํ์ผ์ด ์๋ ํ ์๋ ๋น๋๋ ๊ด์ฐฎ์ต๋๋ค.
๋ด๊ฐ ๊ฑฑ์ ํ๋ ์ฃผ์ ๋ฌธ์ ๋ ์ง์ ๊ฐ๋ฅ์ฑ์ ๋๋ค. ์ด ํญ๋ชฉ์ ์ ์คํธ๋ฆผ์ผ๋ก ๊ฐ์ ธ์ฌ ์ ์์ผ๋ฉด ์ ๋ฒ์ ์ gcc/mingw-w64/msvc๊ฐ ๋์ฌ ๋๋ง๋ค ํจ์น๋ฅผ ๋ค์ ํ์ธํ๊ณ ๋ค์ ์ํํด์ผ ํฉ๋๋ค. ์๋ง ์ผ์ด๋์ง ์์ ๊ฒ์ ๋๋ค. ์ฐ๋ฆฌ๋ ๋น๋ ์ ๊ณต์ ์์ํ๋ ํจ์ ์ ๋น ์ง๊ณ ์ถ์ง ์์ง๋ง, ์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ ์ด๋ฅผ ์ํํ๊ธฐ ์ํด ๊น๋ค๋กญ๊ณ ์ค๋๋ ์ปดํ์ผ๋ฌ๋ฅผ ์ฒ๋ฆฌํด์ผ ํ๋ฏ๋ก ์ด๋ ์ ์ ๋ ๋ฒ๊ฑฐ๋ก์์ง๋๋ค.
์ด๊ฒ์ด ์ ๊ฐ ์ด ์ ์คํธ๋ฆผ์ ์ง์ํ๊ธฐ ์ํด ์๊ธ์ ๋ชจ์ผ๋ ค๊ณ ๋ ธ๋ ฅํ ์ด์ ์ ๋๋ค... +1์ ํ๋ฅญํ๊ณ ๋ชจ๋ ๊ฒ์ด์ง๋ง ๋๊ตฐ๊ฐ๊ฐ ๋์ ๊ธฐ๋ถํ๊ณ ์ถ๊ฑฐ๋ ์ผ๋ฐ์ ์ผ๋ก ํ์ด์ฌ์ gcc๋ฅผ ์ฌ์ฉํ ์ ์๋๋ก ๋ง๋๋ ๋ฐ ๊ด์ฌ์ด ์๋ ํ์ฌ๋ฅผ ์๊ณ ์๋ ๊ฒฝ์ฐ Windows์์ ํ์ฅ ํ๋ก๊ทธ๋จ์ ์ฌ์ฉํ๊ณ ์ด๋ฉ์ผ์ ๋ณด๋ด์ฃผ์ธ์ :-) ([email protected])
$$๊ฐ ์์ง๋ง ์ฌ์ ํ ๋๊ณ ์ถ๋ค๋ฉด mingw-w64์ ํจ์น๋ฅผ ๋ณด๋ด sin ๋ฐ cos์ ๊ฐ์ ์ด์ ํจ์์ ๋ํ ์ง์์ ๊ฐ์ ํ๋ ๊ฒ์ด ์ข์ต๋๋ค. (MSVC ABI๋ x87 FPU ๋จ์๊ฐ ์ด๋ป๊ฒ ๊ตฌ์ฑ๋์ด์ผ ํ๋์ง์ ๋ํด ๋ค๋ฅธ ๋ชจ๋ ์ฌ๋๋ค๊ณผ ์๊ฒฌ์ด ์ผ์นํ์ง ์์ ๋๋ถ๋ถ์ ๋ฌด๋ฃ ์ํํธ์จ์ด ์ํ ํจ์๊ฐ ์ ๋๋ก ์๋ํ์ง ์๋ ๊ฒ์ผ๋ก ๋ํ ๋ฌ์ต๋๋ค.) ๋คํํ Android์ " bionic" libc ์ด๋ฏ๋ก ABI ๋ฌธ์ ์ ๋ํ ์ํ์ ๋ง์ ์ด๋ ๊น์ ํต์ฐฐ๋ ฅ์ด ํ์ํ์ง ์์ต๋๋ค. ๊ด๋ จ ์์ค ํ์ผ์ ์ฐพ์ ์ถ์ถํ ๋ค์ ์ฌ๋ฐ๋ฅธ ์์น์ mingw-w64 ํธ๋ฆฌ์ ๋๋ ๋๋ถ๋ถ์ ๊ธฐ๊ณ์ ๋ฌธ์ ์ผ ๋ฟ์ ๋๋ค. ๊ด์ฌ ์๋ ์ฌ๋์ด ์์ผ๋ฉด ์ด์ ๋ํ ์์ธํ ๋ด์ฉ๋ ์ ๊ณตํ ์ ์์ต๋๋ค.
์ด๊ฒ์ด numfocus๊ฐ ์๊ธ์ ์กฐ๋ฌํด์ผ ํ๋ ์ข ๋ฅ์ ๊ฒ ์๋๊ฐ์? ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ ๋ค์ ๋์๊ฐ์ PSF์ ์ง์ํ๋ ๊ฒ์ ๋ค์ ๋ณผ ์ ์์ต๋๋ค.
์ฐ๋ฆฌ๋ ์ผ๋ง๋ ๋ง์ ๋์ ์ด์ผ๊ธฐํ๊ณ ์์ต๋๊น?
+1 Windows์ฉ ํ ์ PyPI https://pypi.python.org/pypi/numpy ์ ๊ฒ์ํ์ญ์์ค.
๊ธฐ๋ณธ ์ ๊ณต๋๋ Python Windows ์ค์น์์
pip install numpy
๋ฅผ ์๋ํ๋ฉด ์ ๋ช ๋๊ฒ ๋์์ด ๋์ง ์๋ ์ค๋ฅ ๋ฉ์์ง "vcvarsall.bat๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค"๊ฐ ํ์๋ฉ๋๋ค.
+1์ Windows ์ฌ์ฉ์์๊ฒ ์ ๋ง ๋์์ด ๋ฉ๋๋ค.
์ด ๋๋ฌธ์ https://github.com/glumpy/glumpy ์์ ์ฌ์ํ ์ ์์ต๋๋ค. Numpy๊ฐ Windows์์ ์๋ํ๋๋ก ํ๋ ์๋ ๋น๋ ๋จ๊ณ๋ ๋ฌด์์ ๋๊น? AppVeyor ์์ ์ด ์๋ ๊ฒ ๊ฐ์ผ๋ฏ๋ก GitHub์ ์ํฐํฉํธ๋ฅผ ์ ๋ก๋ํ๋ ๋ฐ ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
์ง๊ธ ๋น์ฅ์ Windows์์ ๋น ๋ฅธ BSD ๋ผ์ด์ ์ค ๋ฒ์ ์ numpy๋ฅผ ๊ตฌ์ถํ๋ ๊ฒ์ด ๋ง ๊ทธ๋๋ก ๋ถ๊ฐ๋ฅํฉ๋๋ค. ์ฐ๋ฆฌ๋ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ ธ๋ ฅํ๊ณ ์์ง๋ง ๊ธฐ์ ์ ํ๊ณ์ ๋๋ค. +1์ ์ด๋ ์ชฝ์ด๋ ์ํฅ์ ๋ฏธ์น์ง ์์ต๋๋ค. (appveyor ์์ ์ Windows์์ ๋น๋๋์ง๋ง ์ค์ ์์ ์ ์ค์ ๋ก ์ ํฉํ์ง ์์ ๋์ฒด ์ต์ ํ๋์ง ์์ ์ ํ ๋์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํฉ๋๋ค.) ์ด ์ ๋ ฌ์ด ์๋ฃ๋ ๋๊น์ง Christoph Gohlke์ ์น์ฌ์ดํธ์์ ํ ์ ๋ค์ด๋ก๋ํ๊ฑฐ๋ Anaconda๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ๋๋ ๋ค๋ฅธ ๊ณผํ์ ํ์ด์ฌ ๋ฐฐํฌํ .
@njsmith ์ข ๋ ๊ตฌ์ฒด์ ์ผ๋ก ๋ง์ํด ์ฃผ์๊ฒ ์ต๋๊น? ์๋ํ์ง ์๋ ์ ํํ ๋ช ๋ น์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ํ์ฌ ์ด ํญ๋ชฉ์ ์คํํ ์ ์์ต๋๋ค.
์ ๋ '๋ถ๊ฐ๋ฅ'์ด ๋๋ฌด ๊ฐํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ๊ทธ๋ฌ๋ ํ์คํ ์ผ๋ฐ์ ์ธ ์ผ๋ฐ์ ์ธ ๋ฐฉ๋ฒ์ ์์ง ์์ต๋๋ค. ํ์ฌ ์ํ์ ๋ํ ์ํค ํ์ด์ง๋ฅผ ์ฌ๊ธฐ์ ์ฌ๋ ธ์ต๋๋ค. https://github.com/numpy/numpy/wiki/Whats-with-Windows-builds . ๊ด์ฌ ์๋ ๋ถ๋ค์ ์์ ๋กญ๊ฒ ์์ /์์ ํด์ฃผ์ธ์.
@techtonik : "์๋ํ์ง ์๋ ์ ํํ ๋ช ๋ น"์ ์์ต๋๋ค. ๋ฌธ์ ๋ ์ฐ๋ฆฌ๊ฐ ํ์๋ก ํ๋ ๊ธฐ๋ฅ์ ์กฐํฉํ ์ปดํ์ผ๋ฌ๊ฐ ์๋ค๋ ๊ฒ์ ๋๋ค. mingwpy.github.io๋ ๊ทธ๋ฌํ ์ปดํ์ผ๋ฌ๋ฅผ ๋ง๋ค๊ธฐ ์ํ ์ฐ๋ฆฌ์ ๋ ธ๋ ฅ์ ํ์ฌ ์ํ๋ฅผ ๋ฌธ์ํํฉ๋๋ค.
@matthew-brett ์ข์์. We can't use MSVC++ on its own to compile scipy because we need a Fortran compiler.
scipy์ฉ์ด์ฃ ? numpy์ ์ ํ์ํ๊ฐ์?
@njsmith http://mingwpy.github.io/issues.html ์ ์ข์ ๋ถ์์ด ํฌํจ๋ ๋ฉ์ง ์ด๋์ ํฐ๋ธ์ ๋๋ค. ์ ์คํธ๋ฆผ(Python)์ด ์ ๋ ์ง์ํ์ง ์๋๋ค๋ ์ ์ ์์ฝ์ต๋๋ค(MSVS๋ฅผ ๋งน๋ชฉ์ ์ผ๋ก ์ฌ์ฉํ๋ ๊ฒฝ์ฐ). ํ์ง๋ง ํ์ฌ ์ํฉ์์ ๋ช ํํ ๊ทธ๋ฆผ์ ์ป์ผ๋ ค๊ณ ๋ ธ๋ ฅํ๊ณ ์์ต๋๋ค.
์ง๊ธ์ ์ด์ ์ ์ขํ๊ธฐ ์ํด Python 2.7 + Win32๋ง ์๋ค๊ณ ๊ฐ์ ํ๊ฒ ์ต๋๋ค. ์ฑ๋ฅ์ ํ์ํ์ง ์์ง๋ง(๊ทธ๊ณณ์์ ํ ์คํธํ๊ธฐ ์ํด ์์ฉ ํ๋ก๊ทธ๋จ์ ์คํํ๊ณ ์ถ์ต๋๋ค) ํด๋น ์ฑ๋ฅ์ ๋ํ ๋ฒค์น๋งํฌ ๋ฐ์ดํฐ๊ฐ ํ์ํฉ๋๋ค.
๊ทธ๋ ๋ค๋ฉด PyPI์์ Windows ํ ์ ์ฌ์ฉํ ์ ์๋๋ก ์ด ๊ตฌ์ฑ์ ๋ํด ์ํํด์ผ ํ๋ ๋ค์ ์์ ์ ๋ฌด์์ ๋๊น?
@techtonik , ์ด์ https://anaconda.org/carlkl/numpy ๋ฐ https://anaconda.org/carlkl/scipy์์ numpy ๋ฐ scipy ํ ์ ์๋น ๋ฒ์ ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ฑ๋ฅ์ ๊ฑฐ์ gohlke์ +MKL ํ ๋งํผ ์ข์ต๋๋ค. ๋๋ ์ง์์ ๋ด ์๋์ฐ ๋ฐ์ค์ ํจ๊ป segfaults๋ฅผ ๋ง๋์ง ์์๋ค.
์ด ์ ๊ทผ ๋ฐฉ์๊ณผ ๊ด๋ จ๋ ๋ช ๊ฐ์ง ๋ฌธ์ ๊ฐ ๋ ผ์๋์์ผ๋ฉฐ http://mingwpy.github.io (๊ณต์ฌ ์ค)์ ์์ฝ๋์ด ์์ต๋๋ค. mingw-w64 ๊ธฐ๋ฐ ํด์ฒด์ธ _mingwpy_์ OpenBLAS์ ์กฐํฉ์ Windows ํ๋ซํผ์ผ๋ก ๊ฐ๋ ๊ธธ์ ๋๋ค.
_mingwpy_๋ ๊ฐ์ฅ ์ ์๋ ค์ง mingw-w64 ๊ธฐ๋ฐ ํด์ฒด์ธ(์: _mingw-builds_, _tdm_ ...
์ด ๋ชจ๋ ๊ฒ๊ณผ ๊ทธ ์ด์์ https://github.com/mingwpy/mingwpy.github.io์ ์ค๋ช ๋์ด ์์ต๋๋ค. ๋ฌธ์ ๋๋ PR์ ์์ ๋กญ๊ฒ ์ฌ์ญ์์ค.
@techtonik : ์ ์คํธ๋ฆผ python.org์ ์ ์ฅ์ ๋ํ ์ฌ๊ฐํ ์คํด/์คํด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ๋๋ ๊ทธ๋ค์ด Windows CPython ์ง์์ ๋ถ์ด์ ์ฌ๋ฌ ํธํ๋์ง ์๋ ABI๋ก ํ๋ณดํ๋ ๊ฒ์ ๊ฑฐ๋ถํ๋ค๊ณ ๋งํ๊ณ ์ถ์ต๋๋ค(๊ทธ๋ฆฌ๊ณ ์ด์ ๋์ํฉ๋๋ค). ๊ณต์ ์ ์คํธ๋ฆผ Windows ๋น๋๋ฅผ ์ ์ง ๊ด๋ฆฌํ๋ Steve Dower๋ mingwpy๊ฐ ์ด๋ฌํ ๋น๋์ ํธํ๋๋๋ก ํ๋ ๋ฐฉ๋ฒ์ ์์๋ด๋ ๋ฐ ๋์์ ์ฃผ์์ต๋๋ค.
pypi์ numpy ํ ์ ์ค์นํ๊ธฐ ์ํ IMO์ ์ ์ ์กฐ๊ฑด์ (a) ์ฑ๋ฅ, (b) ์ ์ง ๊ด๋ฆฌ ๊ฐ๋ฅ, (c) ์ ์ ํ๊ฒ ๋ผ์ด์ ์ค๊ฐ ๋ถ์ฌ๋์ด์ผ ํ๋ค๋ ๊ฒ์ ๋๋ค. ํ๋ก์ ํธ์์ ๋ค๋ฅธ ๊ธฐ์ค ์ธํธ๋ฅผ ์ ์ฉํ๊ธฐ๋ฅผ ์ํ๋ฉด(์ฆ, ํ ์ ๋์ฐํ ์ฑ๋ฅ์ ์ ๊ณตํ๊ธฐ ์ํด ๋ ธ๋ ฅํด์ผ ํจ) ๋ค์ ๋จ๊ณ๋ ๊ธฐ์ค์ด ๋ ๋์ ๊ฒฝ์ฐ๋ฅผ ๋ง๋๋ numpy ๋ฉ์ผ๋ง ๋ฆฌ์คํธ์ ์ด๋ฉ์ผ์ ๋ณด๋ด๋ ๊ฒ์ ๋๋ค.
MSVS๋ numpy ์์ฒด๋ฅผ ๋น๋ํ ์ ์์ง๋ง ์ ์ ํ๊ฒ ๋ผ์ด์ ์ค๊ฐ ๋ถ์ฌ๋ ๊ณ ํ์ง BLAS ๊ตฌํ์ ๋น๋ํ ์๋ ์์ต๋๋ค. ์ ์คํธ๋ฆผ mingw-w64๋ numpy + BLAS(ํจ์น ํฌํจ)๋ฅผ ๋น๋ํ ์ ์์ง๋ง ์ ์คํธ๋ฆผ CPython๊ณผ ํจ๊ป ์ฌ์ฉํ๋ ค๊ณ ํ๋ฉด ๊ฒฐ๊ณผ๊ฐ ์ถฉ๋ํฉ๋๋ค. Carl์ mingwpy ๋๊ตฌ ์ฒด์ธ์ numpy + BLAS(ํจ์น ํฌํจ)๋ฅผ ๋น๋ํ ์ ์์ผ๋ฉฐ ๊ฒฐ๊ณผ๋ ์ผ๋ถ ๋ฒ์ ์ python(3.5๋ ์๋)์์ ์๋ํ์ง๋ง ๋๊ตฌ ์ฒด์ธ์ ์ทจ์ฝํ๊ณ ํ์ฌ ์ํ์์ ์ ์ง ๊ด๋ฆฌํ ์ ์์ต๋๋ค. ๋ง ๊ทธ๋๋ก Carl์ ์ ์ธํ๊ณ ๋ ์๋ฌด๋ ๊ทธ๊ฒ์ด ์ด๋ป๊ฒ ๋ง๋ค์ด ์ก๋์ง ๋๋ ๊ทธ๊ฒ์ ๋ค์ ๋ง๋ค ์ ์๋์ง ๋ชจ๋ฆ ๋๋ค. numpy ํ๋ก์ ํธ์ ์ด๋ ๋๊ตฌ๋ ์ด๋ฌํ ์ ํ ์ฌํญ์ด ์๋ ๋๊ตฌ ์ฒด์ธ์ ์ฌ์ฉํ์ฌ "๊ณต์ ๋น๋"๋ฅผ ์ ๊ณตํ๋ ๋ฐ ์ ๋ ํ ์ค๋น๊ฐ ๋์ด ์์ง ์์ผ๋ฏ๋ก ์ด๋ฅผ ์์ ํ๋ ๋ฐ ์ง์คํ๊ณ ์์ต๋๋ค.
Windows์๋ ๊ณ ํ์ง numpy ๋น๋์ ๋ํด ๊ฐ๋จํ๊ฒ ์ฌ์ฉํ ์ ์๋ ์ฌ๋ฌ ์์ค๊ฐ ์์ต๋๋ค. ์ ๋ง ๊ถ๊ธํฉ๋๋ค. ์ PyPI์ ์์ ์ ์๋๋ก ๋ฎ์ ํ์ง์ ๋น๋๋ฅผ ๋์ ธ์ผ ํ๋ค๊ณ ๊ณ ์งํ์ญ๋๊น?
@njsmith ๋ด ์ฌ์ฉ ์ฌ๋ก(๊ฐ๋ฐ์ ๋ฆฌ์์ค ํฌ์ ์์ฒด๋ฅผ ์ ๋นํํ ์ ์์์ ์ธ์ ํจ)๋ matplotlib
์ ์์กดํ๋ PyPI์ ๋งค์ฐ ๊ฐ๋จํ ํจํค์ง๋ฅผ ๋ฐฐํฌํ๋ ๊ฒ์ด๋ผ๊ณ ๋งํ๊ณ ์ถ์์ต๋๋ค. numpy
์ ๋ฐ๋ผ ๋ค๋ฆ
๋๋ค.
๋ด ์ฌ์ฉ ์ฌ๋ก์ ๊ฒฝ์ฐ ์ฑ๋ฅ์ ๋ฌธ์ ๊ฐ ๋์ง ์์ง๋ง Windows ์ฌ์ฉ์๊ฐ matplotlib
, numpy
๋ฑ์ ์ฌ๊ท์ ์ผ๋ก ์ค์นํ๋ ํจํค์ง๋ฅผ pip install ____
$ ํ๋ฉด ํจ์ฌ ์ฝ์ต๋๋ค. ํนํ Python ๋น๋ ์ํ๊ณ๋ฅผ ์ดํดํ์ง ๋ชปํ๋ ์ฌ์ฉ์๋ฅผ ์ํด ์ค์นํ URL์ ์๋ ค์ฃผ๋ ๊ฒ๋ณด๋ค ์ค๋ช
ํ์ญ์์ค. ๋ฐ๋ผ์ ๋๋ถ๋ถ ์ค์น ์ง์นจ์ ๋จ์ํํ๊ธฐ ์ํ ๊ฒ์
๋๋ค.
๋ค์ ๋งํ์ง๋ง, ์ ๊ฒฝ์ฐ๋ฅผ ์ ๋นํํ๋ ค๋ ๊ฒ์ด ์๋๋ผ ๋จ์ง ์ฌ๋ฌ๋ถ์ด ๊ถ๊ธํด ํ๋ ๋๋ก ๊ณต์ ํ๊ณ ์ถ์์ต๋๋ค.
@johnthagen : ์, ๋ฌผ๋ก ์ ๋๋ค. ๊ฑฑ์ ๋ง์ธ์! ๋๋ ์ด๊ฒ์ด ์ผ๋ฐ์ ์ผ๋ก ๋ฐ๋์งํ ์ด์ ๋ฅผ ์์ ํ ์ดํดํฉ๋๋ค. ์ด ๋๊ธ์์ ๋ด๊ฐ ์ฌ์ ๊ถ๊ฒ ๋๊ปด์ง๋ค๋ฉด ๊ทธ๊ฒ์ ๋ฐ๋ก ๋์ ๋ค๋ฅธ ์ฌ๋๋ค์ด ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์ง๋ 1๋ ๋์ ์์ฒญ๋ ์๊ฐ์ ๋ณด๋๊ธฐ ๋๋ฌธ์ ๋๋ค :-). ๋๋ ๋จ์ง @techtonik ์๊ฒ ๋ฌผ์ด๋ณธ ๊ฒ์ ๋๋ค. ์๋ํ๋ฉด ๊ทธ๋ค์ด "๋๋ ๋จ์ง ํ๋์ ์์ ์์ฉ ํ๋ก๊ทธ๋จ์ ์๋ํ๊ณ ์ถ๊ธฐ ๋๋ฌธ์ ์ฑ๋ฅ์ ์ ๊ฒฝ ์ฐ์ง ์์ต๋๋ค"๋ผ๊ณ ๋งํ๋ ๊ฒ์ฒ๋ผ ๋ค๋ ธ๊ธฐ ๋๋ฌธ์ ๋๋ค. ๊ทธ๋ฌ๋ ๊ทธ๋ค์ด ๋จ์ง ํ๋์ ์์ ์์ฉ ํ๋ก๊ทธ๋จ์ ์๋ํ๊ณ ์ถ๋ค๋ฉด ๋๋ ๊ทธ๋ค์ด PyPI ๋ถ๋ถ์ ๊ด์ฌ์ ๊ฐ๋ ์ด์ ๋ฅผ ์๊ณ ์์ต๋๋ค :-)
(์ฐ๋ฆฌ๊ฐ pypi์ ์ฌ๋ฆฌ๋ ๋ชจ๋ ํ ์ ์๋ง ๋ช ์ ์ฌ๋๋ค์ด ์ฆ์ ์ฌ์ฉํ๊ธฐ ์์ํ๋ค๋ ์ฌ์ค์ ๋ช ์ฌํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ๋๋ถ๋ถ์ ์ด ์ค๋ ๋๋ฅผ ์ฝ์ง ์์ต๋๋ค. ๋ฐ๋ผ์ ์ฐ๋ฆฌ๋ ๋ฌด์์ด๋ ์ฐ๋ฆฌ๋ ์ค์ ๋ก ๊ด๋ฒ์ํ ์ฌ์ฉ ์ฌ๋ก์ ๋ํด ๊ด๋ฒ์ํ๊ฒ ์ฌ์ฉํ ์ ์๋ค๊ณ ์ ์ํ์ต๋๋ค.)
ATLAS๋ฅผ ์ฌ์ฉํ์ฌ Python 2.7์ฉ 32๋นํธ numpy ํ ์ ์ถ์ํ๋ ๊ฒ์ ๋ณธ์ง์ ์ผ๋ก ๊ฐ๋จํ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. SSE2์ฌ์ผ ํ๋ฏ๋ก SSE ์ง์นจ ์์ด ์ถฉ๋์ด ๋ฐ์ํ์ง๋ง ์ด๋ ๊ทนํ ์ผ๋ถ์ ์ฌ์ฉ์์๊ฒ๋ง ์ํฅ์ ๋ฏธ์นฉ๋๋ค. ์ด๋ฅผ ์ํด ํ์ฌ ๋ฆด๋ฆฌ์ค ๋๊ตฌ ๋ชจ์์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ด๊ฒ์ pip๊ฐ 32๋นํธ์ฉ ๋ฐ์ด๋๋ฆฌ ํ ์ ์ ๊ณตํ์ง๋ง 64๋นํธ์ฉ ์์ค ์ค์น๋ก ํด๋ฐฑํ๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ์ ์ฉํ ๊น์?
@njsmith ์ ๋ณด ๊ฐ์ฌํฉ๋๋ค! ๋ชจ๋์ ๋ ธ๊ณ ์ ๊ฒฝ์๋ฅผ ํํฉ๋๋ค :)
ATLAS๋ฅผ ์ฌ์ฉํ์ฌ Python 2.7์ฉ 32๋นํธ numpy ํ ์ ์ถ์ํ๋ ๊ฒ์ ๋ณธ์ง์ ์ผ๋ก ๊ฐ๋จํ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. SSE2์ฌ์ผ ํ๋ฏ๋ก SSE ์ง์นจ ์์ด ์ถฉ๋์ด ๋ฐ์ํ์ง๋ง ์ด๋ ๊ทนํ ์ผ๋ถ์ ์ฌ์ฉ์์๊ฒ๋ง ์ํฅ์ ๋ฏธ์นฉ๋๋ค. ์ด๋ฅผ ์ํด ํ์ฌ ๋ฆด๋ฆฌ์ค ๋๊ตฌ ๋ชจ์์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ด๊ฒ์ pip๊ฐ 32๋นํธ์ฉ ๋ฐ์ด๋๋ฆฌ ํ ์ ์ ๊ณตํ์ง๋ง 64๋นํธ์ฉ ์์ค ์ค์น๋ก ํด๋ฐฑํ๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ์ ์ฉํ ๊น์?
@matthew-brett ํ์ฌ numpy-vendor ์ค์ ์ด ๊นจ์ก์ต๋๋ค. fromfile
์ segfault๊ฐ ์์ต๋๋ค. ํ์ผ ํธ๋ค ์ฒ๋ฆฌ๊ฐ ์๋ง์ด ๋์๊ณ ์ด๊ฒ์ด Wine ๋ฒ์ , Ubuntu ๋ฒ์ ์ ๋ณ๊ฒฝ ๋๋ (์๋ง๋) numpy ์์ฒด์ ๋ณ๊ฒฝ์ผ๋ก ์ธํ ๊ฒ์ธ์ง ํ์คํ์ง ์์ต๋๋ค. ๋๋ ๊ทธ๊ฒ์ ๋ ๋ง์ ์๊ฐ์ ๋ณด๋ด๋ ๊ฒ์ ์๊ฐ ๋ญ๋น๋ผ๊ณ ๋งํ๊ณ ์ถ์ต๋๋ค. ๊ทธ ์๊ฐ์ mingwpy์ ๋ฃ๋ ๊ฒ์ด ํจ์ฌ ๋ ์์ฐ์ ์
๋๋ค.
OpenBLAS(Int32 Windows 64, v0.2.15 ์ฌ์ ์ปดํ์ผ๋ ๋ฐ์ด๋๋ฆฌ) ๋ฐ MKL(MKL์ ์ปค๋ฎค๋ํฐ ๋ผ์ด์ ์ค ์ฌ์ฉ, ์ฆ ๋ฌด๋ฃ ๋ฐฐํฌ)๋ก ์ปดํ์ผ๋ NumPy 1.10.4๊ฐ ์์ต๋๋ค. ํ์ง๋ง... SciPy๋ฅผ ์ปดํ์ผํ ์ ์์ต๋๋ค. ๋๊ตฐ๊ฐ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์์ด๋์ด๊ฐ ์๋ ๊ฒฝ์ฐ gfortran ์ปดํ์ผ๋ฌ "fortan ์ปดํ์ผ๋ฌ๋ฅผ ์ฐพ์ ์ ์์"์ ์ฐพ๋ ๋ถ๋ถ์ด ์์ ๊ฒ ๊ฐ์ต๋๋ค. Ananconda๋ ์ด๋ฌํ ๋น๋๋ฅผ ์ง์ ํ๋ฌ๊ทธ์ธ์ผ๋ก ์ง์ํ๋ฏ๋ก ifort.exe๋ฅผ ์ฌ์ฉํ๊ณ ์์ต๋๋ค. Microsoft Visual Studio Community 2015๋ฅผ ์ฌ์ฉํ์ฌ Python 3.5์ฉ์ผ๋ก ์ปดํ์ผํ์ต๋๋ค. ๋ฐฐํฌ์ฉ์ผ๋ก ํจํค์งํ๋ ๋ฐฉ๋ฒ์ ์์๋ผ ์ ์๋ ์ฌ๋์ด ์๋ค๋ฉด github ๋๋ anaconda์ ์น์ฌ์ดํธ์ ์ ๋ก๋ํ๊ฒ ์ต๋๋ค. ๊ฐ์ฌํฉ๋๋ค.
@mrslezak : ์๋ง๋ ๊ฐ์ฅ ์ข์ ๋ฐฉ๋ฒ์ scipy ๊ฐ๋ฐ์ ๋ฉ์ผ๋ง ๋ฆฌ์คํธ์ ๊ฒ์ํ๊ฑฐ๋ ์์์ ๊ธฐ์กด ๋ฒ๊ทธ์ ๊ฒ์ํ๋ ๊ฒ๋ณด๋ค scipy์์ ์ ๋ฒ๊ทธ๋ฅผ ์ฌ๋ ๊ฒ์ ๋๋ค :-)
์ ๋ง ๊ถ๊ธํฉ๋๋ค. ์ PyPI์ ์์ ์ ์๋๋ก ๋ฎ์ ํ์ง์ ๋น๋๋ฅผ ๋์ ธ์ผ ํ๋ค๊ณ ๊ณ ์งํ์ญ๋๊น?
์ผํฌ ๋ฉด๋์ ์ง์ณค๊ธฐ ๋๋ฌธ์ ๋๋ค. ๋๋ ์ฌ๋๋ค์ด ์ฑ๊ณผ๋ฅผ ์ํ๊ณ ๋๊ตฐ๊ฐ๊ฐ ๊ทธ๊ฒ์ ์ํด ์์์ ๊ฐ์ง๊ณ ์๋ค๋ ๊ฒ์ ์ข์ ์ผ์ด๋ผ๋ ๊ฒ์ ์๋๋ค. ํ์ง๋ง ๊ฐ์ธ์ ์ผ๋ก ์ด ์์ ์ ์๋ฃํ๋ ๋ฐ ๋ฐ๋ฅด๋ ๋ณต์ก์ฑ์ ์์ฒญ๋๋ฏ๋ก ์ฌ๋ฌ๋ถ์ด ์ด ์ผ์ ํ ์ ์๊ธฐ๋ฅผ ๋ฐ๋ ๋ฟ์ ๋๋ค. ์ ๋ ์ผ์ด๋์ง ์์ ์๋ ์๊ณ 2~3๋ ์์ ์ผ์ด๋ ์๋ ์์ต๋๋ค. ์ด ๊ธฐ๊ฐ ๋์ ์ฌ๋๋ค์ ๊ณ์ํด์ ๋ฒฝ์ ๋ถ๋ชํ๊ณ NumPy๋ฅผ ๊ฐ์ ์ข ์์ฑ์ ์ง์ ์ค์น๊ฐ ํ์ํ PyPI์ ๋ชจ๋ Windows ๋ฐ์ด๋๋ฆฌ ๋ค์ด๋ก๋์ ๋น๋กํ์ฌ ์๊ฐ์ ๋ญ๋นํฉ๋๋ค.
ํ. ์๋ง ๋ด๊ฐ ํ์ ์ด ๊ฐ์ฅ ๊ธด ์์ด ๋ฌธ์ฅ์ผ ๊ฒ์ด๋ค. =)
@techtonik - ๋๋ ๋น์ ์ ์ข์ ์ ๊ณต์ ํฉ๋๋ค. ์ฐ๋ฆฌ ์ค ๋ง์ ์ฌ๋๋ค์ด ์ด์ ๋ํด ์ข์ ๊ฐ์ ๋๋ผ๋ ๊ฒ ๊ฐ์ต๋๋ค.
@carlkl - ์ฌ๊ธฐ์์ ๊ทํ์ ํผ๋๋ฐฑ์ ์ํฉ๋๋ค.
์ฐ๋ฆฌ์๊ฒ numpy ์๋์ฐ ํ ์ ์ฌ๋ ค์ผ ํ๋ค๋ ๊ฐํ ์๋ ฅ์ด ๋ถ๋ช ํ ์์ต๋๋ค. ๋ค์์ ๋ช ์ฃผ ์ ์ ๋ชจ๋ ํ๋ซํผ์์ ๊ฐ์ฅ ๋ง์ด ๋ค์ด๋ก๋๋ ํ ๋ชฉ๋ก์ ๋๋ค. https://gist.github.com/dstufft/1dda9a9f87ee7121e0ee . matplotlib, scikit-learn ๋ฐ pandas ์ฐฝ ํ ์ ์์น 3, 4 ๋ฐ 5์ ์์ต๋๋ค. numpy ์ฐฝ ํ ์ ๋ํ ํฐ ์์ฅ์ด ์์ ๊ฒ์ ๋๋ค.
ํ ์ด๋ธ์ ์๋ ์ง๋ฌธ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
1) ๋จ๊ธฐ์์ ์ค๊ธฐ(์: 6๊ฐ์)์ pypi์์ ์๋ํ๊ณ ๊ฑฐ์ ์ต์ ์ numpy ํ ์ ์ป๋ ๋ฐ ์ ๋
ํ ์ ์์ต๋๊น? ์ด์ ๋ํ ๋๋ต์ '์'์
๋๋ค.
2) ๊ทธ ๋์ ๋ค๋ฅธ ์ฌ๋๋ค์ด ๋น๋ํ ์ ์๋๋ก ์ต์ ํ๋์ง ์์ numpy ํ ์ ์ฌ๋ฆด ๊ฐ์น๊ฐ ์์ต๋๊น?
์ง๋ฌธ 2๊ฐ ๋ ์ด๋ ต์ต๋๋ค. "์ต์ ํ๋์ง ์์"์ ๋๋ฆฌ๊ฑฐ๋(์ต์ ํ๋ blas/lapack ์์) ์ง์ํ๊ธฐ ์ด๋ ต๋ค(6๊ฐ์ ๋ด์ ๋น๋๋ฅผ ๋ฐ๋ณตํ ์ ์๋ค๋ ๋ณด์ฅ ์์)๋ฅผ ์๋ฏธํ ์ ์์ต๋๋ค.
"๋๋ฆผ"์ ๋ฐ๋ํ๋ ์ฃผ์ฅ์ ๋ณผ ์ ์์ต๋๋ค. ํ ์ด Windows์์ ์๋ํ๊ธฐ ์์ํ ๋ "์ด์นด์ดํธ์์ pypi์์ numpy ํ ์ ๋ค์ด๋ก๋ํ์ง ์์"์ ๋ํ ๋ต๋ณ์ผ๋ก ์คํ์ค๋ฒํ๋ก ์ง๋ฌธ์ ์ฆ์ ํธ๋ฆฌ๊ฑฐํ์ง ์๋๋ก ์ฃผ์ํด์ผ ํฉ๋๋ค. ๋๋ ๊ทธ ๋๋ต์ด ํฉ๋ฆฌ์ ์ด๊ณ ์ฐ๋ฆฌ์๊ฒ ์์ฒ๋ฅผ ์ค๋งํผ ์ค๋ ๊ฐ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
์ต์ ํ๋์ง ์์ ์๋ฏธ, ๋น๋ ํ๋ก์ธ์ค๋ฅผ ์ง์ํ๊ธฐ ์ด๋ ต์ต๋๋ค. ์ฐ๋ฆฌ๊ฐ ๊ฝค ๋นจ๋ฆฌ ์ฅ๊ธฐ์ ์ธ ์๋ฃจ์ ์ ์ฐพ๋ ๋ฐ ์ ๋ง๋ก ์ ๋ ํ๋ค๋ฉด ํจ๊ป ์ด ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
์ผ๋ง ์ ์ ๋ Windows์ฉ ATLAS ๋ฐ์ด๋๋ฆฌ๋ฅผ ๊ตฌ์ถํ์ต๋๋ค. http://nipy.bic.berkeley.edu/scipy_installers/atlas_builds/
์ด ATLAS ๋ฐ์ด๋๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ๋ชจ๋ ํ ์คํธ๋ฅผ ํต๊ณผํ๋ numpy ๋ฐ์ด๋๋ฆฌ๋ฅผ ์ด๋ฏธ ๊ตฌ์ถํ ์ ์๋ค๊ณ ์๊ฐํ๋ ๊ฒ์ด ๋ง์ต๋๊น?
์ด๋ค ๊ฒฝ์ฐ์, ์ฐ๋ฆฌ๋ ์ ๊ทธ๊ฒ๋ค์ ์ฌ๋ ค๋์ง ์์ต๋๊น?
1) ๋จ๊ธฐ์์ ์ค๊ธฐ(์: 6๊ฐ์)์ pypi์์ ์๋ํ๊ณ ๊ฑฐ์ ์ต์ ์ numpy ํ ์ ์ป๋ ๋ฐ ์ ๋ ํ ์ ์์ต๋๊น? ์ด์ ๋ํ ๋๋ต์ '์'์ ๋๋ค.
๊ทธ๋ ๊ฒ ๋๊ธฐ๋ฅผ ๋ฐ๋๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ๊ทธ๋์ฏค์ด๋ฉด mingwpy ์ ์์ ์๊ธฐ์น ์์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๊ฑฐ๋ ๊ทธ๊ฒ์ด ๊ฐ๋ฅํ๊ฒ ํ๋ ๊ฒ์ ๋ํด ์บ์ํ์ง ์์์ ๊ฒ์ ๋๋ค. :)
2) ๊ทธ ๋์ ๋ค๋ฅธ ์ฌ๋๋ค์ด ๋น๋ํ ์ ์๋๋ก ์ต์ ํ๋์ง ์์ numpy ํ ์ ์ฌ๋ฆด ๊ฐ์น๊ฐ ์์ต๋๊น?
ATLAS ๋น๋๊ฐ Cygwin์ผ๋ก ์๋ฃ๋ ๊ฒ ๊ฐ์ต๋๊น? ์๋๋ฉด ๊ทธ๋ฅ ๋๋ ํ ๋ฆฌ ์ด๋ฆ์ ์ง์ ํ๊ณ MingwPy์ ์ผ๋ถ ๋ฒ์ ์ ์ฌ์ฉํ์ต๋๊น?
๋ด ATLAS ๋น๋๋ Cygwin์ผ๋ก ์๋ฃ๋์์ง๋ง Cygwin.dll์ ์ฐ๊ฒฐ๋์ง ์์ผ๋ฏ๋ก MSVC๋ก ๋น๋ํ๋ ๊ฒ์ด ์์ ํ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
mingwpy๋ ๋ฌธ์ ๊ฐ ์์ง๋ง ์๊ฐ์ด ํ์ํฉ๋๋ค. gcc ๋๊ตฌ ์ฒด์ธ, OpenBLAS๋ฅผ ๋น๋ํ ๋ค์ ๋ค๋ฅธ ๋ณํ์ผ๋ก numpy/scipy๋ฅผ ๋น๋ํ๋ ค๋ฉด ๋น๋ ๋ฐ ํ ์คํธ ์๊ฐ์ด ๊ฑธ๋ฆฝ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ชจ๋ ๋น๋ ์คํฌ๋ฆฝํธ๋ฅผ ๋จผ์ ๊ฒ์ํ์ง ์๊ณ ๋ฐ์ด๋๋ฆฌ๋ฅผ ๊ฒ์ํ์ง ์์ ๊ฒ์ ๋๋ค. gcc-5.3.0์ ๊ธฐ๋ฐ์ผ๋ก ํ๋ mingwpy์ OpenBLAS๊ฐ ๊ฑฐ์ ์ค๋น๋์์ต๋๋ค. ๋ค์ ๋จ๊ณ๋ ์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก numpy ๋ฐ scipy ๋ฐํด๋ฅผ ๋ง๋๋ ๊ฒ์ ๋๋ค.
์ด ํ ๋ก ๊ณผ numpy ์ค๋ ๋ "Multi-distribution Linux wheel - please test"์ ๋ํ ์ต์ ๊ธฐ์ฌ๋ OpenBLAS๊ฐ OpenBLAS๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ Windows numpy ํ ์ ๋ฐฐํฌํ ์ ์๋ ํ์ง์ ๊ฐ์ง๊ณ ์๋์ง ์ฌ๋ถ์ ๋ํ ์ง๋ฌธ์ผ๋ก ์ด์ด์ง๋๋ค. ๊ทธ๋ฌ๋ ๋์ ์ํ๋ผ์ค๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ ๋์ ์๋ฃจ์ ์ธ์ง ํ์ ํ ์ ์์ต๋๋ค. ํ ์คํธ ๋จ๊ณ์์ ๋จผ์ ๋ ๊ฐ์ง ๋ณํ์ผ๋ก numpy ํ ์ ๋น๋ํด์ผ ํ ์๋ ์์ต๋๋ค.
๋๋ ์ถ์ธกํ๊ณ / ์ฐ๋ฆฌ๊ฐ OpenBLAS๊ฐ ์์ฉ ๊ฐ๋ฅํ ํ์ง์ด๋ผ๋ ๋จ๊ณ๋ฅผ ์ด๋ป๊ฒ๋ ์ป์ ์ ์๊ธฐ๋ฅผ ๋ฐ๋ผ๊ณ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๊ทธ๋๊น์ง๋ ATLAS numpy ํ ๋ก ์์ํ๋ ๊ฒ์ด ํฉ๋ฆฌ์ ์ผ๋ก ๋ณด์ ๋๋ค. ์ ์ ํ ์๊ธฐ์ OpenBLAS ํ ๋ก ์ ํํ ์ ์์ ๊ฒ์ผ๋ก ๊ธฐ๋ํ๊ณ ์์ต๋๋ค. 32๋นํธ ๋น๋์ ๋ํด SSE2 ๊ฒ์ฌ๋ฅผ ์ ๋ ฅํด์ผ ํ ์๋ ์์ต๋๋ค. http://mingwpy.github.io/blas_lapack.html#atlas
PyPI ํ์ด์ง ์๋จ์ ์งํ ์์๋ฅผ ๋ฐฐ์นํ๋ฉด ๋ ๋ง์ ์ฌ๋๋ค์ด ๋ฌธ์ ์ ์ฐธ์ฌํ ์ ์์ต๋๋ค(์ด๋์ ํฐ๋ธ๋ฅผ ์ง์ํ๊ธฐ ์ํด ๊ธฐ๋ถํ ์ ์๋ ์ฌ๋๋ค ํฌํจ). ์์์๋ ํ์ฌ ์ ๋ต, ์น์ธ ๊ธฐ์ค(์ฑ๋ฅ ํ ์คํธ์ ๋ํ ๋งํฌ?), ์ํ ๋ฐ ์ต์ข ๋ฒ์ ์ด ์ค๋น๋์์ ๋ ์ํํ ์์ (์ฃผ ๋ฒ์ ์ ๋์ด์๊ฒ ์ต๋๊น?)์ด ๋์ด๋ ์ ์์ต๋๋ค.
@matthew-brett ๋ฌด์ธ๊ฐ๋ฅผ ๋์ง๊ฒ ๋ค๋ ๋น์ ์ ์ ์์ด ์คํ ๊ฐ๋ฅํ์ง ์์ง ํ์คํ์ง ์์ต๋๋ค. ์ด๋ค ์ปดํ์ผ๋ฌ๋ฅผ ์ฌ์ฉํ์๊ฒ ์ต๋๊น? MingwPy๋ผ๋ฉด ์ด๋ค ์์๋ก ํ ๊ฒ์ธ์ง์ ๋ํ ๋ช ํํ ๊ณํ์ด ์๊ณ ์ง๊ธ์ ๋๋ฌด ์ด๋ฅธ ๊ฒ ๊ฐ์ต๋๋ค. ๋ค๋ฅธ gcc์ธ ๊ฒฝ์ฐ ์ ์ ์ฐ๊ฒฐ ๋ฌธ์ ์ DLL ๋ฌธ์ ๋ฐฐํฌ๋ก ๋์๊ฐ๋๋ค.
๋ด ์์ด๋์ด๋ MSVC๋ฅผ ์ฌ์ฉํ์ฌ ATLAS๋ก numpy๋ฅผ ์ปดํ์ผํ๋ ๊ฒ์ด ์์ต๋๋ค. ๋ฌผ๋ก ๊ทธ๊ฒ์ scipy์๊ฒ๋ ์๋ํ์ง ์์ง๋ง ์ ์ด๋ ์ฌ๋๋ค์ ์ฐฝ ๋ฐํด๋ฅผ ๋ฐฐ์กํ๋ ๊ฒ์ ์์ํ ์ ์์ต๋๋ค.
๋ฐฉ๊ธ ์๋ํ๋๋ฐ unresolved external symbol __gfortran_compare_string
ํ์์ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ฌ ATLAS ๋ฐ์ด๋๋ฆฌ์ gfortran ๋ฐํ์์ ๋ํ ์ผ๋ถ ๋งค๋ฌ๋ ค ์๋ ์ฐธ์กฐ๊ฐ ์๋ค๊ณ ๊ฐ์ ํฉ๋๋ค. @carlkl - ๋๋ฒ๊ทธ ๋ฐฉ๋ฒ์ ๋ํ ์ ์ ์ฌํญ์ด ์์ต๋๊น?
๋ค๋ฅธ ์ปดํ์ผ๋ฌ์์ ์ค๋ ์ ์ ๊ฐ์ฒด ํ์ผ์ ํผํฉํ๋ ๊ฒ์ ์
๋ง๊ฐ ์ฑ์๋ฅผ ํผํ๋ ๊ฒ์ฒ๋ผ ํผํด์ผ ํ๋ ๊ฒ์
๋๋ค. ์ด๋ค ๊ฒฝ์ฐ์๋ ์๋ํ์ง๋ง ๋ค๋ฅธ ์ปดํ์ผ๋ฌ ์กฐํฉ ์ธํธ์์๋ ์คํจํฉ๋๋ค.
BTW: MS ์์ฒด๋ ๋ค๋ฅธ ๋ฒ์ ์ Visual Studio์์ ์ ์ ๊ฐ์ฒด๋ฅผ ํผํฉํ๋ ๊ฒ์ ๊ณต์์ ์ผ๋ก ์ง์ํ๊ฑฐ๋ ๊ถ์ฅํ์ง ์์ต๋๋ค.
๋ช ์ฃผ ์ ์ ์ด ์ง๋ฌธ์ด ๋จ๋ฉด์ ๋ช ๊ฐ์ง ํ ์คํธ๋ฅผ ํ์ต๋๋ค. mingwpy๊ฐ ๋ง๋ ์ ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ npymath.a๋ฅผ MSVC ์ปดํ์ผ๋ฌ์ ํจ๊ป ์ฌ์ฉํ ์ ์์ต๋๊น? ์์น์ ์ผ๋ก gcc ๋ฐํ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ์ ํํ ์ผ๋ถ ๊ฐ์ฒด๊ฐ ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ถ๊ฐ๋๋ฉด ์๋ํ ์ ์์ต๋๋ค. ๋๋ ๊ทธ๋ฌํ ์ ๊ทผ ๋ฐฉ์์ด ๋ถ์์ ํ๊ณ ์ทจ์ฝํ๋ค๋ ๊ฒฐ๋ก ์ ๋๋ฌํ์ต๋๋ค.
์ํ๋ผ์ค๊ฐ numpy ํ ์ ๋น๋ํ๊ธฐ ์ํ ์ต์ ์ด๋ผ๋ฉด DLL๋ก ๋น๋ํ๋ ค๊ณ ํฉ๋๋ค. ์ด์๊ฐ ์์ต๋๊น?
๋ค๋ฅธ ์ปดํ์ผ๋ฌ์์ ์ค๋ ์ ์ ๊ฐ์ฒด ํ์ผ์ ํผํฉํ๋ ๊ฒ์ ์ ๋ง๊ฐ ์ฑ์๋ฅผ ํผํ๋ ๊ฒ์ฒ๋ผ ํผํด์ผ ํ๋ ๊ฒ์ ๋๋ค.
๋๋ https://mingwpy.github.io/motivation.html (Why page) ์ ๋์ ๋ก๋ ๋ชจ๋์ ๋ํ ๋ฌธ์ ์ ๋ํ ๋งค์ฐ ๊ฐ๋จํ๊ณ ์ง์ ์ ์ธ ์ค๋ช ์ด ๋ถ์กฑํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋๋ ๋ค๋ฅธ ์ธ์ด๋ก ์์ฑ๋ .dll์์ ๋ก๋๋๋ ํ๋ฌ๊ทธ์ธ์ ๊ธฐ๋ฐ์ผ๋ก ํ๋ ํ์ผ ๊ด๋ฆฌ์๊ฐ Windows์ ๊ธฐ๋ณธ์ด๋ฉฐ "์ ํํ ๋์ผํ ์ปดํ์ผ๋ฌ"์ ๋ํด ์ด ๋ฌธ์ ๊ฐ ์๋ Far Manager์ ์ด์ผ๊ธฐํ์ต๋๋ค. Python์ด ์ ๊ทธ๊ฒ์ ๊ฐ์ง๊ณ ์๋์ง ๊ถ๊ธํฉ๋๋ค. ๋ํ .dll์์ ๋ชจ๋์ ๋ก๋ํฉ๋๋ค.
@techtonik , ๋ด ์๊ฒฌ์ ๋ค๋ฅธ ์ปดํ์ผ๋ฌ์์ ์์ฑ๋ ๊ฐ์ฒด ํ์ผ์ ๋จ์ผ ๋ฐ์ด๋๋ฆฌ ํ์ผ(DLL ๋๋ EXE)๋ก ์ฐ๊ฒฐํ๋ ๊ฒ์ ๊ดํ ๊ฒ์ ๋๋ค. ์ด๊ฒ์ด ๋ด๊ฐ _์ ์ ๊ฐ์ฒด ํ์ผ์ ํผํฉํ๋ ๊ฒ์ ์๋ฏธํ๋ ๊ฒ์ ๋๋ค. ๊ทธ๋ฌํ ์ ๊ทผ ๋ฐฉ์์ ์ฃผ์ํด์ ๋ค๋ฃจ๋ฉด ์ ํ ์คํธ๋ ์ผ๋ถ ์ํฉ์์ ์๋ _ํ ์_ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๋ฐ์ด๋๋ฆฌ๋ฅผ ๋น๋ํ๋ ๊ฐ๋ ฅํ ๋ฐฉ๋ฒ์ ์๋๋๋ค.
๊ณตํต ํ๋ก์ธ์ค ๊ณต๊ฐ์์ ๋ค๋ฅธ ์ปดํ์ผ๋ฌ์ DLL ์ํธ ์ด์ฉ์ฑ์ ์์ ํ ๋ค๋ฆ ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ด๋ฌํ ์ ๊ทผ ๋ฐฉ์์ ์ผ๋ฐ์ ์ผ๋ก ์ ์๋ํฉ๋๋ค. ํ์ผ ์ค๋ช ์๋ฅผ ๊ณต์ ํ๋ ๊ฒฝ์ฐ ์ด๋ฌํ ๋ฐ์ด๋๋ฆฌ๊ฐ ๋์ผํ MS ๋ฐํ์ DLL์ ์ฐ๊ฒฐ๋์ด ์๋์ง ํ์ธํด์ผ ํฉ๋๋ค. ์ฒ๋ฆฌํด์ผ ํ๋ ๋ค๋ฅธ ๊ฐ๋ฅํ ABI ๋ฌธ์ ๋ ์์ต๋๋ค. ๋ฌผ๋ก ์ฌ์ฉ ์ค์ธ ์ปดํ์ผ๋ฌ์ ๋ฐ๋ผ ๋๋ฒ๊น ์ ์ํด ๋ค๋ฅธ ๋๋ฒ๊ฑฐ ์ธํธ๊ฐ ํ์ํฉ๋๋ค.
minwgpy๋ ํ์ค MSVC CPython ๋น๋ ๋ด๋ถ์์ ์ฌ์ฉํ๊ธฐ ์ํด mingw-w64์ ๋์์ผ๋ก Python ํ์ฅ ๋น๋๋ฅผ ์ง์ํ๋ ํ๋ก์ ํธ์ ๋๋ค.
ํ์ธ - ATLAS ๋น๋์ ๋ํด MSVC ๋งํฌ๋ฅผ ์ฌ์ฉํ์ฌ numpy๋ฅผ ๋น๋ํ์ต๋๋ค.
์ฌ๊ธฐ์์ ATLAS ๋น๋:
http://nipy.bic.berkeley.edu/scipy_installers/atlas_builds/atlas-3.10.1-sse2-32.tgz
ATLAS dll์ ๋น๋ํ๋ ๋ฐฉ๋ฒ์ ๋ํ ๋ช ๊ฐ์ง ๊ธฐ๋ณธ์ ์ธ ์ง์นจ์ด ์์ต๋๋ค.
๋ชจ๋ numpy ํ
์คํธ๋ f2py
์คํฌ๋ฆฝํธ ๊ฒ์ฌ๋ฅผ ์ ์ธํ๊ณ ํต๊ณผํฉ๋๋ค. ์ ์๊ฐ์๋ ์ด๋ ๋ฌด๋ํ ์คํจ๋ผ๊ณ ์๊ฐํฉ๋๋ค.
๋ง์ง๋ง ๋จ๊ณ๋ ํ ๋ด๋ถ์ ๋์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ ๊ณตํ๋ ๊ฒ์ ๋๋ค. @carlkl - ํ์ฌ ๊ฐ์ฅ ์ข์ํ๋ ๋ฐฉ๋ฒ์ ๋ฌด์์ ๋๊น?
๋ฐ๊ฐ์ต๋๋ค. ํ ์ ๋ง๋๋ ๋ฐฉ๋ฒ๋ ์๊ณ ์ถ์ต๋๋ค.
๋ฐ์ด๋๋ฆฌ ํฌํจ - MKL ๋น๋๋ฅผ ๊ฒ์ํ๊ณ ๋ค๋ฅธ ์ฌ๋๋ค์ด OpenBlas๋ฅผ ํ
์คํธํ๋๋ก ํ ์ ์์ต๋๋ค.
ํ๋.
2016๋
2์ 11์ผ ์คํ 1์ 28๋ถ์ "Matthew Brett" [email protected] ์ด ๋ค์๊ณผ ๊ฐ์ด ์ผ์ต๋๋ค.
ํ์ธ - ATLAS ๋น๋์ ๋ํด MSVC ๋งํฌ๋ฅผ ์ฌ์ฉํ์ฌ numpy๋ฅผ ๋น๋ํ์ต๋๋ค.
์ฌ๊ธฐ์์ ATLAS ๋น๋:
http://nipy.bic.berkeley.edu/scipy_installers/atlas_builds/atlas-3.10.1-sse2-32.tgz
ATLAS๋ฅผ ๊ตฌ์ถํ๋ ๋ฐฉ๋ฒ์ ๋ํ ๋ช ๊ฐ์ง ๊ธฐ๋ณธ์ ์ธ ์ง์นจ์ด ์์ต๋๋ค.
DLL.๋ชจ๋ numpy ํ ์คํธ๋ f2py ์คํฌ๋ฆฝํธ ๊ฒ์ฌ์ ๋ณ๋๋ก ํต๊ณผํฉ๋๋ค.
์์ฑ ์คํจ.๋ง์ง๋ง ๋จ๊ณ๋ ํ ๋ด๋ถ์ ๋์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ ๊ณตํ๋ ๊ฒ์ ๋๋ค. @carkl
https://github.com/carlkl - ํ์ฌ ๊ฐ์ฅ ์ข์ํ๋ ๋ฐฉ๋ฒ
์ ๊ฒ?โ
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ฑฐ๋ GitHub์์ ํ์ธํ์ธ์.
https://github.com/numpy/numpy/issues/5479#issuecomment -183021728.
๋ง์ง๋ง ๋จ๊ณ๋ ํ ๋ด๋ถ์ ๋์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ ๊ณตํ๋ ๊ฒ์ ๋๋ค.
๊ทธ๋ฆฌ๊ณ SSE2 ์ํ์ ์ฐ์ํ ๊ตฌ์ ๊ธ์ต?
@mrslezak - ๊ฐ์ฅ ์ฌ์ด ๋ฐฉ๋ฒ์ multiarray.pyd๋ฅผ ๊ฐ์ ธ์ค๋ ๋์ ํ๋ก์ธ์ค ๊ณต๊ฐ์ ์์์ ์ผ๋ก ๋ก๋๋๊ธฐ ๋๋ฌธ์ numpy/core ํด๋์ ๋ฃ๋ ๊ฒ์ ๋๋ค.
๋ง์ง๋ง ๋จ๊ณ๋ ํ ๋ด๋ถ์ ๋์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ฐฐ์กํ๋ ๊ฒ์ ๋๋ค.
@matthew-brett: ์ด ์์ ์ ์ํํ๋ "์ฌ๋ฐ๋ฅธ" ๋ฐฉ๋ฒ์ ๋ฌธ์๊ฐ ๋งค์ฐ ์ด์ ํ์ง๋ง ์๋ง๋ ์คํํ ์ ์๋ SxS ์ด์ ๋ธ๋ฆฌ๋ฅผ ํตํ๋ ๊ฒ์ด๋ผ๊ณ 99% ํ์ ํฉ๋๋ค. ๋๋ฌด ๋ง์ด ์ฝ๊ณ ์์ผ๋ฏ๋ก ์ด๋ ์์ ์ ์์์ ์ธ๋ถ ์ฌํญ์ ์๋ํ๊ณ ์ถ๋ค๋ฉด ์ ์๊ฒ ์๋ ค์ฃผ์ญ์์ค :-).
(๋ค๋ฅธ ๋ชจ๋ ์ ๊ทผ ๋ฐฉ์์ ๋ฌธ์ ๋ IIUC ์ฐฝ ํ๋ก์ธ์ค๊ฐ ์ผ๋ฐ์ ์ผ๋ก ๊ฐ์ ธ์จ ๋ชจ๋ dll์ ๋จ์ผ ์ ์ญ ๋ค์์คํ์ด์ค๋ฅผ ์ ์งํ๋ค๋ ๊ฒ์ ๋๋ค. ์ด๊ฒ์ด ์๋ฏธํ๋ ๋ฐ๋ ๋ ๊ฐ์ ํ์ฅ์ด ๋ชจ๋ foo.dll์ด๋ผ๋ ํ์ผ์ ์ ๊ณตํ๋ ๊ฒฝ์ฐ ๋จผ์ ๋ก๋๋๋ ํ์ฅ์ด ํด๋น ๋ฒ์ ์ ๊ฐ๋๋ค๋ ๊ฒ์ ๋๋ค. foo.dll "win" ๋ฐ ๋ค๋ฅธ ํ์ฅ์ ๊ฒฐ๊ตญ ๊ทธ๊ฒ์ ์ฌ์ฉํ๊ฒ ๋ฉ๋๋ค -- ๊ณ ์ ์ ์ธ "dll ์ง์ฅ" ๋ฌธ์ ๊ทธ๋ฆฌ๊ณ IIUC๋ ์ด ๋์์ ํผํ๋ ์ ์ผํ ๋ฐฉ๋ฒ์ SxS ๊ธฐ๊ณ๋ฅผ ํตํ๋ ๊ฒ๋งํผ์ด๋ ์ถ์ ํฉ๋๋ค.)
Nathaniel - ์ฌ๊ธฐ์ SxS ์ด์ ๋ธ๋ฆฌ์ ๋ํ ์ดํด๋ฅผ ์ผ์ต๋๋ค. https://github.com/numpy/numpy/wiki/windows-dll-notes#side -by-side-assemblies
๋ด ์ต์ข ๊ฒฐ๋ก ์ ํฌ๋ง์ด ์์ผ๋ฉฐ, ์ด์จ๋ ํ๋ก์ธ์ค๋ณ๋ก ๊ณ ์ ํ ๋ฐฉ์์ผ๋ก DLL ์ด๋ฆ์ ๋ฐ๊พธ๋ ๊ฒ์ด ํฉ๋ฆฌ์ ์ธ ๋์์ด๋ผ๋ ๊ฒ์ด์์ต๋๋ค.
Ralf - ์ค์น ํ๋ก์ธ์ค์ SSE2 ๋ฑ ํํฌ๋ฅผ ์ถ๊ฐํ๋ ๋ฐฉ๋ฒ์ ๊ณต์ํํ๊ธฐ ์ํ ์ ์: https://github.com/numpy/numpy/pull/7231
@matthew-brett: ๋๋ ๊ทธ ๋
ธํธ๋ฅผ ์ฝ์์ต๋๋ค. ์.... ๊ทธ๋ฆฌ๊ณ ํ ํ์จ, ๊ฐ๋ง ์๋ ์ด์ ๋ ๋ฌด์์
๋๊น? ๊ฐ์ ๋๋ ํ ๋ฆฌ ๋ฌธ์ ๋๋ฌธ์? ๊ทธ๋ฆฌ๊ณ ๊ทธ ์ด๋ฆ ๋ฐ๊พธ๊ธฐ๋ฅผ ์ํํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์์ด๋์ด๊ฐ ์์ต๋๊น? (์ ๋ ์์ง PE ํ์ผ์ ๋ํด patchelf --replace
์ ํด๋นํ๋ ๊ฒ์ ์ฐพ์ง ๋ชปํ๊ณ .lib
ํ์ผ์ ์ฌ์์ฑํ๋ ๊ฒ์ ์ฌ์ํ ์ผ์ด ์๋๋๋ค. mingw-w64๋ฅผ ์ฌ์ฉํ๋ ๊ฒ ๊ฐ์ง๋ง ๊ทธ๋ ๊ฒ ๋์์ง๋ ์์ต๋๋ค. .dll
์ ์ง์ ์ฐ๊ฒฐํ ์ ์์ต๋๋ค.์ ์ด๋ libgfortran ๋๋ ์ด์ ์ ์ฌํ ์ด๋ฆ์ ๋ฐ๊ฟ ํ์๊ฐ ์๋ค๋ฉด...)
(์ด ๋ชฉ๋ก ์ด๋๊ฐ์ patchelf --replace
์ ํด๋นํ๋ PE๊ฐ ์์ ์ ์์ต๋๋ค: http://www.woodmannsfortress.com/collaborative/tools/index.php/Category:Import_Editors)
์ด ๋๋ ํ ๋ฆฌ๊ฐ DLL ๊ฒ์ ์ค์ ์ ํธ๋๊ธฐ ๋๋ฌธ์ multiarray.pyd์ ํจ๊ป satlas.dll
(๋๋ ๋์์ ์ผ๋ก libopenblaspy.dll
)๋ฅผ ๋ก๋ํ๋ ๋ฐ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ์ด ์ ๊ทผ ๋ฐฉ์์ ์ด DLL์ด python์์ ํ๋ก์ธ์ค ๊ณต๊ฐ์ผ๋ก LoadLibraryEx
๋ฅผ ํตํด ๋ก๋๋๋ค๋ ์ฌ์ค ๋๋ฌธ์ ์๋ํฉ๋๋ค. numpy/core
ํด๋๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค. ๊ฐ์ ธ์ค๊ธฐ ์ค์ blas ์ข
์ python ํ์ฅ์ด ๊ฐ์ฅ ๋จผ์ ๋ฐ์ํ๊ธฐ ๋๋ฌธ์
๋๋ค. ๊ฐ์ ์ด๋ฆ์ DLL์ ๋ก๋ํ๋ ค๋ ์ถ๊ฐ ์๋๋ ์ด DLL์ด ์ด๋ฏธ ํ๋ก์ธ์ค ๊ณต๊ฐ์ ๋ก๋๋์ด ์๊ธฐ ๋๋ฌธ์ ๋ฌด์๋ฉ๋๋ค. Windows๋ DLL BTW์ ์ด๋ฆ์ ์ฐพ์ต๋๋ค.
DLL ์ง์ฅ ์์ ๊ทธ๋ฌํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ _further_ DLL์ ์ข
์๋์ง๋ง satlas.dll
๋ฐ libopenblaspy.dll
๊ฐ ๋ชจ๋ ์์ฒด ํฌํจ๋์ด ์๊ณ ํ์ค Windows ์์คํ
DLL์๋ง ์์กดํ๋ ๊ฒฝ์ฐ๋ ๊ทธ๋ ์ง ์์ต๋๋ค. ์ด๊ฒ์ ์ผ๋ฐ์ ์ผ๋ก ์ ์ ์ผ๋ก ์ฐ๊ฒฐ๋ DLL์ด๋ผ๊ณ ํ๋ ๊ฒ์
๋๋ค. ์ฆ, gcc ๋ฐํ์ ์ฝ๋๊ฐ ์ ์ ์ผ๋ก ์ฐ๊ฒฐ๋์ด ์์์ ์๋ฏธํฉ๋๋ค.
_๋น๊ต์ฉ_: MKL ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ฐ์ ธ์ค๋ ค๋ฉด PATH
์ numpy/core
๋ก ์ผ์์ ์ผ๋ก ํ์ฅํฉ๋๋ค. ๋ถํํ๋ ์ด์ MKL ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ Windows ์์คํ
ํด๋์ ์๋ ๊ฒฝ์ฐ ์คํจํฉ๋๋ค.
@matthew-brett @njsmith : DLL ์ด๋ฆ ๋ณ๊ฒฝ: ์ด๋ค ์ฉ๋๋ก ์ข์๊ฐ์?
@carlkl : ์ฐ๋ฆฌ๊ฐ ๊ฑฑ์ ํ๋ ๊ฒฝ์ฐ๋ numpy๊ฐ atlas.dll
๋ฅผ ํฌํจํ๊ณ scipy๊ฐ atlas.dll
๋ฅผ ํฌํจํ๊ณ ์ด๋ ์์ ์์ ์ฌ์ฉ์๊ฐ scipy๋ฅผ ์
๊ทธ๋ ์ด๋ํ๊ณ atlas.dll
์ ์ต์ ๋ฒ์ ์ ์ป๋ ๊ฒฝ์ฐ์
๋๋ค. atlas.dll
์ ์ด์ ๋ฒ์ ์ ์ฌ์ฉํ๊ฒ ๋ฉ๋๋ค. ์ด๊ฒ์ scipy๊ฐ ์ต์ ๋ฒ์ ์ ์์กดํ ์ ์๊ธฐ ๋๋ฌธ์ ์ข์ง ์์ต๋๋ค. ๋ฐ๋ผ์ ์ ํํ ์ด๋ค ํจํค์ง์ ๋น๋๊ฐ ๊ด๋ จ๋๊ณ ์ฌ์ฉ์๊ฐ ํจํค์ง๋ฅผ ๊ฐ์ ธ์ค๋ ์์์ ๋ฐ๋ผ ๋ฌด์์๋ก ์ค๋จ๋ฉ๋๋ค. ์ด๊ฒ์ numpy์ atlas.dll
๋ผ๋ DLL์ด ํฌํจ๋์ด ์์ผ๋ฉด ํ๋ก์ธ์ค ์ ์ฒด DLL ๋ค์์คํ์ด์ค์์ atlas.dll
๋ผ๋ ์ด๋ฆ์ "ํด๋ ์"ํ๊ณ ๋ค๋ฅธ ํจํค์ง๊ฐ ํด๋น DLL์ ์ฌ์ฉํ๋ ๊ฒ์ ์ฐจ๋จํ๊ธฐ ๋๋ฌธ์ ๋ฐ์ํฉ๋๋ค. ์ด๋ฆ.
๋ ๊ฐ์ง ๊ฐ๋ฅํ ์๋ฃจ์
์ (a) SxS/activation-contexts ํญ๋ชฉ์ด ์๋ํ๋๋ก ๋ง๋ค ์ ์๋ ๊ฒฝ์ฐ ํ๋ก์ธ์ค ์ ์ฒด DLL ๋ค์์คํ์ด์ค๋ฅผ ๋นํ์ฑํํ๋ ๋ฐฉ๋ฒ์ ์ ๊ณตํ๊ฑฐ๋ (b) numpy์ numpy-atlas.dll
๋ฐ scipy๊ฐ ํฌํจ๋ ๊ฒฝ์ฐ์
๋๋ค. scipy-atlas.dll
ํฌํจํ๋ฉด ์ถฉ๋ ์์ด ๋์ผํ ํ๋ก์ธ์ค ์ ์ฒด ๋ค์์คํ์ด์ค๋ฅผ ๊ณต์ ํ ์ ์์ต๋๋ค.
๋๋ ๋ ๋ค dll์ ์ ๊ณตํ๋ ๋ณ๋์ clib_atlas
ํจํค์ง์ ์์กดํ๋ค๋ฉด? ๊ทธ๋ฐ ๋ค์ ๋ฒ์ ์ข
์์ฑ ์๊ตฌ ์ฌํญ์ Python ํจํค์ง์ ๋ํด ํ์์ ๊ฐ์ด ํํํ ์ ์์ต๋๋ค.
@tkelman : ๋ฒค๋ DLL๊ณผ ๋ณ๋๋ก ๋ฐฐํฌ๋ DLL์ ๋ชจ๋ ์ง์ํ๋ ๋ฐฉ๋ฒ์ ์์์ผ ํฉ๋๋ค. ๋ ์ต์ ๋ชจ๋ ๋ค๋ฅธ ์ํฉ์ ์ ํฉํ๊ธฐ ๋๋ฌธ์ ๋๋ค. ๊ทธ๋ฆฌ๊ณ ํ๋งค ๋ ์ผ์ด์ค๋ ์์ํ๊ธฐ๊ฐ ํจ์ฌ ์ฝ์ต๋๋ค :-)
๋๋ side-by-side ์๋ฃจ์ ์ด Windows system32์ ์ค์นํ๋ ค๋ฉด ๊ด๋ฆฌ์ ๊ถํ์ด ํ์ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ด๋ฌ์ง ๋ง์ธ์.
์ด์
๋ธ๋ฆฌ๊ฐ ๊ณ ์ ํ ๋ฐ์ด๋๋ฆฌ ํธ๋ฆฌ์ ์๋ '๋น๊ณต๊ฐ' ๋ณ๋ ฌ ์ด์
๋ธ๋ฆฌ๋ ์์ง๋ง ์ด์
๋ธ๋ฆฌ๋ฅผ ๊ฐ๋ฆฌํค๋ ๋ฐ ์ฌ์ฉํ ์ ์๋ ์์ ๋๋ ํฐ๋ฆฌ ๊ฒฝ๋ก ๋ง์ปค๋ ๋ ๊ฐ๋ก ์ ํ๋ฉ๋๋ค. ์ฆ, ..\..\some_assembly
์ ๊ฐ๋ฆฌํฌ ์ ์์ต๋๋ค. ..\..\..\some_assembly
์๋๋๋ค.
์๋ฅผ ๋ค์ด scipy/first/second/third/something.pyd
๋ third
๋๋ second
๋๋ first
๋๋ ํ ๋ฆฌ์ ๋ณ๋ ฌ ์ด์
๋ธ๋ฆฌ๋ง ๊ฐ๋ฆฌํฌ ์ ์์ง๋ง scipy
์๋ ์์ต๋๋ค. (๋๋ ๊ทธ ์์ ๋ค๋ฅธ ๋๋ ํ ๋ฆฌ.
์, ์ฌ๊ธฐ์์ ํ ์คํธ๋ฅผ ์ํด ๋ช ๊ฐ์ง ๋ฐํด๋ฅผ ๋ง๋ค์์ต๋๋ค.
http://nipy.bic.berkeley.edu/scipy_installers/atlas_builds/
ํ์์ ๊ฐ์ด:
pip install -f https://nipy.bic.berkeley.edu/scipy_installers/atlas_builds numpy
์ฌ๊ธฐ์์ ๋งค์ฐ ์กฐ์กํ ๋น๋ ์๋ํ: https://github.com/matthew-brett/np-wheel-builder
ํ ์ f2py ์คํฌ๋ฆฝํธ๋ฅผ ์คํํ๋ ๊ฐ์ง ์คํจ๋ฅผ ์ ์ธํ๊ณ ๋ชจ๋ ํ ์คํธ๋ฅผ ํต๊ณผํฉ๋๋ค(๊ทธ ํ ์คํธ์ ๋ฒ๊ทธ๋ผ๊ณ ์๊ฐํฉ๋๋ค).
๋ํ ๋์ผํ ์น ์ฃผ์์์ Python 2.7, 3.4, 3.5์ฉ 64๋นํธ ์ค์น ํ๋ก๊ทธ๋จ์ ๊ตฌ์ถํ์ต๋๋ค.
@matthew-brett, ์ด ํ์ผ์ ์ก์ธ์คํ ์ ์๋ ๊ถํ์ด ์์ต๋๋ค.
@matthew-brett, SxS ์ด์ ๋ธ๋ฆฌ ๊ธฐ์ ์ ๋ ์ด์ ์ฌ์ฉ๋์ง ์์ต๋๋ค(VS2010 ์ดํ) . https://en.wikipedia.org/wiki/Side-by-side_assembly๋ฅผ ์ฐธ์กฐํ์ธ์.
DLL ํ์ผ ์ด๋ฆ์ ๋ฒ์ ๋ฒํธ๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์ ์ด๋ป์ต๋๊น: libopenblaspy_0.15.
์ํ๋ผ์ค๋ฅผ ์ฌ์ฉํ๋ฉด ์์น์ ์ผ๋ก ๋ฐํ์์ ์ต์ ํ๋ ์ํ๋ผ์ค DLL์ ๋ก๋ํ ์ ์์ต๋๋ค. (openblas๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ํ์ํ์ง ์์)
์ด ๋ชจ๋ ๊ฒ์ clib_openblas ๋ฐ/๋๋ clib_atlas ํจํค์ง์ ๋์์ผ๋ก ์ฒ๋ฆฌํ ์ ์์ต๋๋ค. (์ด์ ์ ๋ฌ์ DLL์ ๋ํ ์ฝ๋๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ์ ๋ฐฐ์์ผ ํฉ๋๋ค.) Numpy ์์ฒด์๋ ์ํ๋ผ์ค ๋๋ ์คํ๋ธ๋ผ์ค๊ฐ ์ฅ์ฐฉ๋ ์ ์์ต๋๋ค. clib_openblas ๋๋ clib_atlas๋ฅผ ์ฌ์ฉํ ์ ์๋ ๊ฒฝ์ฐ ๋ก๋ํด์ผ ํฉ๋๋ค.
@carlkl : ์ํคํผ๋์ ํ์ด์ง๊ฐ ํผ๋์ค๋ฝ๊ณ VS 2010์ด _ํน์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ํด_ SxS๋ฅผ ์ฌ์ฉํ์ง ์๋๋ค๊ณ ๋งํ๋ ค๋ ๊ฒ ๊ฐ์ง๋ง, ์ผ๋ฐ์ ์ผ๋ก SxS๋ ํ์คํ ์ฌ์ ํ ์ฌ์ฉ๋ฉ๋๋ค(์: ๊ฐ์ ํ์ด์ง์ ๋์ค: "Vista๋ถํฐ, ์ด์ ์ฒด์ ๋ ํต์ฌ ๊ตฌ์ฑ ์์์๋ WinSxS๋ฅผ ์ฌ์ฉํฉ๋๋ค.")
msvc๋ก ํฌ์๋ dll์ ๋น๋ํ๋ ๋ฐฉ๋ฒ์ ํน๋ณํ .def ํ์ผ์ ์์ฑํ ๋ค์ .dll์ ์์ฑํ ๋ ์ฌ์ฉํ๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ํ์ง๋ง ํฌ์๋ dll์ ์ด๋ป๊ฒ ๋์์ด ๋ ๊น์? (osx ๋๋ Linux์์๋ ์ ์ฉํ ๋๊ตฌ๊ฐ ๋ ์ ์๋ค๊ณ ์๊ฐํ์ง๋ง Windows์์๋ ์ฌ์ ํ ์ฑ๊ฐ์ ์ ์ญ dll ๋ค์์คํ์ด์ค ๋ฌธ์ ๊ฐ ์์ต๋๋ค.)
@njsmith , ์ฐ๋ฆฌ๋ ์ดํดํ ์ ์๋ ํด๊ฒฐ์ฑ ์ ์ฐพ์์ผ ํฉ๋๋ค. SxS sitll์ด ์กด์ฌํ๋ค๋ ๊ฒ์ ์ฌ์ค์ ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ด์ ์ฒด์ ์์ฒด ์ด์ธ์ ๋ค๋ฅธ ์ฉ๋๋ก๋ ๋ ์ด์ ์ฌ์ฉ๋์ง ์์ต๋๋ค.
(1) ๊ฐ์ฅ ์ฌ์ด IMHO ์๋ฃจ์
์ Blas Lapack์ ์ ์ ์ผ๋ก ์ฐ๊ฒฐํ๋ ๊ฒ์
๋๋ค. ์ด ์ ๊ทผ ๋ฐฉ์์ ๊ฑฐ๋ํ ๋ฐ์ด๋๋ฆฌ๋ฅผ ์์ฑํ๋ฏ๋ก ๊ถ์ฅํ์ง ์์ต๋๋ค(์ ์ด๋ ํ์๋).
(2) ๋ ๋ฒ์งธ๋ก ์ฌ์ด ์๋ฃจ์
์ numpy/core
์ DLL์ ์ค์นํ๋ ๊ฒ์
๋๋ค.
(3) ์ธ ๋ฒ์งธ ์๋ฃจ์
์ ์ธ๋ถ Blas/Lapack ํจํค์ง์ ๋ํ ์ข
์์ฑ์ _force_ ํ๋ ๊ฒ์
๋๋ค. ์ด ํจํค์ง๋ ๋ฒ์ ์ด ์ง์ ๋๊ณ ๋จ์ํ Blas Lapack DLL์ ๋ฏธ๋ฆฌ ๋ก๋ํฉ๋๋ค. pip๋ฅผ ์ฌ์ฉํ๋ฉด ์ฌ๋ฐ๋ฅธ ๋ฒ์ ์ DLL์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
(3) ๊ทธ๋ฌํ ์ ํ๋ ์ข
์์ฑ์ด ํ์๋ฐ์ง ๋ชปํ๋ ๊ฒฝ์ฐ numpy ๋ฐ scipy ์์ฒด์์ ์ ๊ณตํ๋ DLL๋ก ์ถ๊ฐ๋ ์ ์์ต๋๋ค. ์ด๋ฌํ DLL์ ์ธ๋ถ DLL์ด ์ค์น๋์ง ์์ _์ํฉ์์๋ง_ ๋ก๋ํด์ผ ํฉ๋๋ค. ์ฆ, ์ธ๋ถ Blas/Lapack ํจํค์ง๊ฐ ์ ํธ๋์ง๋ง ๊ผญ ํ์ํ ๊ฒ์ ์๋๋๋ค.
์ด๋ฌํ ์๋ฃจ์
์ ๊ฐ์ฅ ํฐ ์ฅ์ ์ numpy/scipy๋ฅผ ๋ค์ ์ค์นํ์ง ์๊ณ ๋ openblas/atlas์ ์ต์ ๋ฒ๊ทธ ์์ ๋ฆด๋ฆฌ์ค๋ฅผ ๊ตํํ ์ ์๋ค๋ ๊ฒ์
๋๋ค.
(4) ๋งค๋ํ์คํธ ๋ฐ SxS ์ฌ์ฉ. @njsmith , ์ด ๊ฒฝ์ฐ์ ๋ํ ์ธ๋ถ ์ ๋ณด๋ฅผ ์
๋ ฅํ ์ ์์ต๋๊น?
์ฃ์กํฉ๋๋ค - ๋ฐํด์ ๋ํ ๊ถํ์ ์์ ํ์ต๋๋ค - ์ง๊ธ ์๋ํฉ๋๊น?
SxS ์ด์ ๋ธ๋ฆฌ์ ๋ํด ์ฐ๋ฝ์ ๋๋ฆฌ์ง ๋ชปํด ์ฃ์กํฉ๋๋ค. SxS์ ๋ํ ๋์ 'ํฌ๋ง ์๋' ์๊ฒฌ์ ๊ทธ๋ค์ง ์ ์ฉํ์ง ์์์ต๋๋ค. ์์ถ์ ํ์ด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
๋ฌธ์ ๋ ์์ฒด ๋ฐ์ด๋๋ฆฌ ํธ๋ฆฌ์์ ํธ์คํ ํ๋ SxS ์ด์ ๋ธ๋ฆฌ์ธ "๋น๊ณต๊ฐ" SxS ์ด์ ๋ธ๋ฆฌ๋ฅผ ์ฌ์ฉํด์ผ ํ๋์ง ์ฌ๋ถ์ ๋๋ค. SxS ์ด์ ๋ธ๋ฆฌ๋ "๊ณต์ "ํ ์๋ ์์ต๋๋ค. ๊ณต์ ์ด์ ๋ธ๋ฆฌ๋ Windows ์์คํ ํด๋๋ก ์ด๋ ํ๋ฉฐ MS ์ค์น ํ๋ก๊ทธ๋จ ํจํค์ง๋ก ์ค์นํด์ผ ํฉ๋๋ค . ๊ณต์ ์ด์ ๋ธ๋ฆฌ๋ ํ ์ ํตํด ์ค์นํ ์ ์์ผ๋ฉฐ ์ด๋ค ๊ฒฝ์ฐ์๋ ๊ด๋ฆฌ์ ๊ถํ์ด ํ์ํ๋ฏ๋ก ๊ณต์ ์ด์ ๋ธ๋ฆฌ๋ฅผ ์ต์ ์ผ๋ก ๊ฑฐ๋ถํ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
๊ทธ๋์ - ์ฌ์ค SxS ์ด์ ๋ธ๋ฆฌ๋ฅผ ์ฌ์ฉํ ๋ ์ด๋ค ๋ฌธ์ ๊ฐ ์์ต๋๊น?
์ฒซ ๋ฒ์งธ ๋ฌธ์ ๋ ์ฐ๋ฆฌ๊ฐ ์ด๊ฒ์ ์๋ํ๊ณ ์คํํ๋ค๋ฉด ๊ฝค ์ ์ ํ ๊ธธ์ ์ด๊ฒ ๋ ๊ฒ์ด๋ผ๋ ์ ์ ๋๋ค. ๋๋ ๊ทธ๊ฒ์ ์ฌ์ฉํ๋ ๋ค๋ฅธ ์คํ ์์ค ํ๋ก์ ํธ๋ฅผ ๋ชจ๋ฆ ๋๋ค. ๋๋ Steve Dower์๊ฒ SxS ์ด์ ๋ธ๋ฆฌ์ ๋ํด ๋ฌผ์์ต๋๋ค. Steve๋ MS์์ ๊ทผ๋ฌดํ๋ฉฐ ํ์ฌ Python Windows ๊ด๋ฆฌ์์ ๋๋ค. ๊ทธ๋ ๋ด๊ฐ ๊ทธ๋ค์ ํผํ๋ผ๊ณ ์ ์ํ์ต๋๋ค. ๊ทธ์ ํจ๊ป ์ผํ ์ฌ๋ ์ค ์๋ฌด๋ ๊ทธ๋ค์ ๋ํด ์ ์๊ณ ์๋ ๊ฒ ๊ฐ์์ต๋๋ค. ์์ ๋งํฌ๋ ๋ด ๋ฉ๋ชจ๋ ๋๊ตฐ๊ฐ๊ฐ (๋ถ๋ช ํ) ์ฑ๊ณต์ ์ผ๋ก ์ฌ์ฉํ๊ณ ์๋ค๋ ๋ช ๊ฐ์ง ์ฌ๋ก๋ฅผ ์ดํดํ๋ ค๋ ์๋์์ต๋๋ค. ๊ทธ๊ฒ๋ค์ ์ค๋ช ํ ์ ์๋ ์ข์ ์๋ฃ๋ ๊ฑฐ์ ์์ต๋๋ค.
์ด์ ๊ด๋ จํ์ฌ Carl์ ์ด๋ฏธ MS ์์ฒด๊ฐ ์ด๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๋ํด ์๋ฉด์ ์ธ ํ๋๋ฅผ ๋ณด์ธ๋ค๊ณ ์ธ๊ธํ์ต๋๋ค. ์๋ฅผ ๋ค์ด, SxS ์ด์ ๋ธ๋ฆฌ์ ๋ช ๋ฐฑํ ์ ํ๋ฆฌ์ผ์ด์ ์ธ MSVC ๋ฐํ์์ ๊ฒฝ์ฐ ๊ณ ์ ํ DLL ์ด๋ฆ ์ ๋์ ์ฌ์ฉํฉ๋๋ค(MSVCR90.DLL, MSVCR100.DLL ๋ฑ).
SxS ์ด์
๋ธ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด "ํ์ฑํ ์ปจํ
์คํธ"๋ฅผ ๋ง๋ค๊ธฐ ์ํด ๋ค๋ฅธ DLL์ ๋ก๋ํด์ผ ํ๋ ๋ชจ๋ ์ปดํ์ผ๋ ๋ชจ๋์ ์ด๊ธฐํ ์์ฉ๊ตฌ ์ฝ๋๋ฅผ ์ถ๊ฐํด์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ํธ์ง: Nathaniel์ DLL(DLL์ ํฌํจํ ์ ์์ง๋ง ์ธ๋ถ XML ํ์ผ์ผ ์๋ ์์)๊ณผ ๊ด๋ จ๋ ๋ณ๋ ฌ ์ด์
๋ธ๋ฆฌ "๋งค๋ํ์คํธ"์ ์ฆ๊ฑฐ๊ฐ ํ์๋๋ฉด Windows๊ฐ ์๋์ผ๋ก ์ ํ์ฑํ ์ปจํ
์คํธ๋ฅผ ํธ๋ฆฌ๊ฑฐํ๋ค๊ณ ์๊ธฐ์์ผฐ์ต๋๋ค. .
๊ทธ๋์ ํฌ๋ง์ด ์๋ ๊ฒ์ด ์๋๋ผ ํ๋ ๊ฒ์ ๋๋ค.
์ด ๋งค์ฐ ๊ธฐ๋ณธ์ ์ธ ์ง๋ฌธ์ ๋ํด ์ ๊ฐ์
๋๋ค. ํ์ง๋ง Windows์์ my_symbol
$๋ฅผ ํฌํจํ๋ $ foo.dll
๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํ๋์ ํ์ฅ ๋ชจ๋์ ๋ก๋ํ๋ฉด bar.dll
๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ก๋ํ๋ฉด ์ด๋ป๊ฒ ๋ฉ๋๊น? ๋ค๋ฅธ ํ์ฅ ๋ชจ๋์ my_symbol
๋ ํฌํจ๋์ด ์์ต๋๊น? ๋ด ํ๋ก์ธ์ค์์ ๊ฐ๋ณ์ ์ผ๋ก ์ก์ธ์คํ ์ ์๋ค๊ณ ๊ฐ์ ํ๋ฏ๋ก ์ฒซ ๋ฒ์งธ ํ์ฅ์ foo: my_symbol
๋ฅผ ์ป๊ณ ๋ ๋ฒ์งธ ํ์ฅ์ bar:my_symbol
๋ฅผ ์ป์ต๋๊น? ์๋ฌด๋ ๋์๊ฒ ์ฐธ์กฐ๋ฅผ ๊ฐ๋ฆฌํฌ ์ ์์ต๋๊น?
๊ทธ๊ฒ์ด ๋ง๋ค๋ฉด, DLL ์ง์ฅ์ ํผํ๊ธฐ ์ํด ์ฐ๋ฆฌ๊ฐ ํ์๋ก ํ๋ ๋ชจ๋ ๊ฒ์ ๊ฐ์ ํ๋ก์ธ์ค(์ฌ์ฉ์๊ฐ ์ฐ๋ฆฌ์ ์ ํํ DLL์ ์ฌ์ฉํ๋ ค๊ณ ์๋ํ์ง ์์ ๊ณณ)์์ ์ฐ์ฐํ ์ฌ์ฉ๋ ๊ฐ๋ฅ์ฑ์ด ๋งค์ฐ ๋ฎ์ DLL ์ด๋ฆ์ ๊ฐ๋ ๊ฒ์ ๋๋ค.
๋งํฌํ๋ ๋์ ๊ฐ ๊ธฐํธ๋ ํด๋น ์ด๋ฆ์ผ๋ก ์๋ณ๋๋ ํน์ DLL์ ๋ฐ์ธ๋ฉ๋ฉ๋๋ค. ๋ฐํ์ ๋์ ๋์ผํ ์ด๋ฆ์ ๊ฐ์ง DLL์ด ๋ ๊ฐ ์ด์ ์๋ ๊ฒฝ์ฐ ์ฌ๋ฐ๋ฅธ DLL์ด ๋ก๋๋์๋์ง ํ์ธํด์ผ ํฉ๋๋ค. ๋ฐ๋ผ์ ๊ฒ์ ์์๊ฐ ์ค์ํฉ๋๋ค.
์์ My anaconda.org numpy wheel์ Julia๊ฐ ์ฌ์ฉํ๋ ๋นํ์ค libopenblas,dll๊ณผ ์ด๋ฆ ์ถฉ๋์ ํผํ๊ธฐ ์ํด libopenblas_py_.dll์ด๋ผ๋ ์ด๋ฆ์ openblas ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
julia์ ์ต์ ๋ฒ์ ์ ์ด์ ๋ค๋ฅธ ์ด๋ฆ libopenblas64_
๋ฅผ ์ฌ์ฉํ์ฌ ๋น๋ํ๋ ๋นํ์ค ABI๋ฅผ ๋ฐ์ํฉ๋๋ค. 32๋นํธ์์๋ ์ธํฐํ์ด์ค์์ 64๋นํธ ์ ์๋ฅผ ์ ํํ ์ด์ ๊ฐ ๋ณ๋ก ์๊ธฐ ๋๋ฌธ์ ๊ธฐํธ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ด๋ฆ์ ์ด๋ฆ์ ๋ฐ๊พธ์ง ์์ต๋๋ค.
๊ณต์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ด ์ฌ๋ณผ์ ์ด๋ฆ ์๋์์ ์ค์ ๋ก Windows๋ณด๋ค Linux์ osx์์ ๋ ๋ฌธ์ ์์ง๋ง ์ผ๊ด์ฑ์ ์ํด ๋ชจ๋ ๊ณณ์์ ๋์ผํ ์์ ์ ์ํํ์ต๋๋ค.
๊ทธ๋ ๋ค๊ณ ํด์ ABI๊ฐ ๋์ผํ 32๋นํธ์์ ๊ฐ๋ฅ์ฑ์ด ๋ฐฐ์ ๋์ง๋ ์์ง๋ง ์๋ก๋ฅผ ์ํด ๋๋ฌด ์ค๋๋๊ฑฐ๋ ๋๋ฌด ์๋ก์ด ๋ฒ์ ์ด ํ์ํ ๊ฒ๊ณผ ๊ฐ์ด ๋ค๋ฅธ ๋ฐฉ์์ผ๋ก ์๋ก๋ฅผ ๋ถ๋ฆฌํ ์ ์์์ต๋๋ค.
๋น๋ ํ๋ก์ธ์ค๋ฅผ ์ฝ๊ฐ ๋ค๋ฌ์์ต๋๋ค. https://github.com/matthew-brett/np-wheel-builder ์ฐธ์กฐ
์ด์ ํ๋ก์ธ์ค๊ฐ ํฉ๋ฆฌ์ ์ผ๋ก ์๋ํ๋์์ผ๋ฉฐ, ํ์ํ ๊ฒฝ์ฐ ๋ค์ ๋ช ๋ฆด๋ฆฌ์ค ๋์ ์ด๋ฌํ ํ ์ ๊ณ์ ๊ตฌ์ถํ๋ ๊ฒ์ด ์ค์ฉ์ ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. mingwpy๊ฐ ์ฌ์์ ๋๋ฌํ ๋๊น์ง Windows ๋ฆด๋ฆฌ์ค ๊ด๋ฆฌ์๋ก ์ด ์์ ์ ์ํํ๊ฒ ๋์ด ๊ธฐ์ฉ๋๋ค.
์ ๋ ์ด ํ ์ 32๋นํธ ๋ฐ 64๋นํธ Python 2.7, 3.4, 3.5์์ ํ ์คํธํ์ผ๋ฉฐ ๋ค๋ฅธ ๋ช ๊ฐ๋ ํ ์คํธํ๊ธฐ ๋๋ฌธ์ ์ํ๊ฐ ์ํธํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
OP๊ฐ ์์ฒญํ ๋๋ก pypi์ ์ฌ๋ฆด ๊ฐ์น๊ฐ ์๋ค๋ ๊ฒ์ ๋ชจ๋ ์์ฌ์ํค๊ธฐ ์ํด ์ ๊ฐ ํ ์ ์๋ ๋ค๋ฅธ ์ผ์ด ์์ต๋๊น?
์ฌ๋ฌ๋ถ ์๋
ํ์ธ์! ๊ฝค ์ค๋ซ๋์ ์์ค์์ numpy
๋ฐ scipy
๋ฅผ ์ค์นํ ์ ์๋ค๋ ์ฌ์ค์ ์ข์ ํ๊ธฐ ๋๋ฌธ์ ์ด ํ ๋ก ์ ๋ฐ์ด๋ค๊ณ ์ถ์์ต๋๋ค. ์ด ์ ๋ฉด์์ ์งํ๋ฉ๋๋ค.
@matthew-brett: ์ด ์๋ํ ์คํฌ๋ฆฝํธ๋ ํ๋ฅญ ํฉ๋๋ค. PyPI์ ๋๋ฌํ์ง ๋ชปํ๋๋ผ๋ ์ด๊ฒ์ ์์ค์์ numpy
๋ฅผ ๋น๋ํ๋ ๋งค์ฐ ์คํ ๊ฐ๋ฅํ ๋ฐฉ๋ฒ์ฒ๋ผ ๋ณด์
๋๋ค( ์ฌ๊ธฐ์์ ๋ด๊ฐ ์ฐ ์ด ๋ฌธ์ ์ฐธ์กฐ). ๋ํ ๋ชจ๋ ๊ฒ์ ๋น๋ํ ์ ์๋ค๋ ์ ์์ scipy
๋ฅผ ๋น๋ํ ์ ์๋ ๊ฒ์ ๋งค์ฐ ๊ฐ๊น์ง๋ง ํ
์คํธ๋ Python ์ด๋๊ฐ์์ segfault๋ฅผ ์ผ์ผํค๋ ๊ฒ ๊ฐ์ต๋๋ค.
๋ํ ์ค์ ๋ก numpy
ํ ์ ๊ตฌ์ถํ ์ฌ๋์ ์ํด ์์ค์์ ์ด๋ฌํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ตฌ์ถํ์ฌ ํ์ฌ ์จ๋ผ์ธ์ ์๋ ๊ฒ์ ๋์ฒดํ๋ ๊ฒ์ ๋ํ ์ธ๋ จ๋ ์ต์ ๋ฌธ์๋ฅผ ๋ง๋ค๋ ค๊ณ ๋
ธ๋ ฅํ์ต๋๋ค. ๊ทธ ์ ๋ฉด์ ์ฌ๋๋ค์ ์๊ฒฌ๋!
๋งค์ฐ ์ ์ฉํ ํผ๋๋ฐฑ๊ณผ ๋น๋ ๋ฌธ์ํ ์์ ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค.
http://mingwpy.github.io ๋ฅผ ๋ณด์ จ์ ๊ฑฐ๋ผ ์๊ฐํฉ๋๋ค. ๋ฌผ๋ก mingw-w64 ํ๋ก์ ํธ์ mingwpy ํด์ฒด์ธ๊ณผ ๊ด๋ จ๋ ์๋นํ ์์ ์๋ฃ๊ฐ ์์ต๋๋ค.
@matthew-brett ๊ฐ์ฌํฉ๋๋ค! numpy.test()
ํต๊ณผํฉ๋๋ค. f2py.py
ํ
์คํธ๋ numpy-SHAd3d2f8e ์์ ์์ ๋ virtualenvs์ test_scripts()
๋ฌธ์ ์์ง๋ง 3๊ฐ์ ๊ฒฝ๊ณ , 2๊ฐ์ ์ง์ ์ค๋จ ๋ฐ 1๊ฐ์ ๋ฐํ์์ ๋ฐ์์ต๋๋ค.
๋ง์ง๋ง์ผ๋ก ์ฌ์ํ ์์ฒญ์ผ๋ก repo np-wheel-builder ๋ฐ/๋๋ PyPI์ ๋น๋ ๋ฐฐ์ง๋ฅผ ํ์ํ ์ ์์ต๋๊น? buildbot 0.8์ ์๋ ๊ฒ ๊ฐ์ผ๋ฉฐ ๋ณด๊ธฐ ์ข๊ฒ ๋ง๋ค๊ธฐ ์ํ python ํจํค์ง/๋ฆฌํฌ์งํ ๋ฆฌ( BuildbotEightStatusShields-0.1 )๋ ์์ต๋๋ค.
๋ํ ํ๋ ๋งค๊ฐ ๋ณ์๊ฐ ์๊ธฐ ๋๋ฌธ์ ATLAS Windows 64๋นํธ ๋น๋ ์์ ๋ฉ๋ฆฌ ๋จ์ด์ ธ ์๋์ง ๊ถ๊ธํฉ๋๋ค. ์ค์ ๋ก "ํ๋ฃจ ์ข ์ผ" ๊ฑธ๋ ธ์ต๋๊น? ์๋๋ฉด ์ ์ ํ ์ํคํ ์ฒ ๊ธฐ๋ณธ๊ฐ์ด ์์ต๋๊น?
์ฐธ๊ณ : Continuum์ ์ต์ ํ๋ mkl numpy๋ก Anaconda๋ฅผ ์ถ์ํ์ต๋๋ค. ๋๋ ๊ทธ๋ค์ด ์ด ์ค๋ ๋๋ฅผ ๋ชจ๋ํฐ๋งํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
์ด์ ๋์ผํ ์ํ๋ผ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์๋ scipy ๋น๋์ ๊ฒฝ์ฐ์ ๋๋ค. gfortran์ด ํ์ํฉ๋๊น?
์. ๊ทธ๋ ์ง ์์ผ๋ฉด scipy
.f
ํ์ผ์ ์ปดํ์ผํ ์ ์์ต๋๋ค. ํ์ด์ ๋น๋๋ค! ์์ ๋งํ๋ฏ์ด ์ ๋ _์ ๋ง ๊ฐ๊น์์ก์ต๋๋ค_. ํ์ง๋ง ํ
์คํธ๋ฅผ ํต๊ณผํ ์ ์๋ค๋ฉด ์ ๋ง ์ข์ ๊ฒ์
๋๋ค!
์, ATLAS ๋น๋๋ ๋ค๋ฅธ ์์ ์ ์ํํ์ง ์๋ ์์คํ ์์ ์ฝ 8์๊ฐ์ด ๊ฑธ๋ ธ์ต๋๋ค. ATLAS ๋น๋ ์คํฌ๋ฆฝํธ๋ np-wheel-builder repo ์ ์์ต๋๋ค.
MKL
conda
์ฌ์ฉ์๋ผ๋ฉด ์ข์ ์์์ด์ง๋ง numpy
๋ฐ scipy
๊ฐ ์ฌ์ ์ค์น๋ Python ๋ฐฐํฌํ์ ์ฌ์ฉํ๋ ๊ฒ์ ํ๋์ ์ฅ๋ คํด ์จ ๊ฒ. MKL ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์ฒด๋ ๋ฌด๋ฃ๋ก ์ป์ ์ ์์ ๋ ์ ์๊ฒ ๋ง์ํด ์ฃผ์ญ์์ค. :)
gfortran์ผ๋ก ๋น๋ํ๋ ๊ฒฝ์ฐ - mingwpy๊ฐ ์ฐ๋ฆฌ์ ์ต์ ์ ํฌ๋ง์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
@matthew-brett : ์๊ฐ์ ๋ด์ด ATLAS๋ฅผ ๊ตฌ์ถํด ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค! ์ด์ ์ ์คํฌ๋ฆฝํธ๋ฅผ ์คํํ๋ ค๊ณ ์๋ํ์ง๋ง ์์คํ ๋ณ ๋นํธํ์ฑ์ผ๋ก ์ธํด ๊ณ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ต๋๋ค.
๋ฌธ์ ์ ๋ํด ์ฃ์กํฉ๋๋ค. ๋ฐฉ๊ธ np-wheel-builder ๋ฆฌํฌ์งํ ๋ฆฌ์ ATLAS ๋ฐ์ด๋๋ฆฌ๋ฅผ ๋น๋ํ๋๋ฐ Windows Server 2012 ๋ฐ 64๋นํธ Cygwin์ ์๋ก ์ค์นํ์ผ๋ฉฐ ์ ํํ ATLAS ๋ฐ lapack ๋ฒ์ ์ด ๋์ด๋์ด ์์ต๋๋ค. ๋ด๊ฐ ์ฌ์ฉํ ์์ค ์์นด์ด๋ธ๋ http://nipy.bic.berkeley.edu/scipy_installers/atlas_builds/์ ์์ต๋๋ค. ๋ค๋ฅธ ๋ฒ์ ์ ATLAS๊ฐ ์์ผ๋ฉด ์ฝ๊ฒ ํธ์ด ๋ ์ ์์ต๋๋ค.
ํ ...๊ทธ๋ด์๋ ์๊ฒ ๋ค์. ๋ค์ ํ ๋ฒ ๋ง์๋๋ฆฌ์ง๋ง, ๊ทธ๋ ๊ฒ ํ๋ ๋ฐ ํ์ํ ๋ ธ๋ ฅ์ ๊ฐ์ํ ๋ ๋๋จํ ๊ฐ์ฌํฉ๋๋ค. ์ง๊ธ์ฒ๋ผ ๋ง์ ์๊ฐ๊ณผ ๋ฆฌ์์ค๊ฐ ํ์ํ์ง ์์ Windows ํธํ ATLAS ๋น๋๋ฅผ ์ถ์ํ ๋ฐฉ๋ฒ์ ์ฐพ์ ์ ์๋ค๋ฉด ์ ๋ง ์ข์ ๊ฒ์ ๋๋ค!
@gfyoung
MKL ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์ฒด๋ ๋ฌด๋ฃ๋ก ์ป์ ์ ์์ ๋ ์ ์๊ฒ ๋ง์ํด ์ฃผ์ญ์์ค. :)
https://software.intel.com/sites/campaigns/nest/ ๋ฐ https://registrationcenter.intel.com/en/forms/?productid=2558&licensetype=2 ๋ฅผ ์ฐธ์กฐํ์ญ์์ค. ์๋๋ฉด ์์ค๋ฅผ ์๋ฏธํ์ต๋๊น?
@tkelman , ๋ฐฉ๊ธ @carlk ์ ์๋ก์ด mingwpy ํ๋ก์ ํธ ์ฌ์ดํธ ์์ ๋ณด์์ง๋ง Intel ์ปค๋ฎค๋ํฐ ๋ผ์ด์ ์ค Nest์๋ ifort ๊ฐ ์์ผ๋ฉฐ, ๊ทธ๊ฒ์ด ์์ผ๋ฉด ์ผ๋ง๋ scipy์ ๋๊น?
@tkelman : ์ด๋ฐ, ์ปค๋ฎค๋ํฐ ๋ผ์ด์ ์ค๋ฅผ ์์ด๋ฒ๋ฆฐ ์ด์ ๊ฐ ํ์คํ์ง ์์ต๋๋ค. ๊ทธ๋ฌ๋ @tkelman ์ ์ ํจํ ์์ ์ ์ ์ํฉ๋๋ค.
@tkelman : MinGW๋ก ์๋ํด ๋ณผ ์ ์์ง๋ง ๋ด๊ฐ ๊ฒฝํํ ๋ฐ์ ๋ฐ๋ฅด๋ฉด ๋ถํํ๋ ์๋ํ์ง ์์ต๋๋ค. ํธํ์ฑ ๋ฌธ์ ๋ก ์ธํด numpy
๋ฅผ ์ด๊ณผํ์ง๋ ์์ต๋๋ค.
@mikofski ๋ง์ต๋๋ค. ์ปดํ์ผ๋ฌ๊ฐ ๋ถ์กฑํ๋ฉด scipy์ ๋์์ด ๋์ง ์์ต๋๋ค. ์ค๋๋ scipy ๋น๋์ ๋ํ ์ต์ ์ mingwpy ๋๋ ๋ชจ๋ gcc-all-the-time Python ๋น๋(https://github.com/Alexpux/MINGW-packages/tree/master/mingw-w64- python-scipy). ํ์๋ ๋ฌผ๋ก msvc ๋น๋ cpython ๋๋ pypi ๋ฐ์ด๋๋ฆฌ์ ํธํ๋์ง ์์ผ๋ฏ๋ก scipy ์ด์ธ์ ๋ชจ๋ ๋ชจ๋์ ์ฒ๋ฆฌํ์ง ์์ต๋๋ค.
@matthew-brett: Openblas ๋ฐ/๋๋ MKL์ ๋นํด ์ด ATLAS ํ ์ ์๋ ๋ถ์กฑ์ ๋ฌด์์ ๋๊น?
PGI Fortran์ ์ดํด ๋ณธ ์ฌ๋์ด ์์ต๋๊น? @carkl mingwpy ํ๋ก์ ํธ ์ฌ์ดํธ์๋ ์ธ๊ธ๋์ด ์์ง ์์ต๋๋ค. ํ๋ฒ ์จ๋ณด๊ณ ๊ทธ ํ ๋ผ๊ตด๋ก ๊ฝค ๊ฐ์๋๋ฐ ์ผ ์คํ ํผ๊ฐ ๋ญ์๋์ง ๊ธฐ์ต์ด ์๋๋ค์. ๋น๊ณต๊ฐ ์์ค์ธ๋ฐ๋ ๋ผ์ด์ ์ค๊ฐ ํ์ฉ๋๋ ๊ฒ ๊ฐ์์. PGI Fortran์ด msvc์์ ๋ ์ ์ฌ์๋ ์ ์์ต๋๊น?
@mikofski : ๋ด ์์๋ ์์ง๋ง ์๋ ์ PGI๋ฅผ ๋ณด์์ ๋ ๋ด ๊ฒฐ๋ก ์ Intel๋ณด๋ค ํจ์ฌ ๋ ๋๋นด๋ค๋ ๊ฒ์ด์์ต๋๋ค(๋ผ์ด์ ์ค์ FOSS ๋นํธํ ์ ํ์ ์ถ๊ฐํด์ผ ํ๋ค๋ ์ ์์) .
์ข์ต๋๋ค. x86 ์ํคํ ์ฒ์ฉ BLIS/FLAME ์๋ฃจ์ ์ ๋์์ผ๋ก ์ผ๋ถ num focus ์๊ธ์ ์ฌ์ฉํ ์ ์์ต๋๊น?
๋ถ๋ช ํ Nvidia/PGI๋ ์ฌํด ๋ง๊น์ง Fortran ํ๋ฐํธ ์๋๋ฅผ LLVM์ ์คํ ์์ค๋ก ์ ๊ณตํ ๊ฒ์ ๋๋ค. https://www.llnl.gov/news/nnsa-national-labs-team-nvidia-develop-open-source-fortran-compiler-technology
์ข์ต๋๋ค. x86 ์ํคํ ์ฒ์ฉ BLIS/FLAME ์๋ฃจ์ ์ ๋์์ผ๋ก ์ผ๋ถ num focus ์๊ธ์ ์ฌ์ฉํ ์ ์์ต๋๊น?
๊ทธ๋ ๊ฒ ์๊ฐํ์ง ๋ง์ธ์. BLIS๋ ๋งค์ฐ ๊ฑด๊ฐ์ ํด๋ก์ด ํ๋ก์ ํธ์ฒ๋ผ ๋ณด์ ๋๋ค(libflame์ ๋์ฑ ๊ทธ๋ ์ต๋๋ค). ์ปค๋ฐ, ๋ฉ์ผ๋ง ๋ฆฌ์คํธ ํธ๋ํฝ ๋ฑ์ ์ธก๋ฉด์์ ํ๋์ด ๊ฑฐ์ ์์ต๋๋ค. ๊ฒ๋ค๊ฐ ์๋นํ ์๊ธ์ ํ๋ณดํ๊ณ ์๊ธฐ ๋๋ฌธ์(https://github.com/flame/blis#funding), ์์ฒ ๋ฌ๋ฌ๊ฐ ๋ง๋ฒ์ฒ๋ผ ํ๋ก์ ํธ๊ฐ ์ฑ์ํฉ๋๋ค.
์ด ๋ ผ์๊ฐ ์ด๋์ ์๋์ง, ์ด๋๋ก ๊ฐ๋์ง ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ์ฐ๋ฆฌ๋ Matthew๊ฐ ๊ฑฐ์ ์๋ฃํ ์์ ํด๊ฒฐ์ฑ (ATLAS ์ฌ์ฉ)์ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ, ๋ ์ค์ํ ๊ฒ์ ๋งค์ฐ ์ ๊ทน์ ์ผ๋ก ์์ ์ค์ธ ์ฅ๊ธฐ ์๋ฃจ์ ์ด ์๋ค๋ ๊ฒ์ ๋๋ค(MingwPy + OpenBLAS). ๋ํ OpenBLAS๊ฐ ํจ์ฌ ๋ ๋๋ฆฌ ์ฌ์ฉ๋ฉ๋๋ค. Scipy ์คํ๊ณผ Julia ๋ชจ๋์์ ํด๋น ํ๋ก์ ํธ๋ฅผ ์ฌ์ฉํ๋ฉด ๋ ๋นจ๋ฆฌ ์ฑ์ํด์ผ ํฉ๋๋ค.
@rgommers : @mikofski ์ ์ ๋ @matthew-brett ์๋ฃจ์
์ ์ฌ์ฉํ์ฌ scipy
๋ฅผ ๊ตฌ์ถํ๋ ค๊ณ ํ๊ธฐ ๋๋ฌธ์ ๋ํ๊ฐ ์ ๋๋ก ์งํ๋์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ฐ๋ฆฌ ๋ ๋ค ํฌํธ๋ ์ปดํ์ผ๋ฌ๋ผ๋ ๋์ผํ ๋ฌธ์ ์ ์ง๋ฉดํด ์๋ ๊ฒ ๊ฐ์ต๋๋ค. ๋ ์์ ์ ์ด๋ค ์ด์ ๋ก๋ ์๋ง์ ๋ฏธํด๊ฒฐ ์ธ๋ถ ์ฅ์น๋ก ์ธํด ๋ง์ ์ฑ๊ณต ์์ด MinGW32์ MinGW64 ๋ชจ๋์ ์ค์น๋ gfortran.exe
๋ฅผ ์ฌ์ฉํ๋ ค๊ณ ์๋ํ์ต๋๋ค.
@gfyoung Matthew์ ๋น๋๋ MSVC๋ฅผ ์ฌ์ฉํฉ๋๋ค. MSVC์ ํจ๊ป gfortran
๋ฅผ ์ฌ์ฉํ๋ ค๊ณ ์๋ํ๋ ๊ฒ์ ์๋ฏธ๊ฐ ์์ผ๋ฉฐ ์๋ํ์ง ์๋ ๊ฒ์ผ๋ก ์๋ ค์ ธ ์์ต๋๋ค. ๋น๋ ์ํฉ์ ์์ฝ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
@rgommers ๋ํ๋ฅผ @carlk์ผ๋ก mingwpy ํ๋ก์ ํธ๋ ์ด๋ฏธ ๋ฉ์ ์ด์ ์ ์ํด ์ง์๋๋ค. ํ์ฌ์์ ์ง์์ ๋ฐ์ ์ ์๋์ง ํ์ธํ๋ ค๊ณ ํฉ๋๋ค. ์ ๋ ์ด๋ฏธ num focus ํ์์ ๋๋ค. scipy 2829์ ์ค๊ฐ์ฏค์ ์ ๋ ๊ฐ์ ๊ฒฐ๋ก ์ ๋๋ฌํ ๊ฒ ๊ฐ์ต๋๋ค. ํจ๊ณผ๊ฐ ์๊ธฐ๋ฅผ ๋ฐ๋ ๋ฟ์ ๋๋ค. ๋จ๊ธฐ์ ์ผ๋ก๋ @cgohlke๋ฅผ ๊ณ์ ์ฌ์ฉํ๊ฑฐ๋
๋น๋๋ฅผ pypi๋ก ํธ์ํ๋ ๊ฒ ์ธ์ @matthew-brett์ ๋ง์ง๋ง ๋ฌธ์ ๋ np ๋น๋ ์คํฌ๋ฆฝํธ ๋ฆฌํฌ์งํ ๋ฆฌ์ ์๋ buildbot ๋ฐฉํจ์ผ๊น์? ๊ฐ์ฌ ํด์! ๊ทธ๋ฌ๋ฉด ๋ซ์ ์ ์์ต๋๊น?
๋ซ๊ธฐ ์ ์ ๊ฐ๋จํ ์ง๋ฌธ: ATLAS๋ฅผ ๊ฐ๋ฆฌํค๋๋ก @matthew-brett numpy
๋ฅผ ๊ตฌ์ถํ์ต๋๋ค. ๊ทธ๋ฌ๋ ifort
#$ ๋ฅผ ์ฌ์ฉํ์ฌ $ scipy
๋น๋๋ฅผ ์๋ํ๋ฉด ๋ด ํ ๋๋ ํ ๋ฆฌ์ ์๋ MKL์ ์ฌ์ฉํ๋ ๋ค๋ฅธ site.cfg
ํ์ผ๋ ์ ํ๋ฉ๋๋ค. ์ค์ ๋ก numpy
์ ๋ํด ์ฑ๊ณต์ ์ผ๋ก ๋น๋ํ ์ ์์ผ๋ฉฐ ํ
์คํธ๋ ๋ถ ๋ฐ์ฌ๋ฆผ ์ค๋ฅ๋ก ์ธํ ๋ช ๊ฐ์ง ์ค๋ฅ์ ๋ํด ์ ์ฅ์ ํต๊ณผํฉ๋๋ค. ๊ทธ๋ฐ๋ฐ scipy
๋ฅผ ๋น๋ํ ๋ ๋ฌด์์ ํ๋์ง ๊ถ๊ธํฉ๋๋ค. MKL ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ต๋๊น ์๋๋ฉด numpy
๋ก ์ด๋ฏธ ๋น๋๋ ATLAS ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ค๊ณ ํ์ต๋๊น?
https://github.com/numpy/numpy/wiki/Numerical-software-on-Windows ์ Windows Fortran ์ปดํ์ผ๋ฌ ์์ฝ์ด
@gfyoung - ์ถ์ธก๊ณผ ๋จผ ๊ธฐ์ต์ ์กฐํฉ์ผ๋ก ์งํ - scipy๋ ์์ฒด ๋๋ ํ ๋ฆฌ์์ ๋จผ์ site.cfg
๋ฅผ ์ ํํ๊ณ ์ด๊ฒ์ด ์์ผ๋ฉด numpy ๋น๋์ ๊ตฌ์ฑ์ ์ ํํฉ๋๋ค. ์ด๊ฒ์ ์ฐจ๋ก๋ก ๋ด๊ฐ ๋ฐํด๋ฅผ ๋ง๋ค ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์๋ ๊ณณ์ ๊ฐ๋ฆฌํฌ ๊ฒ์
๋๋ค. ๋ฐ๋ผ์ np-wheel-builder ์ํ๋ผ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ ํํ๋ ค๋ฉด scipy์ ๋ํด site.cfg
๋ฅผ ๋ค์ ์์ฑํด์ผ ํฉ๋๋ค. build_numpy.py
์คํฌ๋ฆฝํธ๋ numpy ๋น๋์ ๋ํด ์ํํฉ๋๋ค.
BLIS๋ ๋งค์ฐ ๊ฑด๊ฐ์ ํด๋ก์ด ํ๋ก์ ํธ์ฒ๋ผ ๋ณด์ ๋๋ค(libflame์ ๋์ฑ ๊ทธ๋ ์ต๋๋ค). ์ปค๋ฐ, ๋ฉ์ผ๋ง ๋ฆฌ์คํธ ํธ๋ํฝ ๋ฑ์ ์ธก๋ฉด์์ ํ๋์ด ๊ฑฐ์ ์์ต๋๋ค.
์ปค๋ฎค๋ํฐ์์ ์ด์ํ๋ FOSS ํ๋ก์ ํธ๋ฅผ ์๋ํ์ง ์๊ธฐ ๋๋ฌธ์ ๊ฑด๊ฐ์ ํด๋กญ๋ค๊ณ ๋งํ ์ ์์์ง ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ๊ทธ๋ค์ ๋ณธ์ง์ ์ผ๋ก 1์ธ ์ผ์ด๊ณ , ๊ทธ๋ค์ ๊ทธ๋ฐ ์์ผ๋ก ๊ทธ๊ฒ์ ์ข์ํฉ๋๋ค(์ ์ด๋ ์ง๊ธ์). ๋๋ ์ง๋ ~1๋ ๋์ ๊ทธ๋ค๊ณผ ๊ณ์ํด์ ์ฐ๋ฝ์ ์ฃผ๊ณ ๋ฐ์๊ณ โโ์ข์ ์์์ ํ์ฌ ๊ทธ๋ค์ ๋ ธ๋ ฅ์ด ์ฐ๋ฆฌ๊ฐ ํ์๋ก ํ๋ ๊ฒ(๋ฐํ์ ์ปค๋ ์ ํ ๋ฐ ๋ฐํ์ ์ค๋ ๋ฉ ๊ตฌ์ฑ)์ ์ ํํ ์ด์ ์ ๋ง์ถ๊ณ ์๋ค๋ ๊ฒ์ ๋๋ค. ๋์ ์์์ ํ ๊ฑด์ถ๊ฐ๊ฐ ์ํ๋ ๋๋ก ๋ฌผ๊ฑด์ ์ฌ๋ฐฐ์นํ ๋๊น์ง ๊ธฐ๋ค๋ฆฌ๋ ๊ฒ ์ธ์๋ ํ ์ผ์ด ๋ณ๋ก ์๋ค๋ ๊ฒ์ ๋๋ค. 6๊ฐ์์ด ์ง๋๋ฉด ํจ๊ณผ๊ฐ ๋ํ๋ ๊น์?
BLIS ๋ฑ์ ํ์์ ์์ ์๋นํ ๋จผ ์ต์ ์ธ ๊ฒ ๊ฐ์ผ๋ฉฐ, ์ฐ๋ฆฌ๋ ์ด๊ฒ์ด ์ ๋๋ก ์๋ํ์ง ์๋ ๊ฒฝ์ฐ์ ๋๋นํด์ผ ํ ๊ฒ์ ๋๋ค.
Nathaniel - ์ข์ ๋ฒค์น๋งํฌ๋ฅผ ์ป์ ์ ์๋ ์์น์ ๋ํ ์ ์์ด ์์ต๋๊น? numpy.bench()
์ด(๊ฐ) ๋ ์ด์ ์๋ฌด ๊ฒ๋ ํ์ง ์๋ ๊ฒ ๊ฐ์ต๋๋ค. asv
์คํ์ ์๋ํ์ง๋ง Windows numpy์ complex256
์ด ์๊ธฐ ๋๋ฌธ์ ๋ง์ ํ
์คํธ๊ฐ ์คํจํฉ๋๋ค.
asv
์์ ์๋ํ๋ ๋ถ๋ถ์ด ์ ์ฉํ๋ค๊ณ ์๊ฐํฉ๋๊น? ๋๋ %timeit np.dot(big_array, other_big_array)
์กฐ์ฐจ๋ ์ฐ๋ฆฌ๊ฐ ์ ์๋ ์์น์ ๋ํ ๋๋ต์ ์ธ ์์ด๋์ด๋ฅผ ์ป๋ ๋ฐ ์ ์ฉํ ๊ฒ์
๋๋ค :-)
๋ํ BTW๋ Windows delocate
๋ฅผ ์์ฑํ ์ ์๋ Windows DLL ์ ์ญ ๋ค์์คํ์ด์ค ๋ฌธ์ ์ ๋ํ ์ผ๋ฐ์ ์ธ ์๋ฃจ์
์
๋๋ค. https://github.com/njsmith/redll
๋ถํํ๋ asv complex256 ์คํจ๋ dtypes์์ ์ ์ฒด ํ ์คํธ ์ํ์ค๋ฅผ ์ค๋จํฉ๋๋ค. ๊ทธ๋๋ ๊ณ ์น๋ ๊ฑด ์ด๋ ต์ง ์์ ๊ฒ ๊ฐ์์.
์ด๊ฒ์ผ๋ก ๊ฐ๋จํ ํ ์คํธ:
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)
Clint Whale์ด ์ ์ ๊ฒฝ๊ณ ํ๋ฏ์ด 64๋นํธ ATLAS๋ Windows์์ ์ ์ต์ ํ๋์ง ์์์ต๋๋ค. Christoph Gohlke์ ํ ์ ํตํ 64๋นํธ MKL ์ฌ์ฉ:
In [9]: %timeit test_dot()
1 loop, best of 3: 764 ms per loop
64๋นํธ ATLAS๋ก ์ ์๋ ๋ด ํ :
In [10]: %timeit test_dot()
1 loop, best of 3: 2.41 s per loop
์ฐจ์ด๋ 32๋นํธ ํ (๋ค๋ฅธ 32๋นํธ ์์คํ ์์)์์ ํจ์ฌ ์ ์ต๋๋ค. MKL:
In [3]: %timeit test_dot()
1 loop, best of 3: 663 ms per loop
๋ ์ํ๋ผ์ค:
In [4]: %timeit test_dot()
1 loop, best of 3: 1 s per loop
@rcwhaley - ์ฌ๊ธฐ์ ๋ช ๊ฐ์ง ์๊ฐ์ด ์๋ ๊ฒฝ์ฐ๋ฅผ ๋๋นํ์ฌ ์ฐธ์กฐํฉ๋๋ค. ์ด๊ฒ์ ATLAS 3.10.1์ ๋๋ค ...
์ฌ๊ธฐ์ ๋ ํ๋์ ์ธ ํ๋ก์ธ์๋ฅผ ํ์ฌํ ๋ ๋ค๋ฅธ Windows 64๋นํธ ์ปดํจํฐ๊ฐ ์์ต๋๋ค. ๋ํ ~3๋ฐฐ์ ์๋ ์ ํ๋ฅผ ๋ณด์ ๋๋ค.
MKL:
In [3]: %timeit test_dot()
1 loop, best of 3: 400 ms per loop
์ํ๋ผ์ค:
In [3]: %timeit test_dot()
1 loop, best of 3: 1.28 s per loop
๋ค, ๋ณต์กํ 256 ๋ฌธ์ ๋ ํด๊ฒฐํ๊ธฐ ์ด๋ ต์ง ์์ต๋๋ค: https://github.com/numpy/numpy/pull/7251
3x๋ ๋ง์ง๋ง lapack_lite
๋งํผ ๊ทน์ ์ด์ง๋ ์์ต๋๋ค. ๋ง๋์? ๋จ๊ธฐ์ ์ธ ํด๊ฒฐ์ฑ
์ผ๋ก๋ ๊ด์ฐฎ๋ค๊ณ ์๊ฐํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์์ ์ 32๋นํธ .exe ์ค์น ํ๋ก๊ทธ๋จ์ด ๋ ๋์ ๊ฒ๋ ์๋๋๋ค.
๋ํ BTW, ์ฌ๊ธฐ์ Windows DLL ์ ์ญ ๋ค์์คํ์ด์ค ๋ฌธ์ ์ ๋ํ ์ผ๋ฐ์ ์ธ ์๋ฃจ์ ์ด ์์ด Windows ํ ๋น์ ์์ฑํ ์ ์์ต๋๋ค. https://github.com/njsmith/redll
๋ฉ์ง ๋ผ์ด์ ์ค ์ค๋ช :)
@gfyoung 'site.cfg'
๋ ๋ค์์์ ์ฐพ์ต๋๋ค.
1) ์คํ๋๊ณ ์๋ ๊ธฐ๋ณธ setup.py ํ์ผ์ ๋๋ ํ ๋ฆฌ.
2) setup.py ํ์ผ์ ~/.numpy-site.cfg
๋ก ์คํํ๋ ์ฌ์ฉ์์ ํ ๋๋ ํ ๋ฆฌ
3) ์์คํ
์ ์ฒด ๋๋ ํ ๋ฆฌ(์ด ํ์ผ์ ์์น...)
@rgommers ๋ํ๋ฅผ ๋ฐฉํดํด์ ์ฃ์กํฉ๋๋ค.
๊ฑฑ์ ํ์ง ๋ง์ธ์. ์๋ฌด ๊ฒ๋ ํ์ ํ์ง ์์์ต๋๋ค.
numpy ์ํ์ ์ํ @matthew-brett ์๋ฃจ์ ์ด ๋ง์ต๋๋ค. @carlk์ mingwpy ํ๋ก์ ํธ๋ ์ด๋ฏธ num focus๋ก ์๊ธ์ ์ง์๋ฐ์์ต๋๋ค. ํ์ฌ์์ ์ง์์ ๋ฐ์ ์ ์๋์ง ํ์ธํ๋ ค๊ณ ํฉ๋๋ค. ์ ๋ ์ด๋ฏธ num focus ํ์์ ๋๋ค. scipy 2829์ ์ค๊ฐ์ฏค์ ์ ๋ ๊ฐ์ ๊ฒฐ๋ก ์ ๋๋ฌํ ๊ฒ ๊ฐ์ต๋๋ค. ํจ๊ณผ๊ฐ ์๊ธฐ๋ฅผ ๋ฐ๋ ๋ฟ์ ๋๋ค. ๋จ๊ธฐ์ ์ผ๋ก๋ @cgohlke๋ฅผ ๊ณ์ ์ฌ์ฉํ๊ฑฐ๋ aconda ๋ก ์ ํํ ๊ฒ์ ๋๋ค. ๋ค์ ํ๋ฒ ๊ฐ์ฌํฉ๋๋ค!
์์ํ. MingwPy์ ๊ด์ฌ์ ๊ฐ์ ธ์ฃผ์ ์ ๋ฐ๊ฐ์ต๋๋ค. ์ด์ ์์ฒด ML์ด ์์ผ๋ฏ๋ก ๊ด์ฌ์ ๊ฐ์ง ์ ์์ต๋๋ค. https://groups.google.com/forum/#!forum/mingwpy
@rgommers , @matthew-brett : ์, ์, ๋ฏธ๋ฆฌ MKL๋ก ๋น๋ํ ๊ฒ ๊ฐ์ต๋๋ค. ๋๋ site.cfg
๋ฅผ ATLAS ๋น๋๋ก ์ง์ ๊ฐ๋ฆฌ์ผฐ๊ณ scipy
๋น๋๋ฅผ ํ์ง๋ง ํ
์คํธ ์ค์ segfaults๊ฐ ๋ฐ์ํ์ต๋๋ค. ๋๋ฌด ๊ฐ๊น์ด!
@rgommers - ์ - ATLAS๊ฐ ์์ผ๋ฉด ์ฑ๋ฅ์ด ํจ์ฌ ๋๋น ์ง๋๋ค(lapack_lite ์ฌ์ฉ).
In [2]: %timeit test_dot()
1 loop, best of 3: 17.7 s per loop
์ฌ๊ธฐ์ ๋จ์ ์ง๋ฌธ์ OpenBLAS numpy(๋ชจ๋ numpy ํ ์คํธ ํต๊ณผ)๋ก ํ์คํํ ๊ฐ์น๊ฐ ์๋์ง ์ฌ๋ถ์ด๋ฉฐ, ์ด๊ฒ์ด numpy๋ฅผ ์ฌ์ฉํ๋ ํ๋ก์ ํธ์์ ์์น ์ค๋ฅ๋ฅผ ์ผ์ผํฌ ๊ฐ๋ฅ์ฑ์ด ๋ ๋๋ค๋ ์ํ์ ๊ฐ์ํ๋ ๊ฒ์ ๋๋ค.
์ด๋ ๊ฒ ํ๋ ๊ฒ์ ๋ํ ํ ๊ฐ์ง ์ฃผ์ฅ์ ์ฐ๋ฆฌ๊ฐ ๋จ๊ธฐ/์ค๊ธฐ์ ์ผ๋ก ์ด ๋ฐฉํฅ์ผ๋ก ๊ฐ์ผ ํ ๊ฒ ๊ฐ์ผ๋ฉฐ ์ง๊ธ ์์ํ๊ณ ๊ทธ์ ์๋ฐ๋๋ ๋น์ฐธํ ๋ฒ๊ทธ ์ฌ๋ฅ์ ์ ๋ ํ๋ ๊ฒ์ด ๋ ๋์ ์ ์๋ค๋ ๊ฒ์ ๋๋ค. ์ ์ด๋ ์ฐ๋ฆฌ๋ Julia ์ ์ง ๋ณด์์ ์ข์ ํ์ฌ์์์ ๊ฒ์ ๋๋ค.
Numpy๋ ๋ํ Julia์๋ ์๋นํ ๋ค๋ฅธ ์ํ ํ์ฉ ๋ฒ์์ ์ฑ๋ฅ ์ ์ถฉ์, ์ฌ์ฉ์ ๋ ๊ฐ๋ฐ์ ๋น์จ์ ๊ฐ์ง๊ณ ์์ต๋๋ค. ๋ฐ๋ผ์ numpy๊ฐ ๋ ๋ณด์์ ์ธ ์ ๊ทผ ๋ฐฉ์์ ์ทจํ๊ณ ๋๋ฆฌ์ง๋ง ์์ ์ ์ธ ๊ธฐ๋ณธ ์ค์ ์ ์ฌ์ฉํ์ฌ ๊ธฐ๋ณธ์ด ์๋ ์ ํ ํญ๋ชฉ์ผ๋ก openblas๋ฅผ ํ์ฉํ๋ ๋ฐฉํฅ์ผ๋ก ์์ ํ๋ ๊ฒ์ด ํฉ๋ฆฌ์ ์ผ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. 8์๊ฐ์ ๋น๋ ์๊ฐ์ด ์ฌ๋ฏธ์๊ฒ ๋ค๋ฆฌ์ง๋ง ์๋ฌด๋ Julia์ Atlas๋ฅผ ํจ๊ป ์ฌ์ฉํ๋ ๊ฒ์ ๋ํด ๋ฌป์ง ์์์ต๋๋ค.
๊ธฐ๋ณธ์ด ์๋ ์ตํธ์ธ ์ ํ์ผ๋ก openblas๋ฅผ ํ์ฉํ๊ธฐ ์ํด ๋ ธ๋ ฅํ๊ณ ์์ต๋๋ค.
๋ฌธ์ ๋ ์ด ํ๋ก์ธ์ค๊ฐ ์ด๋ป๊ฒ ์๋ํ๋์ง ์ ๋ชจ๋ฅด๊ฒ ๋ค๋ ๊ฒ์
๋๋ค :-/. ์ฐ๋ฆฌ๋ ์ฌ์ฉ์์๊ฒ ๋์ฒด ๋น๋๋ฅผ ๋ฐฐํฌํ ์ ์๋ ์ข์ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค(์ฅ๊ธฐ์ ์ผ๋ก๋ pypi์์ numpy[openblas]
๋ฑ์ผ๋ก ๋น๋ ๋ณํ์ ์ป์ ์ ์๊ธฐ๋ฅผ ํฌ๋งํ์ง๋ง ๊ณง ๊ทธ๋ ๊ฒ ๋์ง๋ ์์ ๊ฒ์
๋๋ค) , ์ฐ๋ฆฌ๋ ๋ฐฐํฌํ๊ณ ๋ฒ๊ทธ ๋ณด๊ณ ๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ ๊ฒ ์ธ์๋ openblas ๋น๋๋ฅผ ๊ฐ์ ํ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค. ATLAS ๋น๋์ ๋ํ ์ฃผ์ ๋์์ Openblas ๋น๋๊ฐ ์๋๋ผ MKL์ด ๋ ๊ฒ์
๋๋ค. ์ผ๋ถ ํ์ฌ์์ ๋น๋:-/.
ํ ์ด๋ธ์ ์ฌ๋ ค๋์ ๋ ๋ค๋ฅธ ์ต์ ์ ์ฐธ์กฐ/SSE2 ์ปค๋์ ์ฌ์ฉํ์ฌ BLIS ๋น๋๋ฅผ ๋ฐฐํฌํ๋ ๊ฒ์ ๋๋ค. BLIS์๋ ์ฌ์ ํ ๋น๋ ์๊ฐ ๊ตฌ์ฑ๋ง ์๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ openblas์ ๊ฒฝ์๋ ฅ์ด ์์ ์ ์์ง๋ง ATLAS์ ๊ฒฝ์๋ ฅ์ด ์์ ์ ์์ผ๋ฉฐ ATLAS์ ๋นํด ์ด์ ์ ๋น๋ ์๊ฐ์ด _ํจ์ฌ_ ๋น ๋ฅด๋ฉฐ ์ฅ๊ธฐ์ ์ผ๋ก ์ข์ ์๋ฃจ์ ์ด ๋ ๊ฐ๋ฅ์ฑ์ด ์๋ค๋ ๊ฒ์ ๋๋ค. ์ถ์ ํ๊ธฐ ์ด๋ ต์ง๋ง ATLAS๊ฐ ์ฅ๊ธฐ์ ์ผ๋ก ์ข์ ์๋ฃจ์ ์ด ๋๋ ๊ฒ๋ณด๋ค ํ์คํ ๋ซ์ต๋๋ค(0์ผ๋ก ์ค์ ). ์ด์จ๋ ์ฐ๋ฆฌ๊ฐ ๋ฌด์ธ๊ฐ๋ฅผ QAํ ์์ ์ด๋ผ๋ฉด ์ ์ด๋ ๊ทธ ์๋์ง๋ ๋ฏธ๋๊ฐ _๊ฐ๋ฅ์ฑ ์๋_ ๋ฌด์ธ๊ฐ๋ก ํฅํ๊ฒ ๋ ๊ฒ์ ๋๋ค.
์ด ์ต์ ์ ์ง์งํ๊ฒ ๊ณ ๋ คํ๊ธฐ ์ ์ ๋ต๋ณ์ด ํ์ํ ๋ช ๊ฐ์ง ์ง๋ฌธ:
(1) BLIS์ ๋ฉํฐ์ค๋ ๋ฉ ์ง์์ด ATLAS์ ๊ฒฝ์์ ์ธ์ง ์ฌ๋ถ๊ฐ ํ์คํ์ง ์์ต๋๋ค(์์ค์ ์ผ๋ถ ๋ฉํฐ์ค๋ ๋ฉ ์ต์ ์ด ์๋ค๋ ๊ฒ์ ์๊ณ ์์ผ๋ฉฐ ์ฃผ ๊ฐ๋ฐ์๊ฐ ์์ง "์๋ฃ"๋ ๊ฒ์ผ๋ก ๊ฐ์ฃผํ์ง ์๋๋ค๋ ๊ฒ์ ์๊ณ ์์ต๋๋ค. , ์ฆ MKL๊ณผ ๊ฒฝ์ํ์ง๋ง ATLAS์ MKL ์ฌ์ด์๋ ๋ง์ ์ฌ์ง๊ฐ ์์ต๋๋ค.)
(2) ๊ทธ ๋ฌธ์ ์ ๊ดํด์๋ ์กฐ์ ๋์ง ์์ ๋ชจ๋์ BLIS๊ฐ ์์ ๋ฒค์น๋งํฌ์์ ์ด๋ป๊ฒ ์๋ํ๋์ง ์ ํ ๋ชจ๋ฆ ๋๋ค.
(3) ์ ๋ ์ค์ ๋ก Windows์์ BLIS๋ฅผ ๋น๋ํ๋ ค๊ณ ์๋ํ์ง ์์์ผ๋ฉฐ LAPACK์ด ์๋๋ผ BLAS์ผ ๋ฟ์ด๋ผ๋ ๋ฌธ์ ๋ฅผ ์ฒ๋ฆฌํด์ผ ํฉ๋๋ค. ์ด๊ฒ์ด numpy์ ์ผ๋ง๋ ๋ง์ ๋ฌธ์ ๊ฐ ์๋์ง ํ์คํ์ง ์์ต๋๋ค.
BLIS๋ ๋ฒ๊ทธ ๋ณด๊ณ ์ ์ผ๋ง๋ ๋ฐ์ํฉ๋๊น? Openblas๋ ๊ฝค ์ข์ ๊ฒ ๊ฐ์ต๋๋ค
์ด๊ฒ์ ๋ํด์.
2016๋
2์ 15์ผ ์์์ผ ์คํ 3์ 48๋ถ, Nathaniel J. Smith <
[email protected]>์ ๋ค์๊ณผ ๊ฐ์ด ์ผ์ต๋๋ค.
๊ธฐ๋ณธ์ด ์๋ ์ตํธ์ธ ์ ํ์ผ๋ก openblas๋ฅผ ํ์ฉํ๊ธฐ ์ํด ๋ ธ๋ ฅํ๊ณ ์์ต๋๋ค.
๋ฌธ์ ๋ ์ด ํ๋ก์ธ์ค๊ฐ ์ด๋ป๊ฒ ์๋ํ๋์ง ์ ๋ชจ๋ฅด๊ฒ ๋ค๋ ๊ฒ์ ๋๋ค :-/.
๋์ฒด ๋น๋๋ฅผ ์ฌ์ฉ์์๊ฒ ๋ฐฐํฌํ ์ข์ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค(
์ฅ๊ธฐ์ ์ผ๋ก pypi์์ numpy[openblas]๋ก ๋น๋ ๋ณํ์ ์ป์ ์ ์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
๋ฑ๋ฑ, ํ์ง๋ง ๊ทธ๊ฒ์ ๊ณง ์ผ์ด๋์ง ์์ ๊ฒ์ ๋๋ค), ์ฐ๋ฆฌ๋ ํ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค
๋ฐฐํฌํ๊ณ ๋ฒ๊ทธ๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ ๊ฒ์ ์ ์ธํ๊ณ openblas ๋น๋๋ฅผ ๊ฐ์ ํ์ญ์์ค.
๋ณด๊ณ ์ ๋ฐ ATLAS์ ์ฃผ์ ๋์์ ๋ค์๊ณผ ๊ฐ์ ์ฌ๋๋ค์ ์ํ ๋น๋์ ๋๋ค.
ํ๋๋ฅผ ์ฐพ์ผ๋ ค๋ ๋๊ธฐ๋ openblas ๋น๋๊ฐ ์๋๋ผ MKL ๋น๋๊ฐ ๋ ๊ฒ์ ๋๋ค.
์ผ๋ถ ํ์ฌ์์ :-/.ํ ์ด๋ธ์ ์ฌ๋ ค ๋์ ๋ ๋ค๋ฅธ ์ต์ ์ BLIS๋ฅผ ๋ฐฐํฌํ๋ ๊ฒ์ ๋๋ค.
์ฐธ์กฐ/SSE2 ์ปค๋์ ์ฌ์ฉํ์ฌ ๋น๋ํฉ๋๋ค. BLIS์๋ ์์ง ๋น๋๋ง ์๊ธฐ ๋๋ฌธ์
์๊ฐ ๊ตฌ์ฑ์ openblas์ ๊ฒฝ์์ ์ด์ง ์์ง๋ง
ATLAS์ ๊ฒฝ์๋ ฅ์ด ์์ผ๋ฉฐ ATLAS์ ๋นํด ์ด์ ์
์๊ฐ์ _ํจ์ฌ_ ๋น ๋ฅด๋ฉฐ ์ฅ๊ธฐ์ ์ผ๋ก ์ข์ ๊ธฐํ๊ฐ ๋ ๊ฒ์ ๋๋ค.
์๋ฃจ์ ์ ์ถ์ ํ๊ธฐ ์ด๋ ต์ง๋ง ATLAS๊ฐ ์ข์ ๊ฒ๋ณด๋ค ํ์คํ ๋ซ์ต๋๋ค.
์ฅ๊ธฐ ์๋ฃจ์ (์ ๋ 0์ผ๋ก ์ค์ ํฉ๋๋ค). ์ฐ๋ฆฌ๊ฐ QAing์ด ๋๋ค๋ฉด
์ด์จ๋ ๋ฌด์์ธ๊ฐ ๊ทธ๋ ๋ค๋ฉด ์ ์ด๋ ์ฐ๋ฆฌ๋ ๊ทธ ์๋์ง๋ฅผ ๋ฌด์ธ๊ฐ๋ก ํฅํ๊ฒ ํ ๊ฒ์ ๋๋ค.
๋ฏธ๋๊ฐ ์์ ์ ์์ต๋๋ค.์ด๊ฒ์ ์ง์งํ๊ฒ ๊ณ ๋ คํ๊ธฐ ์ ์ ๋๋ตํด์ผ ํ ๋ช ๊ฐ์ง ์ง๋ฌธ
์ต์ :(1) BLIS์ ๋ฉํฐ์ค๋ ๋ฉ ์ง์ ์ฌ๋ถ๊ฐ ํ์คํ์ง ์์ต๋๋ค.
ATLAS์ ๊ฒฝ์์ ์ ๋๋ค(๋ช ๊ฐ์ง ๋ฉํฐ ์ค๋ ๋ฉ ์ต์ ์ด ์๋ค๋ ๊ฒ์ ์๊ณ
์์ค์ด๋ฉฐ, ์ฃผ์ ๊ฐ๋ฐ์๊ฐ ์ด๋ฅผ
์์ง "์๋ฃ", ์ฆ MKL๊ณผ ๊ฒฝ์ํ์ง๋ง ์ฌ์ด์๋ ๋ง์ ์ฌ์ง๊ฐ ์์ต๋๋ค.
ATLAS ๋ฐ MKL.)(2) ๊ทธ ๋ฌธ์ ์ ๋ํด, ๋๋ ๋ํ ์กฐ์ ๋์ง ์์ ๋ชจ๋์ BLIS ์๊ธ์ด ์ด๋ป๊ฒ ๋๋์ง ์ ํ ๋ชจ๋ฆ ๋๋ค.
์์ ๋ฒค์น๋งํฌ์์(3) ์ค์ ๋ก Windows์์ BLIS๋ฅผ ๋น๋ํ๋ ค๊ณ ์๋ํ ์ ์ด ์์ผ๋ฉฐ
LAPACK์ด ์๋๋ผ BLAS์ผ ๋ฟ์ด๋ผ๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํด์ผ ํฉ๋๋ค.
์ด๊ฒ์ numpy์ ๋ํ ๋ง์ ๋ฌธ์ ์ ๋๋ค.โ
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ฑฐ๋ GitHub์์ ํ์ธํ์ธ์.
https://github.com/numpy/numpy/issues/5479#issuecomment -184387401.
๋๋ libflame์ด blis์ lapack์ ํด๋นํ๋ค๊ณ ๋ฏฟ์ต๋๋ค. ์ฐธ์กฐ ๋ฌธ์ ์ ์ค๋ช ๋ lapack2flame ํธํ์ฑ ์ธํฐํ์ด์ค๊ฐ ์์ต๋๋ค.
BLIS๋ ๋ฒ๊ทธ ๋ณด๊ณ ์ ์ผ๋ง๋ ๋ฐ์ํฉ๋๊น?
์ฐ๋ฆฌ๋ ์์ง ๋ชจ๋ฅธ๋ค.
BLIS๋ฅผ ์๋ํ์ง ์๊ณ ๊ธฐ๋ณธ์ ์ผ๋ก ๋งค์ฐ ์์์ ์ฌ๋๋ค์ด ์ฌ์ฉํ๋ ์ ํ๋ 1์ธ ํ๋ก์ ํธ์ ๋ํด ๋น๋๋ numpy ๋ฐ์ด๋๋ฆฌ๋ฅผ ๋ฐฐํฌํ๋ ๊ฒ์ ๋ฏธ์น ์ง์ฒ๋ผ ๋ค๋ฆด ๊ฒ์ ๋๋ค.
์ด ์ค๋ ๋์์ ์์ง MingwPy + OpenBLAS ๊ณํ์์ ๋ฒ์ด๋๋ ์ข์ ์ด์ ๋ฅผ ๋ณด์ง ๋ชปํ์ต๋๋ค. No-scipy-ATLAS-MSVC-๋ฐ์ด๋๋ฆฌ๋ ์์๋ฐฉํธ์ด ์๋ ๊ฒ์ด ์ข์ง๋ง ์ค์ฅ๊ธฐ MingwPy ์๋ฃจ์ ๋ณด๋ค ๋ ์ค์ํ๋ฉฐ ์์๋ฐฉํธ์ด ๊ทธ ์์ฒด๋ก ์ฃผ์ ๋ ธ๋ ฅ์ผ๋ก ๋ฐ๋๋ฉด ๋ ธ๋ ฅํ ๊ฐ์น๊ฐ ์๋ค๊ณ ๋งํ๊ณ ์ถ์ต๋๋ค. .
BLIS/libflame ๋ฌธ์์ ๋ฐ๋ฅด๋ฉด Windows์์ ์ ์ฒด BLAS/LAPACK ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ตฌ์ถํ๋ ค๊ณ ํ๋ฉด ์ธ๋ก์ด ๊ธธ์ด ๋ ๊ฒ์ ๋๋ค.
๊ฐ๋ฐ์๊ฐ ๊ทธ๊ฒ์ด ์๋ํด์ผ ํ๊ณ ์ง์๋๋ค๋ ๋ฐ ๋์ํ๋ฉด ๊ธฐ์๊ฒ ์๊ฐํฉ๋๋ค.
ATLAS๋ ์ค๋ซ๋์ Linux์ ๊ธฐ๋ณธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ต๋๋ค. ์ ์ ๋์ Windows BSD ํธํ ๋น๋์ ๊ฒฝ์ฐ์ผ ์ ์๋ค๊ณ ์์ํ๋ ๊ฒ์ ๋ฌด๋ฆฌ๊ฐ ์๋ ๊ฒ ๊ฐ์ต๋๋ค.
@tkelman - ๋ถ์ํด ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค - ๋ด ์๊ฐ์ ๋น์ ์ด ์ณ๋ค๊ณ ์๊ฐํฉ๋๋ค. ๊ทธ numpy๋ ์ ํ์ฑ์ ์ง์คํด์ผ ํฉ๋๋ค. ๊ทธ๋ฌ๋ ๋ ์๋ชจ์ ์ธ OpenBLAS ๋ฒ๊ทธ์ ์์กดํ๊ณ ๋ ํฌ๊ด์ ์ธ ํ ์คํธ๋ฅผ ๊ฐ๋ฐํ๊ธฐ ์ํด ํ์ ํฉ์น๋ ๊ฒ์ด ์ข์ ๊ฒ์ ๋๋ค. ์ด OpenBLAS ๋ฒ๊ทธ ๊ฐ ๋ ์ค๋ฆ ๋๋ค. ๋ค์ ๋ชจํธํ๊ณ ๋๋ฒ๊ทธํ๊ธฐ๊ฐ ๋งค์ฐ ์ด๋ ต์ต๋๋ค.
๋๋ ์ด ํน์ ๋ฌธ์ ์ ๋ํด pypi์ numpy ํ ์ ์ ๊ณตํ์ฌ numpy์ ์์กดํ๋ "y"(์: matplotlib)์ ์์กดํ๋ ํจํค์ง "x"์ ์ผ๋ฐ ์ฌ์ฉ์๊ฐ pip๋ฅผ ์ฌ์ฉํ์ฌ ์ค์นํ ์ ์๋๋ก ํ์ฌ ์ผ๋ฐ ์ฌ์ฉ์๊ฐ ๋์ง์ง ์๊ฒ ํ๋ค๊ณ ๋ฏฟ์ต๋๋ค. ํ์ ๋ค๊ณ "Python์ ๋๋ฌด ์ด๋ ต์ต๋๋ค."๋ผ๊ณ ๋งํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ MATLAB์ผ๋ก ๋์๊ฐ๋๋ค. Zen of python์ ํ ๊ฐ์ง ๋ถ๋ช ํ ๋ฐฉ๋ฒ์ด ์์ด์ผ ํ๋ค๊ณ ๋งํฉ๋๋ค. ์ฆ, pypi by numpy์ ๋ชจ๋ ํญ๋ชฉ์ cgohlke๋ฅผ ์ ์ธํ๊ณ ๋ ์์ ์ ์ด๊ฑฐ๋ ์์์ ์ฌ์ด๋ ํ๋ก์ ํธ๋ณด๋ค ๋ ์์ ์ ์ธ ํน์ ๊ฐ์ค์น๋ฅผ ์ ๋ฌํฉ๋๋ค. ๋ถ๋ช ํ ์ฌ๋ ค ๊น๊ณ ์ต์ํ ์ ๊ณ์์๋ ๋ ์์ ์ ์ธ ๊ฒ์ผ๋ก ์ธ์๋ฉ๋๋ค.
๋จ๊ธฐ์ ์ผ๋ก ATLAS ๋น๋๋ scipy๋ก ๋น๋ํ ์ ์๋ค๋ ๊ฒฝ๊ณ ๋ฉ์์ง์ ํจ๊ป ์ฌ๋ผ์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ด ๋น๋๋ด์ ์๋ํํ ์ ์๋ค๋ฉด ๋์ด๊ฒ ์ฃ ? ํฅํ 8์๊ฐ ATLAS ๋น๋๋ ๋๋ฌผ๊ธฐ๋ฅผ ๋ฐ๋๋๋ค. ์ธ์ ๊ฐ๋ Windows 64๋นํธ ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋ ๊ฒ์ ๋๋ค. SSE2 ์์ธ ๋ฌธ์ ๋ ๋ฌธ์ ์ด๋ฏ๋ก pypi์ ๋ํ ๋ ๋ค๋ฅธ ๊ฒฝ๊ณ ๋ฉ์์ง์ ๋๋ค. ๋ํ ATLAS๋ ์ด๋ฏธ Linux์ ํ์ค์ด๋ฉฐ ์ด์ ์ํผํฉ bdist_winst ํจํค์ง์ ํ์ค์ผ๋ก ์ด ๊ฒฝ๋ก๋ฅผ ๋ ๋ง์ด ์ง์ํฉ๋๋ค.
๊ทธ๋ฐ ๋ค์ ๊ฐ๊น์ด ์ฅ๋์ ์ด๋ฏธ mingwpy๋ฅผ ๊ฒฐ์ ํ์ต๋๋ค. ์ฌ๊ธฐ์๋ ๋น์ฅ ํด๊ฒฐํ์ง ์์๋ ๋๋ ๋ง์ ์ต์ ์ด ์์ต๋๋ค.
์ฅ๊ธฐ์ ์ผ๋ก ๋๋ ๋ธ๋ฆฌ์ค/ํ๋ ์์ด ๋ฏธ๋๋ผ๋ ์ฌ์ค์ ํฅ๋ถํฉ๋๋ค. ์ฐ๋ฆฌ์ ๋ง์ ์ํ์ ๋๊ตฌ๊ฐ 70๋ ๋์ FORTRAN ์ฝ๋์ ์์กดํ๋ค๋ ๊ฒ์ ์กฐ๊ธ ๋ฌด์ญ์ต๋๋ค. AC ์ ์ฉ ์๋ฃจ์ ์ ์ฃผ์ ๋ํ๊ตฌ์ด๋ฉฐ ์ด์ ์ ์ผ๋ก ์ง์ํ ์ ์๋ ๊ฒ์ ๋๋ค.
๊ทธ๋ฌ๋ ๊ฒฝํ์ด ๋ง์ ๊ฐ๋ฐ์์๊ฒ๋ ํญ์ ๋ง์์๋ก ์ข๊ธฐ ๋๋ฌธ์ ๊ฒฝํ์ด ๋ง์ ๊ฐ๋ฐ์๊ฐ ๋น๋ํ๊ณ ํ ์คํธํ ์๊ฐ๊ณผ ์ํฅ์ด ์๋ค๋ฉด ๋นํ์ค ์ต์ ์ ๋ํ ๋ฌธ์๋ฅผ ์ ์งํ๋ ๊ฒ๋ ์ข์ต๋๋ค.
blis์์ ์ต์ ํ๋ ์ปค๋ ์ค ํ๋๋ฅผ ์ฌ์ฉํ๋ ค๊ณ ์๋ํ์ง ์์ผ๋ฉด 2014๋ ์ดํ๋ก ์ด์ด๋ณธ ๋ฌธ์ (ํธ์ง: ๋จ์)์ ๋ถ๋ชํ์ง ์์ ๊ฒ์ ๋๋ค. ๋น๋ ์์คํ ์ ์ต์ ํ๋ ์ปค๋์๋ง ์ฌ๋ณผ๋ฆญ ๋งํฌ๋ฅผ ์ฌ์ฉํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋ฐ๋ผ์ ์ฐธ์กฐ ๊ตฌ์ฑ๋ง ๋น๋ํ๋ ค๊ณ ํ๋ฉด msys2์ git์ ํผ๋ํ์ง ์์ ๊ฒ์ ๋๋ค. cygwin์์ ๋น๋ํ๋ ๊ฒ์ด ๋ง์ง๋ง์ผ๋ก ์๋ํ์ง๋ง ์ผ๋ง ์ ์ผ์ด๊ณ ๋ก์ปฌ์์ ์์ ํ๋ ๋ฐ ํ์ํ ๊ฒ์ด ๋ฌด์์ธ์ง ๊ธฐ์ต์ด ๋์ง ์์ต๋๋ค. ๋์์ด Atlas๋ผ๋ฉด ๊ตฌ์ถ, ํ ์คํธ ๋ฐ ๋ฒค์น๋งํนํ ๊ฐ์น๊ฐ ์์ง๋ง ์ ์ฆ๋์ง ์์ ๊ฒ์ผ๋ก ๊ฐ์ฃผํ๊ณ ๊ทธ๋ ๊ฒ ํ ๋๊น์ง ์์ฒด ๋ฐฉ์์ผ๋ก ๋์ ์ํ์ ๊ฐ์ํด์ผ ํฉ๋๋ค.
@mikofski ๊ณต์ ํ Lapack์ 90๋ ๋ ์ฌ๋์ ๋๋ค. ๋ฐฉ์ ์๋ ์ ๋ง Fortran ์ฝ๋ผ๋ฆฌ์ ๋๋ค.
@tkelman : ๋ถ๋ช
ํ ๋ง์๋๋ฆฌ์๋ฉด, ๊ทํ๊ฐ ์ ์ถํ ๋ฌธ์ ๋ ํนํ Windows ๋ค์ดํฐ๋ธ ๋น๋ ์์คํ
๊ณผ ๊ด๋ จ๋ ๊ฒ์ด์์ต๋๋ค. ๋ง์ต๋๊น? ํธ๊ธฐ์ฌ์ ๋๋ ๋ฆฌ๋
์ค์์ ์๋์ฐ์ฉ blis๋ฅผ ํฌ๋ก์ค ์ปดํ์ผํ๋ ค๊ณ ์๋ํ๊ณ (๋ฐ๋น์ ํจํค์ง์์ ์ค์น๋ mingw-w64 ํฌ๋ก์ค ์ปดํ์ผ๋ฌ ์ฌ์ฉ), 2๋ถ ์ ๋๋ฐ์ ๊ฑธ๋ฆฌ์ง ์๋๋ค๋ ์ฌ์ค์ ๋๋์ต๋๋ค. ๋๋ "./configure reference; make -j4 CC=x86_64-w64-mingw32-gcc AR=x86_64-w64-mingw32-ar CPICFLAGS=" ๊ทธ๋ฆฌ๊ณ ๋ชจ๋ ๊ฒ์ด ์ ๋๋ก ์๋ํ์ต๋๋ค. ( CPICFLAGS=
์ " -fPIC
๋ฌด์ํ๋ ๊ฒ์ ๋ํ ๋ง์ ๊ฒฝ๊ณ ๋ฅผ ์ต์ ํ๊ธฐ ์ํ ๊ฒ์
๋๋ค. ์ด๊ฒ์ด ๊ธฐ๋ณธ๊ฐ์ด๊ธฐ ๋๋ฌธ์
๋๋ค." ๊ทธ๋ฆฌ๊ณ ์๋ง๋ AR
๋ฅผ ์ฌ์ ์ํ ํ์์กฐ์ฐจ ์์์ ๊ฒ์
๋๋ค. ํ์ง๋ง ์ด๋ด ์ ์ ๋ฉ๋๋ค.) %ld
๋ฅผ ์ฌ์ฉํ์ฌ intptr
์ ์๋ฅผ ์ธ์ํ๋ $ bli_pool.c
๋ฐ bli_fprintm.c
์ printfs์ ๋ํ ๋ช ๊ฐ์ง ๊ฒฝ๊ณ ๊ฐ ์์ผ๋ฏ๋ก ์๋ง๋ ๋ช ๊ฐ์ง LLP64 ๊ผฌ์์ด ์์ ์ ์์ต๋๋ค. ์ด๋ํ๊ธฐ.
@rgommers :
BLIS๋ฅผ ์๋ํ์ง ์๊ณ ๊ธฐ๋ณธ์ ์ผ๋ก ๋งค์ฐ ์์์ ์ฌ๋๋ค์ด ์ฌ์ฉํ๋ ์ ํ๋ 1์ธ ํ๋ก์ ํธ์ ๋ํด ๋น๋๋ numpy ๋ฐ์ด๋๋ฆฌ๋ฅผ ๋ฐฐํฌํ๋ ๊ฒ์ ๋ฏธ์น ์ง์ฒ๋ผ ๋ค๋ฆด ๊ฒ์ ๋๋ค.
๋น์ ์ด ์ ๋์ ์ผ๋ก ์ณ์ต๋๋ค! ๋ฌธ์ ๋ ๋ชจ๋ ์ต์ ์ด ๋์ฐํ๋ค๋ ๊ฒ์ ๋๋ค :-(.
๋ฐ๋ผ์ ๋ถ๋ช ํ MKL์๋ ํ์คํ ๋์ ๋ผ์ด์ผ์ค๊ฐ ์์ต๋๋ค.
ATLAS๋ ์ ๋ ๊ฐ์ ๋์ง ์์ ํ์คํ ๋์ ์ฑ๋ฅ์ ๊ฐ์ง๊ณ ์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ OpenBLAS๋ ์ด ์์ ์์ ๋งํ ์ ์๋ ์ฆ๊ฑฐ๊ฐ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ ์ง ๊ด๋ฆฌ๊ฐ ๋ถ๊ฐ๋ฅํ๊ณ ๊ทธ๋ ๊ฒ ๋นจ๋ฆฌ ๋์ง๋ ์์ ๊ฒ์
๋๋ค. -(. ํ๋ก์ ํธ๋ 5๋
์ด ์ง๋ฌ์ง๋ง ์ฌ์ ํ Julian์ ์์ volatile
s์ ๋ฎคํ
์ค๋ฅผ ์ฌ์ฉํ์ง ์๋ ์ค๋ ๋ฉ ์ฝ๋, ์ด ๋ฌธ์ ๋ฅผ ์์ ํ๋ ์
์คํธ๋ฆผ์๋ ๋ถ๋ช
ํ ๊ด์ฌ์ด ์์ผ๋ฉฐ ํ
์คํธ๋ฅผ ์ํด ๋ฐ์ด๋๋ฆฌ๋ฅผ ์๊ท๋ชจ ๊ทธ๋ฃน(numpy-discussion)์ ๊ฒ์ํ๋ ์ฆ์ ์ฌ์ ํ ๊ทธ๋ ์ต๋๋ค. , ์ฐ๋ฆฌ๋ ์ฆ์ 2-3๊ฐ์ ์์ ํ ์ ๋นํ ์ฌํํ๊ธฐ ์ด๋ ต๊ฑฐ๋ ๋ถ๊ฐ๋ฅํ ์ถฉ๋ ๋ฐ ์๋ชป๋ ๊ฒฐ๊ณผ ๋ฒ๊ทธ๋ฅผ ๋ฐํํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ BLIS ๋
ผ๋ฌธ์ ์ด๊ฒ์ด ๊ธฐ๋ณธ GotoBLAS ์ํคํ
์ฒ์ ์ ํ๊ณผ ๊ด๋ จ์ด ์๋ค๋ ํฉ๋ฆฌ์ ์ผ๋ก ์ค๋๋ ฅ ์๋ ์ฌ๋ก๋ฅผ ์ ์ํฉ๋๋ค. ์ข ๋ ๋ค๋ฌ๋ ๋ฐ ์๊ฐ์ ๋ ํฌ์ํ๋ฉด ์ฝ๊ฒ ๊ณ ์น ์ ์๋ ๊ฒ ์์ ์๊ฐ ์ค๋๋ ๊นจ์ง๊ธฐ ์ฌ์ด ์ฝ๋๋ ์ฌ์ฉ์์๊ฒ ์ ๋ฆฌํ๊ฒ ์๋ํ์ง ์์ต๋๋ค. numpy ํ ๋ก ๋ชฉ๋ก์์ ๊ฐ์ฅ ์ฌํ ๊ฐ๋ฅํ ๋ฒ๊ทธ๋ 5๋
์ ์ ์ค๋จ๋ ๋ง์ดํฌ๋ก ์ํคํ
์ฒ์ธ OpenBLAS์ Core2 ์ปค๋์ ์๋ค๊ณ ์์ฌ๋๋ ๋ฒ๊ทธ์
๋๋ค.)
๊ทธ๋์ ์ ๊ฐ BLIS๋ฅผ ๊ณ์ ์ธ๊ธํ๋ ์ด์ ๋ BLIS๊ฐ ํ์คํ ํด๊ฒฐ์ฑ ์ด๋ผ๊ณ ์๊ฐํ๊ธฐ ๋๋ฌธ์ด ์๋๋ผ ์ผ์ข ์ ๊ณ์ฐ๋ ๋๊ด๋ก ์ผ๋ก ์๊ฐํ๊ธฐ ๋๋ฌธ์ ๋๋ค. BLIS๋ _might_ MKL/OpenBLAS๋งํผ ๋น ๋ฅด๊ณ , ATLAS/MKL๋งํผ ์ ๋ขฐํ ์ ์์ผ๋ฉฐ, OpenBLAS๋ก์์ ๊ธฐ์ฌ; ๊ทธ๋ ์ง ์์ ์๋ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ด๋ฌํ ๋ชจ๋ ๊ธฐ์ค์ ์ถฉ์กฑํ ์ ์๋ ์ง์ ํ ํฌ๋ง์ ๊ฐ์ง ๋ค๋ฅธ ํ๋ก์ ํธ๋ ์๋ ๊ฒ ๊ฐ์ต๋๋ค. [๊ทธ๋ฆฌ๊ณ ์ด๊ฒ์ ๊ธฐ๋ณธ์ ์ผ๋ก strided ๋ฐฐ์ด์ ์ง์ํ ์ ์๋ค๋ ์ฌ์ค๊ณผ ๊ฐ์ ๋ค๋ฅธ ์ด์ ์ ๋ํด์๋ ์ธ๊ธ์กฐ์ฐจ ํ์ง ์์ต๋๋ค. ์ฐ๋ฆฌ๊ฐ ๋์ฐํ ํน์ ์ผ์ด์ค BLAS ๋์คํจ์น ์ฝ๋๋ฅผ ๋ชจ๋ ์ญ์ ํ ์ ์๋ค๋ ๊ฒ์ ์์ํ ์ ์๋ ์ผ์ด ์๋๋๋ค.]
IIUC, GotoBLAS๋ Robert van de Geijn์ PI๋ก UT Austin์์ ์ผํ๋ ๋จ์ผ ์ ๊ท ๊ฐ๋ฐ์(Kazushige Goto)๊ฐ ์ ์ง ๊ด๋ฆฌํ์ต๋๋ค. BLIS๋ Robert van de Geijn์ PI๋ก UT Austin์์ ์ผํ๋ ๋จ์ผ ์ ๊ท ๊ฐ๋ฐ์(Field G. Van-Zee)๊ฐ ์ ์ง ๊ด๋ฆฌํฉ๋๋ค. ๊ทธ๋์ ์ด๊ฒ์ด ์๋ํ์ง ์๋ ๊ฒ์ ์๋๋๋ค :-) ๊ทธ๋ฌ๋ ์, ์ฐ๋ฆฌ๊ฐ ๊ธฐ๋ค๋ฆฐ๋ค๋ฉด ๋ง์ ์ฒ๋ผ ์ผ์ด๋์ง๋ ์์ ๊ฒ์ ๋๋ค. ์ฃผ๋ณ์ ๊ฐ๋ฐ์ ์ปค๋ฎค๋ํฐ๊ฐ ์๊ฒ ๋๋ค๋ฉด ๊ทธ๊ฒ์ ์ผ๋ถ ์ปค๋ฎค๋ํฐ๊ฐ ์์ ์ ํ ํธ๊ฐ ์๋ ์ ์๋๋ฐญ์ "์ด๋ด, ์ฌ๊ธฐ ์๋ค. ์ฐ๋ฆฌ๊ฐ ์ด์ฌ๋ฅผ ์ค๊ณ ์๊ณ ์ฐ๋ฆฌ๋ฅผ ์ํด ์ด ์ผ์ ํ๊ณ ์์ผ๋ ์ ๊ฒฝ์ฐ์ง ์๊ธธ ๋ฐ๋๋ค." ๊ทธ๋ฆฌ๊ณ ์ฅ๊ธฐ์ ์ธ ์คํ ๊ฐ๋ฅ์ฑ์ ๊ฒฐ์ ํ๊ธฐ ์ํด ์ฐ๋ฆฌ๊ฐ ์ ๋ง๋ก ์์์ผ ํ ๊ฒ์ "๊ทธ๊ฒ์ด ์ค์ ๋ก ์ผ๋ง๋ ์ ๋ขฐํ ์ ์๋์ง"์ "ํจ์น์ ์ผ๋ง๋ ์์ํ๋๊ฐ"์ ๊ฐ์ ๊ฒ์ ๋๋ค. ์ฐ๋ฆฌ๊ฐ ๊ทธ๊ฒ์ ํ ์คํธํ๊ณ ์ ์ถํ๊ธฐ ์์ํ์ง ์๋ ํ ์ ์ ์์ต๋๋ค. ํจ์น ๋ฑ์ด ์์ต๋๋ค.
๊ฒฐ๋ก : ์ต์ ์ ์ ํ์ด ๋ฌด์์ธ์ง ์ง์งํ๊ฒ ๋ชจ๋ฅด์ง๋ง BLIS ๋ฌผ์ ๋ฐ๊ฐ๋ฝ์ ๋ด๊ทธ๋ ๊ฒ์ด ์ข์ ์๊ฐ์ธ ๊ฒ ๊ฐ์ต๋๋ค. ์ฐ๋ฆฌ๊ฐ ๊ธฐ๋ค๋ฆฌ๊ธฐ๋ก ๊ฒฐ์ ํ๋๋ผ๋ ์ฐ๋ฆฌ๋ ์ ์ด๋ ๋ฌด์ธ๊ฐ๋ฅผ ๋ฐฐ์ธ ๊ฒ์ ๋๋ค.
์ฌ๋ฌ ๋ฌธ์ ์ ํ๋ ๋๋ ๋ ๊ฐ์ PR์ ์ ์ถํ์ต๋๋ค. ์ ์ฅ์์ ์ฌ๋ณผ๋ฆญ ๋งํฌ๊ฐ ์๋ค๋ ์ฌ์ค์ msys2์์ ๋น๋๊ฐ ์ค๋จ๋์์์ ์๋ฏธํฉ๋๋ค(๋๋ msys2 ์ต์
์ ํน์ ๋ฐฉ์์ผ๋ก ์ค์ ํ ๊ฒฝ์ฐ์๋ง ์๋ํจ). cygwin ๋๋ Linux์์ ๊ต์ฐจ ๋น๋(ํ
์คํธ๋ฅผ ์คํํ๊ธฐ ์ํด ์์ธ์ ์ ๋ขฐํ์ง๋ ์์)๋ ์๋ํด์ผ ํ์ง๋ง 2014๋
์ ์ ๋ ฌ๋ malloc๊ณผ ํ
์คํธ์์ ์๋ ๋ธ๋ฆฌ์ง ์ปค๋์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ต๋๋ค. ๋ฐฉ๊ธ cygwin ์ญ์๊ฐ๋ฅผ ์ฌ์ฉํ์ฌ ์ต์ master of blis์์ ๋ชจ๋ ๋ค๋ฆฌ ์ปค๋์ ์ฌ๊ตฌ์ถํ์ผ๋ฉฐ(์ต์ skylake ๋
ธํธ๋ถ์์) segfault๊ฐ ์ด์ ์ฌ๋ผ์ง ์ ์์ต๋๋ค. ์ธ์ ๋๋ ๋ฌด์์ ๊ณ ์ณค๋์ง ๋๊ฐ ์๊ฒ ์ต๋๊น? ์ด๋ฑ๋ถํด์ผํฉ๋๋ค.
๋๋ ์ด๊ฒ์ด ์ ์ ์ธ๊ธ๋์๋ค๊ณ ์๊ฐํ์ง๋ง ์ฐ๋ฆฌ๋ SSE2, SSE3, AVX์ฉ ATLAS ๋ฐ์ด๋๋ฆฌ๋ฅผ ๋น๋ํ๊ณ ๋ค์๊ณผ ๊ฐ์ ๋๋ ํ ๋ฆฌ ๊ตฌ์กฐ์ ๋ฃ์ ์ ์์ต๋๋ค.
numpy/.lib/sse2/numpy-atlas.dll
numpy/.lib/sse3/numpy-atlas.dll
numpy/.lib/avx/numpy-atlas.dll
๊ทธ๋ฐ ๋ค์ numpy/_distributor_init.py
๋ฅผ ์ฌ์ฉํ์ฌ ํ์ฌ CPU๋ฅผ ํ์ธํ๊ณ ์ผ์นํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ฏธ๋ฆฌ ๋ก๋ํ ์ ์์ต๋๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก ๋์ผํ ์์ ์ ์ ์ํ์ง๋ง ์ํ๋ผ์ค ๋์ blis์ ๊ฒฝ์ฐ @njsmith์๊ฒ ์ ์ํ์ต๋๋ค. ๋ํ blis์ ์ค๋ ๋ฉ์ด ์ํ๋ผ์ค์ ์ผ๋ง๋ ์ ์๋ํ๋์ง ๋น๊ตํ ๊ฐ์น๊ฐ ์์ต๋๋ค. blis ์ฐธ์กฐ ๊ตฌ์ฑ์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ค๋ ๋ฉ์ ํ์ฑํํ์ง ์์ง๋ง ํค๋ ํ์ผ์ ์ ์๋ฅผ ์กฐ์ ํ๋ ๊ฒ๋ง์ผ๋ก ์ด๋ฅผ ์ ํํ ์ ์์ต๋๋ค.
๋ฐ์ด๋๋ฆฌ๋ฅผ ๋น๋ํ๊ธฐ ์ํด Appveyor๋ฅผ ์ค์ ํ์ต๋๋ค. ๋น๋์ ํ์ฌ ๋ฐ๋ณต ์์ ์ด ์ฌ๊ธฐ์์ ์งํ ์ค์ ๋๋ค. https://ci.appveyor.com/project/matthew-brett/np-wheel-builder/build/1.0.10
์ ์๋ ๋ฐํด๊ฐ ์ฌ๊ธฐ์ ๋์ฐฉํฉ๋๋ค: https://84c1a9a06db6836f5a98-38dee5dca2544308e91131f21428d924.ssl.cf2.rackcdn.com
Appveyor ๋น๋์์ ๋ ์ด์์ ๊ผฌ์์ ์ฝ๊ฒ ๊ณ ์น ์ ์์ด์ผ ํ๋ฏ๋ก ์ด ์์ ์ด ์๋ฃ๋๋ฉด ์๋ง๋ ๋ด์ผ ์ธ์ ๊ฐ๋ ์ด ํ ์ pypi์ ์ ๋ก๋ํ ์ค๋น๊ฐ ๋์ด ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
@rgommers , @matthew-brett : site.cfg
์ ๊ด๋ จํ์ฌ ๊ทํ์ ์๋ต์ numpy
์๋ง ์ ์ฉ๋๋ ๊ฒ ๊ฐ์ต๋๋ค. scipy
๋ setup.py
์ ๋์ผํ ๋๋ ํ ๋ฆฌ์์ site.cfg
๋ฅผ ๊ฒ์ ํ์ง ์๋ ๊ฒ ๊ฐ์ต๋๋ค. $#๋ฅผ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ์ง์ ํ๊ธฐ ์ ์ ํ ๋๋ ํ ๋ฆฌ์์ ๋จผ์ site.cfg
๊ฒ์์ ์์ํฉ๋๋ค numpy
๊ตฌ์ฑ
ํ์ธ - ์ค์น๋ ํ ํ ์คํธ๋ฅผ ํฌํจํ์ฌ ์ค๋ฅ ์์ด ์คํ๋๋ ๋น๋ ์คํฌ๋ฆฝํธ: https://ci.appveyor.com/project/matthew-brett/np-wheel-builder/build/1.0.10
์ฌ๊ธฐ ๋ฐํด: http://58688808cd85529d4031-38dee5dca2544308e91131f21428d924.r12.cf2.rackcdn.com/
๋ค๋ฅธ 64๋นํธ ์ปดํจํฐ์ ๋ค๋ฅธ 32๋นํธ ์ปดํจํฐ์ ์ค์นํ๊ณ ํ ์คํธํ์ต๋๋ค.
๊ทธ๋์ ์ ๋ ์ด๊ฒ๋ค์ด ๊ฐ ์ค๋น๊ฐ ๋์๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ด๊ฒ๋ค์ pypi์ ์ ๋ก๋ํ๋ ๊ฒ์ ๋ํด ์ด์๊ฐ ์์ต๋๊น?
๋ฐํด๊ฐ ์ง๊ธ pypi์ ๋ํ๋๋ ์ด์ ์ ์ฐจ์ด์ ์ด ๋ฌด์์ธ์ง ๊ถ๊ธํดํ๋ ์ฌ๋๋ค์ ํผ๋์ ํผํ๊ธฐ ์ํด pypi์ ์ด ๋ฐํด์ gohlke(mkl)์ ์ฐจ์ด์ ์ ๋ํ ์ค๋ช ์ ์ค๋ช /๋งํฌ ํ๋ ๋ฉ๋ชจ๋ฅผ ๋๋ ๊ฒ์ด ์ข์ต๋๋ค. ๊ทธ๋ค ์ฌ์ด์ ์์ต๋๋ค.
๋ถ์์ ์ธ ์ง๋ฌธ์ ๋๋ค ์ฃ์กํฉ๋๋ค๋ง ์ ๋ ๋ฌด์์
# Pin wheel to 0.26 to avoid Windows ABI tag for built wheel
- pip install wheel==0.26
appveyor ์คํฌ๋ฆฝํธ์์ ์๋ฏธํฉ๋๊น?
์ค๋ช ์ ๋ํ ์ข์ ์ ์ - ์ด ๊ธฐ์กด ๋ฆด๋ฆฌ์ค์ ์ถ๊ฐํ๋ ๋ฐฉ๋ฒ์ ์๋ํ๊ณ ํด๊ฒฐํ๊ฒ ์ต๋๋ค.
Wheel > 0.26์ Windows ํ ์ ABI ํ๊ทธ๋ฅผ ์ถ๊ฐํฉ๋๋ค. Wheel==0.26์ ๋ค์๊ณผ ๊ฐ์ ํ ์ด๋ฆ์ ์ ๊ณตํฉ๋๋ค.
numpy-1.10.4-cp27-none-win32.whl
Wheel > 0.26์์๋ ๋ค์๊ณผ ๊ฐ์ ์ถ๊ฐ ABI ํ๊ทธ๋ฅผ ์ป์ต๋๋ค.
numpy-1.10.4-cp27-cp27m-win32.whl
(์ ์๊ฐ์๋) - Windows ABI๋ฅผ ์ง์ ํฉ๋๋ค. ์ด๊ฒ์ ์ด์ pip๊ฐ ์ด ๋ ์๋ค์ ์ค์นํ์ง ์์ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ์ฑ๊ฐ์ ์ผ์ ๋๋ค. ๊ทธ๋์ ์ง๊ธ์ no-ABI ์ด๋ฆ์ด ๋ ๋์ ๊ฒ ๊ฐ์ต๋๋ค.
ํ์ธ - ํ์ฌ pypi ํ์ด์ง์ ์ด ํ ์คํธ๋ฅผ ์ถ๊ฐํ ๊ฒ์ ์ ์ํฉ๋๋ค.
pypi์์ ๋ฐฐํฌ๋๋ ๋ชจ๋ numpy ํ ์ BSD ๋ผ์ด์ ์ค๋ฅผ ๋ฐ์์ต๋๋ค.
Windows ํ ์ ATLAS BLAS / LAPACK ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ฐ๊ฒฐ๋์ด ์์ผ๋ฉฐ SSE2 ๋ช ๋ น์ด๋ก ์ ํ๋์ด ์์ผ๋ฏ๋ก ์์คํ ์ ์ต์ ์ ์ ํ ๋์ ์ฑ๋ฅ์ ์ ๊ณตํ์ง ์์ ์ ์์ต๋๋ค. ๋์์ http://docs.scipy.org/doc/numpy/user/install.html ์ ์ฐธ์กฐํ์ญ์์ค.
๋๋ ๋ค๋ฅด๊ฒ ๋งํ ๊ฒ์ด๋ค:
์ด๋ฌํ Windows ํ ์ ์ต์ ์ด ์๋ ์ ํ ๋์ ์ฑ๋ฅ(http://speed.python.org์ ๊ฐ์ ๋ฒค์น๋งํฌ ๋งํฌ)์ ๊ฐ์ง๊ณ ์์ต๋๋ค. ์ด๋ SSE2 ๋ช ๋ น์ด๋ก ์ ํ๋ ATLAS BLAS/LAPACK ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ฐ๊ฒฐ๋์ด ์๊ธฐ ๋๋ฌธ์ ๋๋ค(๊ทธ๋ฆฌ๊ณ ์ ํ๋์ง ์์ ๋ช ๋ น์ด๋ ์์๋?). ์ฑ๋ฅ์ด ํ์ํ ๊ฒฝ์ฐ ์ด ํ๋ซํผ์์ ์ปดํ์ผ๋ Python ํ์ฅ์ ๋ ๋ง์ ์ฑ๋ฅ์ ์ ๊ณตํ๋ ๊ฒ์ ๋ชฉํ๋ก ํ๋ mingwpy ํ๋ก์ ํธ๋ฅผ ์ง์ํ ์ ์์ต๋๋ค. ๋ณด๋ค ??? ์์ธํ ๋ด์ฉ์ http://docs.scipy.org/doc/numpy/user/install.html , ๋์์ http://docs.scipy.org/doc/numpy/user/install.html์ ์ฐธ์กฐํ์ธ์.
๊ธ์ - mingwpy์ ํ์ฌ numpy / scipy ๋ฒ์ ์ openblas๋ฅผ ์ฌ์ฉํ์ง๋ง ์ปดํ์ผ๋ฌ๋ก์์ mingwpy ๋ MSVC์๋ ๊ด๋ จ์ด ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ด ํ ๊ณผ ํจ๊ป openblas๋ฅผ ๋ฐฐ์กํ ์๋ ์์ง๋ง, openblas๊ฐ ์์ง ์ฐ๋ฆฌ๊ฐ ์ง์ํ๋ ํ์ค ํ ์์ ์ฌ์ฉํ ๋งํผ ์ถฉ๋ถํ ์์ ์ ์ด์ง ์๋ค๋ ๊ฒ์ด ๊ฑฑ์ ๋์์ต๋๋ค.
OpenBlas๋ ์ถฉ๋ถํ ์์ ์ ์ธ ๊ฒ ๊ฐ์ต๋๋ค. Anaconda๊ฐ Linux์ ์ฌ์ฉํ๋ ๊ฒ์ผ๋ก ์๊ณ ์์ต๋๋ค.
์ง๊ธ ๋น๋ํฉ๋๋ค. ์
๋ฐ์ดํธ๋ Windows Python 3.5 x64 ๋น๋๊ฐ ์์ต๋๋ค.
๊ฑฐ๊ธฐ์์ ๋ฒค์น๋งํฌ๋ MKL๊ณผ ๊ฑฐ์ ๊ฐ๋ค๋ ๊ฒ์ ๋ณด์ฌ์ค๋๋ค. ๋๋ ํ์คํ ๊ทธ๊ฒ์ ์๋ ํ ๊ฒ์
๋๋ค ๊ฒฝ์ฐ
๋๊ตฐ๊ฐ๊ฐ ๋ฐํด๋ฅผ ์กฐ๋ฆฝํ ์ ์์ต๋๋ค.
2016๋
2์ 16์ผ ์คํ 10์ 36๋ถ์ "Matthew Brett" [email protected] ์ด ๋ค์๊ณผ ๊ฐ์ด ์ผ์ต๋๋ค.
๊ธ์ - mingwpy์ ํ์ฌ numpy / scipy ๋ฒ์ ์ openblas๋ฅผ ์ฌ์ฉํ์ง๋ง
์ปดํ์ผ๋ฌ๋ก์์ MSVC ๋ mingwpy์ ๊ด๋ จ์ด ์๋ค๊ณ ์๊ฐํ์ญ์์ค. ์ฐ๋ฆฌ๋ ๋ํ ๋ฐ์กํ ์ ์์์ต๋๋ค
์ด ๋ฐํด๊ฐ ๋ฌ๋ฆฐ openblas์ง๋ง ๋๋ openblas๊ฐ ์์ง
์ฐ๋ฆฌ๊ฐ ์ง์ํ๋ ํ์ค ํ ์์ ์ฌ์ฉํ๊ธฐ์ ์ถฉ๋ถํ ์์ ์ ์ ๋๋ค.โ
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ฑฐ๋ GitHub์์ ํ์ธํ์ธ์.
https://github.com/numpy/numpy/issues/5479#issuecomment -185017546.
ํ์ธ. ๋๋ ์ต์ ์ด ์๋ ์ฑ๋ฅ์ ์์ค์ ๋ํด ํผ๋์ค๋ฌ์ํฉ๋๋ค. ๋๋ ๊ทธ BLAS ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ง ์์ผ๋ฉฐ ๊ทธ๋ค์ดํ๋ ์ผ๊ณผ ์ฐจ์ด์ ์ ๋ชจ๋ฆ ๋๋ค. ๊ทธ๋์ ํ์ฌ์๋ฅผ์ํ ์ด๋ฌํ ์ต์ ์ ์ค๋ช ํ๋ ๊ฒ์ด ๋์์ด๋ฉ๋๋ค. ์, ๋ ๊ณผํ์ ์ผ๋ก ์ ์ ์์ต๋๋ค. . =) ์ต์ ์ ์ฑ๋ฅ์ ๊ฐ์ง ๊ฐ๋ฐฉํ ์ปดํ์ผ๋ฌ๊ฐ ์๋ ๊ฒ์ด ๋ฌธ์ ๋ผ๊ณ ์๊ฐํ์ต๋๋ค.
@mrslezak : OpenBLAS์ ๊ดํด์๋ ํ์คํ ๋์ํ ์ ์์ต๋๋ค. Lapack ํจํค์ง์ ํจ๊ป Cygwin์ ์ ๊ณต๋ OpenBLAS ํจํค์ง๋ ๋ฌธ์ ์์ด NumPy์ SciPy๋ฅผ ๋ชจ๋ ๋น๋ํ ์ ์๋ ๊ฒ์ผ๋ก ๋ณด์ ๋๋ค.
@mrslezak : ๋ฒค์น๋งํฌ์ ๋ํ ์ ๋ณด๋ ์ด๋์์ ์ฐพ์ ์ ์๋์? ์ ๋ scipy.org
์ ๋ํ Windows ์์ค ๋น๋์ ๋ํ ๋ฌธ์๋ฅผ ์์ฑํ๋ ค๊ณ ํ๊ณ ์์ผ๋ฉฐ ์ด๋ ์ด๋ฌํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ฑ๋ฅ์ด ํ์ํ ๋ชจ๋ ์ฌ๋์๊ฒ ํ๋ฅญํ ์ฐธ์กฐ๊ฐ ๋ ๊ฒ์
๋๋ค.
์ท๊ฑด ๋ฐฉ์์ด ์ฌ๋ฐ๋ฅธ ์๊ฐ์ผ๊น์? ๋ค์๊ณผ ๊ฐ์ ๊ฒ:
@techtonik ๋๋ GCC๊ฐ ๋ชจ๋ ์ปดํ์ผ๋ฌ๊ฐ ๊ตฌ์ถํ ์ ์๋ ๋๋ฑํ ์ฝ๋์์ MSVC ๋๋ ICC๋ณด๋ค ๋ค์ ์ฑ๋ฅ์ด ๋จ์ด์ง ๊ฒ์ผ๋ก ์์ํฉ๋๋ค. ๋ฌธ์ ๋ Fortran์ ์๋ ๊ฒฝ์ ๋ฒ์ ์ Lapack์ ๋น๋ํ ์ ์๋ ๋ฌด๋ฃ(python.org-cpython ํธํ) ์ปดํ์ผ๋ฌ๊ฐ ์๋ค๋ ๊ฒ์ ๋๋ค(SciPy์๋ ๋ค๋ฅธ Fortran ๊ตฌ์ฑ ์์๋ ์์). OpenBLAS์ ์์ํ BLAS ๋ถ๋ถ(์๋ง๋ Atlas๋)์ ์ค์ ๋ก MSVC๋ก ๋น๋ํ ์ ์์ง๋ง MSVC๋ ์ธ๋ผ์ธ ์ด์ ๋ธ๋ฆฌ๊ฐ ํ์ํ ๋ถ๋ถ์ ๋น๋ํ ์ ์์ผ๋ฏ๋ก ๊ฒฝ์๋ ฅ์ด ์์ต๋๋ค.
ํธ๋ฆฌํ 64๋นํธ MKL์ด ์์ง๋ง(ํ๊ธฐํ ๊ฒฝ์ฐ ์ด๋๊ฐ์ conda์์ 32๋นํธ๋ฅผ ์ฌ์ฉํ ์ ์์) ๋ค์์ @matthew-brett์ด ์ฐธ์กฐ ๋ฐ ๋ชจ๋์ ๋ํด ๋น๋ํ Atlas dll์ ๋น๊ตํ๋ Julia์์ ์คํ๋๋ ๋ช ๊ฐ์ง ๋ฒค์น๋งํฌ์ ๋๋ค. BLIS์ ๋ธ๋ฆฌ์ง ๊ตฌ์ฑ ๋ฐ Julia์ ํจ๊ป ์ ๊ณต๋๋ OpenBLAS ๋น๋ https://gist.github.com/54da587b01b7fb163103
์์ฝ: openblas(skylake์์ ์ต์ openblas ์ปค๋์ haswell์)๋ ์ํ๋ผ์ค๋ณด๋ค 23๋ฐฐ, ์ฐธ์กฐ ๋ธ๋ฆฌ์ค๋ณด๋ค 44๋ฐฐ, ์๋๋ธ๋ฆฌ์ง ๋ธ๋ฆฌ์ค๋ณด๋ค 5.5๋ฐฐ ๋น ๋ฆ ๋๋ค. ํ์ค์ฐ ๋ธ๋ฆฌ์ค๊ฐ ์ผ๋ง๋ ๊ฐ๊น์ด์ง ํ์ธํ๊ธฐ ์ํด ์๋ํด ๋ณผ ์ ์์ต๋๋ค.
ํ - BLIS ์ปดํ์ผ์ ์ํ ๋น๋ ์คํฌ๋ฆฝํธ๊ฐ ์๋ ๊ฒ ๊ฐ์ง ์์ต๋๊น?
๋ค์ํ ํ๋ก์ธ์์ ๋ํด BLIS ๋น๋๋ฅผ ๋ง๋ค๊ณ ๋ฐํ์์ ํ๋๋ฅผ ์ ํํ๋ ๊ฒ์ด ๊ฐ์น๊ฐ ์๋ค๊ณ ์๊ฐํ์ญ๋๊น? ๋๋ถ๋ถ์ ํ๋ก์ธ์์ ๋ํด ๋๋ถ๋ถ์ ์ฑ๋ฅ์ ์บก์ฒํ๋ ํ๋ก์ธ์์ ์์ ํ์ ์งํฉ์ด ์์ต๋๊น?
์ฃผ์์ ์์ง๋ง ์ฌ๊ธฐ (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
์ฌ์ฉ ๊ฐ๋ฅํ ํญ๋ชฉ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. https://github.com/flame/blis/tree/master/config
Intel x86๊ณผ ๊ด๋ จํ์ฌ ์ฐธ์กฐ, ๋๋ํด, ์๋๋ธ๋ฆฌ์ง ๋ฐ ํ์ค์ฐ์ ๊ฝค ์ข์ ๋ฒ์๋ฅผ ์ปค๋ฒํ ๊ฒ์ ๋๋ค. ๋ํ AMD๋ฅผ ์ํ ๋ถ๋์ , ํ์ผ๋๋ผ์ด๋ฒ ๋ฐ ์บ๋ฆฌ์กฐ(์ต๊ทผ BLIS์ ์ฐฌ์ฑํ์ฌ ACML ๊ฐ๋ฐ์ ์ค๋จํ๊ธฐ ๋๋ฌธ์ ์ต์ํ ์ฐฌ์ฑ ํฌํ์).
https://github.com/flame/blis/tree/master/build/auto-detect ์ ์ฌ์ฌ์ฉํ ์ ์๋ ์๋ ๊ฐ์ง ์ฝ๋๊ฐ ์์ต๋๋ค(ํ์ฌ BLIS์ ๊ตฌ์ฑ ์๊ฐ์๋ง ์คํ๋์ง๋ง ๊ทธ๊ฒ์ด ์๋ฏธํ๋ ๊ฒ์ ์๋๋๋ค. ๋ค๋ฅธ ์ฉ๋๋ก ์ฌ์ฌ์ฉํ ์ ์์), ์ฌ์ฉํ๋ ค๋ Python์ ์ด๋ฏธ CPU ์ ํ๊ตฐ ์๋ณ ์ฝ๋๊ฐ ์๋์ง ์ฌ๋ถ์ ๋ฐ๋ผ ๋ค๋ฆ ๋๋ค.
Python์ ์ด๋ฏธ CPU ์ ํ๊ตฐ ์๋ณ ์ฝ๋๊ฐ ์๋์ง ์ฌ๋ถ์ ๋ฐ๋ผ
๋์์ด ๋๋์? http://stackoverflow.com/a/35154827/239247
๋๋ถ๋ถ ๊ทธ๋ก๋ถํฐ ํ์๋ ํ๋ก์ธ์ ์ ํ๊ตฐ์ ์ํ์ง๋ง https://github.com/flame/blis/blob/master/build/auto-detect/cpuid_x86.c ๋ ์ ํํ ๊ธธ๊ฑฐ๋ ๋ณต์กํ์ง ์์ต๋๋ค. SO์์ ๋งํฌ ๋ numexpr ์์ค๋ ๋ฌธ์์ด ์ถ๋ ฅ (์ ์ด๋ Linux์์๋)์์ ์ ๊ท์ ์ผ์น๋ฅผ ์ํํ๊ณ ์์ผ๋ฉฐ ์ต๊ทผ ์ํคํ ์ฒ๊ฐ ๋ง์ด ๋์ด๋์ง ์์ ๊ฒ ๊ฐ์ต๋๋ค.
openblas๋ Haswell blis๋ณด๋ค 3.4๋ฐฐ ๋น ๋ฅด๋ฉฐ dunnington(๊ธฐ๋ณธ์ ์ผ๋ก ๋ด๊ฐ ์๊ฐํ๋ nehalem penryn๊ณผ ๋์ผ) blis๋ณด๋ค 17๋ฐฐ ๋น ๋ฆ
๋๋ค. ํฅ๋ฏธ๋ก์ด ์ ์ ๋ฉํฐ์ค๋ ๋ฉ์ด ์ด๋ฌํ ์คํ์์ ์ฑ๊ณต์ ์ผ๋ก ์๋ํ๊ณ ์๋ค๊ณ ์๊ฐํ์ง ์๋๋ค๋ ๊ฒ์
๋๋ค. ๊ธฐ๋ณธ ์ค์ ์ sandybridge ๋ฐ haswell์ ๋ํด openmp๋ฅผ ํ์ฑํํฉ๋๋ค. ์๋ง๋ mingw pthreads๊ฐ ๋ ์ ์๋ํ ๊ฒ์
๋๋ค. OMP_NUM_THREADS
๋ฅผ ์ค์ ํด๋ ํฐ ์ฐจ์ด๊ฐ ์๋ ๊ฒ ๊ฐ์ต๋๋ค.
๋๋ ATLAS 3.11์ด 3.10 ๋ฒ์ ๋ณด๋ค 64๋นํธ์์ ํจ์ฌ ๋ ์ํด์ผ ํ๋ค๊ณ ์๊ฐํ์ง๋ง Clint Whale์ ๋์์ ๊ธฐ๋ํ๋ฉด์ ํ์ฌ๋ก์๋ ๋น๋ํ ์ ์์ต๋๋ค.
Tony - 32๋นํธ ATLAS ํ ์ ํ ์คํธํ ์๊ฐ/์๋์ง๊ฐ ์๋ค๊ณ ์๊ฐํ์ญ๋๊น? ์๋์ ์ผ๋ก ํจ์ฌ ๋ ์ํด์ผํฉ๋๋ค.
๋ด ์์ ์ ์ ํธ๋๋ ์ด ATLAS ํ ์ ์ฌ์ฉํ๋ ๊ฒ์ด๋ฏ๋ก ๋ค๋ฅธ ํฌ์ฅ์ ์๊ฐ ์ผ์ข ์ ํ ๋ฐฐ์ก์ ์์กดํ ์ ์์ต๋๋ค. ์ฑ๋ฅ์ ๊ฐ์ ํ ์ ์๋ ์ข์ ๋ฐฉ๋ฒ์ ์ฐพ์ผ๋ฉด ๊ณง ์๋ก์ด numpy ๋ฆด๋ฆฌ์ค๊ฐ ๋์ฌ ๊ฒ์ด๋ฉฐ 1.10.4์์๋ ํ ์ ์ ๋ฐ์ดํธํ๊ธฐ ์ํด ํญ์ ์ ์ง ๊ด๋ฆฌ ๋ฆด๋ฆฌ์ค๋ฅผ ์ํํ ์ ์์ต๋๋ค.
@matthew-brett : ๋น ๋ฅธ ์ง๋ฌธ์
๋๋ค. numpy
๊ฐ Cygwin์์ ATLAS
๋น๋๋ฅผ ๊ฐ์งํ์ง ๋ชปํ๋ ์ด์ ๋ ๋ฌด์์
๋๊น? ๋ค์ดํฐ๋ธ Windows ํ๊ฒฝ์์๋ ์๋ฒฝํ๊ฒ ๊ฐ์งํ ์ ์์์ง๋ง Cygwin์์ ์คํฌ๋ฆฝํธ๋ฅผ ์คํํ๋ ค๊ณ ํ์ ๋ numpy
๊ฐ ATLAS
๋ก ์ปดํ์ผ๋์ง ์์์ต๋๋ค.
Cygwin์ python์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ํธํ์ฑ์ ์ํด cygwin์์ ๋น๋ํ ์ํ๋ผ์ค ๋ฒ์ ์ด ํ์ํ ์ ์์ต๋๋ค.
32๋นํธ Julia๋ 32๋นํธ Atlas dll์ ์ด์ง ๋ชปํ๋ ๊ฒ ๊ฐ์ต๋๋ค. ์ด์ ๋ ๋ชจ๋ฅด๊ฒ ์ง๋ง ์ด๋ฏธ 32๋นํธ Openblas๊ฐ ์๊ณ ๊ธฐํธ ์ด๋ฆ์ด ์ถฉ๋ํ๊ธฐ ๋๋ฌธ์ผ ์ ์์ต๋๋ค.
ํ์ง๋ง @matthew-brett ๋ฒ์ ์ Cygwin์ผ๋ก ๋น๋๋์๊ธฐ ๋๋ฌธ์ ํผ๋์ค๋ฝ์ต๋๋ค.
mingw ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ๊ต์ฐจ ์ปดํ์ผ๋ Cygwin ๋น๋ ํ๊ฒฝ. cygwin1.dll์ด ์๋ msvcrt.dll์ ์ด๋ป๊ฒ ์ฐ๊ฒฐ๋์ด ์๋์ง ํ์ธํ์๊ฒ ์ต๋๊น?
๋๊ธ์ ์ฌ๋ฆฌ์๋ง์ ๊ฐ์๊ธฐ ๊ทธ๊ฒ ์๋๊น ํ๋ ์์ฌ์ด ๋ค์์ต๋๋ค. ์์, ์ฒ์๋ถํฐ ๋ง๋ค์ด์ผ ํ ๊ฒ ๊ฐ์ต๋๋ค. @tkelman ๊ฐ์ฌํฉ๋๋ค!
dlopen ๋ฌธ์ ๊ฐ ํ์ ๋์์ต๋๋ค(https://github.com/matthew-brett/np-wheel-builder/pull/1 ์ฐธ์กฐ ๋ฐ https://github.com/JuliaLang/julia/issues/15117 ์ฐธ์กฐ). ์ค๋ฅ ๋ฉ์์ง).
32๋นํธ์์ ์ํ๋ผ์ค๋ ์คํ๋ธ๋ผ์ค๋ณด๋ค 3.6๋ฐฐ ๋๋ฆฝ๋๋ค. 32๋นํธ openblas๋ ๋์ผํ ํฌ๊ธฐ ๋ฌธ์ ์ ๋ํด 64๋นํธ openblas๋ณด๋ค 3๋ฐฐ ๋๋ฆฝ๋๋ค. ์ต์ ์ปค๋ ์ ํ๊ตฐ์ 32๋นํธ ์์คํ ์ openblas์์ ํ์ฑํ๋์ง ์์ต๋๋ค.
...
๊ฒฐ๋ก : ์ต์ ์ ์ ํ์ด ๋ฌด์์ธ์ง ์ง์งํ๊ฒ ๋ชจ๋ฅด์ง๋ง BLIS ๋ฌผ์ ๋ฐ๊ฐ๋ฝ์ ๋ด๊ทธ๋ ๊ฒ์ด ์ข์ ์๊ฐ์ธ ๊ฒ ๊ฐ์ต๋๋ค. ์ฐ๋ฆฌ๊ฐ ๊ธฐ๋ค๋ฆฌ๊ธฐ๋ก ๊ฒฐ์ ํ๋๋ผ๋ ์ฐ๋ฆฌ๋ ์ ์ด๋ ๋ฌด์ธ๊ฐ๋ฅผ ๋ฐฐ์ธ ๊ฒ์ ๋๋ค.
์ ์ด๋ ์ผ๋ถ ํ
์คํธ/๋ฒค์น๋งํน์ ์ ์ฉํ ๊ฒ์
๋๋ค. ๊ทธ๋ฌ๋ ์ด ์์ ์์๋ _Windows_ ๋ฌธ์ ์ ๊ฑฐ์ ๊ด๋ จ์ด ์์ต๋๋ค. BLIS๋ ํ์ฌ Linux ์ ์ฉ์
๋๋ค. OSX ๋น๋ ์ง์์ ์ํ ๊ณต๊ฐ PR์ด ์์ผ๋ฉฐ Windows๋ ๋งค์ฐ ๋ฉ๋ฆฌ ๋จ์ด์ ธ ์์ต๋๋ค. ๋๊ตฐ๋ค๋ ์ด์ 32๋นํธ Linux์์ ์๋ํ์ง๋ง ์๋ํ์ง ์์ต๋๋ค. ./configure auto && make
์ผ๋ถ ์ด์
๋ธ๋ฌ ์ฝ๋( sandybridge
)์์ ๋์ฐํ๊ฒ ์ถฉ๋ํฉ๋๋ค. reference
๋ง ๋ง๋ค ์ ์์ต๋๋ค.
๋ฐ๋ผ์ 0๋จ๊ณ๋ numpy.distutils
์ BLIS ์ง์์ ์ถ๊ฐํ๋ ๊ฒ์
๋๋ค(๋๋ถ๋ถ ์ด๋ฏธ ์๋ํจ). 1๋จ๊ณ๋ Linux์์ ํ
์คํธํ์ฌ reference
์ด์์ด ์๋ํ๋์ง ํ์ธํ๊ณ 2๋จ๊ณ๋ ๋ฒค์น๋งํน, ..., ๋จ๊ณ
@matthew-brett PyPI์ ๋ํด ์ ์ํ ํ
์คํธ๊ฐ ๊ด์ฐฎ์ ๊ฒ ๊ฐ์ต๋๋ค. ์ด๋ค pip
๋ฒ์ ์ด ABI ํ๊ทธ๊ฐ ์๋ ์ด๋ฆ์ ๋ฌด์ํฉ๋๊น? Pip์ ์์ฆ ์ค์ค๋ก๋ฅผ ์
๊ทธ๋ ์ด๋ํด์ผ ํ๋ค๊ณ ์์๋ฆฌ๋ฅผ ๋ง์ด ํ๋ฏ๋ก ๋ง์ ์ฌ๋๋ค์ด ์ต์ ๋ฒ์ ์ ์ฌ์ฉํ๊ธฐ๋ฅผ ๋ฐ๋๋๋ค. ๊ทธ๋ฆฌ๊ณ >1(.5)๋
๋ ๋ฒ์ ์ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ฐํด๋ฅผ ์ค์นํ์ง๋ ์์์ต๋๋ค.
@rgommers ์์ ํ ์คํธ๋ Windows์์ ์ํ๋์์ต๋๋ค. MSVC๋ ์๋์ง๋ง mingwpy ๋๋ openblas๋ ํฌ๊ฒ ๋ค๋ฅด์ง ์์ต๋๋ค. clang์ ์๋ง๋ ์๋ํ์ง๋ง ์ฌ๋ณผ๋ฆญ ๋งํฌ๋ฅผ ํผํ๊ธฐ ์ํด blis์์ repo ์ฌ๊ตฌ์ฑ์ด ํ์ํฉ๋๋ค.
๋๋ blis์ ๋ํด Julia ๋๋ numpy์ ํ ์คํธ๋ฅผ ์คํํ์ง ์์์ง๋ง blis๋ ์์ฒด ๋จ์ ํ ์คํธ๋ฅผ ํต๊ณผํ๊ณ ์์์ต๋๋ค. 2014๋ ์ ๊ฒฝํ๋ณด๋ค ์ํฉ์ด ํจ์ฌ ๋์์ ธ์ ๊ทธ๋ ๊ฒ ๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ์ต๋๋ค. ์ฌ์ ํ ๋ฉํฐ์ค๋ ๋ฉ์ด ์ ๋๋ก ์๋ํ๋๋ก ํ๋ ๋ฐฉ๋ฒ์ ์์๋ด์ผ ํ์ง๋ง ๊ทธ๊ฒ์ผ๋ก ์ด๋ฏธ ์ฑ๋ฅ ๊ฒฝ์๋ ฅ์ด ์๋ blis๊ฐ ์์ ์ ์์ต๋๋ค.
์ฐธ์กฐ ๊ตฌ์ฑ์ด ํ์ฌ 32๋นํธ x86์์ ์๋ํ๋ ์ ์ผํ blis์ธ ๊ฒ ๊ฐ์ต๋๋ค. ๊ทธ๋ ๊ฒ ํ๋ ค๋ฉด ์๋ก์ด ์ด์
๋ธ๋ฆฌ ๋ง์ดํฌ๋ก์ปค๋์ ์์ฑํด์ผ ํ ์๋ ์์ต๋๋ค. ์๋ njsmith์ ์๊ฒฌ์ ์ฐธ์กฐํ์ญ์์ค.
@tkelman , 32๋นํธ์ฉ OpenBLAS ์ปค๋ ๊ด๋ จ https://github.com/numpy/numpy/issues/5479#issuecomment -185096062: priv. ์ผ๋ง ์ ์ Werner Saar๋ก๋ถํฐ ๋ฐ์ ๋ฉ์์ง ์ต์ ์ํคํ ์ฒ์ฉ Intel 32๋นํธ ์ปค๋ ์์ ์ ํ๋ ์ฌ๋์ด ์์ต๋๋ค. ๋ฐ๋ผ์ ์ด๊ฒ์ ๋ฏธ๋์ ๋ณ๊ฒฝ๋ ๊ฐ๋ฅ์ฑ์ด ์๋ ์ฌ์ค์ ๋๋ค. ์ด์ ์ Intel 64๋นํธ ๋ฐ ARM ํ๋ก์ธ์์ ์์ต๋๋ค.
@tkelman , C-runtime ๊ด๋ จ https://github.com/numpy/numpy/issues/5479#issuecomment -185055210: IMHO ATLAS ๋ฐ OpenBLAS๊ฐ C-runtime(ํ์ผ ์ค๋ช ์ ๋ฐ ํ ). _์ ๊ฐ ์ณ์์ผ๋ฉด ํฉ๋๋ค_. ATLAS ๋น๋๊ฐ ์คํ ํฌ๊ธฐ๋ฅผ ๋๋ฆฌ๋ ๋ฐ ์ ์ฉํ ์ ์์ต๋๋ค. ์ด๊ฒ์ ์ฐ๊ฒฐํ๋ ๋์ ํ๋๊ทธ๋ก ์ ๊ณต๋ ์ ์์ต๋๋ค. ์:
-Wl,--stack,16777216
ํ ๋ก ATLAS ๋ OpenBLAS: @matthew-brett ๋๋ถ์ ์ด์ SSE2 ๊ธฐ๋ฐ ATLAS DLL์ ์ฌ์ฉํ ์ ์์ต๋๋ค. CPU ๋ฐํ์ ๊ฐ์ง๋ฅผ ๋นํ์ฑํํ๋ ค๋ฉด ์ด Atlas ๋น๋๋ฅผ SSE2 ์ง์ ๋์์ ๋ํ OpenBLAS ๋น๋์ ๋น๊ตํด์ผ ํฉ๋๋ค(๋๋ ๋จ์ํ OPENBLAS_CORETYPE=NORTHWOOD
์ค์ - ๊ธฐ๋ณธ์ ์ผ๋ก PENTIUM4). ๋ฌผ๋ก ์ผ๋ฐ OpenBLAS ๋น๋๋ CPU ๋ฐํ์ ๊ฐ์ง ๋๋ถ์ ํจ์ฌ ๋ ๋ง์ CPU ๋ณํ์ ์ด์ฉํ ์ ์์ต๋๋ค. ์ด๊ฒ์ด OpenBLAS๊ฐ ATLAS์ ๋นํด ์ฑ๋ฅ์ด ๋ ์ข์ ์ด์ ์ค ํ๋์
๋๋ค. ๋ ๋ค๋ฅธ ์ง๋ฌธ์ OpenBLAS์ ์ ๋ขฐ์ฑ์
๋๋ค. ์์ง๋ BLAS, LAPACK ํ
์คํธ๊ฐ ์๋ ์ ์ฅ์๊ฐ ๋์์ด ๋ ์ ์์ต๋๋ค.
BLIS/Flame ๊ด๋ จ: ํฅ๋ฏธ๋กญ์ง๋ง ์ ์ด๋ ์ค๋๋งํผ์ ๋์ด ๋งค๋ฌ๋ฆฐ ๊ณผ์ผ์ ๋๋ค.
๊ทธ๋ฌ๋ ATLAS์ OpenBLAS ์ค์์ ์ ํํ๋ ๋ฐฉ๋ฒ์ ๋ํ ๊ฒฐ์ ์ ๋์๊ฒ ๋ช ํํ์ง ์์ต๋๋ค.
Ralf - pip 8์ ์๋ก์ด Windows ABI ํ๊ทธ๋ก ํ ์ ์ค์นํ์ง๋ง pip 7์ ์ค์นํ์ง ์์ต๋๋ค. Pip 7 ๋ฐ Pip 8์ ๊ฒฝ๊ณ ์์ด ABI ํ๊ทธ ์์ด ๋ฐํด๋ฅผ ์ค์นํฉ๋๋ค.
์ฌ์ ํ ๋ง์ pip 7์ด ์์ผ๋ฉฐ 2015๋ 8์์ ์ถ์๋์์ต๋๋ค. ๋ฐ๋ผ์ ์ ์ด๋ ์ ์ ๋์์ ์ข ๋ ํธํ๋๋ ์ด๋ฆ์ ๊ณ ์ํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
BLIS ์กฐ์ฌ์ +1. ์ฅ๊ธฐ์ ์ผ๋ก ์ข์ ํด๊ฒฐ์ฑ ์ธ ๊ฒ ๊ฐ์ต๋๋ค. ์ฐ๋ฆฌ๋ Eigen์ ์ ํ ๊ณ ๋ คํ์ง ์์์ต๋๊น? ๋ถ๋ถ์ ์ธ LAPACK ์ธํฐํ์ด์ค ๊ตฌ์ถ์ ์ง์ํ๋ฉฐ ๋๋ถ๋ถ์ ์ฝ๋์ ๋ํ ๋ผ์ด์ ์ค๋ MPL2์ ๋๋ค. NumPy์ ์ถฉ๋ถํ ์ ์์ต๋๋ค.
๋๋ BLIS cpu ๊ฐ์ง ์ฝ๋์์ AVX ๋ช ๋ น์ด๋ฅผ ์ฐพ์ง ๋ชปํ๋ฉด ์ฐธ์กฐ ๊ตฌํ์ผ๋ก ๋์ฒด๋๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค๋ ๊ฒ์ ์์์ฐจ๋ ธ์ต๋๋ค.
Ian : ์ด๊ฒ์ 1๋ ์ ๋ ์ ์ Eigen ์ ์ํ์ ๋๋ค.
๋๊ตฐ๋ค๋ ์ด์ 32๋นํธ Linux์์ ์๋ํ์ง๋ง ์๋ํ์ง ์์ต๋๋ค.
./configure auto && make
๋ ์ผ๋ถ ์ด์ ๋ธ๋ฌ ์ฝ๋(sandybridge์ฉ)์์ ๋์ฐํ๊ฒ ์ถฉ๋ํฉ๋๋ค. ์ฐธ์กฐ๋ฅผ ๊ตฌ์ถํ ์๋ง ์์ต๋๋ค.
config/
์ ๋ด์ฉ์ ๋ณด๋ฉด -- "sandybridge", "haswell"๊ณผ ๊ฐ์ ๋ค์ํ ์ด๋ฆ์ "๊ตฌ์ฑ"์ ์ค์ ๋ก ๋ฏธ๋ฆฌ ์ง์ ๋ ์ค์ ์ ํฌํจํ๋ ์ฌ์ ํจํค์ง๋ "์คํํฐ" ๊ตฌ์ฑ์
๋๋ค. CPU ํ๋ ๊ด๋ จ ์ค์ ๋ฟ๋ง ์๋๋ผ ์ค๋ ๋ฉ ๋ชจ๋ ์ค์ , ์ปดํ์ผ๋ฌ ์ค์ ๋ฑ). ๊ทธ๋ฆฌ๊ณ "sandybridge"๋ผ๋ ๊ตฌ์ฑ์ x86-64 ๊ตฌ์ฑ์
๋๋ค. ์๋ ๊ตฌ์ฑ์์ ์ ํํ ๋ฒ๊ทธ์ฒ๋ผ ๋ค๋ฆฌ์ง๋ง x86-32์์๋ ์๋ํ์ง ์์ต๋๋ค :-). BLIS๋ 32๋นํธ x86 ์ปค๋๊ณผ ํจ๊ป ์ ๊ณต๋๋ ๊ฒ์ผ๋ก ๋ณด์ด์ง๋ง( kernels/x86
์ฐธ์กฐ) ํ์ฌ ์ฌ์ ํจํค์ง๋ ๊ตฌ์ฑ์์ ์ด๋ฅผ ์ฌ์ฉํ์ง ์๋ ๊ฒ ๊ฐ์ต๋๋ค. ์ ๊ตฌ์ฑ์ ๋ง๋๋ ๊ฒ์ ๋๋ถ๋ถ ๊ฐ๋จํฉ๋๋ค. ๋ง๋ฒ์ ํ ์กฐ๊ฐ์ bli_kernel.h
ํ์ผ์ ์์ผ๋ฉฐ ๋ด๋ถ ์ปค๋๊ณผ ๋ช ๊ฐ์ง ๋ฒํผ ํฌ๊ธฐ์ ์ด๋ฆ์ ์ง์ ํฉ๋๋ค. x86-32์ ๋ํ ์ ์ ์ฌํญ์ด ์์ผ๋ฉด ์
์คํธ๋ฆผ์ ๋ฌธ์ํ ์ ์์ต๋๋ค.
๋ํ:
BLIS๋ ํ์ฌ Linux ์ ์ฉ์ ๋๋ค. OSX ๋น๋ ์ง์์ ์ํ ๊ณต๊ฐ PR์ด ์์ผ๋ฉฐ Windows๋ ๋งค์ฐ ๋ฉ๋ฆฌ ๋จ์ด์ ธ ์์ต๋๋ค.
์์ ๋ช ๊ฐ์ง ์๊ฒฌ, @tkelman ์ Windows์์ BLIS๋ฅผ ๊ตฌ์ถํ๊ณ ๋ฒค์น๋งํนํ๊ณ ์์ต๋๋ค :-)
OpenBLAS 0.2.12๋ฅผ ์ฌ์ฉํ ์ด์ ์์ test_dot
๋ฒค์น๋งํฌ:
In [2]: %timeit test_dot()
1 loop, best of 3: 449 ms per loop
(์ด์ ๊ฒฐ๊ณผ) MKL๊ณผ ๋น๊ต
In [9]: %timeit test_dot()
1 loop, best of 3: 764 ms per loop
64๋นํธ ATLAS:
In [10]: %timeit test_dot()
1 loop, best of 3: 2.41 s per loop
๋ฐ๋ผ์ Openblas์ MKL(๊ณ ๋ง์์, conda)์ Haswell BLIS ๊ตฌ์ฑ๊ณผ ์ง๋ ฌ๋ก ๋น๊ตํ ๋ ๋ชจ๋ dgemm์์ ์๋ก ์ต๋ 10-20% ๋ด์ ์์ต๋๋ค. ๋ค์์ ๊ฐ ๊ตฌ์ฑ์ Windows dll์ ๊ต์ฐจ ์ปดํ์ผํ๊ธฐ ์ํด ๋์ปค ํ๋ธ์ ์ฑ๊ณต์ ์ผ๋ก ๊ตฌ์ถ๋ ๋์ปค ํ์ผ์ ๋๋ค(์ ์ธ https://github.com/flame/blis/pull/37#issuecomment-185480513, ์ ๋๋ก ์ฐ๊ฒฐ๋์ง ์์ ๋ถ๋์ ์ ์ธ) : https://github.com/tkelman/docker-mingw/blob/09c7cadd5d682066cea89b3b97bfe8ba783bbfd5/Dockerfile.opensuse
Travis์ services: docker
๊ตฌ์ฑ๊ณผ ์ ์ฌํ ๊ฒ์ ์ฐ๊ฒฐํ๊ณ ๋ฐ์ด๋๋ฆฌ ์ํฐํฉํธ๋ฅผ github ๋ฆด๋ฆฌ์ค/bintray/๋ฌด์์ด๋ ๋ฐฐํฌํ๋ ์์
์ ์๋ํ ์ ์์ต๋๋ค.
BLIS CPU ๊ฐ์ง -> ํ ํ๋ฆฟ ์ฝ๋๋ฅผ ๋ณด๊ณ ์์์ต๋๋ค. https://raw.githubusercontent.com/flame/blis/master/build/auto-detect/cpuid_x86.c
๋ค์์ Python ์ฌ์์ฑ์ ๋๋ค. ๊ณ ๊ธ ํ ํ๋ฆฟ ์ค ํ๋๋ฅผ ์๋ฝํ๋ ๋ฐ ์กฐ๊ธ ๋ ์์ ๋ก์์ผ ํฉ๋๋ค(OS๊ฐ C ์ฝ๋๋ณด๋ค AVX๋ฅผ ์ฌ์ฉํ ์ ์๋ค๊ณ ๋ฏฟ์ ๊ฐ๋ฅ์ฑ์ด ๋ ๋์): https://gist.github.com/matthew-brett /a53778f99b7062cc332d
๋ด๊ฐ ํ ์คํธํ ๋ชจ๋ ์ปดํจํฐ์์ ์ด ์๊ณ ๋ฆฌ์ฆ์ '์ฐธ์กฐ'๋ฅผ ๋ฐํํฉ๋๋ค. ์๋ง๋ ๋ค๋ฅธ ์ฌ๋์ด ์ฌ์ฉํ๊ณ ์ถ์ง ์์ ์ค๋๋ ์ปดํจํฐ๋ฅผ ์ฌ์ฉํ์ฌ ๋น๋๋ด ํ์ ๊ตฌ์ถํ๊ธฐ ๋๋ฌธ์ผ ๊ฒ์ ๋๋ค.
lapack ์์ด ์ฐธ์กฐ BLIS์ ๋ํด numpy๋ฅผ ์ปดํ์ผํ๋ฉด ์์ ๋ฒค์น๋งํฌ์์ ๋ค์์ ์ป์ ์ ์์ต๋๋ค.
In [6]: %timeit test_dot()
1 loop, best of 3: 16.2 s per loop
๋ ๋ฐฐ์ด(1000, 1000)์ ๋ด์ ์ 12์ด์ ๋๋ค. ๋ฐ๋ผ์ Tony๋ ๋ฐ๊ฒฌํ ๊ฒ์ฒ๋ผ ์ฐธ์กฐ BLIS๋ lapack_lite๋ฅผ ์ฌ์ฉํ๋ ๋์ผํ numpy์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์๋ ๊ธฐ๋ณธ ๋น๋์ ๊ด๋ จ๋ ์ต์ ์ ์ต์ ์ ๋๋ค.
๋ฐ๋ผ์ ๊ด๋ฒ์ํ ์์คํ ์์ ํฉ๋ฆฌ์ ์ธ ์ฑ๋ฅ์ ์ ๊ณตํ๋ ค๋ฉด ๊ตฌํ ์์คํ ์ ๋ค๋ฃจ๋ ๋ ๋ง์ ํ ํ๋ฆฟ์ด๋ ๋ ์์ ๋ก์ด CPU ๊ฐ์ง -> ํ ํ๋ฆฟ ๋งคํ์ด ํ์ํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
@matthew-brett ์ธ์ ์๋ก์ด ATLAS 64๋นํธ Windows ํ ์ด ๋์ฌ ๊ฒ์ผ๋ก ์์ํ ์ ์์ต๋๊น? ์ด๋ค ๋ฒ์ ? v1.10.2? ๊ทธ๋ค์ pypi์๋ง ์์ต๋๊น ์๋๋ฉด ์์ค ํฌ์ง์๋ง ์์ต๋๊น? ์ด๋ค ๋ฐํ๋ผ๋ ํ์ค ๊ฑด๊ฐ์? ์ ๋ง ๊ฐ์ฌํฉ๋๋ค!
@matthew-brett ๊ฐ์ ๊ธฐ๊ณ์์ ์ํ๋ผ์ค์ ์ฐธ์กฐ ๋ธ๋ฆฌ์ค์ ๋น์จ์ ์ผ๋ง์๋์? ๋ด๊ฐ๋ณด๊ณ ์๋ ์ฝ 2์ ์์์ ๋น๊ตํ ์ ์์ต๋๊น? blis์์ ์๋ํ๋๋ก ๋ฉํฐ์ค๋ ๋ฉ์ ์ป์์ต๋๋ค. ์ ๋๋ก rtfmํ์ง ์์์ต๋๋ค(https://github.com/flame/blis/wiki/Multithreading). ์๋์ผ๋ก ํ์ฑํ๋์ง ์๊ณ 4๊ฐ์ ๋ค๋ฅธ ํ๊ฒฝ ๋ณ์๊ฐ ์์ต๋๋ค. . ์ด ํจ์น https://gist.github.com/0fc9497a75411fcc0ec5 ๋ฅผ ์ฌ์ฉํ์ฌ ๋ชจ๋ ๊ตฌ์ฑ์ ๋ํด pthreads ๊ธฐ๋ฐ ๋ณ๋ ฌ blis๋ฅผ ํ์ฑํํ๊ณ BLIS_JC_NT=1 BLIS_IC_NT=2 BLIS_JR_NT=2 BLIS_IR_NT=2
์ค์ ํ๋ฉด Haswell blis๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ด ์ปดํจํฐ์ mkl ๋ฐ openblas์ ์ฐ๊ฒฐ๋ฉ๋๋ค. BLIS_JR_NT
2๋ก ์ค์ ํ๋ฉด ๋ณ๋ ฌ ์ฐธ์กฐ blis๊ฐ ๋๋ถ๋ถ์ ๋ฐฉ๋ฒ์ผ๋ก ์ํ๋ผ์ค๋ฅผ ๋ฐ๋ผ์ก๊ณ 3๊ฐ์ ์ค๋ ๋๋ก ๋ ๋น ๋ฆ
๋๋ค.
@tkelman IMO NumPy GitHub Wiki ํ์ด์ง์์ BLIS์ ๋ํ ์งํ ์ํฉ์ ๋ฌธ์ํํ ์ ์๋ค๋ฉด ์ ์ฉํ ๊ฒ์ ๋๋ค. ๋ํ NumPy-BLIS-FLAME ํ (๋ฐ ๊ฐ๋ฅํ๋ค๋ฉด SciPy-BLIS-FLAME ํ )์ ๋ง๋ค๊ธฐ ์ํด mingwpy์ ์ ์ฌํ ๊ณํ์ ์ ์ํ๋ ๊ฒ๋ ํฅ๋ฏธ๋ก์ธ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
@tkelman : ๋ด๊ฐ ๋ช
ํํ ํ๊ธฐ ์ํด -- ๋น์ ์ ์ํ๋ผ์ค๋ ์ฐ๋ ๋๋์ด ์์ง ์์ต๋๊น?
๊ณ ๋ คํด์ผ ํ ๋ ๋ค๋ฅธ ์ฌํญ์ -msse2
๋๋ reference
๋น๋ ์ค์ ๊ณผ ์ ์ฌํ ๊ฒ์ ์ถ๊ฐํ๋ ๊ฒ์
๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ์ต๋๋ก ํธํ๋๋ฉฐ ์ปดํ์ผ๋ฌ๊ฐ SSE๋ฅผ ์ฌ์ฉํ๋๋ก ํ์ฉํ์ง ์์ง๋ง ์ ์ด๋ numpy-land ๋๋ ๋ค๋ฅธ ์ด์ ๋ก ์ด์จ๋ ์ง์๋๋ ์ต์ ๊ตฌ์ฑ์ผ๋ก SSE2๋ฅผ ์ง์ํ๋ค๋ ๊ฒ์ ์๊ณ ์์ต๋๋ค...
FLAME์ด ํ์ฌ ์ผ๋ฐ LAPACK๊ณผ ๊ด๋ จ์ด ์๋์ง ์๋์ง ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ๋ฌป๊ณ ์ถ์ต๋๋ค.
์๋ง๋ ์ฐ๋ฆฌ๋ ์ด ๋ฌธ์ ๋ฅผ ๊ณ์ ๋ณต์กํ๊ฒ ๋ง๋๋ ๋์ BLIS ๋ฌธ์ ์ ๋ํ ์๋ก์ด ๋ฌธ์ ๋ฅผ ์ด์ด์ผ ํ ๊ฒ์ ๋๋ค :-)
์ด ์ค๋ ๋์ ๊ฒฝ์ฐ - BLIS๊ฐ ๋น๋ ํ์์ ์ฌ์ฉํ๋ ๊ฒ๊ณผ ๋์ผํ ๊ท์น์ ์ฌ์ฉํ์ฌ ๋ฐํ์์ ์ ํ๋ ๋ค์ํ BLIS ์ปค๋๊ณผ ํจ๊ป ํ ์ ์ด๋ฏธ ์ถํํ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. Windows์ 64๋นํธ ATLAS๊ฐ ํนํ ๋์จ์๋ ๋ถ๊ตฌํ๊ณ (ATLAS์ ๊ฒฝ์ฐ) 64๋นํธ ATLAS๋ณด๋ค ์ฑ๋ฅ์ด ๋จ์ด์ง๋๋ค.
๊ทธ๋ฌ๋ - ์ฐธ์กฐ ๋น๋๊ฐ 64๋นํธ ATLAS๋ณด๋ค ๋น ๋ฅธ ๊ฒฝ์ฐ - ์๋ฅผ ๋ค์ด -msse2์ ๊ฐ์ด - ์ค์ ์ต์ ์ด ๋ ๊ฒ์ ๋๋ค.
SSE2๋ 64๋นํธ์ฉ ์ต์ ๊ตฌ์ฑ์ด๋ฏ๋ก ์ฐธ์กฐ ์ปดํ์ผ์ -mfpmath=sse -msse2
์ ๊ฐ์ ๊ฒ์ ์ฌ์ฉํ๋ ๊ฒ์ด ์์ ํฉ๋๋ค.
์๋ง๋ ์ฐ๋ฆฌ๋ ์ด ๋ฌธ์ ๋ฅผ ๊ณ์ ๋ณต์กํ๊ฒ ๋ง๋๋ ๋์ BLIS ๋ฌธ์ ์ ๋ํ ์๋ก์ด ๋ฌธ์ ๋ฅผ ์ด์ด์ผ ํ ๊ฒ์ ๋๋ค :-)
๊ทธ๊ฒ์ ์ข์ ์๊ฐ์ด ๋ ๊ฒ์ ๋๋ค(ํธ์ง: https://github.com/numpy/numpy/issues/5479#issuecomment-184472378์์ ์๋์ ๋ํ @njsmith ์ ๊ฐ์ ์ ๊ฐ์ํ ๋ "Occupy BLIS"๋ผ๋ ์ ๋ชฉ์ ์ ์ํด๋ ๋ ๊น์?) . @matthew-brett์ด ๊ธฐ์กด Atlas ํ ์ ์ ๋ก๋ํ๋ ๊ฒ์ผ๋ก ์งํํ๋ฉด ํ์ฌ๋ก์๋ ์ด ํ ์ ๋ซ๋ ๋ฐ ์ถฉ๋ถํ ๊ฒ์ด๋ฉฐ ํฅํ ์์ ์ ์๋ก์ด ๋ฌธ์ ์ ๋งก๊ฒจ์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
ํ์คํ ํ๊ธฐ ์ํด -- ๋น์ ์ ์ํ๋ผ์ค๋ ์ฐ๋ ๋๋ก ๋์ด ์์ต๋๋ค. ๋ง์ฃ ?
๋ด ์ง๋์ฑ ์ https://github.com/matthew-brett/np-wheel-builder/tree/d950904f19309db103e676d876ea681b6a6b882e/atlas-builds ์ dll์ด์ง๋ง ์์ง 1๊ฐ ์ด์์ ์ค๋ ๋๋ฅผ ์ฑ๊ณต์ ์ผ๋ก ์ฌ์ฉํ๋ ๊ฒ์ ๋ณด์ง ๋ชปํ์ต๋๋ค. ํ๊ฒฝ ๋ณ์๊ฐ ๋๋ฝ๋์์ต๋๊น?
๊ณ ๋ คํด์ผ ํ ๋ ๋ค๋ฅธ ์ฌํญ์
-msse2
๋๋reference
๋น๋ ์ค์ ๊ณผ ์ ์ฌํ ๊ฒ์ ์ถ๊ฐํ๋ ๊ฒ์ ๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ์ต๋ํ ํธํ๋๋ฉฐ ์ปดํ์ผ๋ฌ๊ฐ SSE๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ํ์ฉํ์ง ์๋ ๊ฒ์ฒ๋ผ ๋ณด์ ๋๋ค.
SSE2๋ x86_64 ์ฌ์์ ์ผ๋ถ์ด๋ฏ๋ก 32๋นํธ์์๋ง ๊ด๋ จ์ด ์์ต๋๋ค. Julia์์๋ 32๋นํธ ๋น๋์ -march=pentium4
๋ฅผ ์ถ๊ฐํฉ๋๋ค.
FLAME์ด ํ์ฌ ์ผ๋ฐ LAPACK๊ณผ ๊ด๋ จ์ด ์๋์ง ์๋์ง ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ๋ฌป๊ณ ์ถ์ต๋๋ค.
์์ง ๋ถ๊ฝ์ ๋ง์ง์ง๋ ์์์ง๋ง ๊ฐ์ง๊ณ ๋ ๊ฐ์น๊ฐ ์์ต๋๋ค. ๊ฒฐ๊ตญ mingwpy์ ๋ํ ๋ฐฑ์ ๊ณํ ๋์์ผ๋ก WINdows Clang์ ์ฌ์ฉํ ์ ์์ต๋๋ค. (ํธ์ง: ์ค์ ๋ก ์ด๊ฒ์ scipy์์ ํฌํธ๋์ ์์ ํ์ง ์์ผ๋ฏ๋ก ์๋ ์๋ ์์)
@matthew-brett: (ํ๋ฆด ์ ์์) dunnington
์ปค๋์๋ SSE3๋ง ํ์ํ๋ฉฐ Steam ํ๋์จ์ด ์ค๋ฌธ์กฐ์ฌ์ ๋ฐ๋ฅด๋ฉด ์์คํ
์ 99.94%(SSE2์ ๊ฒฝ์ฐ 99.99%)์ ์กด์ฌํ๋ค๊ณ ์ฃผ์ฅํฉ๋๋ค. ๋ฐ๋ผ์ ๋๋ค์์ ์์คํ
์ด ์ด๋ฅผ ์ฒ๋ฆฌํ ์ ์๋ค๋ ๊ฒ์ ๋ฐ๊ฒฌํ๋ฉด ์๋ชป๋ ๊ฒ ๊ฐ์ต๋๋ค. ๊ทธ๊ฒ์ด cpuid ์ฝ๋์ ๋ฒ๊ทธ์ธ์ง, ์ด๋ป๊ฒ ๋ ์ ๋ง ๋ํ์ฑ์ด ์๋ ํ
์คํธ ์์คํ
์ธํธ๋ฅผ ๊ฐ๊ณ ์๋์ง, ๋๋ ์ ์ดํด๋ก๋ ์ปค๋์ด ํ์๋ก ํ๋ ๊ฒ.
์์ ์์ง์์ CPU ๊ฐ์ง ์ฝ๋์ Python ์ฌ์์ฑ์ ๊ฒ์ํ์ต๋๋ค. ํ ํ๋ฆฟ ์ ํ์ ๋ณด์์ ์ด๋ฉฐ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ค๋ฅธ ํ ํ๋ฆฟ์ด ์๋ํ์ ์ ์๋ ์์น๋ฅผ ์ฐธ์กฐํ๋๋ก ์ค์ ๋์ด ์์ต๋๋ค.
BLIS์ ์ฐ๊ฒฐํ๋ ค๋ฉด ๋ค์๊ณผ ๊ฐ์ site.cfg
๊ฐ ํ์ํ์ต๋๋ค.
[blas]
blas_libs = numpy-blis-reference
library_dirs = c:\code\blis\test\lib
include_dirs = c:\code\blis\test\include
๋๋ ๋ํ ์ด๊ฒ์ํ๊ณ ๊ทธ๊ฒ์ด ํ์ํ๋ค๊ณ ๊ฐ์ ํฉ๋๋ค (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):
CPU์ ๋ฐํ์ ๊ฐ์ง๋ฅผ ํ์ฉํ๋ ์ ํธ๋ฆฌํฐ: https://github.com/matthew-brett/x86cpu
์ด๊ฒ์ด numpy ์์ฒด์ ํฌํจ๋ ์ ์๋ ํ๋ณด์ผ ์ ์์ง๋ง ์ปดํ์ผ๋ ๋จ์ผ cpuinfo
๋ชจ๋์ Windows ํ ์ numpy ํธ๋ฆฌ์ ๋ณต์ฌํ ์๋ ์์ต๋๋ค.
์๋ ๋ชจ๋. ์๊ฐ: ๋ค์ํ ๋ฒกํฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ๋น๋๋ ์ฌ๋ฌ ๊ฐ์ ๋ค๋ฅธ numpy ํ ์ ๊ฒ์ํ๋ ค๋ฉด ๋ค๋ฅธ PyPI ํจํค์ง ์ด๋ฆ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
Gohlke์ ๋ฐํด๋ฅผ ์ ๋ก๋ํ๋ ค๊ณ 2๊ฐ๋ฅผ ๋ฑ๋กํ์ง๋ง PyPI์์ ๊ฑฐ๋ถํ์ต๋๋ค. URL์ ์ค์ ๊ฒ์ ํ์ํฉ๋๋ค.
gh-7294๋ numpy.distutils
์ BLIS ์ง์์ ์ถ๊ฐํฉ๋๋ค. ๋๊ตฐ๊ฐ ์ด๊ฒ์ด ์์๋๋ก ์๋ํ๋์ง ํ์ธํ ์ ์๋ค๋ฉด ์ข์ ๊ฒ์
๋๋ค.
์ฌ์ ํ ๋ง์ pip 7์ด ์์ผ๋ฉฐ 2015๋ 8์์ ์ถ์๋์์ต๋๋ค. ๋ฐ๋ผ์ ์ ์ด๋ ์ ์ ๋์์ ์ข ๋ ํธํ๋๋ ์ด๋ฆ์ ๊ณ ์ํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
Pip 7.0์ ์์ง ๊ทธ๋ ๊ฒ ์ค๋๋์ง ์์์ผ๋ฏ๋ก ์๋ฏธ๊ฐ ์์ต๋๋ค.
... BLIS๋ 32๋นํธ x86 ์ปค๋๊ณผ ํจ๊ป ์ ๊ณต๋๋ ๊ฒ์ผ๋ก ๋ณด์ด์ง๋ง(kernels/x86 ์ฐธ์กฐ) ํ์ฌ ์ฌ์ ํจํค์ง๋ ๊ตฌ์ฑ์์ ์ด๋ฅผ ์ฌ์ฉํ์ง ์๋ ๊ฒ ๊ฐ์ต๋๋ค.
๊ทธ๊ฒ์ ๊ทธ๊ฒ์ ์ค๋ช ํฉ๋๋ค. ๊ฐ์ฌํฉ๋๋ค.
๊ฐ์ฌํฉ๋๋ค Ralf - ํ ์คํธํ๊ฒ ์ต๋๋ค.
๋๋ ์ด๊ฒ์ด ์๋ก์ด ์ฐ๋ ๋๋ฅผ ํ์๋ก ํ๋ค๋ ๊ฒ์ ์๊ณ ์์ง๋ง, ์ฐ๋ฆฌ๋ ์ด์ ๋ฆด๋ฆฌ์ค๋ฅผ ์ํด BLIS ๋น๋๋ฅผ ์ฌ์ฉํ ์ ์๋ ๊ฒ์ ๋งค์ฐ ๊ฐ๊น์ต๋๋ค.
์ง๊ธ ์ฐ๋ฆฌ์๊ฒ ํ์ํ ๊ฒ์ ATLAS 64๋นํธ Windows ๋น๋๋ณด๋ค ๋ค์ ๋น ๋ฅด๊ฒ ์๋ํ๋ SSE2๊ฐ ์๋ ์์คํ ๊ณผ SSE3์ด ์๋ ์์คํ ์ ๊ถ์ฅ๋๋ ํ ํ๋ฆฟ๋ฟ์ ๋๋ค.
๋๋ ์ด๊ฒ์ด ์๋ก์ด ์ฐ๋ ๋๋ฅผ ํ์๋ก ํ๋ค๋ ๊ฒ์ ์๊ณ ์์ง๋ง, ์ฐ๋ฆฌ๋ ์ด์ ๋ฆด๋ฆฌ์ค๋ฅผ ์ํด BLIS ๋น๋๋ฅผ ์ฌ์ฉํ ์ ์๋ ๊ฒ์ ๋งค์ฐ ๊ฐ๊น์ต๋๋ค.
์ด, ๊ธฐ์ ์ ์ผ๋ก ์๋ํ๊ฒ ๋ง๋๋ ๊ฒ์ด ๊ฐ๋ฅํ ์๋ ์์ง๋ง, ๊ทธ๋ ๊ฒ ๋ฒฝ ๋๋จธ๋ก ๋น๋๋ฅผ ๋์ง๋ ๊ฒ์ ์ฌ์ ํ โโ์ข์ ๊ณํ์ด ์๋๋๋ค. ์ฐ๋ฆฌ๋ ์์ง Linux๋ OS X์์ BLIS์ ๋ํ ์ง์งํ ํ ์คํธ์กฐ์ฐจ ํ์ง ์์์ต๋๋ค. ๋ฐ๋ผ์ Windows์์ BLIS FAQ๋ ๋ค์๊ณผ ๊ฐ์ด ๋งํฉ๋๋ค .
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.
, ํ์คํ ๋๋ฌด ์ด๋ฅด๋ค. ํ ์คํธ ์ธ์๋ ์ผ๋ถ ๋ฒค์น๋งํน๋ ์ข์ ์์ด๋์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
๋ฌผ๋ก ์ ๋๋ค. ํ์ง๋ง Tony๊ฐ ๋ณด์ฌ์ฃผ๋ฏ์ด ํฌ๋ก์ค ์ปดํ์ผ์ ์ฌ์ฉํ์ฌ Windows์ฉ BLIS๋ฅผ ๋น๋ํ๋ ๊ฒ์ ์ค์ ๋ก ์ด๋ ต์ง ์์ต๋๋ค. ์คํ์ ์ธ ๊ฒ์ - ๋ด ์๊ฐ์ - ์ฐ๋ฆฌ๊ฐ ์ฌ์ฉํ์ง ์๋ MSVC ๋น๋ ์์คํ ์ ๋๋ค.
์ง๊ธ์ Windows ํ ์ BLIS๋ฅผ ์ฌ์ฉํ ๊ฒ์ ์ ์ํ๊ณ ์์ง๋ง ๋ฌผ๋ก manylinux ๋น๋์์๋ ์๋ํ๋๋ก ํ๋ ๊ฒ์ด ๋งค์ฐ ์ข์ต๋๋ค.
ํ๊ท ์ ์ผ๋ก ์๋นํ ์ฑ๋ฅ ํฅ์์ ์ป์ง ๋ชปํ๋ค๋ฉด BLIS๋ฅผ ์ฌ์ฉํด์๋ ์ ๋๋ฉฐ ํ์ฌ๋ก์๋ ๋งค์ฐ ์๋ก์ด ํ๋ก์ธ์๋ฅผ ์ ์ธํ๊ณ ๋ ์ฌ์ฉํ์ง ์์์ผ ํ๋ค๋ ๋ฐ ์ ์ ์ผ๋ก ๋์ํฉ๋๋ค. ๊ทธ๊ฒ์ ๋ช ๊ฐ์ง ์๋ก์ด ํ ํ๋ฆฟ์ผ๋ก ๊ฐ๋จํ๊ฒ ๊ณ ์น ์ ์์ต๋๋ค. ๊ทธ๋ฐ ๊ฒฝ์ฐ์ธ์ง ์๊ณ ์ถ์ต๋๋ค.
์ ํ์ฑ์ ์ํด ๋๋ ๋์ํฉ๋๋ค. ๊ทธ๊ฑธ ๋ณด์ฌ์ฃผ๋ฉด ์ด๋
a) ๋ชจ๋ numpy ํ
์คํธ๋ ๋ชจ๋ ๋ฒ์ ์ Windows์์ ํต๊ณผํฉ๋๋ค.
b) ๋ชจ๋ numpy ๋ฐ scipy ํ
์คํธ๋ manylinux ์์คํ
์ ํต๊ณผํฉ๋๊น?
BLIS ํ ํ๋ฆฟ์ ๋ฐํ์์ ์ ํ ๊ฐ๋ฅํ๊ฒ ๋ง๋ค๊ณ ์ต์ ์์คํ ์์ ๋ชจ๋ ์ปค๋์ ํ ์คํธํ ์ ์์ต๋๋ค. ์ค๋๋ ๋ถ์พํ ๊ธฐ๊ณ์์๋ ํ ์คํธํ ์ ์์ต๋๋ค.
์ง๊ธ์ Windows ํ ์ BLIS๋ฅผ ์ฌ์ฉํ ๊ฒ์ ์ ์ํ๊ณ ์์ง๋ง ๋ฌผ๋ก manylinux ๋น๋์์๋ ์๋ํ๋๋ก ํ๋ ๊ฒ์ด ๋งค์ฐ ์ข์ต๋๋ค.
manylinux
๋ ๋ ์ค์ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ ์ฒด ์คํ์ด ์๋ ํจํค์ง ๊ด๋ฆฌ์์ ํจ์ฌ ๋ ์ฝ๊ฒ ์ปดํ์ผํ ์ ์๋ ์ฌ์ฉ์๊ฐ ์๊ธฐ ๋๋ฌธ์
๋๋ค. ์ด numpy + BLAS/LAPACK ์ปจํ
์คํธ์์ ๊ฑฑ์ ํ๊ธฐ ์ ์ ๋จผ์ ์ ์ฒด Manylinux ๊ฐ๋
์ด ์์๋๋ ๊ฒ์ ๋ด
์๋ค. :)
Windows์ ๊ฒฝ์ฐ ์ฐ๋ฆฌ์ ์ฐ์ ์์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
1) ์ ์ฒด ์คํ ์๋ฃจ์
(OpenBLAS/ATLAS/BLIS ์ค ํ๋์ ํจ๊ป MingwPy ํ์)
2) ์คํฑ๊ฐญ ๋ฐ์ด๋๋ฆฌ ํ (ATLAS ๋น๋์ ํจ๊ป ์ฌ๋ผ๊ฐ ์์ ์ธ ํ ์ด ์์ต๋๋ค)
3) (1)์ ์ฑ๋ฅ์ ์ฆ๊ฐ์ํจ๋ค. ์ฌ๊ธฐ์์ BLIS๊ฐ ๋ค์ด์ฌ ์ ์์ต๋๋ค.
๋ฐ๋ผ์ Windows์์ BLIS๋ฅผ ์ฌ์ฉํ์ฌ ํฌ๊ฒ ์๋๋ฅผ ํ์๊ฐ ์์ต๋๋ค.
ํ๊ท ์ ์ผ๋ก ์๋นํ ์ฑ๋ฅ ํฅ์์ ์ป์ง ๋ชปํ๋ค๋ฉด BLIS๋ฅผ ์ฌ์ฉํด์๋ ์ ๋๋ฉฐ ํ์ฌ๋ก์๋ ๋งค์ฐ ์๋ก์ด ํ๋ก์ธ์๋ฅผ ์ ์ธํ๊ณ ๋ ์ฌ์ฉํ์ง ์์์ผ ํ๋ค๋ ๋ฐ ์ ์ ์ผ๋ก ๋์ํฉ๋๋ค. ๊ทธ๊ฒ์ ๋ช ๊ฐ์ง ์๋ก์ด ํ ํ๋ฆฟ์ผ๋ก ๊ฐ๋จํ๊ฒ ๊ณ ์น ์ ์์ต๋๋ค. ๊ทธ๋ฐ ๊ฒฝ์ฐ์ธ์ง ์๊ณ ์ถ์ต๋๋ค.
๋์ํฉ๋๋ค. ์๋ฏธ๊ฐ ์์ผ๋ ค๋ฉด ์๋นํ ์ด๋์ด ์์ด์ผ ํฉ๋๋ค. ์ค์ ๋ก ์ผ๋ง๋ ๋ง์ ์์ ์ด ํ์ํ์ง ํ์ธํ๊ธฐ๊ฐ ์ฝ๊ฐ ์ด๋ ต์ต๋๋ค.
์ ํ์ฑ์ ์ํด ๋๋ ๋์ํฉ๋๋ค. ๊ทธ๊ฑธ ๋ณด์ฌ์ฃผ๋ฉด ์ด๋
a) ๋ชจ๋ numpy ํ ์คํธ๋ ๋ชจ๋ ๋ฒ์ ์ Windows์์ ํต๊ณผํฉ๋๋ค.
b) ๋ชจ๋ numpy ๋ฐ scipy ํ ์คํธ๋ manylinux ์์คํ ์ ํต๊ณผํฉ๋๊น?
๊ทธ ์ข์ ์๋ฆฌ. scikit-learn
๋ ํฌํจํ๋ ๊ฒ์ด ํฉ๋ฆฌ์ ์ด๋ฉฐ ์ด๋ ์๋นํ ์ค์ํ linalg ์ฌ์ฉ์์
๋๋ค.
๋๋ blis์ libflame์ด ์ผ๋ง ์ ์ ๊ณต๊ฐ๋ ACML ์ฝ๋๋ฒ ์ด์ค์ ์ผ๋ถ๋ผ๋ ๊ฒ์ ๋ชฐ๋์ต๋๋ค.
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/
๊ทธ๋ผ์๋ ๋ถ๊ตฌํ๊ณ : ์๋ง์ CPU ์ํคํ ์ฒ์์ ํ ์คํธํ MSVC ๋๋ mingwpy๋ฅผ ์ฌ์ฉํ์ฌ numpy/scipy ๋น๋์ ๋ํ 4๊ฐ์ง ๋ค๋ฅธ ๊ฐ์ BLAS/Lapack ๊ตฌํ์ ๋น๊ตํ๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ: Pentium4์์ skylake๊น์ง?
@carlk ๋ฅผ ์ ์ฐพ์์ต๋๋ค. acml ๋ฐ ์คํ ์์ค acl์ ์ญ์ ํ๋ค๊ณ ๋ฐํํ ๊ฒ์ ๊ธฐ์ตํ์ง๋ง blis/libflame์ ์ฑํํ ๊ฒ์ ๊ธฐ์ต๋์ง ์์ต๋๋ค. bsd ๋ผ์ด์ ์ค๋ ๋งค์ฐ ์ข์ ์์์ ๋๋ค! numpy์ Julia๋ฅผ ๋์์ผ๋ก ํ๊ธฐ ์ํด ut Austin์ AMD ๋ฐ shpc์ ํ๋ ฅํ ๋ฐฉ๋ฒ์ด ์์ต๋๊น?
msys2 ๋ฐ haswell ๊ตฌ์ฑ์ ์ฌ์ฉํ์ฌ libblis.a๋ฅผ ๊ต์ฐจ ์ปดํ์ผํ๊ณ ์ปค๋ ์ฌ๋ณผ๋ฆญ ๋งํฌ๋ฅผ ํจ์นํ์ฌ ๋ชจ๋ ํ ์คํธ๋ฅผ ํต๊ณผํ ์ ์์์ง๋ง libflame์ ๋น๋ํ ์ ์์์ต๋๋ค. ๋ด ํ๋ณต ํ ๋ก ๋ฉ์ผ ๋ง๋ฆฌ์คํธ ๊ฒ์๋ฌผ. ๋ํ ๊ฐ์ธ์ ์ผ๋ก lapack์์ libblis.a๋ก ์ฐ๊ฒฐํ๋ ๋ฐฉ๋ฒ์ ์ ์ ์์์ง๋ง ๊ทธ๋ค์ง ๋ ธ๋ ฅํ์ง ์์์ต๋๋ค.
MKL์ ์ปค๋ฎค๋ํฐ ๋ผ์ด์ ์ค๋ฅผ ์ฌ์ฉํ๋ฉด pypi์์ MKL ํ ์ ์ ๊ณตํ ์ ์์ต๋๋ค. ๋ผ์ด์ ์ค๊ฐ ์ค์ ๋ก ํธํ๋์ง ์์ต๋๊น? ์๋๋ฉด ifort ์์ด scipy๋ฅผ ๊ตฌ์ถํ๋ ๊ฒ์ด ๋ถ๊ฐ๋ฅํฉ๋๊น?
ํ ๊ฐ์ง ๋ฌธ์ ๋ ์๋ง๋ scipy์ ์ํ ๊ฒ์ ๋๋ค. ์ธ๊ธ๋์ง ์์ ๊ฒ์ scipy์ ๋๋จธ์ง Fortran ํ์ผ์ ๋๋ค. ๋ฉ์ฒญํ ์ง๋ฌธ์ ๋ํด ์ฃ์กํ์ง๋ง ์ ์ฐ๋ฆฌ๊ฐ ๊ทธ๊ฒ๋ค์ ์ฌ์ฉํด์ผ ํฉ๋๊น? ๋์๊ฒ Fortran๊ณผ ๋ฌด๋ฃ ๋ฉํฐํ๋ซํผ ์ปดํ์ผ๋ฌ์ ๋ถ์ฌ๊ฐ ์ฌ๊ธฐ์์ ์ง์ง ๋ฌธ์ ์ธ ๊ฒ ๊ฐ์ต๋๋ค. ๊ทธ๊ฒ์ด ๊ฒฐ๊ตญ mingwpy๊ฐ ํด๊ฒฐํ๊ณ ์ ํ๋ ๊ฒ ์๋๋๊น? ๋ฌด๋ฃ MKL์ด๋ ๋ฏธ๋์ ๋ง๋ฒ acl blis/flame์ด ์ฃผ์ด์ง๋ฉด c-์ปดํ์ผ๋ฌ๋ฅผ ๊ฐ์ง ์ฌ๋์ ๋๊ตฌ๋ scipy ์คํ์ ๋น๋ํ ์ ์์ง๋ง *.f ํ์ผ์ด ์๋๋๋ค.
@mikofski , blis๊ฐ msys2๋ก ์ปดํ์ผ๋ ์ ์๋ค๋ ์์์ ๋ฃ๊ฒ ๋์ด ๊ธฐ์ฉ๋๋ค. libflame๋ ๋ง์ฐฌ๊ฐ์ง์ธ๊ฐ์? Lapack API์ฉ libflame์ด ํ์ํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
๊ฐ์ธ์ ์ผ๋ก MSVC๋ฅผ numpy๋ก ์ปดํ์ผํ๊ณ mingwpy๋ก ์ปดํ์ผ๋ scipy์ ํจ๊ป ์ฌ์ฉํ๋ ๊ฒ์ด _๊ฐ๋ฅํฉ๋๋ค_. long double == double์ด ๋๋๋ก ํ๋ ค๋ฉด gcc ํ๋๊ทธ์ -mlong-double-64
๋ฅผ ์ถ๊ฐํด์ผ ํฉ๋๋ค.
์ด ๋์์ gcc์์ ๊ธฐ๋ณธ์ผ๋ก ์ค์ ํ๋ ๊ฒ์ ๊น๋ค๋กญ์ต๋๋ค. ์ ๋ ์ผ์ฃผ์ผ๋ถํฐ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ณ ์์ต๋๋ค.
๋ด์ผ์ scipy ๋ฐํด๋ฅผ ๊ฐ์ง๊ณ ์ฌ๊ฒ์. ์ด๊ฒ์ @matthew-brett์ numpy wheel์์ ์ ๊ณตํ๋ Atlas๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํฉ๋๋ค.
๊ทธ๋ผ์๋ ๋ถ๊ตฌํ๊ณ ์ ๋ ์ง๊ธ OpenBLAS๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ์ฐฌ์ฑํฉ๋๋ค.
ํ ๊ฐ์ง ๋ฌธ์ ๋ ์๋ง๋ scipy์ ์ํ ๊ฒ์ ๋๋ค. ์ธ๊ธ๋์ง ์์ ๊ฒ์ scipy์ ๋๋จธ์ง Fortran ํ์ผ์ ๋๋ค. ๋ฉ์ฒญํ ์ง๋ฌธ์ ๋ํด ์ฃ์กํ์ง๋ง ์ ์ฐ๋ฆฌ๊ฐ ๊ทธ๊ฒ๋ค์ ์ฌ์ฉํด์ผ ํฉ๋๊น?
๋งค์ฐ ์ ์ฉํ๊ณ ๊ณ ์ฑ๋ฅ์ธ ์ฝ๋๊ฐ ๋ง๊ธฐ ๋๋ฌธ์
๋๋ค. BLAS/LAPACK ๋ฟ๋ง ์๋๋ผ scipy.sparse.linalg
, scipy.linalg
, scipy.special
๋ฐ scipy.interpolate
๊ฐ ํฌํธ๋์
๋๋ค. ๋ํ Scipy๋ Fortran ์ฝ๋๊ฐ ์๋ ์ ์ผํ ํ๋ก์ ํธ๊ฐ ์๋๋ฉฐ bvp_solver์ ๊ฐ์ ๋ค๋ฅธ ํจํค์ง์ f2py ๋ก ๋ํํ ์ฌ๋๋ค์ Fortran ์ฝ๋๊ฐ ์์ต๋๋ค.
์ฌ์ค, Carl์ ์ ์ฐพ์์ต๋๋ค.
๊ทธ๋ผ์๋ ๋ถ๊ตฌํ๊ณ : ์๋ง์ CPU ์ํคํ ์ฒ์์ ํ ์คํธํ MSVC ๋๋ mingwpy๋ฅผ ์ฌ์ฉํ์ฌ numpy/scipy ๋น๋์ ๋ํ 4๊ฐ์ง ๋ค๋ฅธ ๊ฐ์ BLAS/Lapack ๊ตฌํ์ ๋น๊ตํ๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ: Pentium4์์ skylake๊น์ง?
์ด๊ฒ์ ์ค์ ๋ก ์ ์ ํ ์๋ํ๋ ๋น๋/ํ ์คํธ/๋ฒค์น๋งํฌ ํ๋ ์์ํฌ๊ฐ ํ์ํฉ๋๋ค. ์ฐ๋ฆฌ๋ ์์ฃผ ์ค๋๋ CPU ์ํคํ ์ฒ(๋ฌธ์ ๊ฐ ์๋ํ๋ ํ ๊ด์ฐฎ์)์ ์ ๊ฒฝ ์ธ ํ์๊ฐ ์์ผ๋ฉฐ MSVC๋ ๋ง์ฐฌ๊ฐ์ง๋ผ๊ณ ์๊ฐํฉ๋๋ค. ๊ทธ๋ฌ๋ ์ด๊ฒ์ ์ฌ๋ฐ๋ฅด๊ฒ ์ค์ ํ๋ ค๋ฉด ์ฌ์ ํ ์ฝ๊ฐ์ ์์ ์ด ํ์ํฉ๋๋ค.
@rgommers ๊ฐ์ฌํฉ๋๋ค!
์๋ ๋ชจ๋. ์๊ฐ: ๋ค์ํ ๋ฒกํฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ๋น๋๋ ์ฌ๋ฌ ๊ฐ์ ๋ค๋ฅธ numpy ํ ์ ๊ฒ์ํ๋ ค๋ฉด ๋ค๋ฅธ PyPI ํจํค์ง ์ด๋ฆ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
https://pypi.python.org/pypi/numpy/1.8.1 https://pypi.python.org/pypi/numpy-mkl https://pypi.python.org/pypi/numpy-atlas
Gohlke์ ๋ฐํด๋ฅผ ์ ๋ก๋ํ๋ ค๊ณ 2๊ฐ๋ฅผ ๋ฑ๋กํ์ง๋ง PyPI์์ ๊ฑฐ๋ถํ์ต๋๋ค. URL์ ์ค์ ๊ฒ์ ํ์ํฉ๋๋ค.
@hickford ์ ๋ฐ ๊ทธ๋ฌ์ง ๋ง์ธ์. ์ด์ ๊ฐ์ ๋ฐ์ด๋๋ฆฌ๋ฅผ ์ฌ๋ฐฐํฌํ๋ ๊ฒ์ MKL ๋ผ์ด์ผ์ค๋ฅผ ์๋ฐํ๋ ๊ฒ์ด๋ฉฐ(๊ฐ์ธ ๋ผ์ด์ผ์ค๊ฐ ์๋ ํ) ์ด๋ฅผ ์ํํ๋ ์ฌ๋ฐ๋ฅธ ๋ฐฉ๋ฒ์ด ์๋๋๋ค. ์์ผ๋ก๋ ์ถ๊ฐ ๊ธฐ๋ฅ( numpy[atlas]
, numpy[openblas]
๋ฑ)์ ํตํด ์ผ๋ถ ๋ง์ ๋ฐฐํฌํ ์ ์์ต๋๋ค.
๋ํ ๋ฌป์ง ์๊ณ PyPi์์ ๋ค๋ฅธ ์ฌ๋์ ๋ฐํด๋ฅผ ์ฌ๋ฐฐํฌํ๋ ๊ฒ์ ์๋ง๋ ํ ์ผ์ด ์๋ ๊ฒ์ ๋๋ค....
Mingwpy ๋ฐ CPython๊ณผ ๊ฐ์ C ๋ฐํ์์ ์ฐ๊ฒฐ์ ์์กดํ๋ ํฌํธ๋ ๋ฌธ์ ๋ ์๋๋ BLIS ํด๊ฒฐํ ์์๋ ๋ฌธ์ ์ ์ ๋ฌธ์ ์ ์คํ์ํ์ง๋ง, ๋๊ตฐ๊ฐ์ ์ํด ๋ ๋ฆฝ์ ์ผ๋ก ์ํ ํ ์ ์์ต๋๋ค, @carlkl์ ์ ํ๋ฉ๋๋ค. ๋ถํํ๋ ์ง๊ธ BLIS๋ฅผ ๋ณด๊ธฐ ์ํด ๊ฐ์ธ์ ์ธ ์๊ฐ์ ๋ค ์จ๋ฒ๋ ธ์ง๋ง #7294๋ฅผ ์ฐธ์กฐํ์ญ์์ค.
Tony - ๋์์ ์ฃผ์ ์ ๋๋จํ ๊ฐ์ฌํฉ๋๋ค.
64๋นํธ์ ์ต์ ATLAS(3.11.38) ๋น๋๋ฅผ ์ถ๊ฐํ์ต๋๋ค.
https://github.com/matthew-brett/np-wheel-builder
์ด๊ฒ์ Windows์์ 3.11.38์ ์ปดํ์ผํ๋ ๋ฐ ๋ฌธ์ ๊ฐ ์๊ธฐ ๋๋ฌธ์ ์ง๋ ฌ(์ค๋ ๋๋์ง ์์) ๋น๋์ด์ง๋ง 3.10.1๋ณด๋ค ์ฝ๊ฐ ๋ ๋นจ๋ผ์ผ ํ๋ฉฐ ๋ด ๊ฐ๋จํ ๋ฒค์น๋งํฌ์ ์์ต๋๋ค.
In [2]: %timeit test_dot()
1 loop, best of 3: 1.65 s per loop
์ด์ 3.10.1 ๋น๋์ ๋น๊ต(์ ์ฐธ์กฐ):
In [10]: %timeit test_dot()
1 loop, best of 3: 2.41 s per loop
@tkelman - Julia์์ ์ด ๋น๋๋ฅผ ๋ฒค์น๋งํนํ ์ ์์ต๋๊น?
MKL ๋ฐ์ด๋๋ฆฌ์ ๋ํ ์ฌ์ ๋ฉ๋ชจ๋ก ์ฌ๊ธฐ๋ก ๋ฐ์ด๋ค์ด์ ์ฃ์กํฉ๋๋ค. ์ธํ
์
๋ชจ๋์๊ฒ ๋ฌด๋ฃ์ด๋ฏ๋ก ์ฌ๋ฐฐํฌ๋ฅผ ํ์ฉํด์ผ ํ๋ ์ปค๋ฎค๋ํฐ ๋ฒ์ ...
2016๋
3์ 2์ผ ์คํ 3์ 88๋ถ์ "Matthew Brett" [email protected] ์ด ๋ค์๊ณผ ๊ฐ์ด ์ผ์ต๋๋ค.
64๋นํธ์ ์ต์ ATLAS(3.11.38) ๋น๋๋ฅผ ์ถ๊ฐํ์ต๋๋ค.
https://github.com/matthew-brett/np-wheel-builder
์ด๊ฒ์ 3.11.38 ์ปดํ์ผ ๋ฌธ์ ๋ก ์ธํด ์ง๋ ฌ(์ค๋ ๋๋์ง ์์) ๋น๋์ ๋๋ค.
Windows์์๋ 3.10.1๋ณด๋ค ์ฝ๊ฐ ๋ ๋นจ๋ผ์ผ ํ๋ฉฐ ๋ด ๊ฐ๋จํ
๊ธฐ์ค:[2]์์: %timeit test_dot()
๋ฃจํ 1๊ฐ, ์ต๊ณ 3๊ฐ: ๋ฃจํ๋น 1.65์ด์ด์ 3.10.1 ๋น๋์ ๋น๊ต(์ ์ฐธ์กฐ):
[10]์์: %timeit test_dot()
๋ฃจํ 1๊ฐ, ์ต๊ณ 3๊ฐ: ๋ฃจํ๋น 2.41์ด@tkelman https://github.com/tkelman - ์ด ๋น๋๋ฅผ ๋ฒค์น๋งํนํ ์ ์์ต๋๊น?
์ค๋ฆฌ์?โ
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ฑฐ๋ GitHub์์ ํ์ธํ์ธ์.
https://github.com/numpy/numpy/issues/5479#issuecomment -191431331.
@mrslezak - ๋ผ์ด์ผ์ค๋ ์ฌ๋ฐฐํฌ๋ฅผ ํ์ฉํ์ง๋ง ์ธํ ์ด ์ํํธ์จ์ด ์ฌ์ฉ์ ๊ฒฐ๊ณผ๋ก ์์ก์ ๋นํ๋ ๊ฒฝ์ฐ ์ฌ๋ฐฐํฌ์๊ฐ ๋ชจ๋ ๋ฒ์ ๋น์ฉ์ ๋ํด ์ฑ ์์ ์ง๊ฒ ํฉ๋๋ค. ๋ํ ๊ฒฐ๊ณผ ๋ฐ์ด๋๋ฆฌ๋ BSD ๋ผ์ด์ ์ค๋ฅผ ๋ฐ์ ์ ์์ต๋๋ค. ์ฐธ์กฐ: http://mingwpy.github.io/blas_lapack.html#intel -math-kernel-library
'์๋ ๊ทธ๋๋ก ์ ๊ณต๋๋ฉฐ ์ด๋ ํ ์ฑ
์๋ ์ง์ง ์์ต๋๋ค.
๊ทธ๊ฒ์ ์ฌ์ฉ์ผ๋ก ์ธํด ๋ฐ์ํ ์ ์๋ ๊ธ์ ์ ์์ค' ๋๋ ๊ทธ ์ํฅ์ ๋ํ ๊ฒ?
2016๋
3์ 2์ผ ์คํ 6์ 22๋ถ์ "Matthew Brett" [email protected] ์ด ๋ค์๊ณผ ๊ฐ์ด ์ผ์ต๋๋ค.
@mrslezak https://github.com/mrslezak - ๋ผ์ด์ผ์ค๊ฐ ํ์ฉํฉ๋๋ค
์ฌ๋ฐฐํฌํ์ง๋ง ๋ค์๊ณผ ๊ฐ์ ๊ฒฝ์ฐ ์ฌ๋ฐฐํฌ์๊ฐ ๋ชจ๋ ๋ฒ์ ๋น์ฉ์ ๋ํด ์ฑ ์์ ์ง๋๋ก ํฉ๋๋ค.
์ธํ ์ ์ํํธ์จ์ด ์ฌ์ฉ์ ๊ฒฐ๊ณผ๋ก ์์ก์ ๋นํฉ๋๋ค. ๋ํ ๊ทธ ๊ฒฐ๊ณผ
๋ฐ์ด๋๋ฆฌ๋ BSD ๋ผ์ด์ ์ค๊ฐ ๋ ์ ์์ต๋๋ค. ๋ณด๋ค:
http://mingwpy.github.io/blas_lapack.html#intel -math-kernel-libraryโ
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ฑฐ๋ GitHub์์ ํ์ธํ์ธ์.
https://github.com/numpy/numpy/issues/5479#issuecomment -191505500.
์ฐ๋ฆฌ๋ Intel์ ๋ผ์ด์ ์ค์ ๋์ํด์ผ ํ๊ธฐ ๋๋ฌธ์ ๊ทธ๊ฒ์ด ํจ๊ณผ๊ฐ ์์ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ์ง ์์ต๋๋ค. Intel์ ๋ผ์ด์ ์ค์๋ ์์ก์ ๋นํ ๊ฒฝ์ฐ ๋ฒ์ ๋น์ฉ์ ์ง๋ถํด์ผ ํ๋ค๊ณ ๋์ด ์์ต๋๋ค. ๋ผ์ด์ ์ค ๊ณ์ฝ์์ ์ฌ์ฉ์์๊ฒ ์ธํ ์ ๊ณ ์ํ์ง ์๋๋ก ์๊ตฌํ ์ ์์ผ๋ฉฐ, ๋ฐ๋ผ์ ์ฌ์ฉ์๊ฐ ์ธํ ์ ๊ณ ์ํ๊ณ ์ธํ ์ด ์ฐ๋ฆฌ์๊ฒ ๋์ ์๊ตฌํ๋ฉด ํด๋น ๋น์ฉ์ ๋ํด ์ฌ์ฉ์๋ฅผ ๊ณ ์ํ ์ ์์ต๋๋ค. ๋ผ์ด์ ์ค๋ ์ฐ๋ฆฌ๋ฅผ BSD์์ ๋ ๋ฉ๋ฆฌ ๋ฐ๋ ค๊ฐ ๊ฒ์ด๊ณ ์ฌ์ฉ์๊ฐ ๋ช ์์ ์ผ๋ก ๋์ํ๋๋ก ์๊ตฌํ ๊ฒ์ ๋๋ค. ์ด๋ pip์ ์ํด ์ค์น๋ ๋ฐํด์ ๊ฒฝ์ฐ ์ค์ฉ์ ์ด์ง ์์ต๋๋ค.
SSE3์ฉ ATLAS๋ฅผ ๋น๋ํ๋ฉด SSE2 ATLAS์ ๋นํด 5%์ ์ฑ๋ฅ ์ด์ ๋ง ์ ๊ณต๋์ง๋ง ๋น๋๊ฐ ๊น๋ค๋ก์ ๊ณ SSE3์ ๋ํด ๊ฐ์ฅ ๋ถ๋ช
ํ ํ์ฑํ ํ๋๊ทธ๋ฅผ ๋นํ์ฑํํ๊ณ -msse3
๋ง ์ฌ์ฉํด์ผ ํ์ต๋๋ค.
๋๋ ์ด ํ ์ ๋ฐฐํฌํ ๊ฒ์ ์ ์ํ๋ numpy ๋ฉ์ผ๋ง ๋ฆฌ์คํธ์ ๋ฉ์ผ์ ์ผ์ต๋๋ค. https://mail.scipy.org/pipermail/numpy-discussion/2016-March/075125.html
@matthew-brett Python ์์ฉ ํ๋ก๊ทธ๋จ์ผ๋ก Windows๋ฅผ ์ง์ํ๋ ์ฌ๋์ผ๋ก์ ๊ฐ์ฌํฉ๋๋ค.
@matthew-brett, ์ํ๋ผ์ค ๋น๋ ์คํฌ๋ฆฝํธ ์ ์ฅ์์ 2๊ฐ์ ๋ฌธ์ ๋ฅผ ์ถ๊ฐํ์ต๋๋ค.
https://github.com/matthew-brett/atlas-build-scripts/issues ์ฐธ์กฐ
์ฒซ ๋ฒ์งธ https://github.com/matthew-brett/atlas-build-scripts/issues/1 ์ด ์ค์ํฉ๋๋ค. numpy-atlas.dll์ ๋ง์ ๊ธฐํธ๋ก ๋ด๋ณด๋ด๋ฏ๋ก ๊ฐ์ ธ์ค๊ธฐ๋ฅผ ํดํนํ์ง ์๊ณ mingwpy๋ฅผ ๋ ์ด์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋์๊ด.
@matthew-brett ๋ ์ด์ ๋ฒค์น๋งํน์ ํ๋๋ผ ์กฐ๊ธ ๋ฐ๋น ์ ์ฃ์กํฉ๋๋ค. ์ด์ ์ํ๋ผ์ค ๋น๋๊ฐ ๋ฉํฐ์ค๋ ๋์์ต๋๊น? ์ฌ๋ฌ ์ฝ์ด์์ ์ฒซ ๋ฒ์งธ ๋น๋๋ฅผ ์คํํ ์ ์์์ต๋๋ค. julia์ ๋ํด ์ ์์ง ๋ชปํ๋๋ผ๋ ์์ ์ ์คํํ๊ธฐ์ ๋งค์ฐ ๊ฐ๋จํด์ผ ํฉ๋๋ค. ์๋๋ฉด ์ก์ธ์คํ ์ ์๋ ๊ฒ๋ณด๋ค ์๋ก์ด ํ๋์จ์ด์ ์ฃผ๋ก ๊ด์ฌ์ด ์์ผ์ จ์ต๋๊น?
๊ฑฑ์ ํ์ง ๋ง์ญ์์ค. ๋ชจ๋ ๊ฒ์ ํฌ๊ธฐํ๊ณ ๋ฒค์น๋งํฌ๋ฅผ ์คํํ ๊ฒ์ด๋ผ๊ณ ๊ธฐ๋ํ์ง ์์์ต๋๋ค.
์ฌ์ค ๋ด ์ต์ ์ํ๋ผ์ค ๋น๋๋ ๋ฉํฐ์ค๋ ๋๊ฐ ์๋์์ต๋๋ค. ATLAS 3.11์ Windows์์ ์ค๋ ๋ฉ์ด ์๋ํ๋๋ก ํ๋ ค๋ฉด ๋ ๋ง์ ์์ ์ด ํ์ํฉ๋๋ค.
๋ฒค์น๋งํฌ์ ๊ฒฝ์ฐ ๊ทํ๊ฐ ์คํํ ๋ค๋ฅธ ๋ฒค์น๋งํฌ์ ๋น๊ตํ๋ ๊ฒ์ด ๋ ์ฌ์ธ ๊ฑฐ๋ผ๊ณ ์๊ฐํ๋๋ฐ Windows๊ฐ ์ผ์ง ์ค๋๋ ํ๋์จ์ด๋ง ์์ต๋๋ค. ์ ์ค๋ฅ ์ ๋ด ์ปดํจํฐ๋ณด๋ค ๊ทํ ์ปดํจํฐ์์ ํจ์ฌ ๋ ํฝ๋๋ค.
Windows ํ ์ด ์ด์ pypi์ ์์ต๋๋ค. https://pypi.python.org/pypi/numpy/1.10.4
Tony์๊ฒ ์ฃ์กํฉ๋๋ค. ์, ์ด์ 3.10 ATLAS ๋น๋๋ ๋ฉํฐ์ค๋ ๋์์ต๋๋ค.
์ด์ ์ด ๋ฌธ์ ๋ฅผ ์ข ๋ฃํ ์ ์์ต๋๋ค. @matthew-brett numpy ์กฐ์ง ์๋์์ https://github.com/matthew-brett/np-wheel-builder ๋ฅผ ์ ์กํ๊ฑฐ๋ ๋๊ตฌ ํด๋ ์๋์ numpy ์ ์ฅ์์ PR๋ก ๊ธฐ์ฌํด์ผ ํ ์๋ ์์ต๋๋ค.
Ralf - np-wheel-builder
์ด ์ด๋๋ก ๊ฐ์ผ ํ๋์ง์ ๋ํ ์ ์์ด ์์ผ์ญ๋๊น? numpy/๊ณต๊ธ์
์ฒด?
๋ด๊ฐ ์๊ฐํ๋ numpy ์กฐ์ง ์๋์ ๋ณ๋์ ์ ์ ์ฅ์( numpy-wheel-builder
?)๋ฅผ ์ ํธํฉ๋๋ค. ์๋์ ์ผ๋ก numpy-vendor
์ ์ค๋ณต๋์ง๋ง ์ฝ๋์๋ ๋ง์ง ์์ต๋๋ค. ๊ทธ ๋ฆฌํฌ์งํ ๋ฆฌ๋ ์๋นํ ํฌ๊ณ ์ค์ ๋ก Wine์์ ์คํํ๊ธฐ ์ํ ๊ฒ์ด๋ฉฐ ๊ทธ ์์ ์๋ gcc ๋๊ตฌ ์ฒด์ธ์ ๋ โโ์ด์ ์ฌ์ฉ๋์ง ์์ต๋๋ค.
๊ด์ฐฎ์ต๋๋ค. ๊ณ์ํด์ ๋ง๋ค์ด๋ ๋ ๊น์?
๊ด์ฐฎ์ต๋๋ค. Windows ์ ์ฉ์ธ ๊ฒฝ์ฐ(์ง๊ธ์ AFAICT์
๋๊น?) repo ์ด๋ฆ์ "windows"๊ฐ ์์ด์ผ ํฉ๋๋ค :-). ๋๋ ๋ค๋ฅธ ๋ฐํด์๋ ์ ์ฌํ ์ธํ๋ผ๋ฅผ ๋ฐฐ์นํ ์ ์์ต๋๋ค. ๋๋ ๊ทธ๊ฒ์ด ์๋ฏธ๊ฐ์์๋งํผ ์ถฉ๋ถํ ์ ์ผ๋ฉด ์ด๋๊ฐ์ numpy
๋ฆฌํฌ์งํ ๋ฆฌ์ ์ง์ ๋ฃ์ด๋ ๊ด์ฐฎ์ต๋๋ค. ๋ฌด์์ด๋ ์๋ํฉ๋๋ค :-)
Repo์๋ ์๋นํ ํฐ ATLAS ๋ฐ์ด๋๋ฆฌ๊ฐ ์์ผ๋ฉฐ numpy repo๋ฅผ ํฐ ๋ชฉ์ ์ผ๋ก ๋ง๋ค์ง ์์ ๊ฒ์ ๋๋ค.
win-wheel-builder
๋ ์ด๋ป์ต๋๊น?
windows-wheel-builder
์ด๋์? ๋๋ win
์ ํฌ์ด ์๋๋๋ค ;)
Windows ์ ์ฉ์ผ๋ก ๋ง๋ค์ง ์๊ณ macosx ๋ฐ ํฅํ manylinux1 ํ ๋น๋ ๊ตฌ์ฑ์ ๋ชจ๋ ํ ๊ณณ์์ ์ฌ์ฉํ๋ ๊ฒ์ ์ด๋ป์ต๋๊น?
๊ทธ๋ ์ง ์์ผ๋ฉด "win"๋ณด๋ค "windows"์ ๋ํด +1์ ๋๋ค.
Windows ์ ์ฉ์ผ๋ก ๋ง๋ค์ง ์๊ณ macosx ๋ฐ ํฅํ manylinux1 ํ ๋น๋ ๊ตฌ์ฑ์ ๋ชจ๋ ํ ๊ณณ์์ ์ฌ์ฉํ๋ ๊ฒ์ ์ด๋ป์ต๋๊น?
๋ชจ๋ ํ๋ซํผ์์ ๋ณ๊ฒฝํ๋ ๊ฒ์ด ๋ ์ฌ์ธ ๊ฒ์ ๋๋ค. ๊ทธ๋ฌ๋ OS X์ โโLinux์๋ ๋น๋ ์คํฌ๋ฆฝํธ๋ง ํ์ํ๊ณ Windows์๋ ๊ฑฐ๋ํ ATLAS ๋ฐ์ด๋๋ฆฌ๊ฐ ์์ ๊ฒ์ผ๋ก ์์ํฉ๋๋ค. ๋ชจ๋ ํ๋์ ๋ฆฌํฌ์งํ ๋ฆฌ๋ก ์ด๋ํ๋ ๊ฒฝ์ฐ ATLAS ๋ฐ์ด๋๋ฆฌ๋ฅผ ์ด๋ป๊ฒ๋ ๋ถ๋ฆฌํ ์ ์์ต๋๊น(์๋ง๋ git-lfs ์ฌ์ฉ)?
๋ฐ์ด๋๋ฆฌ์ฉ github์์ ๋์ฉ๋ ํ์ผ ์ ์ฅ์(LFS) ์ฌ์ฉ
@rgommers : ๋๋ ์ฐ๋ฆฌ๊ฐ ๊ณง Linux์ฉ atlas-or-some-other-blas ๋ฐ์ด๋๋ฆฌ๋ฅผ ์ ๊ณตํ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ์๋ง๋ osx๋ ๋ง์ฐฌ๊ฐ์ง์ผ ๊ฒ์ ๋๋ค.
์ฒดํฌ์ธํ๋ ๋์ github ๋ฆด๋ฆฌ์ค ๋๋ bintray ๋๋ ๋ค๋ฅธ ๊ฒ์ ์ฌ์ฉํ ์ ์์ต๋๋ค... DYNAMIC_ARCH
ํ์ฑํ๋ openblas ๋น๋ ๋๋ ์ฌ๋ฌ blis ๊ตฌ์ฑ์ ๋๋ฑํ ์กฐํฉ์ ๋ค์ด๊ฐ๊ธฐ ์ ๊น์ง๋ ํฌ๊ธฐ๊ฐ ๊ทธ๋ค์ง ํฌ์ง ์์ต๋๋ค.
์ง๊ธ์ repo๋ฅผ windows-wheel-builder
๋ก ์ค์ ํ๊ณ Linux/OSX๋ก ๋ฌด์์ ํ ๊ฒ์ธ์ง๊ฐ ๋ ๋ช
ํํด์ง๋ฉด ๋ฆฌํฉํ ๋ง/์ด๋ฆ ๋ณ๊ฒฝ์ ์ด๋ป์ต๋๊น?
๋์๊ฒ ์ข์ ์๋ฆฌ.
๋๋๋ ๊ด์ฐฎ์
numpy ์กฐ์ง์ ๋ํ ๊ด๋ฆฌ์ ๊ถํ์ด ํ์ํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
๋๊ตฐ๊ฐ ๋ฆฌํฌ์งํ ๋ฆฌ์ ๋ํ ๊ด๋ฆฌ์ ๊ถํ์ ๊ฐ๊ณ ์๊ณ , ๊ทธ๋ค์ ํ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
@matthew-brett: github์ ๊ถํ ํ์ด์ง๊ฐ ๋งค์ฐ ํผ๋์ค๋ฝ์ต๋๋ค(ํนํ numpy๋ ์๋ง์ ๋๋ค). ํ์ง๋ง ์ ๋ฅผ ์ ์ฅ์์ ๊ด๋ฆฌ์๋ก ์ง์ ํ๊ฑฐ๋ ์ ์ฅ์๋ฅผ ๋์๊ฒ ์ด์ ํ๋ ค๋ฉด numpy/
repo๋ฅผ @njsmith ๋ก ์ฎ๊ฒผ์ต๋๋ค ...
numpy appveyor ๊ณ์ ์ด ์์ต๋๊น? ๋๊ตฐ๊ฐ ์ด ๋ฆฌํฌ์งํ ๋ฆฌ์ ๋ํด Appveyor ๋น๋๋ฅผ ํ์ฑํํ ์ ์์ต๋๊น?
@charris ์ Appveyor ๊ณ์ ์ ์ฌ์ฉํ๊ณ ์๋ ๊ฒ ๊ฐ์์...
์, ์ฌ๊ธฐ๋ฅผ ์ฐธ์กฐํ์ญ์์ค https://ci.appveyor.com/project/charris/numpy/history
2016๋
3์ 16์ผ ์์์ผ ์ค์ 12์ 15๋ถ, Nathaniel J. Smith <
[email protected]>์ ๋ค์๊ณผ ๊ฐ์ด ์ผ์ต๋๋ค.
@charris https://github.com/charris ์ Appveyor๋ฅผ ์ฌ์ฉํ๊ณ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
๊ณ์ ...โ
๋น์ ์ด ์ธ๊ธ๋์๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ ๋ฐ๋ ๊ฒ์ ๋๋ค.
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ฑฐ๋ GitHub์์ ํ์ธํ์ธ์.
https://github.com/numpy/numpy/issues/5479#issuecomment -197064930
์ฌ์ค, ์ ๋ ๋ฐฉ๊ธ appveyor์์ numpy์ ๋ํ ์ ๊ทธ๋ฃน ๊ณ์ ์ ๋ง๋ค๊ณ (์ด์จ๋ ์ด๊ฒ์ ํ๋ ค๋ ์๋ฏธ์๊ณ , ์ด๊ฒ์ ์ ๊ฐ ์ค์ ๋ก ๊ทธ๊ฒ์ ํ๋๋ก ์ ๋ํ์ต๋๋ค :-)), ๊ฑฐ๊ธฐ์์ ํ์ฑํํ์ต๋๋ค:
https://ci.appveyor.com/project/numpy/windows-wheel-builder
@njsmith ์ด๋ป๊ฒ ๊ด๋ฆฌํ์ จ๋์? ๋ง์ง๋ง์ผ๋ก ๊ด๋ฆฌ์์๊ฒ ํ๋ก์ ํธ ๊ณ์ ์ ์์ฑํ๋๋ก ์์ฒญํด์ผ ํ๋ ์ฌ๋์ ๋ณด์๋๋ฐ ๋ค๋ฅธ ์ฌ๋์ ์ถ๊ฐํ๋ ๋ฐฉ๋ฒ์ด ์์ ํ ํฌ๋ช ํ์ง ์์์ต๋๋ค.
๊ณ์ ์ด ์ ๋๋ก ์๋ํ๋ฉด numpy ํ ์คํธ์ ๋ํ ์ฑ ์์ ์ด์ ํ๊ณ ์ถ์ต๋๋ค.
@charris : ์ด๋ฉ์ผ์ ํ์ธํ์ธ์ :-). ๋ฐฉ๊ธ numpy-steering-council @googlegroups.com์ ๊ฐ์ธ์ผ๋ก ํ๋ ๊ฐ์ธ ๊ณ์ ์ ๋ง๋ค์์ต๋๋ค. ๋๋ ํ๋ก์ ํธ ๊ณ์ ์ด ์กด์ฌํ๋ค๋ ๊ฒ์ ๋ชฐ๋์ต๋๋ค... ์ฐ๋ฆฌ๋ ํ๋๋ฅผ ์ํฉ๋๊น?
๋๊ธฐ์ด์ ์ํด ๋ค๋ฅธ ๊ณ์ ์ ๋ค๋ฅธ ํ๋ก์ ํธ๋ฅผ ๋ถ์ฐํ๊ณ ์ถ์ ๊ฒ์ ๋๋ค.
numpy-steering-council ๋ฉ์ผ ์ฌ์ฉ์ ๋จ์ ์ ๋ณํฉ ํ ์คํธ๊ฐ ์คํจํ ๋ appveyor๊ฐ ์๋ฆผ์ ๋ณด๋ธ๋ค๋ ๊ฒ์ ๋๋ค. ์ฑ๋ฒ ์ด์ด ์ฌ๋๋ค์ด ์์ฆ ๋ ๋์ ๊ฒ์ ๊ฐ์ง๊ณ ์๋ค๋ฉด ๊ทธ๊ฒ์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๊ฒ ์ง๋ง ๊ทธ๋ค์ ์ธํฐํ์ด์ค๊ฐ ๊ณผ๊ฑฐ์ ์๋ง์ด์๋ ๊ฒ์ ๊ฐ์ํ ๋ ๋๋ ๊ทธ๊ฒ์ ๋ด๊ธฐ๋ฅผ ๊ฑธ์ง ์์ ๊ฒ์ ๋๋ค.
@tkelman ์ข์ ์ง์ ์ ๋๋ค. ๋ํ ๋ ๋น ๋ฅธ ๋๊ธฐ์ด์ ์ป๊ธฐ ์ํด ๋์ ์ฐ๋ ค๋ฉด ๋ ๊ณต์์ ์ธ ๊ฒ์ ์ํ ๊ฒ์ ๋๋ค.
@charris : ๋ฐฉ๊ธ ์ appveyor ๊ณ์ ์์ numpy/numpy
ํ
์คํธ๋ฅผ ํ์ฑํํ๊ณ ๋ชจ๋ ์๋ฆผ์ ๋นํ์ฑํํ๊ณ ๋ชจ๋ ๊ด๋ จ numpy github ํ์ ๊ณ์ ์ ๊ด๋ฆฌ์๋ก ์ถ๊ฐํ๋ ค๊ณ ์๋ํ์ต๋๋ค. ์ถ์ธกํ๋ค...
@matthew-brett: ๊ฐ์ฅ ์ฐ์ํ ์ ๊ทผ ๋ฐฉ์์ numpy/windows-build-tools
์ ๊ฐ์ ์์น์ BLAS ๋น๋๋ฅผ ์จ๊ธฐ์ง๋ง ์ค์ numpy/numpy
์ ์ฅ์์์ ์ค์ ํ ๋น๋ ๋๊ตฌ๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ์คํํ๋ ๊ฒ์
๋๋ค. appveyor ๋น๋์ ์ผ๋ถ -- ๊ทธ๋ค์ ์์ฒญ ์ BLAS ๋ฐ์ด๋๋ฆฌ๋ฅผ ํ ์ ์์ต๋๋ค.
๋ชจ๋ ํ๋ฅญํ ์์ ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค! numpy 1.11.0 ์ฐฝ ํ ์ด ๊ณง pypi์ ์ถ๊ฐ๋ฉ๋๊น? https://pypi.python.org/pypi/numpy
์ค ์, ์ฌ๊ธฐ์์ ๋ฆด๋ฆฌ์ค ์ ์ฐจ๋ฅผ ์ ๋ฐ์ดํธํ๋ ๋ฐฉ๋ฒ์ ์์๋ด์ผ ํ ์๋ ์์ต๋๋ค... IIUC ํ์ฌ ์ฌ์ฉ์ ๊ฒฝํ์ 1.11 ์์ค ๋ฆด๋ฆฌ์ค๊ฐ ์ ๋ก๋๋์๋ง์ ๊ฑฐ๊ธฐ์ ์๋ ๋ชจ๋ Windows ์์คํ ์ด ๋ค์ด๋ก๋ ํ ์์ ๊ฐ์๊ธฐ ์ ํ๋์๋ค๋ ๊ฒ์ ๋๋ค(์ ) ์์ค๋ฅผ ๋ค์ด๋ก๋ํ๊ณ ๋น๋ํ๋ ค๊ณ ํฉ๋๋ค(boo). ์ด๋ ๊ฒ ํ๋ "์ฌ๋ฐ๋ฅธ" ๋ฐฉ๋ฒ์ ์ต์ข ๋ฆด๋ฆฌ์ค์ ํ๊ทธ๊ฐ ์ง์ ๋๋ฉด sdist๋ฅผ ์ ๋ก๋ํ๊ธฐ _์ ์_ ๋ชจ๋ ๋ฐ์ด๋๋ฆฌ ํ ์ ๋น๋ํ๊ณ ์ ๋ก๋ํ๋ ๊ฒ์ ๋๋ค. ์ง์ฆ๋ ์ ๋๋ก...
@njsmith ๋ ์ข๊ฒ ์ง๋ง ๋ช ๋ถ ์ง์ฐ(๋๋ ๋ช ์๊ฐ) ์ง์ฐ์ ๊ด์ฐฎ์ต๋๋ค.
๋ช ํํ ํ๊ธฐ ์ํด 1.11.0 ๋ฆด๋ฆฌ์ค์ฉ PyPI์ ํ์ฌ Windows whl ํ์ผ์ด ATLAS์ ๋ํด ๋น๋๋ฉ๋๊น? ๊ณต์ ํ ์ ์๋ ๋น๋ ์คํฌ๋ฆฝํธ๊ฐ ์์ต๋๊น?
์, ํ ์ ATLAS์ ๋ง๊ฒ ์ ์๋์์ง๋ง ๊ฒฐ๊ณผ๊ฐ ํ์ ์ด ๋ค ๋ OpenBLAS๋ก ์ด๋ํ ์๊ฐ์ ๋๋ค.
๋น๋๋ Appveyor๋ฅผ ํตํด ์๋ํ๋ฉ๋๋ค. https://github.com/numpy/windows-wheel-builder
23735 downloads in the last day
. =)
hidden
๋ฆด๋ฆฌ์ค๋ฅผ ๋ง๋๋ ๊ฒ์ด ๊ฐ๋ฅํ ์ ์์ต๋๋ค. ์ต์ํ PyPI ์์ https://pypi.python.org/pypi?%3Aaction=submit_form ์ ์ต์
์ด ์๊ณ ๋ชจ๋ ํ์ผ์ด ์ค๋น๋๋ฉด ์จ๊ธฐ๊ธฐ๋ฅผ ํด์ ํฉ๋๋ค.
์ฌํ๊ฒ๋ ์จ๊ฒจ์ง ๋ฆด๋ฆฌ์ค ๊ธฐ๋ฅ์ ์ฌ๋๋ค์ด ๋ช ๋ น์ค์ ํตํด ํด๋น ๋ฆด๋ฆฌ์ค๋ฅผ ๊ฐ์ ธ์ค๋ ๊ฒ์ ๋ง๊ณ pypi GUI๋ฅผ ํตํด ๋ฆด๋ฆฌ์ค๋ฅผ ๋ณด๋ ๊ฒ๋ง ์ค์งํฉ๋๋ค.
numpy์ 64๋นํธ Windows ์ค์น๋ฅผ ์๋ํ๋๋ฐ ํ๋ฅญํ๊ฒ ์๋ํ๋ฏ๋ก ์ด ์์ ์ ์ฐธ์ฌํด ์ฃผ์ ๋ชจ๋ ๋ถ๋ค๊ป ๊ฐ์ฌ๋๋ฆฝ๋๋ค.
๊ถ๊ธํ ์ ์ scipy ๋ฐํด๋ก ๋์ผํ ์์ ์ ์ํํ ๊ณํ์ด ์ฌ์ ํ ์๋์ง ์ฌ๋ถ์ ๋๋ค. OpenBLAS๋ก์ ์ด์ ๊ฒฐ์ ์ ๊ธฐ๋ค๋ฆฌ๊ณ ์์ต๋๊น?
https://bitbucket.org/carlkl/mingw-w64-for-python/downloads ์๋ scipy-0.17.0 ์ ํ ์คํธ ํ ์ด ์์ต๋๋ค. ์ด ํ ์ @matthew-brett์ numpy ๋น๋์ ๋ํด mingwpy๋ก ๋น๋๋์์ต๋๋ค. https://pypi.python.org/pypi/numpy/1.10.4
2016๋ 4์ 28์ผ ๋ชฉ์์ผ ์คํ 12์ 48๋ถ์ carlkl [email protected] ์์ ๋ค์๊ณผ ๊ฐ์ด ์ผ์ต๋๋ค.
https://bitbucket.org/carlkl/mingw-w64-for-python/downloads ์๋
scipy-0.17.0์ ์ผ๋ถ ํ ์คํธ ํ . ์ด ๋ฐํด๋
@matthew-brett https://github.com/matthew-brett 's์ ๋ํ mingwpy
numpy https://pypi.python.org/pypi/numpy/1.10.4 ๋น๋
์ฃ์กํฉ๋๋ค. ์ด๋ฏธ ๋งํ๋๋ฐ ๋์ณค์ต๋๋ค. ํ์ง๋ง ํ
์คํธ๋ฅผ ๋ฐ์ ์ ์๋์?
์ด ๋ฐํด์ ๋ํ ์คํจ?
numpy ๋ฐํด ๋ด๋ถ์ ๋ฐฐ์ก๋ ATLAS์ ์ฐ๊ฒฐํ๊ณ ์์ต๋๊น?
@matthew-brett, ํ ๋ฌ ์ ์ ์ด ๋น๋๋ฅผ ๋ฐํํ์ง๋ง ์ด๋์์์ธ์ง ๊ธฐ์ต์ด ๋์ง ์์ต๋๋ค. ์ด์จ๋ , ์ด๊ฒ๋ค์ numpy ๋ฐํด์์ ์ ๊ณตํ๋ numpy-atlas์ ๋ํ ๋งํฌ๋ฅผ ๋น๋ํฉ๋๋ค.
scipy-0.17.0-cp35-cp35m-win##.whl์ _wrong_ C ๋ฐํ์ msvcrt.dll์ ๋ํด ์ฐ๊ฒฐ๋ฉ๋๋ค. scipy์ ๊ฒฝ์ฐ ์ด๊ฒ์ ๊ด์ฐฎ์ ๊ฒ ๊ฐ์ต๋๋ค. ํ ์คํธ ๋ก๊ทธ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. https://gist.github.com/carlkl/9e9aa45f49fedb1a1ef7
๊ทธ ๋ก๊ทธ๊ฐ ๋ง๋์? ๋์ NumPy is installed in D:\devel\py\python-3.4.4\lib\site-packages\numpy
๊ฐ ์์ต๋๋ค.
์๋ชป๋ MSVC ๋ฐํ์์ ๋ํด ์ํํ๊ฒ ์ฐ๊ฒฐ๋๋๋ผ๋ scipy wheel์ ์ ๊ณตํ ์ ์๋์ง ๊ถ๊ธํฉ๋๋ค. ํ์ง๋ง ์ด ๋น๋์๋ ๋๋ฌด ๋ง์ ์ค๋ฅ๊ฐ ์๋ ๊ฒ์ฒ๋ผ ๋ณด์ ๋๋ค.
64๋นํธ ๋น๋์ ๊ฒฝ์ฐ ์ค๋ฅ๊ฐ ๋ ์ ์ต๋๊น? Openblas 0.2.18์ ๋ํ ํ์ฌ ์ต๊ณ ์ ๋น๋๋ฅผ ์ํด?
64๋นํธ์๋ ๋ค์๊ณผ ๊ฐ์ ์ค๋ฅ๊ฐ ๋ชจ๋ 6๊ฐ๋ฟ์ ๋๋ค.
FAIL: test_continuous_basic.test_cont_basic(<scipy.stats._continuous_distns.nct_gen object ...
์๊ณ ์์ต๋๋ค. ์ด๊ฒ์ OpenBLAS์ ๋น๊ตํ๊ธฐ ์ํ ๊ฒ์ ๋๋ค. ๊ทธ๋ฌ๋, ๋๋ ๋น์ ์ด ๋์น ์ฑ์ ์๋ ์๋ ๋ช ๊ฐ์ง ์ด์ ๋ก ์ง๋ 4์ฃผ ๋์ ๋ฉ์ท์ต๋๋ค. ์ํฉ์ด ๊ณ์ ๊ฐ์ ๋๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
@matthew-brett, OpenBLAS์ ํจ๊ป numpy MSVC ๋น๋๋ฅผ ์ฌ์ฉํด ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค. ๋ด ์ต์ ๋น๋๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
mingwpy, conda-forge, Anaconda ๋ฐ Canopy๋ง์ผ๋ก๋ ์ถฉ๋ถํ์ง ์์ ๊ฒ์ฒ๋ผ Python์ฉ Intel Distribution ์ด ์ ๊ณต๋๋ฉฐ ๋ฌด๋ฃ๋ก ๋ค์ด๋ก๋ํ ์ ์์ต๋๋ค. ์ฌ๊ธฐ์๋ ์์น ๋๊ตฌ(SciPy, NumPy, Numba, Scikit-Learn)์ ์ผ๋ถ ์ถ๊ฐ ๊ธฐ๋ฅ(mpi4py Intel mp ์ธํฐํ์ด์ค ๋ฐ pyDAAL ๋ฐ์ดํฐ ๋ถ์)๋ง ํฌํจ๋๋ฉฐ conda๋ฅผ ์ฌ์ฉํฉ๋๋ค.
๋ผ์ด์ผ์ค๊ฐ 10/29/16์ ๋ง๋ฃ๋๋ฏ๋ก ๊ฑฑ์ ํ์ง ๋ง์ญ์์ค. ์ด๋ฌํ Intel ๋น๋๋
๋ฒ ํ ํ
์คํธ ํ MKL+ ๋ฑ์ ๋ผ์ด์ผ์ค ๋น์ฉ์ด ๋ฐ์ํ ์ ์์ต๋๋ค. OpenBLAS ๋น๋
์คํ ์์ค ์๋ฃจ์
์ผ๋ก ๋จ์ ๊ฒ์ด๋ฏ๋ก ์ ๊ณตํด์ฃผ์
์ ๊ฐ์ฌํฉ๋๋ค.
๋น๋.
2016๋
4์ 28์ผ ์คํ 7์ 21๋ถ์ "Mark Mikofski" [email protected] ์ด ์์ฑํ์ต๋๋ค.
mingwpy, conda-forge, Anaconda, Canopy ๋ง์ผ๋ก๋ ๋ถ์กฑํด ์ฌ๊ธฐ ์จ๋ค
Python์ฉ ์ธํ
๋ฐฐํฌํ
https://software.intel.com/en-us/python-distribution ๋ฐ ๋ฌด๋ฃ
๋ค์ด๋ก๋
https://software.intel.com/en-us/articles/intel-distribution-for-python-support-and-documentation.
์ฌ๊ธฐ์๋ ์์น ๋๊ตฌ(SciPy, NumPy, Numba, Scikit-Learn)๋ง ํฌํจ๋ฉ๋๋ค.
์ถ๊ฐ ๊ธฐ๋ฅ(mpi4py Intel mp ์ธํฐํ์ด์ค ๋ฐ pyDAAL ๋ฐ์ดํฐ ๋ถ์) ๋ฐ
์ฝ๋ค๋ฅผ ์ฌ์ฉํฉ๋๋ค.
โ
๋น์ ์ด ์ธ๊ธ๋์๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ ๋ฐ๋ ๊ฒ์
๋๋ค.
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ฑฐ๋ GitHub์์ ํ์ธํ์ธ์.
https://github.com/numpy/numpy/issues/5479#issuecomment -215600103
1.11.1์ ๊ฒฝ์ฐ Python 3.5 amd64์ฉ PyPi์ ๋๋ฝ๋ Windows ํ ์ด ์๋ ๊ฒ ๊ฐ์ต๋๋ค.
ํน๋ณํ ์ด์ ๊ฐ ์๋์? 1.11.0(https://pypi.python.org/pypi/numpy/1.11.0)์ผ๋ก ์ด๋ํ๋ฉด ๋ฐํด๊ฐ ์์ต๋๋ค.
๋ณด๊ณ ์์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค. ๋๋ฌด ๋นจ๋ฆฌ ์ ๋ก๋ํ๊ณ ๋ชจ๋ ๋ฐํด๊ฐ ๋ง๋ค์ด์ง๊ธฐ ์ ์ ์ ๋ก๋ํด์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋น ์ง ํ ์ ์ฌ๋ ธ์ต๋๋ค. ๋ค์๋ ์ด๋ฐ ์ผ์ด ๋ฐ์ํ์ง ์๋๋ก ํ ์คํธ๊ฐ ํ์ํ ๊ฒ ๊ฐ์ต๋๋ค.
๋น ์ง ํ ์ ์ฌ๋ ธ์ต๋๋ค.
๋ฐฉ๊ธ ํ ์คํธํ๋๋ฐ ์ ์๋ํฉ๋๋ค!
Windows ํ ์ ์ฌ์ฉํ ์ ์๋๋ก ํ๋ ๋ชจ๋ ์์ ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค.
๋ฌธ์ ๋ง๋ฌด๋ฆฌ -- ์ง๋ ๋ช ๋ฒ์ ๋ฆด๋ฆฌ์ค์์ ํ ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ด ๋ฌธ์ ๊ฐ ์ข ๋ฃ๋์์์ ์ดํดํ์ง๋ง ๋ค์ ์ฌ๋ ๊ฒ์ ๊ณ ๋ คํด์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
์ด๊ฒ์ conda์ ์์กดํ์ง ์๊ณ ๊ณผํ์ ์คํ์ ์คํํ๋ ค๋ Windows ์ฌ์ฉ์์๊ฒ ์ฌ์ ํ ๋ฌธ์ ์ ๋๋ค. ์ฌ์ ํ @cgohlke 'MKL' ๋น๋ ๋ฅผ ์ฌ์ฉํด์ผ ํ๋ฉฐ ์ด ๊ด๋ จ scipy ๋ฌธ์ ๋ ์ด๋ ค ์์ต๋๋ค. ๋ฐํด๊ฐ ๋ง๋ค์ด์ง๊ณ ์์ง๋ง scipy์ ํธํ๋์ง ์๊ณ ๋ง์ ์ฌ๋๋ค์ด ์ฌ์ฉํ ์ ์์ต๋๋ค.
@waynenilsen ๋ฐฉ๊ธ ์ธ๊ธํ ๋ฌธ์ ์ ์ฐ๊ฒฐ๋ ๋ฉ์ผ๋ง ๋ฆฌ์คํธ ์ค๋ ๋์ ์ ๋ฐํด๋ฅผ ์ค์นํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์ง์นจ์ด ์์ต๋๋ค.
https://github.com/scipy/scipy/issues/5461#issuecomment -326744515
๊ทธ๋์ ๋น์ ์ด ํ ๊ฒฝ์ฐ
pip install -f https://7933911d6844c6c53a7d-47bd50c35cd79bd838daf386af554a83.ssl.cf2.rackcdn.com/ --pre scipy
๊ทธ๊ฒ์ ๋น์ ์ ์ํด ์๋ํด์ผํฉ๋๋ค.
Numpy์ ๋ํด ์ํํ ์์
์ด ๋จ์ ์์ง ์์ผ๋ฏ๋ก ๋ฌธ์ ๊ฐ ์ข
๋ฃ๋์์ต๋๋ค. ๊ทธ๋งํผ
Scipy ๋ฌธ์ ๋ ์์ง ์งํ ์ค์ด๋ฉฐ ๋ค์ ์๊ฐ์ ํด๊ฒฐ๋ ๊ฒ์
๋๋ค.
ํ์ด ์ฃผ๋ค.
์ด๊ฒ์ ์ ์๊ฒ ํจ๊ณผ์ ์ ๋๋ค @Juanlu001 ์ ๋ ์ด๊ฒ์ด pypi์ ์์ ๋๋ฅผ ์ ๋ง๋ก ๊ณ ๋ํ๊ณ ์์ต๋๋ค!
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
์ค ์, ์ฌ๊ธฐ์์ ๋ฆด๋ฆฌ์ค ์ ์ฐจ๋ฅผ ์ ๋ฐ์ดํธํ๋ ๋ฐฉ๋ฒ์ ์์๋ด์ผ ํ ์๋ ์์ต๋๋ค... IIUC ํ์ฌ ์ฌ์ฉ์ ๊ฒฝํ์ 1.11 ์์ค ๋ฆด๋ฆฌ์ค๊ฐ ์ ๋ก๋๋์๋ง์ ๊ฑฐ๊ธฐ์ ์๋ ๋ชจ๋ Windows ์์คํ ์ด ๋ค์ด๋ก๋ ํ ์์ ๊ฐ์๊ธฐ ์ ํ๋์๋ค๋ ๊ฒ์ ๋๋ค(์ ) ์์ค๋ฅผ ๋ค์ด๋ก๋ํ๊ณ ๋น๋ํ๋ ค๊ณ ํฉ๋๋ค(boo). ์ด๋ ๊ฒ ํ๋ "์ฌ๋ฐ๋ฅธ" ๋ฐฉ๋ฒ์ ์ต์ข ๋ฆด๋ฆฌ์ค์ ํ๊ทธ๊ฐ ์ง์ ๋๋ฉด sdist๋ฅผ ์ ๋ก๋ํ๊ธฐ _์ ์_ ๋ชจ๋ ๋ฐ์ด๋๋ฆฌ ํ ์ ๋น๋ํ๊ณ ์ ๋ก๋ํ๋ ๊ฒ์ ๋๋ค. ์ง์ฆ๋ ์ ๋๋ก...