cuBLAS + numpy๋ฅผ ์ฌ์ฉํฉ๋๋ค. cuBLAS๋ float32์์ ๋งค์ฐ ๋น ๋ฅด๊ฒ ์คํ๋๋ฉฐ CPU๋ณด๋ค 10๋ฐฐ ๋น ๋ฆ
๋๋ค.
๊ทธ๋ฌ๋ ๋งค๋ฒ ์์ผ๋ก dtype=float32๋ฅผ ์ค์ ํด์ผ ํ๋ฏ๋ก ์ง๋ฃจํฉ๋๋ค. random.rand()๋ float32 ๋ฐฐ์ด ์์ฑ์ ์ง์ํ์ง๋ ์์ต๋๋ค.
์ด์จ๋ numpy์์ ๊ธฐ๋ณธ ์ ๋ฐ๋๋ฅผ float32๋ก ์ค์ ํ๋ ๋ฐฉ๋ฒ์ด ์์ต๋๊น?
์์ต๋๋ค. ์ฃ์กํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ ๋ ์ฐ๋ฆฌ๊ฐ ๊ทธ๋ฐ ๊ฒ์ ์ถ๊ฐํ์ง ์์ ๊ฒ ๊ฐ์ต๋๋ค. ์๋ํ๋ฉด ๊ทธ๊ฒ์ด ๋ฐ๋์ ์ ์ญ ์ํ์ฌ์ผ ํ๊ณ ์ด๋ฌํ ์ข ๋ฅ์ ์ ์ญ ์ํ๋ ๋ชจ๋ ์ข ๋ฅ์ ๋ฌธ์ ๋ฅผ ๋ง๋๋ ๊ฒฝํฅ์ด ์๊ธฐ ๋๋ฌธ์ ๋๋ค(์: ์ฌ๋๋ค์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ด์์ ๊ธฐ๋ณธ๊ฐ์ ๋ณ๊ฒฝํ๋ ค๊ณ ์๋ํ๊ณ , ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ๊ด๋ จ๋์ง ์์ ์ฝ๋๋ ๊ด๋ จ๋์ง ์์ ์ฝ๋๊ฐ numpy๋ฅผ ์ฌ์ฉํ๋ ค๊ณ ํ ๋ ์ด์ํ ๋ฌธ์ ๋ฅผ ๋ณด๊ธฐ ์์ํฉ๋๋ค.
์์ ๋ง์ ์ ํธ๋ฆฌํฐ ๊ธฐ๋ฅ์ ๋ง๋ค์ด ์ฌ์ฉํ ์ ์์ต๋๋ค. ์:
def array(*args, **kwargs):
kwargs.setdefault("dtype", np.float32)
return np.array(*args, **kwargs)
์ด๊ฒ์ ๊ฝค ์ ์ฉํ ๊ฒ์ ๋๋ค.
์ด๊ฒ์ ์ค๋๋์์ง๋ง ์ฌ์ ํ ์ ์ฉํ ๊ฒ์
๋๋ค(Stack Overflow์์ ์ด์ ๋ํด ๋ฌป๋ ๋ช ๊ฐ์ง ์ง๋ฌธ์ ์ฐพ์ ์ ์์ต๋๋ค). ๋ง๋ถ์ด์๋ฉด, ์ ์ญ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ํ๋ ์ค์ ๋ก ์ด๊ฒ์ ๋ํ _only_ ์ต์
์ด ์๋๋๋ค. ํ๊ฒฝ ๋ณ์, ํ์ผ ๊ตฌ์ฑ ๋๋ ์ปจํ
์คํธ ๊ด๋ฆฌ์๋ง ๊ฐ์ง ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด Theano ๋ ๊ตฌ์ฑ ํ์ผ๊ณผ ํ๊ฒฝ ๋ณ์๋ฅผ ์ ๊ณตํฉ๋๋ค. ๊ธฐ๋ณธ float ํฌ๊ธฐ(Theano์ floatX
์ ๊ฐ์)์ ๊ธฐ๋ณธ ์ ์ ํฌ๊ธฐ(๊ทธ๋ฆฌ๊ณ ํธ์ํ๋ ค๋ ๊ฒฝ์ฐ ๊ธฐ๋ณธ ๋ณตํฉ ํฌ๊ธฐ๋ ๊ฐ๋ฅ)๋ฅผ ๊ฐ์ง ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋ํ ๊ฑฐ์ ์ค์ํ์ง ์์ง๋ง NumPy์๋ ์ด๋ฏธ ์ต์ํ _some_ ์ ์ญ ์ํ๊ฐ ์์ต๋๋ค. ์: set_printoptions
(์์น์ ์ผ๋ก ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๋ค๋ฅธ ์ค๋ ๋์์ ์๋ง์ด ๋ ์ ์์); ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ตฌ์ฑํ๋ ๊ท ์ผํ ๋ฐฉ๋ฒ์ ๊ฐ๋ ๊ฒ์ ๊ทธ๋ ๊ฒ ๋์ ์๊ฐ์ด ์๋๋๋ค.
์ฝ๋์ ๋ง์ ๋ถ๋ถ์ ์ํฅ์ ๋ฏธ์น๊ณ ๋ถ๋ช ํ ๋ง์ ๊ฒฝ์ฐ๊ฐ ์๊ธฐ ๋๋ฌธ์ ๊ฐ๋จํ๋ค๊ณ ๋งํ๋ ๊ฒ์ด ์๋๋๋ค. ํ์ง๋ง ์ ์ฌ์ ์ธ ๋ก๋๋งต ํญ๋ชฉ์ผ๋ก๋ง ๊ณ ๋ คํ๋๋ผ๋ ๊ณ ๋ คํด ๋ณผ ๊ฐ์น๊ฐ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
ํนํ ๋ฅ ๋ฌ๋(tensorflow, pytorch ๋ฑ)์์ ์ฌ๋๋ค์ด 64๋นํธ๋ณด๋ค ์์ ์ ๋ฐ๋ ๋ฐฐ์ด์ ๊ฑฐ์ 100% ์๊ฐ(์ฃผ๋ก 32๋นํธ์ด์ง๋ง ํผํฉ ์ ๋ฐ๋ ๋ฐ ์์ํ ๋ชจ๋ธ์ด ๋ง์ ๊ธฐ๋ฐ์ ์ป๊ณ ์์ต๋๋ค. ๋ชจ๋ ์์ ๊ณต๊ธ์ ์ฒด์ ๊ณต์ ์ง์)
๋๋ ์ ํํ ๊ฐ์ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. np.array ๋ฅผ ๋ง์ด ํธ์ถํ๋ ๋งค์ฐ ๊ธด ๋ชจ๋์์ ๋งค์ฐ ํฐ ํ๋ ฌ์ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ์ ํ์ ์ธ์๋ฅผ ์ง์ ํ๊ธฐ ์ํด ๋ชจ๋ ํธ์ถ์ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค(dtype=np.float32). float64 ๋์ float32๋ฅผ ์ฌ์ฉํ๋๋ก numpy์ ์ง์ํ๊ณ ์ถ์ต๋๋ค. OS๋ ์ง๊ธ ๊ต์ฒด ์ค์ ๋๋ค. ๋์์ฃผ์ธ์.
๋งค๋ฒ ์ด๋ฌ๋๊ฒ ์ซ์ด
@soulslicer ์ด ๋ฌธ์ ๋ ์ข
๋ฃ๋์์ผ๋ฉฐ ์๊ฐํ ์ ์๋ ๋ฏธ๋์ ์ด๋ฅผ ๋ณ๊ฒฝํ์ง ์์ ๊ฒ์
๋๋ค. ์๋ง๋ ๊ธฐ๋ณธ dtype์ ์ถ๊ฐํ๊ธฐ ์ํด np.array๋ฅผ ์์ญ์ด ํจ์นํ๋ฉด ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋ ๊ฒ์
๋๋ค. ๋ํํ ์์
์ ์ํด PYTHONSTARTUP
๋ฅผ ํตํด Python ์์ ์ ํธ์ถ๋๋๋ก ์ ๋ ฌํ๊ฑฐ๋ ํ์ผ์ ๋ฃ๊ณ ํ๋ก์ ํธ ์์ ์ ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค.
import numpy as np
_oldarray = np.array
def array32(*args, **kwargs):
if 'dtype' not in kwargs:
kwargs['dtype] = 'float32'
_oldarray(*args, **kwargs)
np.array = _oldarray
ํ, ๋ค๋ฅธ ๋ฐฉ๋ฒ ;)
from functools import partial
import numpy as np
array32 = partial(np.array, dtype=np.float32)
์ฐธ๊ณ ๋ก ๋ฅ ๋ด๋ด ๋คํธ์ํฌ๊ฐ ๋๋ฌด ๊ฑฐ๋ํด์ง๋ฉด ์ด ๊ธฐ๋ฅ์ ์ฐพ๋ ์ฌ๋๋ค์ด ์ ์ ๋ ๋ง์์ง ๊ฒ์ ๋๋ค.
ใ ใ @๋ํผ
์ด๋ด, ๋ ๋น์ ์ ์ปดํจํฐ์์ 38 ๊ธฐ๊ฐ๋ฅผ ์ฐจ์งํ๋ ๊ฐ ์ซ์๋ฅผ ์ํฉ๋๋ค
@JadBatmobile ์ฌ๊ธฐ์ ๋ฌธ์ ๊ฐ ๋๋ ๊ฒ์
njsmith๋ 3๋ ์ ์ ์ด "๊ธฐ๋ฅ"์ด ๋งค์ฐ ์ฝ๊ฒ(ํ ์ค์ ์ฝ๋์์ ์ฝ์) ๋ง์ ์ ์ฌ ๋ฐ ๋น-๋ก์ปฌ ๋ฒ๊ทธ๋ก ์ด์ด์ง๋ ์ด์ ๋ฅผ ๋ช ํํ ์ฉ์ด๋ก ์ค๋ช ํ์ต๋๋ค. ์ด๋ฌํ "๊ธฐ๋ฅ"์ ์ฑ ์๊ฐ ์๊ฒ ์ฌ์ฉํด์ผ ํฉ๋๋ค. ์ฑ ์๊ฐ ์๊ฒ ์ฌ์ฉํด์ผ ํ๋ ๊ธฐ๋ฅ์ ๊ตฌํํ๋ ๊ฒ์ ์ข์ ์๊ฐ์ด ์๋๋ผ๊ณ ์๊ฐํฉ๋๋ค. ๋น์ ์ด ๊ทธ๊ฒ์ ์ฌ์ฉํ๊ณ ์๋ค๋ ๊ฒ์ ์๊ณ ๊ทธ๊ฒ์ ์ฑ ์๊ฐ ์๊ฒ ์ฌ์ฉํ๋ ค๋ ๊ฒฝ์ฐ: ์ด ์ค๋ ๋์์ ์ธ๊ธ๋ ์ฌ๋ฌ ์ ์ ์ค์์ ํ๋๋ฅผ ์ ํํ๊ณ (๊ทธ๋ฆฌ๊ณ ๋ ๋ง์ ๋ค๋ฅธ ๊ณณ์์๋) ์์ ์ ์ฝ๋๋ฅผ ๋ช ์์ ์ผ๋ก ์ด ๋ฐฉ์์ผ๋ก ์๋ํ๋๋ก ๋ง๋์ญ์์ค.
@adeak ์ด๊ฒ์ด ์ข์ ์๊ฐ์ธ์ง ํ์คํ์ง ์์ง๋ง ์ผ๋ถ ์ปจํ ์คํธ ๊ด๋ฆฌ์๊ฐ ์ข์ ์ ์ถฉ์์ด ๋ ์ ์์ต๋๊น?
์์ฌ ์ฝ๋:
<strong i="8">@contextmanager</strong>
def default_dtype(dtype):
# read current default dtype and change to the one provided
original_dtype = read_current_default_dtype()
change_default_dtype(dtype)
yield
# change default dtype to original value
change_default_dtype(original_dtype)
์ฉ๋ฒ:
with np.default_dtype(np.float32):
# do float32 stuff
@dankal444 ๋ด๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ์ดํดํ๋ค๋ฉด ์ ๋ฆฌ์ ๋ํ ๋ณด์ฅ ์์ด ์ฌ๋๋ค์ด ๊ฒ์ผ๋ฅด๊ณ ๋ถ๊ธธํ change_default_dtype(dtype)
์๋์ผ๋ก ํธ์ถํ๋ ๊ฒ์ ๋ง์ ์ ์๋ ๊ฒ์ ์์ต๋๋ค.
@adeak ๋๋ ์ด "๋ถ๊ธธํ" ๋ฐฉ๋ฒ์ด ์ฌ๋๋ค์ ๊ด์ ์์ ์จ๊ฒจ์ง ์ ์๊ณ ์ปจํ ์คํธ ๊ด๋ฆฌ์๋ง ์ฌ์ฉํ ์ ์๋ค๊ณ ์๊ฐํ์ต๋๋ค.
๋๋ ์ด ๊ธฐ๋ฅ์ ์๊ตฌํ๋ ์ฌ๋๋ค์ด ์ปจํ ์คํธ ๊ด๋ฆฌ์์ ๋ง์กฑํ์ง ์์ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ํ ๋ฒ ์ํํด์ผ ํ๋ ๋จ์ผ ์ฌ์ฉ์ ์ง์ ๊ตฌ์ฑ ๋จ๊ณ ๋ณด๋ค ํจ์ฌ ๋ ๋ฒ๊ฑฐ๋กญ์ต๋๋ค. ์ฌ๋๋ค์ ์ ์ญ ์ํ๊ฐ ์๋ ๋น๊ณต๊ฐ ๊ธฐ๋ฅ์ ์ฌ์ฉํ์ฌ ๋ชฉ์ ์ ๋ฌ์ฑํ์ง ๋ชปํ๊ณ ์์ํ ์ ์์ต๋๋ค.
์ปจํ ์คํธ ๊ด๋ฆฌ์๊ฐ ๋ง์ ๋์์ด ๋์ง ์๋๋ค๊ณ ์๊ฐํฉ๋๋ค. ํฉ๋นํ ์ด์ ์์ ๋ ํฐ ์ ๋ฐ๋๋ฅผ ์ฌ์ฉํ๋ ๋ค์ด์คํธ๋ฆผ ํจ์๋ฅผ ์ฌ์ฉํ ์ ์๋ค๋ ๋ฌธ์ ์ ํญ์ ๋ถ๋ชํ ๊ฒ์ ๋๋ค. ์ ์ฅ, ๋น์ ์ segfault๋ฅผ ์ผ์ผํฌ ์๋ ์์ต๋๋ค. ์๋ํ๋ฉด C-์ธํฐํ์ด์ฑ ์ฝ๋๋ ์๋ก ์์ฑ๋ ๋ฐฐ์ด์ด ์๋ชป๋ ๋ฐ์ดํฐ ์ ํ์ ๊ฐ์ง๊ณ ์๋์ง ์ฌํ์ธํ ์ด์ ๊ฐ ๊ฑฐ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
๋ฎ์ ์์ค์์ NPY_DEFAULT_TYPE์ด ์์ต๋๋ค. ์๋ง๋ numpy๊ฐ ์ด ๋ณ์ โโ๊ฐ์ float32๋ก ์์ ํ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ ์ ์์ต๋๊น?
์ ๋ฐฐ์ด์ ์์ฑํ ๋ np.float32 dtype์ ์ ์ธํ๋ ๊ฒ์ ์ ๋ง ๊ณ ํต์ค๋ฝ์ต๋๋ค.
[Bob] ์ฌ์ฉ ๊ฐ๋ฅํ RAM์ 90%๋ฅผ ์๋นํ๋ ์์์ float32 ๋ฐฐ์ด์ ์์ฑํ๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผ ํฉ๋๊น?
[Numpy] RAM์ ๋ ๋ฐฐ๋ก ๋๋ฆฌ์ญ์์ค ...
์์ฆ์ ๋ชจ๋ ์ฌ๋๋ค์ ํํํ๊ธฐ ์ด๋ ค์ด ์๊ฒฌ์ ๊ฐ์ง๊ณ ์์ต๋๋ค. ์ ์๊ฒฌ์ ์ด๊ฒ์ด ์๋ง๋ ์ ๊ฐ ๋ณธ ๊ฒ ์ค ๊ฐ์ฅ "๋ฏธ์ณค๊ณ ๋ฌด์๋นํ"* โโ๋์์ธ ๊ฒฐ์ ์ค ํ๋์ด๋ฉฐ ์ ๋นํ ์ง๋ช ์ ๋ฐ์ ์๊ฒฉ์ด ์๋ค๋ ๊ฒ์ ๋๋ค. ์ ๊ฐ์ธ ๋ช ์์ ์ ๋น
"๋ฏธ์ณค๊ณ ๋ฌด์๋นํ"* โโ- ๋ฌ์์์ด์์ ์ ๋ํ ๊ด์ฉ ํํ
[๊ฒฉ์ธ 1] ์ ํ์ ์ด๋ผ๋ฉด ์ํคํ
์ฒ๊ฐ ์ผ๋ง๋ ์์์ง๋ ์ค์ํ์ง ์์ต๋๋ค.
[Aphorism 2] "pythonic"์ ๋ง์ ๊ฒฝ์ฐ์ ๋ถ๋๋ฌ์์ ๋ฎ๋ ๋ง์ง๋ง ๋ ์ด๋ธ์ผ ๋ฟ์
๋๋ค.
๋ค์ ๋งํ์ง๋ง, ์ด๊ฒ์ ๊ตฌํํ์ง ์๋ ์ด์ ๋ ์ฐ๋ฆฌ๊ฐ ๋น์ ์ ๊ธฐ์ต์ ๋ญ๋นํ๋ ๊ฒ์ ์ข์ํ๊ธฐ ๋๋ฌธ ์ด ์๋๋ผ ๋ชจ๋ ์ข ๋ฅ์ ๊ฒ๋ค์ ๊นจ๋จ๋ฆฌ๊ณ ๋น์ ์ด ์กฐ์ฉํ ์๋ชป๋ ๋ต์ ์ป๋๋ก ํ๊ธฐ ๋๋ฌธ์ ๋๋ค. ๋ง์ ์ฌ๋๋ค์ด ์ด๊ฒ์ด "๋ถ๋ช ํ" ์ผ์ด๋ผ๊ณ ์๊ฐํ๋ค๋ ์ฌ์ค์ ๋๋ถ๋ถ์ ์ฌ๋๋ค์ด ์ฌ๊ธฐ์์ ์ ์ฒด ๊ฒฐ๊ณผ๋ฅผ ์ดํดํ์ง ๋ชปํ๊ณ ์ด ๊ธฐ๋ฅ์ ์ฌ์ฉํ๊ธฐ์ ์์ ํ ๋์ ๊ทธ๋ ์ง ์์ ๋๋ฅผ ํ๋จํ ์ค๋น๊ฐ ๋์ด ์์ง ์๋ค๋ ๊ฒ์ ํ์ธ์์ผ์ค๋๋ค.
๋๋ ์ฌ๋ฌ๋ถ ๋ชจ๋๊ฐ ๊ฒช๊ณ ์๋ ๊ณ ํต์ ๋ค์์ต๋๋ค. ๊ทธ๊ฒ์ ์ ์ ์ผ๋ก ์ ํจํ๋ฉฐ ์ฐ๋ฆฌ๊ฐ ํ ์๋ง ์๋ค๋ฉด ๋๊ณ ์ถ์ต๋๋ค. ํ์ง๋ง ๊ทธ๋ ๊ฒ ํ๋ ค๋ฉด ๋๊ตฐ๊ฐ๊ฐ ๋ชจ๋ ๊ฒ์ ๊นจ๋จ๋ฆฌ์ง ์๋ ๊ณํ์ ์ธ์์ผ ํฉ๋๋ค.
์ด ๋ฌธ์ ๋ ๋ถ๋ช ํ ๋น์์ฐ์ ์ธ ๋๊ธ์ ์ํ ์์์ด๊ธฐ ๋๋ฌธ์ ์ ๊ธ๋๋ค. ์๋ก์ด ์์ด๋์ด๊ฐ ์์ผ๋ฉด ์๋ก์ด ๋ฌธ์ ๋ฅผ ์ด์ด์ฃผ์ธ์.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
์ด๊ฒ์ ๊ฝค ์ ์ฉํ ๊ฒ์ ๋๋ค.