Amazon Linux์—์„œ Apache MXNet ์‹œ์ž‘ํ•˜๊ธฐ
Ubuntu์—์„œ Apache MXNet ์‹œ์ž‘ํ•˜๊ธฐ

Apache MXNet์€ CNN(Convolutional Neural Network)๊ณผ LSTM(Long Short-Term Memory Network)์„ ๋น„๋กฏํ•˜์—ฌ ์ตœ์ฒจ๋‹จ ๋”ฅ ๋ชจ๋ธ์„ ์ง€์›ํ•˜๋Š” ์œ ์—ฐํ•˜๊ณ  ๊ตฐ๋”๋”๊ธฐ๊ฐ€ ์—†์œผ๋ฉฐ ํ™•์žฅ์„ฑ์ด ๋›ฐ์–ด๋‚œ ๋”ฅ ๋Ÿฌ๋‹ ํ”„๋ ˆ์ž„์›Œํฌ์ž…๋‹ˆ๋‹ค. ์ด ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ํ•™๊ณ„์— ๊ธฐ๋ฐ˜์„ ๋‘๊ณ  ์žˆ์œผ๋ฉฐ ์ฃผ์š” ๋Œ€ํ•™ ๋ช‡ ๊ณณ์˜ ์—ฐ๊ตฌ์›๋“ค์˜ ํ˜‘์—…๊ณผ ๋…ธ๋ ฅ์„ ํ†ตํ•ด ํƒ„์ƒํ•˜์˜€์Šต๋‹ˆ๋‹ค. ์ปดํ“จํ„ฐ ๋น„์ „, ์Œ์„ฑ, ์–ธ์–ด ์ฒ˜๋ฆฌ ๋ฐ ์ดํ•ด, ์ƒ์„ฑ ๋ชจ๋ธ, ๋™์‹œ ์‹ ๊ฒฝ๋ง, ์ˆœํ™˜ ์‹ ๊ฒฝ๋ง์—์„œ ํƒ์›”ํ•œ ์„ฑ๋Šฅ์„ ๋ฐœํœ˜ํ•˜๋„๋ก ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

MXNet์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ฐฉ๋Œ€ํ•œ ํด๋ผ์šฐ๋“œ ์ธํ”„๋ผ์—์„œ ๋ชจ๋ฐ”์ผ ๋ฐ ์ปค๋„ฅํ‹ฐ๋“œ ๋””๋ฐ”์ด์Šค๊นŒ์ง€ ๋‹ค์–‘ํ•œ ์‚ฌ์šฉ ์‚ฌ๋ก€์—์„œ ๋„คํŠธ์›Œํฌ๋ฅผ ์ •์˜, ํ›ˆ๋ จ ๋ฐ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์ˆ˜์˜ ์ผ๋ฐ˜ ์–ธ์–ด๋ฅผ ์ง€์›ํ•˜๊ณ  ๋ช…๋ นํ˜• ๋ฐ ๊ธฐํ˜ธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ์ง€์›ํ•˜๋Š” ๋งค์šฐ ์œ ์—ฐํ•œ ํ™˜๊ฒฝ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. MXNet์€ ๋˜ํ•œ ๋งค์šฐ ๊ฐ€๋ณ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์—ฌ๋Ÿฌ GPU์™€ ์—ฌ๋Ÿฌ ์‹œ์Šคํ…œ์— ๊ฑธ์ณ ํ™•์žฅํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ํด๋ผ์šฐ๋“œ์—์„œ ๋Œ€๊ทœ๋ชจ ๋ฐ์ดํ„ฐ ์„ธํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ›ˆ๋ จ์„ ์ˆ˜ํ–‰ํ•  ๋•Œ ๋งค์šฐ ํšจ๊ณผ์ ์ž…๋‹ˆ๋‹ค.

AWS Deep Learning AMI๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด AWS์—์„œ Apache MXNet์„ ์‰ฝ๊ฒŒ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด AMI๋Š” Amazon Linux์šฉ๊ณผ Ubuntu์šฉ์œผ๋กœ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.

Apache MXNet ํ”„๋กœ์ ํŠธ์— ์ฐธ์—ฌํ•˜๊ธฐ

GitHub์— ์ฐธ์—ฌํ•˜๊ธฐ

GitHub ํ”„๋กœ์ ํŠธ ํŽ˜์ด์ง€์—์„œ ์ƒ˜ํ”Œ ์ฝ”๋“œ, ๋…ธํŠธ ๋ฐ ์ž์Šต์„œ ์ฝ˜ํ…์ธ ๋ฅผ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.

GitHub-Mark-120px-plus
CMU
Sigopt
logo-intel
Nvidia
๊ฐ„ํŽธ์„ฑ

ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ธฐ๋Šฅ

๋„คํŠธ์›Œํฌ ์ •์˜๋ฅผ ๊ฐ„์†Œํ™”ํ•˜๊ณ  ์ต์ˆ™ํ•œ ์–ธ์–ด๋ฅผ ์‚ฌ์šฉ

๋‚ด๊ตฌ์„ฑ

์ด๋™์„ฑ

๋ชจ๋ธ์ด ๋‹ค์–‘ํ•œ ๋””๋ฐ”์ด์Šค์™€ ํ”Œ๋žซํผ์—์„œ ์‹คํ–‰๋  ์ˆ˜ ์žˆ์œผ๋ ค๋ฉฐ ๋ฉ”๋ชจ๋ฆฌ์˜ ํšจ์œจ์  ์‚ฌ์šฉ์ด ํ•„์š”

ํ™•์žฅ ๊ฐ€๋Šฅ

 ํ™•์žฅ์„ฑ

ํฐ ๊ทœ๋ชจ์˜ ์ •๊ตํ•œ ๋ชจ๋ธ์„ ์‹ ์†ํ•˜๊ฒŒ ํ›ˆ๋ จํ•˜๊ธฐ ํ•„์š”ํ•œ ์—ฌ๋Ÿฌ GPU ๋ฐ ํ˜ธ์ŠคํŠธ๋กœ ํ™•์žฅํ•˜๋Š” ๊ธฐ๋Šฅ

Apache MXNet์—์„œ๋Š” ๋ช…๋ นํ˜• ์–ธ์–ด์™€ ๊ธฐํ˜ธ ์–ธ์–ด๋ฅผ ์กฐํ•ฉํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ "MXNet"์ด๋ผ๋Š” ์ด๋ฆ„์€ "์กฐํ•ฉ๋œ ๋„คํŠธ์›Œํฌ(mixed networks)"์—์„œ ์œ ๋ž˜๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, ๊ธฐํ˜ธ ์‹คํ–‰๊ธฐ์˜ ์ตœ์ ํ™”์™€ ๋”๋ถˆ์–ด ๋ฐ˜๋ณต ๋ฃจํ”„๋‚˜ ํŒŒ๋ผ๋ฏธํ„ฐ ์—…๋ฐ์ดํŠธ์™€ ๊ฐ™์€ ๋ช…๋ นํ˜• ์–ธ์–ด์˜ ์œ ์—ฐํ•œ ๊ธฐ๋Šฅ์„ ํ†ตํ•ด ๋„คํŠธ์›Œํฌ ๊ณ„์ธต์„ ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์กฐํ•ฉ๋œ ํŠน์„ฑ์œผ๋กœ ์ธํ•ด MXNet์€ ๋ณต์žกํ•œ ๋‹ค๊ณ„์ธต์  ๋”ฅ ๋Ÿฌ๋‹ ๋ชจ๋ธ์—์„œ ์ข€ ๋” ์‰ฝ๊ฒŒ ์ž‘๋™ํ•  ์ˆ˜ ์žˆ๋Š” ๊ณ ์œ ํ•œ ๊ธฐ๋Šฅ ์„ธํŠธ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. 

import mxnet as mx

a = mx.nd.zeros((100, 50))

b = mx.nd.ones((100, 50))

c = a + b

c += 1

print(c)

 

import mxnet as mx

net = mx.symbol.Variable('data')

net = mx.symbol.FullyConnected(data=net, num_hidden=128)

net = mx.symbol.SoftmaxOutput(data=net)

texec = mx.module.Module(net)

texec.forward(data=c)

texec.backward()

๋˜ํ•œ, MXNet์€ C++, JavaScript, Python, r, Matlab, Julia, Scala ๋ฐ Go๋ฅผ ๋น„๋กฏํ•˜์—ฌ ํ”„๋ ˆ์ž„์›Œํฌ์˜ ํ”„๋ŸฐํŠธ ์—”๋“œ์—์„œ ๋‹ค์–‘ํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด ์ง‘ํ•ฉ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ด๋ฏธ ์ต์ˆ™ํ•œ ์–ธ์–ด๋ฅผ ๋ชจ๋‘ ์‚ฌ์šฉํ•˜์—ฌ ์ฆ‰์‹œ ๋”ฅ ๋Ÿฌ๋‹์„ ์‹คํ–‰ํ•˜๊ธฐ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐฑ์—”๋“œ์—์„œ๋Š” ์ฝ”๋“œ๊ฐ€ ์–ธ์ œ๋‚˜ C++๋กœ ์ปดํŒŒ์ผ๋˜๋ฏ€๋กœ ํ”„๋ŸฐํŠธ ์—”๋“œ์—์„œ ์–ด๋–ค ์–ธ์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋“  ์ผ๊ด€๋œ ์„ฑ๋Šฅ์„ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 

c-plus-plus-logo-100px
javascript-logo-100px
python-logo-100px
r-logo-100px
Matlab
julia-logo-100px
scala-logo-100px
go-logo-100px

์šฐ๋ฆฌ์˜ ์ผ์ƒ์—์„œ ์ธ๊ณต ์ง€๋Šฅ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์ ์  ๋” ๋งŽ์€ ๋ถ€๋ถ„์„ ์ฐจ์ง€ํ•จ์— ๋”ฐ๋ผ ๋‹ค์–‘ํ•œ ๋””๋ฐ”์ด์Šค์—์„œ ์ด๋ฅผ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์ด ๋”์šฑ ์ค‘์š”ํ•ด์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์Šคํ† ๋ฆฌ์ง€๊ฐ€ ์ค‘์š”ํ•˜๊ณ  AI๊ฐ€ ์—ฃ์ง€์˜ ๋ชจ๋ฐ”์ผ๊ณผ ์ปค๋„ฅํ‹ฐ๋“œ ๋””๋ฐ”์ด์Šค์— ๋ฐฐํฌ๋˜๋Š” ๊ฒฝ์šฐ์—๋Š” ํŠนํžˆ ๊ทธ๋Ÿฌํ•ฉ๋‹ˆ๋‹ค.

Apache MXNet ๋ชจ๋ธ์€ ์•„์ฃผ ์ ์€ ์–‘์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด 1์ฒœ ๊ณ„์ธต ๋„คํŠธ์›Œํฌ์— ํ•„์š”ํ•œ ์Šคํ† ๋ฆฌ์ง€๋Š” 4GB ๋ฏธ๋งŒ์ž…๋‹ˆ๋‹ค. ์ด ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ๋˜ํ•œ ํ”Œ๋žซํผ ๊ฐ„์— ์ด๋™์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ํ•ต์‹ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(๋ชจ๋“  ์ข…์†์„ฑ ํฌํ•จ)๋ฅผ ๋‹จ์ผ C++ ์†Œ์Šค ํŒŒ์ผ์— ๋‹ด์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ iOS์šฉ๊ณผ Android์šฉ์œผ๋กœ ์ปดํŒŒ์ผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ JavaScript๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ธŒ๋ผ์šฐ์ € ๋‚ด์—์„œ๋„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์œ ์—ฐ์„ฑ์€ ๋ชจ๋ธ์„ ์•„์ฃผ ๋‹ค์–‘ํ•œ ์‚ฌ์šฉ ์‚ฌ๋ก€ ์ง‘ํ•ฉ์— ๋ฐฐํฌํ•˜์—ฌ ๊ฐ€์žฅ ๊ด‘๋ฒ”์œ„ํ•œ ์‚ฌ์šฉ์ž ์ง‘ํ•ฉ์— ๋„๋‹ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 

portability-cloud

ํด๋ผ์šฐ๋“œ

portability-mobile

๋ชจ๋ฐ”์ผ

portability-browser

๋ธŒ๋ผ์šฐ์ €

portability-devices

์ปค๋„ฅํ‹ฐ๋“œ ๋””๋ฐ”์ด์Šค

Apache MXNet์€ ๋ฐ์ดํ„ฐ ์ข…์†์„ฑ์„ ์ผ๋ จ์˜ ์ฝ”๋“œ๋กœ ๊ตฌ๋ฌธ ๋ถ„์„ํ•˜๊ณ  ์„ ์–ธํ˜• ๋ฐ ๋ช…๋ นํ˜• ์ž‘์—… ๋ชจ๋‘ ์ฆ‰์‹œ ์ž๋™์œผ๋กœ ๋ณ‘๋ ฌํ™”ํ•˜๋Š” ๋™์ ์ธ ์ข…์†์„ฑ ์Šค์ผ€์ค„๋Ÿฌ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ตฌ์ถ•๋ฉ๋‹ˆ๋‹ค. ๊ทธ ์™ธ์— ๊ทธ๋ž˜ํ”„ ์ตœ์ ํ™” ๊ณ„์ธต์€ ๋น ๋ฅธ ์„ ์–ธํ˜• ์‹คํ–‰๊ณผ ํšจ์œจ์ ์ธ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ์ž๋™ ๋ณ‘๋ ฌํ™”๋ฅผ ํ†ตํ•ด MXNet์€ ๋งค์šฐ ํšจ์œจ์ ์œผ๋กœ ํ™•์žฅ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด MXNet์˜ ํšจ์œจ์„ฑ์„ ๋ฒค์น˜๋งˆํฌํ•˜๋„๋ก ๊ณ„์† ์ฆ๊ฐ€ํ•˜๋Š” EC2 P2 GPU ์ง€์› ์ธ์Šคํ„ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ธ๊ธฐ ์žˆ๋Š” ์ด๋ฏธ์ง€ ๋ถ„์„ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ธ Inception v3๋ฅผ ํ›ˆ๋ จํ–ˆ์Šต๋‹ˆ๋‹ค.

mxnet-scale-story-1

๋นจ๊ฐ„์ƒ‰ ์„ ์€ GPU๋ฅผ ๋‘ ๋ฐฐ๋กœ ๋Š˜๋ฆฌ๋ฉด ์†๋„๊ฐ€ ๋‘ ๋ฐฐ๋กœ ๋นจ๋ผ์ง€๋Š” ์™„๋ฒฝํ•œ ํšจ์œจ์„ฑ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. MXNet์˜ ์ฒ˜๋ฆฌ๋Ÿ‰์€ ์‚ฌ์šฉ๋œ GPU ์ˆ˜์™€ ๊ฐ™์€ ๊ฑฐ์˜ ๋น„์œจ๋กœ ์ฆ๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค. 16GPU์˜ ๋‹จ์ผ ์ธ์Šคํ„ด์Šค์—์„œ Apache MXNet์€ 91%์˜ ํšจ์œจ์„ฑ์„ ๋‹ฌ์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ๋Œ€๊ทœ๋ชจ ๋„คํŠธ์›Œํฌ์˜ ๊ฒฝ์šฐ P2 ์ธ์Šคํ„ด์Šค ํด๋Ÿฌ์Šคํ„ฐ๋กœ ํ™•์žฅํ•˜๋Š” ๊ฒƒ์ด ์ข‹์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ ๊ฐ™์€ ๋ฒค์น˜๋งˆํฌ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด GPU ์ˆ˜๊ฐ€ ํญ๋ฐœ์ ์œผ๋กœ ์ฆ๊ฐ€ํ•  ๋•Œ ํšจ์œจ์„ฑ์€ ์•„์ฃผ ์กฐ๊ธˆ ๊ฐ์†Œํ•˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

mxnet-scale-story-2

ํ•˜์ง€๋งŒ AWS์—์„œ ํ•˜๋Š” ์ด์•ผ๊ธฐ๋ฅผ ๊ทธ๋Œ€๋กœ ๋ฏฟ์„ ํ•„์š”๋Š” ์—†์Šต๋‹ˆ๋‹ค. ํด๋ผ์šฐ๋“œ์˜ ์ด์  ์ค‘ ํ•˜๋‚˜๋Š” ์†์‰ฝ๊ฒŒ ์ž์ฒด ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•ด ์ง์ ‘ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. AWS๋Š” ๋ˆ„๊ตฌ๋‚˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก GitHub์—์„œ ๋ฒค์น˜๋งˆํฌ๋ฅผ ์ œ๊ณตํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. AWS์—์„œ๋Š” ์—ฌ๋Ÿฌ๋ถ„์ด ์ž‘๋™ ๋ฐฉ์‹์„ ์‚ดํŽด๋ณด๊ณ  ์ง์ ‘ ์‹คํ–‰ํ•˜์—ฌ ์ž์ฒด ๊ฒฐ๊ณผ๋ฅผ ํ™•์ธํ•ด๋ณด๊ธธ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ, AWS CloudFormation ํ…œํ”Œ๋ฆฟ์„ ์‚ฌ์šฉํ•˜๋ฉด ํ•„์š”ํ•œ ์šฉ๋Ÿ‰์„ ์‹ ์†ํ•˜๊ฒŒ ๊ตฌ๋™ํ•ด๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 

์‰ฝ๊ฒŒ AWS์—์„œ Apache MXNet ์‚ฌ์šฉ์„ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. AWS Marketplace๋กœ ์ด๋™ํ•˜์—ฌ AWS Deep Learning AMI๋ฅผ ์‹œ์ž‘ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

AMI๋Š” MXNet์˜ ์•ˆ์ •์ ์ธ ์ตœ์‹  ๋นŒ๋“œ์™€ ๊ทธ ์™ธ ์—ฌ๋Ÿฌ ์ธ๊ธฐ ์žˆ๋Š” ๋”ฅ ๋Ÿฌ๋‹ ํ”„๋ ˆ์ž„์›Œํฌ ๋ฐ ๋„๊ตฌ๋ฅผ ๋ฌด๋ฃŒ๋กœ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉํ•œ EC2 ์‹œ๊ฐ„์— ๋Œ€ํ•ด์„œ๋งŒ ๋น„์šฉ์„ ์ง€๋ถˆํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.