๋‘๋ ค์›€์„ ๊ทน๋ณตํ•˜๊ณ  Azure ๊ธฐ๊ณ„ ํ•™์Šต์„ ์‹œ์ž‘ํ•˜๋Š” ๋ฐฉ๋ฒ•

์ €๋Š” Jupyter Notebook ๋˜๋Š” ์ผ์ข…์˜ Python ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์„ ํ†ตํ•ด ํด๋ผ์šฐ๋“œ์— ์žˆ๋Š” ๋กœ์ปฌ ๋˜๋Š” ๊ฐ€์ƒ์˜ GPU ๋จธ์‹ ์—์„œ ์ž‘์—…ํ•˜๋Š” ๋งŽ์€ ๋ฐ์ดํ„ฐ ๊ณผํ•™์ž๋ฅผ ์•Œ๊ณ  ์žˆ์œผ๋ฉฐ ์•„๋งˆ๋„ ์ € ์ž์‹ ๋„ ๊ทธ๋“ค ์ค‘ ํ•œ ๋ช…์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค. 2๋…„ ๋™์•ˆ ์ „๋ฌธ AI/ML ๊ฐœ๋ฐœ์ž๋กœ ์ผํ•˜๋ฉด์„œ ์ผ๋ฐ˜ ์„œ๋ฒ„ ๋˜๋Š” ์›Œํฌ์Šคํ…Œ์ด์…˜์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ค€๋น„ํ•˜๊ณ  Azure์˜ GPU๊ฐ€ ์žˆ๋Š” ๊ฐ€์ƒ ๋จธ์‹ ์—์„œ ๊ต์œก์„ ์‹คํ–‰ํ•˜๋ฉด์„œ ์ •ํ™•ํžˆ ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค.

๋ฌผ๋ก  ์šฐ๋ฆฌ ๋ชจ๋‘๋Š” Azure ๊ธฐ๊ณ„ ํ•™์Šต โ€” ๊ธฐ๊ณ„ ํ•™์Šต์„ ์œ„ํ•œ ํŠน๋ณ„ํ•œ ํด๋ผ์šฐ๋“œ ํ”Œ๋žซํผ. ํ•˜์ง€๋งŒ, ์ฒซ๋ˆˆ์— ๋ฐ˜ํ•œ ํ›„ ์†Œ๊ฐœ ๊ธฐ์‚ฌ, Azure ML์ด ํ•ด๊ฒฐํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ๋” ๋งŽ์€ ๋ฌธ์ œ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์œ„์—์„œ ์–ธ๊ธ‰ํ•œ ์ž์Šต์„œ์—์„œ Azure ML์— ๋Œ€ํ•œ ๊ต์œก์€ Jupyter Notebook์—์„œ ์‹œ์ž‘๋˜๋Š” ๋ฐ˜๋ฉด ๊ต์œก ์Šคํฌ๋ฆฝํŠธ ์ž์ฒด๋Š” ์ž๋™ ์™„์„ฑ, ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ์…€ ์ค‘ ํ•˜๋‚˜์—์„œ ํ…์ŠคํŠธ ํŒŒ์ผ๋กœ ์ƒ์„ฑ ๋ฐ ํŽธ์ง‘ํ•˜๋„๋ก ์ œ์•ˆ๋ฉ๋‹ˆ๋‹ค. ๊ฐ•์กฐ ํ‘œ์‹œ ๋ฐ ์ผ๋ฐ˜ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์˜ ๊ธฐํƒ€ ์ด์ . ์ด๋Ÿฌํ•œ ์ด์œ ๋กœ ์šฐ๋ฆฌ๋Š” ์˜ค๋žซ๋™์•ˆ ์ž‘์—…์— Azure ML์„ ์‹ฌ๊ฐํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์ตœ๊ทผ ์ž‘์—…์—์„œ Azure ML์„ ํšจ๊ณผ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค! ์„ธ๋ถ€ ์‚ฌํ•ญ์— ๊ด€์‹ฌ์ด ์žˆ์œผ์‹ญ๋‹ˆ๊นŒ?

๋‘๋ ค์›€์„ ๊ทน๋ณตํ•˜๊ณ  Azure ๊ธฐ๊ณ„ ํ•™์Šต์„ ์‹œ์ž‘ํ•˜๋Š” ๋ฐฉ๋ฒ•

์ฃผ์š” ๋น„๋ฐ€์€ Azure ML์šฉ Visual Studio Code ํ™•์žฅ. ์ด๋ฅผ ํ†ตํ•ด VS Code์—์„œ ๋ฐ”๋กœ ๊ต์œก ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๊ฐœ๋ฐœํ•˜์—ฌ ํ™˜๊ฒฝ์„ ์ตœ๋Œ€ํ•œ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋กœ์ปฌ๋กœ ์‹คํ–‰ํ•œ ๋‹ค์Œ ๋ช‡ ๋ฒˆ์˜ ํด๋ฆญ๋งŒ์œผ๋กœ Azure ML ํด๋Ÿฌ์Šคํ„ฐ์˜ ๊ต์œก์œผ๋กœ ๋ณด๋‚ผ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ํŽธ๋ฆฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๊นŒ?

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด Azure ML์„ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ด์ ์„ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๋Œ€๋ถ€๋ถ„์˜ ์‹œ๊ฐ„์„ ํŽธ๋ฆฌํ•œ IDE๋ฅผ ํ†ตํ•ด ์ปดํ“จํ„ฐ์—์„œ ๋กœ์ปฌ๋กœ ์ž‘์—…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋ธ ํ›ˆ๋ จ์—๋งŒ GPU ์‚ฌ์šฉ. ๋™์‹œ์— ๊ต์œก ๋ฆฌ์†Œ์Šค ํ’€์€ ํ•„์š”ํ•œ ๋กœ๋“œ์— ๋งž๊ฒŒ ์ž๋™์œผ๋กœ ์กฐ์ •๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ตœ์†Œ ๋…ธ๋“œ ์ˆ˜๋ฅผ 0์œผ๋กœ ์„ค์ •ํ•˜์—ฌ ๊ต์œก ์ž‘์—…์ด ์žˆ๋Š” ๊ฒฝ์šฐ "์š”์ฒญ ์‹œ" ๊ฐ€์ƒ ๋จธ์‹ ์„ ์ž๋™์œผ๋กœ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋‹น์‹ ์€ ํ•  ์ˆ˜ ๋ชจ๋“  ํ•™์Šต ๊ฒฐ๊ณผ๋ฅผ ํ•œ ๊ณณ์— ์ €์žฅ, ๋‹ฌ์„ฑ๋œ ๋ฉ”ํŠธ๋ฆญ ๋ฐ ๊ฒฐ๊ณผ ๋ชจ๋ธ์„ ํฌํ•จํ•˜์—ฌ ๋ชจ๋“  ๊ฒฐ๊ณผ๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด ์–ด๋–ค ์ข…๋ฅ˜์˜ ์‹œ์Šคํ…œ์ด๋‚˜ ์ˆœ์„œ๋ฅผ ์ œ์‹œํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.
  • ์ด ๊ฒฝ์šฐ, ์—ฌ๋Ÿฌ ์‚ฌ๋žŒ์ด ๋™์ผํ•œ ํ”„๋กœ์ ํŠธ์—์„œ ์ž‘์—…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. - ๋™์ผํ•œ ์ปดํ“จํŒ… ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ณ  ๋ชจ๋“  ์‹คํ—˜์ด ๋Œ€๊ธฐ์—ด์— ์ถ”๊ฐ€๋˜๋ฉฐ ์„œ๋กœ์˜ ์‹คํ—˜ ๊ฒฐ๊ณผ๋„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌํ•œ ์‹œ๋‚˜๋ฆฌ์˜ค ์ค‘ ํ•˜๋‚˜๋Š” ๋”ฅ ๋Ÿฌ๋‹ ๊ต์œก์— Azure ML ์‚ฌ์šฉ๊ฐ ํ•™์ƒ์—๊ฒŒ GPU๊ฐ€ ์žˆ๋Š” ๊ฐ€์ƒ ๋จธ์‹ ์„ ์ œ๊ณตํ•˜๋Š” ๋Œ€์‹  ๋ชจ๋“  ์‚ฌ๋žŒ์ด ์ค‘์•™์—์„œ ์‚ฌ์šฉํ•  ํ•˜๋‚˜์˜ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ๋ชจ๋ธ ์ •ํ™•๋„๊ฐ€ ์žˆ๋Š” ์ผ๋ฐ˜ ๊ฒฐ๊ณผํ‘œ๋Š” ์ข‹์€ ๊ฒฝ์Ÿ ์š”์†Œ๊ฐ€ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • Azure ML์„ ์‚ฌ์šฉํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ผ๋ จ์˜ ์‹คํ—˜์„ ์‰ฝ๊ฒŒ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ดํผํŒŒ๋ผ๋ฏธํ„ฐ ์ตœ์ ํ™” - ์ด๊ฒƒ์€ ๋ช‡ ์ค„์˜ ์ฝ”๋“œ๋กœ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ผ๋ จ์˜ ์‹คํ—˜์„ ์ˆ˜๋™์œผ๋กœ ์ˆ˜ํ–‰ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

Azure ML์„ ์‚ฌ์šฉํ•ด ๋ณด๋„๋ก ์„ค๋“ํ–ˆ์œผ๋ฉด ์ข‹๊ฒ ์Šต๋‹ˆ๋‹ค! ์‹œ์ž‘ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ์„ค์น˜ํ–ˆ๋Š”์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค Visual Studio ์ฝ”๋“œ, ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ํ™•์žฅ Azure ๋กœ๊ทธ์ธ ะธ ํ‘ธ๋ฅธ ML
  • ์ €์žฅ์†Œ ๋ณต์ œ https://github.com/CloudAdvocacy/AzureMLStarter - MNIST ๋ฐ์ดํ„ฐ ์„ธํŠธ์—์„œ ํ•„๊ธฐ ์ˆซ์ž ์ธ์‹ ๋ชจ๋ธ์„ ๊ต์œกํ•˜๊ธฐ ์œ„ํ•œ ๋ฐ๋ชจ ์ฝ”๋“œ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
  • Visual Studio Code์—์„œ ๋ณต์ œ๋œ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋ฅผ ์—ฝ๋‹ˆ๋‹ค.
  • ์ฝ์–ด!

Azure ML ์ž‘์—… ์˜์—ญ ๋ฐ Azure ML ํฌํ„ธ

Azure ML์€ ๊ฐœ๋…์„ ์ค‘์‹ฌ์œผ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค. ์—…๋ฌด ๊ณต๊ฐ„ โ€” ์ž‘์—… ๊ณต๊ฐ„. ์ž‘์—… ๊ณต๊ฐ„์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ๊ณ , ํ›ˆ๋ จ์„ ์œ„ํ•ด ์‹คํ—˜์„ ์ž‘์—… ๊ณต๊ฐ„์œผ๋กœ ๋ณด๋‚ด๊ณ , ํ›ˆ๋ จ ๊ฒฐ๊ณผ(๊ฒฐ๊ณผ ๋ฉ”ํŠธ๋ฆญ ๋ฐ ๋ชจ๋ธ)๋„ ๊ฑฐ๊ธฐ์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ์„ ํ†ตํ•ด ์ž‘์—… ๊ณต๊ฐ„ ๋‚ด๋ถ€์— ๋ฌด์—‡์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Azure ML ํฌํ„ธ - ์—ฌ๊ธฐ์—์„œ ๋ฐ์ดํ„ฐ ๋กœ๋“œ์—์„œ ์‹คํ—˜ ๋ชจ๋‹ˆํ„ฐ๋ง ๋ฐ ๋ชจ๋ธ ๋ฐฐํฌ์— ์ด๋ฅด๊ธฐ๊นŒ์ง€ ๋‹ค์–‘ํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์›น ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด ์ž‘์—… ๊ณต๊ฐ„์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Azure ํฌํ„ธ (์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค. ๋‹จ๊ณ„๋ณ„ ์ง€์นจ), ๋˜๋Š” Azure CLI ๋ช…๋ น์ค„(๋ช…๋ น):

az extension add -n azure-cli-ml
az group create -n myazml -l northeurope
az ml workspace create -w myworkspace -g myazml

๋˜ํ•œ ์ž‘์—… ๊ณต๊ฐ„๊ณผ ๊ด€๋ จ๋œ ์ผ๋ถ€ ์ปดํ“จํŒ… ๋ฆฌ์†Œ์Šค (๊ณ„์‚ฐ). ๋ชจ๋ธ์„ ํ›ˆ๋ จ์‹œํ‚ค๋Š” ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ƒ์„ฑํ•œ ํ›„์—๋Š” ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‹คํ–‰์„ ์œ„ํ•ด ์‹คํ—˜ ๋ณด๋‚ด๊ธฐ ์ž‘์—… ๊ณต๊ฐ„์— ์ง€์ •ํ•˜๊ณ  ์ปดํ“จํŒ… ๋Œ€์ƒ - ์ด ๊ฒฝ์šฐ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ํŒจํ‚ค์ง•ํ•˜์—ฌ ์›ํ•˜๋Š” ์ปดํ“จํŒ… ํ™˜๊ฒฝ์—์„œ ์‹คํ–‰ํ•œ ๋‹ค์Œ ๋ชจ๋“  ์‹คํ—˜ ๊ฒฐ๊ณผ๋ฅผ ์ถ”๊ฐ€ ๋ถ„์„ ๋ฐ ์‚ฌ์šฉ์„ ์œ„ํ•ด ์ž‘์—… ๊ณต๊ฐ„์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

MNIST ํ•™์Šต ์Šคํฌ๋ฆฝํŠธ

๊ณ ์ „์ ์ธ ๋ฌธ์ œ๋ฅผ ๊ณ ๋ คํ•˜์‹ญ์‹œ์˜ค ํ•„๊ธฐ ์ˆซ์ž ์ธ์‹ MNIST ๋ฐ์ดํ„ฐ ์„ธํŠธ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์•ž์œผ๋กœ๋Š” ๋ชจ๋“  ํ•™์Šต ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ €์žฅ์†Œ์— ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. train_local.py, SkLearn ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ์„ ํ˜• ํšŒ๊ท€ ๋ชจ๋ธ์„ ๊ต์œกํ•ฉ๋‹ˆ๋‹ค. ๋ฌผ๋ก  ์ด๊ฒƒ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•์ด ์•„๋‹ˆ๋ผ๋Š” ๊ฒƒ์„ ์ดํ•ดํ•ฉ๋‹ˆ๋‹ค. ๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ์˜ˆ๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์Šคํฌ๋ฆฝํŠธ๋Š” ๋จผ์ € OpenML์—์„œ MNIST ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค์šด๋กœ๋“œํ•œ ๋‹ค์Œ ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. LogisticRegression ๋ชจ๋ธ์„ ํ›ˆ๋ จํ•œ ๋‹ค์Œ ๊ฒฐ๊ณผ ์ •ํ™•๋„๋ฅผ ์ธ์‡„ํ•ฉ๋‹ˆ๋‹ค.

mnist = fetch_openml('mnist_784')
mnist['target'] = np.array([int(x) for x in mnist['target']])

shuffle_index = np.random.permutation(len(mist['data']))
X, y = mnist['data'][shuffle_index], mnist['target'][shuffle_index]

X_train, X_test, y_train, y_test = 
  train_test_split(X, y, test_size = 0.3, random_state = 42)

lr = LogisticRegression()
lr.fit(X_train, y_train)
y_hat = lr.predict(X_test)
acc = np.average(np.int32(y_hat == y_test))

print('Overall accuracy:', acc)

์ปดํ“จํ„ฐ์—์„œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ๋ช‡ ์ดˆ ์•ˆ์— ๊ฒฐ๊ณผ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Azure ML์—์„œ ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰

Azure ML์„ ํ†ตํ•ด ๊ต์œก ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ๋‘ ๊ฐ€์ง€ ์ฃผ์š” ์ด์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์ผ๋ฐ˜์ ์œผ๋กœ ๋กœ์ปฌ ์ปดํ“จํ„ฐ๋ณด๋‹ค ์ƒ์‚ฐ์ ์ธ ์ž„์˜์˜ ์ปดํ“จํŒ… ๋ฆฌ์†Œ์Šค์—์„œ ๊ต์œก์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๋™์‹œ์— Azure ML ์ž์ฒด๋Š” ํ˜„์žฌ ๋””๋ ‰ํ„ฐ๋ฆฌ์˜ ๋ชจ๋“  ํŒŒ์ผ์ด ํฌํ•จ๋œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ docker ์ปจํ…Œ์ด๋„ˆ๋กœ ์••์ถ•ํ•˜๊ณ , ํ•„์š”ํ•œ ์ข…์†์„ฑ์„ ์„ค์น˜ํ•˜๊ณ , ์‹คํ–‰์„ ์œ„ํ•ด ์ „์†กํ•ฉ๋‹ˆ๋‹ค.
  • Azure ML ์ž‘์—… ์˜์—ญ ๋‚ด์˜ ๋‹จ์ผ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์— ๊ฒฐ๊ณผ๋ฅผ ์”๋‹ˆ๋‹ค. ์ด ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•˜๋ ค๋ฉด ์Šคํฌ๋ฆฝํŠธ์— ๋ช‡ ์ค„์˜ ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ๊ฒฐ๊ณผ ์ •ํ™•๋„๋ฅผ ๊ธฐ๋กํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

from azureml.core.run import Run
...
try:    
    run = Run.get_submitted_run()
    run.log('accuracy', acc)
except:
    pass

์Šคํฌ๋ฆฝํŠธ์˜ ํ•ด๋‹น ๋ฒ„์ „์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. train_universal.py (์œ„์— ์“ด ๊ฒƒ๋ณด๋‹ค ์กฐ๊ธˆ ๋” ๊ตํ™œํ•˜์ง€๋งŒ ๋งŽ์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค). ์ด ์Šคํฌ๋ฆฝํŠธ๋Š” ๋กœ์ปฌ ๋ฐ ์›๊ฒฉ ์ปดํ“จํŒ… ๋ฆฌ์†Œ์Šค์—์„œ ๋ชจ๋‘ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

VS Code์˜ Azure ML์—์„œ ์‹คํ–‰ํ•˜๋ ค๋ฉด ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  1. Azure ํ™•์žฅ์ด ๊ตฌ๋…์— ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ์™ผ์ชฝ ๋ฉ”๋‰ด์—์„œ Azure ์•„์ด์ฝ˜์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. ์—ฐ๊ฒฐ๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ์˜ค๋ฅธ์ชฝ ํ•˜๋‹จ์— ์•Œ๋ฆผ์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค(์ด์™€ ๊ฐ™์ด), ๋ธŒ๋ผ์šฐ์ €๋ฅผ ํ†ตํ•ด ์ž…๋ ฅํ•  ์ˆ˜ ์žˆ๋Š” ํด๋ฆญ. ํด๋ฆญํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. Ctrl-Shift-P VS Code ๋ช…๋ น์ค„์„ ํ˜ธ์ถœํ•˜๊ณ  ๋‹ค์Œ์„ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค. Azure ๋กœ๊ทธ์ธ.

  2. ๊ทธ๋Ÿฐ ๋‹ค์Œ Azure ์„น์…˜(์™ผ์ชฝ ์•„์ด์ฝ˜)์—์„œ ์„น์…˜์„ ์ฐพ์Šต๋‹ˆ๋‹ค. ๊ธฐ๊ณ„ ํ•™์Šต:

๋‘๋ ค์›€์„ ๊ทน๋ณตํ•˜๊ณ  Azure ๊ธฐ๊ณ„ ํ•™์Šต์„ ์‹œ์ž‘ํ•˜๋Š” ๋ฐฉ๋ฒ•
์—ฌ๊ธฐ์—์„œ ์ž‘์—… ๊ณต๊ฐ„ ๋‚ด์—์„œ ์ปดํ“จํŒ… ๋ฆฌ์†Œ์Šค, ์‹คํ—˜ ๋“ฑ ๋‹ค์–‘ํ•œ ๊ฐœ์ฒด ๊ทธ๋ฃน์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. ํŒŒ์ผ ๋ชฉ๋ก์œผ๋กœ ์ด๋™ํ•˜์—ฌ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋งˆ์šฐ์Šค ์˜ค๋ฅธ์ชฝ ๋ฒ„ํŠผ์œผ๋กœ ํด๋ฆญํ•˜์‹ญ์‹œ์˜ค. train_universal.py ๊ทธ๋ฆฌ๊ณ  ์„ ํƒ Azure ML: Azure์—์„œ ์‹คํ—˜์œผ๋กœ ์‹คํ–‰.

๋‘๋ ค์›€์„ ๊ทน๋ณตํ•˜๊ณ  Azure ๊ธฐ๊ณ„ ํ•™์Šต์„ ์‹œ์ž‘ํ•˜๋Š” ๋ฐฉ๋ฒ•

  1. ๊ทธ๋Ÿฌ๋ฉด VS Code์˜ ๋ช…๋ น์ค„ ์˜์—ญ์— ์ผ๋ จ์˜ ๋Œ€ํ™” ์ƒ์ž๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ ์ค‘์ธ ๊ตฌ๋… ๋ฐ Azure ML ์ž‘์—… ์˜์—ญ์„ ํ™•์ธํ•˜๊ณ  ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. ์ƒˆ ์‹คํ—˜ ๋งŒ๋“ค๊ธฐ:

๋‘๋ ค์›€์„ ๊ทน๋ณตํ•˜๊ณ  Azure ๊ธฐ๊ณ„ ํ•™์Šต์„ ์‹œ์ž‘ํ•˜๋Š” ๋ฐฉ๋ฒ•
๋‘๋ ค์›€์„ ๊ทน๋ณตํ•˜๊ณ  Azure ๊ธฐ๊ณ„ ํ•™์Šต์„ ์‹œ์ž‘ํ•˜๋Š” ๋ฐฉ๋ฒ•
๋‘๋ ค์›€์„ ๊ทน๋ณตํ•˜๊ณ  Azure ๊ธฐ๊ณ„ ํ•™์Šต์„ ์‹œ์ž‘ํ•˜๋Š” ๋ฐฉ๋ฒ•

  1. ์ƒˆ ์ปดํ“จํŒ… ๋ฆฌ์†Œ์Šค๋ฅผ ์ƒ์„ฑํ•˜๋„๋ก ์„ ํƒ ์ƒˆ ์ปดํ“จํŒ… ์ƒ์„ฑ:

    • ๊ณ„์‚ฐ ๊ต์œก์ด ์ง„ํ–‰๋  ์ปดํ“จํŒ… ๋ฆฌ์†Œ์Šค๋ฅผ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค. ๋กœ์ปฌ ์ปดํ“จํ„ฐ ๋˜๋Š” AmlCompute ํด๋ผ์šฐ๋“œ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ๋จธ์‹  ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. STANDARD_DS3_v2, ์ตœ์†Œ ๋จธ์‹  ์ˆ˜๋Š” 0์ž…๋‹ˆ๋‹ค(์‹๋Ÿ‰์— ๋”ฐ๋ผ ์ตœ๋Œ€ 1๋Œ€ ์ด์ƒ). ์ด๋Š” VS Code ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด ๋˜๋Š” ์ด์ „์— ๋‹ค์Œ์„ ํ†ตํ•ด ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ML ํฌํ„ธ.

    ๋‘๋ ค์›€์„ ๊ทน๋ณตํ•˜๊ณ  Azure ๊ธฐ๊ณ„ ํ•™์Šต์„ ์‹œ์ž‘ํ•˜๋Š” ๋ฐฉ๋ฒ•

  2. ๋‹ค์Œ์œผ๋กœ ๊ตฌ์„ฑ์„ ์„ ํƒํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ปดํ“จํŒ… ๊ตฌ์„ฑ, ํ›ˆ๋ จ์„ ์œ„ํ•ด ์ƒ์„ฑ๋œ ์ปจํ…Œ์ด๋„ˆ์˜ ๋งค๊ฐœ๋ณ€์ˆ˜, ํŠนํžˆ ํ•„์š”ํ•œ ๋ชจ๋“  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ์˜ ๊ฒฝ์šฐ Scikit Learn์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์œผ๋ฏ€๋กœ SkLearn์„ ๋ˆ„๋ฅธ ๋‹ค์Œ Enter ํ‚ค๋ฅผ ๋ˆŒ๋Ÿฌ ์ œ์•ˆ๋œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ชฉ๋ก์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ์ถ”๊ฐ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ์—ฌ๊ธฐ์— ์ง€์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

    ๋‘๋ ค์›€์„ ๊ทน๋ณตํ•˜๊ณ  Azure ๊ธฐ๊ณ„ ํ•™์Šต์„ ์‹œ์ž‘ํ•˜๋Š” ๋ฐฉ๋ฒ•
    ๋‘๋ ค์›€์„ ๊ทน๋ณตํ•˜๊ณ  Azure ๊ธฐ๊ณ„ ํ•™์Šต์„ ์‹œ์ž‘ํ•˜๋Š” ๋ฐฉ๋ฒ•

  3. ๊ทธ๋Ÿฌ๋ฉด ์‹คํ—˜์„ ์„ค๋ช…ํ•˜๋Š” JSON ํŒŒ์ผ์ด ์žˆ๋Š” ์ฐฝ์ด ์—ด๋ฆฝ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—์„œ ์‹คํ—˜ ์ด๋ฆ„๊ณผ ๊ฐ™์€ ์ผ๋ถ€ ๋งค๊ฐœ ๋ณ€์ˆ˜๋ฅผ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ ํ›„ ๋งํฌ ํด๋ฆญ ์‹คํ—˜ ์ œ์ถœ ์ด ํŒŒ์ผ ๋ฐ”๋กœ ๋‚ด๋ถ€:

๋‘๋ ค์›€์„ ๊ทน๋ณตํ•˜๊ณ  Azure ๊ธฐ๊ณ„ ํ•™์Šต์„ ์‹œ์ž‘ํ•˜๋Š” ๋ฐฉ๋ฒ•

  1. VS Code๋ฅผ ํ†ตํ•ด ์‹คํ—˜์„ ์„ฑ๊ณต์ ์œผ๋กœ ์ œ์ถœํ•˜๋ฉด ์•Œ๋ฆผ ์˜์—ญ ์˜ค๋ฅธ์ชฝ์— ๋‹ค์Œ ๋งํฌ๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. Azure ML ํฌํ„ธ, ์—ฌ๊ธฐ์—์„œ ์‹คํ—˜์˜ ์ƒํƒœ์™€ ๊ฒฐ๊ณผ๋ฅผ ์ถ”์ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‘๋ ค์›€์„ ๊ทน๋ณตํ•˜๊ณ  Azure ๊ธฐ๊ณ„ ํ•™์Šต์„ ์‹œ์ž‘ํ•˜๋Š” ๋ฐฉ๋ฒ•
์ดํ›„ ์„น์…˜์—์„œ ํ•ญ์ƒ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‹คํ—˜ Azure ML ํฌํ„ธ๋˜๋Š” ์„น์…˜์—์„œ Azure ๊ธฐ๊ณ„ ํ•™์Šต ์‹คํ—˜ ๋ชฉ๋ก์—์„œ:

๋‘๋ ค์›€์„ ๊ทน๋ณตํ•˜๊ณ  Azure ๊ธฐ๊ณ„ ํ•™์Šต์„ ์‹œ์ž‘ํ•˜๋Š” ๋ฐฉ๋ฒ•

  1. ๊ทธ ํ›„์— ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๋ณ€๊ฒฝํ•˜๋ฉด ์‹คํ—˜์„ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜๋Š” ๊ฒƒ์ด ํ›จ์”ฌ ๋น ๋ฅด๊ณ  ์‰ฌ์›Œ์ง‘๋‹ˆ๋‹ค. ํŒŒ์ผ์„ ๋งˆ์šฐ์Šค ์˜ค๋ฅธ์ชฝ ๋ฒ„ํŠผ์œผ๋กœ ํด๋ฆญํ•˜๋ฉด ์ƒˆ ๋ฉ”๋‰ด ํ•ญ๋ชฉ์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ๋งˆ์ง€๋ง‰ ์‹คํ–‰ ๋ฐ˜๋ณต - ์„ ํƒํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ์‹คํ—˜์ด ์ฆ‰์‹œ ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค.

๋‘๋ ค์›€์„ ๊ทน๋ณตํ•˜๊ณ  Azure ๊ธฐ๊ณ„ ํ•™์Šต์„ ์‹œ์ž‘ํ•˜๋Š” ๋ฐฉ๋ฒ•
Azure ML Portal์—์„œ ๋ชจ๋“  ์‹œ์ž‘์˜ ๋ฉ”ํŠธ๋ฆญ ๊ฒฐ๊ณผ๋ฅผ ํ•ญ์ƒ ์ฐพ์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ ๊ธฐ๋กํ•ด ๋‘˜ ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

์ด์ œ Azure ML์„ ์‚ฌ์šฉํ•˜์—ฌ ์‹คํ—˜์„ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์ด ๊ฐ„๋‹จํ•˜๊ณ  ๊ณ ํ†ต์Šค๋Ÿฝ์ง€ ์•Š์œผ๋ฉฐ ๊ทธ๋ ‡๊ฒŒ ํ•จ์œผ๋กœ์จ ๋งŽ์€ ์ด์ ์„ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

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

๋‹ค์Œ์€ ๋ญ์ง€?

์ด ๊ธฐ์‚ฌ๋ฅผ ์ฝ์€ ํ›„ ์ž‘์—…์—์„œ Azure ML์„ ์‚ฌ์šฉํ•˜์—ฌ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•˜๊ณ , ์ปดํ“จํŒ… ๋ฆฌ์†Œ์Šค๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ , ๊ฒฐ๊ณผ๋ฅผ ์ค‘์•™์—์„œ ์ €์žฅํ•  ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ Azure ML์€ ํ›จ์”ฌ ๋” ๋งŽ์€ ์ด์ ์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค!

์ž‘์—… ๊ณต๊ฐ„ ๋‚ด์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์•ก์„ธ์Šคํ•˜๊ธฐ ์‰ฌ์šด ๋ชจ๋“  ์ž‘์—…์— ๋Œ€ํ•œ ์ค‘์•™ ์ €์žฅ์†Œ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ Visual Studio Code๊ฐ€ ์•„๋‹Œ API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‹คํ—˜์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ํ•˜์ดํผ ๋งค๊ฐœ๋ณ€์ˆ˜ ์ตœ์ ํ™”๋ฅผ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•˜๊ณ  ๋‹ค๋ฅธ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์—ฌ๋Ÿฌ ๋ฒˆ ์‹คํ–‰ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ์— ํŠนํžˆ ์œ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ Azure ML์—๋Š” ํŠน๋ณ„ํ•œ ๊ธฐ์ˆ ์ด ๋‚ด์žฅ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ดํผ ๋“œ๋ผ์ด๋ธŒ, ํ•˜์ดํผํŒŒ๋ผ๋ฏธํ„ฐ์˜ ๋” ๊นŒ๋‹ค๋กœ์šด ๊ฒ€์ƒ‰ ๋ฐ ์ตœ์ ํ™”๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ ๊ฒŒ์‹œ๋ฌผ์—์„œ ์ด๋Ÿฌํ•œ ๊ฐ€๋Šฅ์„ฑ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

์œ ์šฉํ•œ ์ž๋ฃŒ

Azure ML์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์•Œ์•„๋ณด๋ ค๋ฉด ๋‹ค์Œ Microsoft Learn ๊ณผ์ •์ด ๋„์›€์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : habr.com

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€