๋ณธ๋ฌธ์œผ๋กœ ๊ฑด๋„ˆ๋›ฐ๊ธฐ

๐Ÿค– MLOps: ์˜คํ”ˆ์†Œ์Šค ํ”„๋กœ์ ํŠธ๋กœ ๊ตฌ์ถ•ํ•œ ์˜จํ”„๋ ˆ๋ฏธ์Šค MLOps

ยท ์•ฝ 7๋ถ„
์ „์ œ์˜
AI Platform Engineer

Photo by Maxim Hopman on Unsplash

1. ๊ฐœ์š”โ€‹

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

์˜จํ”„๋ ˆ๋ฏธ์Šค ์ž์› ๊ธฐ๋ฐ˜์˜ MLOps ํด๋Ÿฌ์Šคํ„ฐ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ด์ ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค:

  • ์ž์› ํ™œ์šฉ: ํด๋Ÿฌ์Šคํ„ฐ์˜ ๋ชจ๋“  GPU ์ž์›์„ ํšจ์œจ์ ์œผ๋กœ ํ™œ์šฉํ•˜์—ฌ GPU ์œ ํœด ์‹œ๊ฐ„์„ ์ค„์ž…๋‹ˆ๋‹ค. GPU 24์‹œ๊ฐ„ ๊ฐ€๋™์œผ๋กœ ๊ธฐ์กด ํ™˜๊ฒฝ ๋Œ€๋น„ GPU ํ™œ์šฉ๋ฅ ์„ 3๋ฐฐ ํ–ฅ์ƒ์‹œ์ผฐ์Šต๋‹ˆ๋‹ค.
  • AutoML: ์ž๋™ํ™”๋œ ๋ชจ๋ธ ์„ ํƒ ๋ฐ ํ•˜์ดํผํŒŒ๋ผ๋ฏธํ„ฐ ํŠœ๋‹์„ ์ง€์›ํ•˜๋Š” AutoML ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. 2์ฃผ ๋™์•ˆ 800ํšŒ ์ด์ƒ์˜ ์‹คํ—˜์„ ์ˆ˜ํ–‰ํ–ˆ์œผ๋ฉฐ, ์ด ๊ฒฐ๊ณผ๋Š” ์ƒ์šฉํ™”์— ํ™œ์šฉ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ๋ณ‘๋ ฌ ํ•™์Šต: ๋‹จ์ผ ํ•™์Šต ์ž‘์—…์„ ์—ฌ๋Ÿฌ GPU์— ๋ณ‘๋ ฌ ๋ถ„์‚ฐํ•˜์—ฌ ํด๋Ÿฌ์Šคํ„ฐ ์ „์ฒด GPU๋ฅผ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์›๊ฒฉ ๋…ธํŠธ๋ถ: ์—ฐ๊ตฌ์ž๋“ค์—๊ฒŒ ์˜จ๋””๋งจ๋“œ Jupyter ๋…ธํŠธ๋ถ์„ ์ œ๊ณตํ•˜์—ฌ ML ์—ฐ๊ตฌ ์ž์›์„ ๋ถ„์‚ฐํ•ฉ๋‹ˆ๋‹ค. ์ž์› ์ œ์•ฝ ์—†์ด ํด๋Ÿฌ์Šคํ„ฐ์— ์ ‘์†ํ•˜๊ณ  ์‹คํ—˜์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ ๋‹ค์ด์–ด๊ทธ๋žจ์€ MLOps๋ฅผ ์œ„ํ•œ ์˜จํ”„๋ ˆ๋ฏธ์Šค ํด๋Ÿฌ์Šคํ„ฐ ์•„ํ‚คํ…์ฒ˜๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค:

MLOps๋ฅผ ์œ„ํ•œ ์˜จํ”„๋ ˆ๋ฏธ์Šค ํด๋Ÿฌ์Šคํ„ฐ ์•„ํ‚คํ…์ฒ˜ ๋‹ค์ด์–ด๊ทธ๋žจ

MLOps๋ฅผ ์œ„ํ•œ ์˜จํ”„๋ ˆ๋ฏธ์Šค Kubernetes ์•„ํ‚คํ…์ฒ˜ ๋‹ค์ด์–ด๊ทธ๋žจ; ์‚ฌ์šฉ์ž๋Š” Kubeflow๋ฅผ ํ†ตํ•ด ML ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ  ์ž๋™ํ™”ํ•ฉ๋‹ˆ๋‹ค. Kubeflow/Katib์€ ํ•˜์ดํผํŒŒ๋ผ๋ฏธํ„ฐ ํŠœ๋‹์„ ์œ„ํ•ด Argo Workflows๋ฅผ ์›Œํฌํ”Œ๋กœ์šฐ ์—”์ง„์œผ๋กœ ํ™œ์šฉํ•˜๊ณ , Kubeflow/Training Operator๋Š” ๋ถ„์‚ฐ ํ•™์Šต ์ž‘์—…์„ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. Argo Workflows๊ฐ€ ์ด ML ํŒŒ์ดํ”„๋ผ์ธ๋“ค์„ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ํ•ฉ๋‹ˆ๋‹ค. MySQL ํด๋Ÿฌ์Šคํ„ฐ๋Š” ์›Œํฌํ”Œ๋กœ์šฐ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์™€ ๊ฒฐ๊ณผ๋ฅผ ์ €์žฅํ•˜๊ณ , MinIO ํด๋Ÿฌ์Šคํ„ฐ๋Š” ์•„ํ‹ฐํŒฉํŠธ ์Šคํ† ๋ฆฌ์ง€๋ฅผ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค. ํด๋Ÿฌ์Šคํ„ฐ์˜ GPU ์„œ๋ฒ„๊ฐ€ ๋ชจ๋ธ ํ•™์Šต์— ํ•„์š”ํ•œ ์—ฐ์‚ฐ ๋Šฅ๋ ฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

2. ๋ฌธ์ œ ์ •์˜โ€‹

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

์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด, GPU ์„œ๋ฒ„๋ฅผ ํด๋Ÿฌ์Šคํ„ฐ๋กœ ํ†ตํ•ฉํ•˜๊ณ  ์˜คํ”ˆ์†Œ์Šค ํ”„๋กœ์ ํŠธ ๊ธฐ๋ฐ˜์˜ MLOps ํ”Œ๋žซํผ์„ ๋„์ž…ํ•˜๋Š” ๋ฐฉ์•ˆ์„ ์ œ์•ˆํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ตฌ์ฒด์ ์ธ ๋ชฉํ‘œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:

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

ํ”„๋กœ์ ํŠธ๋Š” MLOps ํ”Œ๋žซํผ์˜ ํšจ๊ณผ์™€ AI ์—ฐ๊ตฌ์— ๋ฏธ์น˜๋Š” ์˜ํ–ฅ์„ ๊ฒ€์ฆํ•˜๊ธฐ ์œ„ํ•œ ๊ฐœ๋… ๊ฒ€์ฆ(PoC)๋ถ€ํ„ฐ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค.

3. ๊ตฌํ˜„ ๋ฐฉ๋ฒ•โ€‹

์œ„์—์„œ ์„ค๋ช…ํ•œ ์•„ํ‚คํ…์ฒ˜๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ์ง„ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค:

3.1. ์˜จํ”„๋ ˆ๋ฏธ์Šค ํด๋Ÿฌ์Šคํ„ฐ ๊ตฌ์„ฑโ€‹

๊ธฐ์กด์— GPU ์„œ๋ฒ„๊ฐ€ ๊ฐ–์ถฐ์ง„ ์˜จํ”„๋ ˆ๋ฏธ์Šค ํด๋Ÿฌ์Šคํ„ฐ๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. GPU ์„œ๋ฒ„๋ฅผ ํด๋Ÿฌ์Šคํ„ฐ์— ํ†ตํ•ฉํ•˜๊ณ  MLOps ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์ง€์›ํ•˜๋„๋ก ๊ตฌ์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค. ํด๋Ÿฌ์Šคํ„ฐ์— ๋ฐฐํฌํ•œ ํ•ต์‹ฌ ์ปดํฌ๋„ŒํŠธ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:

  • Argo Workflows: Kubernetes์—์„œ ML ํŒŒ์ดํ”„๋ผ์ธ์„ ์‹คํ–‰ํ•˜๋Š” ๋ฒ”์šฉ ์›Œํฌํ”Œ๋กœ์šฐ ์ปจํŠธ๋กค๋Ÿฌ์ž…๋‹ˆ๋‹ค. Argo Workflows๋ฅผ ํ†ตํ•ด ์—ฐ๊ตฌ์ž๋“ค์—๊ฒŒ ๋ณ„๋„์˜ ์ธํ”„๋ผ ์„ค์ • ์—†์ด๋„ ์œ ์—ฐํ•˜๊ณ  ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ์›Œํฌํ”Œ๋กœ์šฐ ์‹œ์Šคํ…œ์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.
  • GPU Operator: ํด๋Ÿฌ์Šคํ„ฐ์˜ GPU ์ž์›์„ ๊ด€๋ฆฌํ•˜๊ณ  ์—ฐ๊ตฌ์ž๋“ค์ด ๋ชจ๋“  ๊ฐ€์šฉ GPU๋ฅผ ์‹คํ—˜์— ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•˜๋Š” ์˜คํผ๋ ˆ์ดํ„ฐ์ž…๋‹ˆ๋‹ค.
  • Kubeflow: ML ๋ชจ๋ธ์˜ ์‹คํ–‰, ํ•™์Šต, ๋ฐฐํฌ๋ฅผ ์œ„ํ•œ Kubernetes ๊ธฐ๋ฐ˜ ๋จธ์‹ ๋Ÿฌ๋‹ ํˆดํ‚ท์ž…๋‹ˆ๋‹ค. ํ•™์Šต ์ž‘์—… ๋ฐ ์‹คํ—˜ ๊ด€๋ฆฌ์— ํ™œ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.

๋ผ์ด์„ ์Šค ๋น„์šฉ ์—†์ด ์ž์œ ๋กญ๊ฒŒ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•ํ•  ์ˆ˜ ์žˆ๋Š” ํ™˜๊ฒฝ์„ ๊ตฌ์ถ•ํ•˜๊ธฐ ์œ„ํ•ด ์ด ์˜คํ”ˆ์†Œ์Šค ํ”„๋กœ์ ํŠธ๋“ค์„ ์„ ํƒํ–ˆ์Šต๋‹ˆ๋‹ค.

3.2. Argo Workflows๋กœ ๋ฐ์ดํ„ฐ ํŒŒ์ดํ”„๋ผ์ธ ๊ตฌํ˜„โ€‹

  • ์ด๋ฒˆ์—๋Š” Kubeflow๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค: Kubeflow๋Š” ML ๋ชจ๋ธ์˜ ์‹คํ–‰, ํ•™์Šต, ๋ฐฐํฌ๋ฅผ ์œ„ํ•œ Kubernetes ๊ธฐ๋ฐ˜ ๋จธ์‹ ๋Ÿฌ๋‹ ํˆดํ‚ท์ž…๋‹ˆ๋‹ค. ํ•™์Šต ์ž‘์—… ๋ฐ ์‹คํ—˜ ๊ด€๋ฆฌ์—๋Š” Kubeflow๋ฅผ ์‚ฌ์šฉํ–ˆ์ง€๋งŒ, ๋ฐ์ดํ„ฐ ํŒŒ์ดํ”„๋ผ์ธ ๊ด€๋ฆฌ์—๋Š” Argo Workflows๋ฅผ ์„ ํƒํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ ํŒŒ์ดํ”„๋ผ์ธ์—์„œ์˜ Kubeflow์— ๋Œ€ํ•œ ํŠน์ด์‚ฌํ•ญ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:

    • ์ฆ‰์‹œ ์ •์  ๊ทธ๋ž˜ํ”„ ์ œ๊ณต: Kubeflow Pipeline์€ ํŒŒ์ดํ”„๋ผ์ธ์˜ ์ •์  ๊ทธ๋ž˜ํ”„๋ฅผ ๋‚ด์žฅ ์‹œ๊ฐํ™”๋กœ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ํŒŒ์ดํ”„๋ผ์ธ ๊ตฌ์กฐ๋ฅผ ์‹œ๊ฐ์ ์œผ๋กœ ํŒŒ์•…ํ•˜๊ธฐ ์‰ฝ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

    • ์‚ฌ์ „ ๋นŒ๋“œ ํ•„์š”: Kubeflow๋Š” ํŒŒ์ดํ”„๋ผ์ธ์„ ์‚ฌ์ „์— ๋นŒ๋“œํ•ด์•ผ ํ•˜๋ฏ€๋กœ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฌ๊ณ  ์œ ์—ฐ์„ฑ์ด ๋–จ์–ด์ง‘๋‹ˆ๋‹ค. Kubeflow Pipeline์˜ ์ž‘์—…์—๋Š” ํ•™์Šต ๋ฐ ์ถ”๋ก ์„ ์œ„ํ•œ ์ด๋ฏธ์ง€๊ฐ€ ๋ฏธ๋ฆฌ ๋นŒ๋“œ๋˜์–ด ์žˆ์–ด์•ผ ํ•ด์„œ, ํŒŒ์ดํ”„๋ผ์ธ์„ ๋น ๋ฅด๊ฒŒ ์ˆ˜์ •ํ•˜๊ธฐ ์–ด๋ ต์Šต๋‹ˆ๋‹ค. CI/CD ํŒŒ์ดํ”„๋ผ์ธ์œผ๋กœ ๋ณด์™„ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์—ฌ์ „ํžˆ ์ถ”๊ฐ€ ์ž‘์—…์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ด ์ ์ด Argo Workflows๋ฅผ ์„ ํƒํ•˜๊ฒŒ ๋œ ํ•ต์‹ฌ ์ด์œ ์˜€์Šต๋‹ˆ๋‹ค.

  • ๋‹ค์‹œ, Argo Workflows: Argo Workflows๋Š” ํด๋ผ์šฐ๋“œ ๋„ค์ดํ‹ฐ๋ธŒ ํ™˜๊ฒฝ์„ ์œ„ํ•œ ๋ฒ”์šฉ ์›Œํฌํ”Œ๋กœ์šฐ ์ปจํŠธ๋กค๋Ÿฌ์ž…๋‹ˆ๋‹ค. GPU Operator์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋ฉด ๋‹ค์–‘ํ•œ ๊ทธ๋ž˜ํ”„ ๊ตฌ์กฐ์˜ ๋ฐ์ดํ„ฐ ํŒŒ์ดํ”„๋ผ์ธ์„ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ Argo Workflows๋Š” YAML๋กœ ์ •์˜ํ•˜์ง€๋งŒ, ์ €ํฌ๋Š” Python ์Šคํฌ๋ฆฝํŠธ๋กœ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋Š” Argo Workflows SDK์ธ Hera๋ฅผ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฐฉ์‹ ๋•๋ถ„์— ML ์—ฐ๊ตฌ์ž๋“ค์ด ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ๋” ์‰ฝ๊ฒŒ ์ž‘์„ฑํ•˜๊ณ  ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ ํŒŒ์ดํ”„๋ผ์ธ์—์„œ์˜ Argo Workflows ํŠน์ด์‚ฌํ•ญ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:

    • ์‚ฌ์ „ ๋นŒ๋“œ ๋ถˆํ•„์š”: Argo Workflows๋Š” ๋ฐ์ดํ„ฐ ํŒŒ์ดํ”„๋ผ์ธ์— ๋ณ„๋„์˜ ์ด๋ฏธ์ง€ ์‚ฌ์ „ ๋นŒ๋“œ๊ฐ€ ํ•„์š” ์—†์Šต๋‹ˆ๋‹ค. ์—ฐ๊ตฌ์ž๋“ค์€ Python ์Šคํฌ๋ฆฝํŠธ๋กœ ํŒŒ์ดํ”„๋ผ์ธ์„ ์ •์˜ํ•˜๊ณ  ๋ฐ”๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋•๋ถ„์— ํŒŒ์ดํ”„๋ผ์ธ์„ ์†์‰ฝ๊ฒŒ ์ˆ˜์ •ํ•˜๊ณ  ๋น ๋ฅด๊ฒŒ ์‹คํ—˜์„ ๋Œ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

      ํ•™์Šต ๋‹จ๊ณ„์—์„œ๋Š” ์‚ฌ์ „ ๋นŒ๋“œ๋œ ์ด๋ฏธ์ง€์— ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ์‹์ด๋‚˜, Hera SDK๋กœ ํ™˜๊ฒฝ์„ ๊ตฌ์„ฑํ•˜๋Š” CUDA scratch ์ด๋ฏธ์ง€๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹ ๋ชจ๋‘ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ถ”๋ก  ๋‹จ๊ณ„๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค.

    • ๋‚ด์žฅ ๊ทธ๋ž˜ํ”„ ์—†์Œ โ€” ๋ชจ๋“  ๊ฒƒ์„ ์ง์ ‘ ๊ตฌ์„ฑ: Argo Workflows๋Š” ํŒŒ์ดํ”„๋ผ์ธ ๊ทธ๋ž˜ํ”„๋ฅผ ๊ธฐ๋ณธ์œผ๋กœ ์ œ๊ณตํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์—ฐ๊ตฌ์ž๊ฐ€ Python ์Šคํฌ๋ฆฝํŠธ์—์„œ ์ง์ ‘ ๊ทธ๋ž˜ํ”„ ๊ตฌ์กฐ๋ฅผ ์ •์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ์œ ์—ฐ์„ฑ ๋•๋ถ„์— ํŠน์ • ์š”๊ตฌ์— ๋งž๋Š” ์ปค์Šคํ…€ ํŒŒ์ดํ”„๋ผ์ธ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์ง€๋งŒ, ์žฅ๋‹จ์ ์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‹œ๊ฐํ™”๊ฐ€ ํ•„์š”ํ•˜๋‹ค๋ฉด Grafana๋‚˜ TensorBoard ๊ฐ™์€ ๋„๊ตฌ๋ฅผ ๋ณ„๋„๋กœ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    ํด๋Ÿฌ์Šคํ„ฐ์— Argo Workflows๊ฐ€ ์žˆ๋‹ค๋ฉด, Argo Workflows์™€ Hera SDK๋งŒ์œผ๋กœ ๋ฐ์ดํ„ฐ ํŒŒ์ดํ”„๋ผ์ธ ์‹œ์Šคํ…œ์„ ๋ฐ”๋กœ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

3.3. Kubeflow์—์„œ Katib AutoML ๊ตฌ์„ฑโ€‹

Katib AutoML์€ ML ๋ชจ๋ธ์˜ ํ•˜์ดํผํŒŒ๋ผ๋ฏธํ„ฐ ํŠœ๋‹๊ณผ ๋ณ‘๋ ฌ ์ขŒํ‘œ ๊ทธ๋ž˜ํ”„ ์‹œ๊ฐํ™”๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. Katib๋ฅผ ํ™œ์šฉํ•˜์—ฌ ํ•˜์ดํผํŒŒ๋ผ๋ฏธํ„ฐ ์ตœ์ ํ™”์™€ ์ตœ์  ๋ชจ๋ธ ์„ ํƒ ๊ณผ์ •์„ ์ž๋™ํ™”ํ–ˆ์Šต๋‹ˆ๋‹ค. Katib๋Š” Argo Workflows ๊ฐ™์€ ์™ธ๋ถ€ ์—”์ง„์„ ์ง€์›ํ•˜๋ฏ€๋กœ, Katib์™€ Argo Workflows๋ฅผ ์—ฐ๋™ํ•˜์—ฌ AutoML ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ด€๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค.

Katib์˜ ํ•ต์‹ฌ ๊ธฐ๋Šฅ์€ ์ง€์†์ ์ธ ํ•˜์ดํผํŒŒ๋ผ๋ฏธํ„ฐ ํŠœ๋‹์ž…๋‹ˆ๋‹ค. ์—ฐ๊ตฌ์ž๋“ค์€ ํƒ์ƒ‰ํ•  ํ•˜์ดํผํŒŒ๋ผ๋ฏธํ„ฐ ๊ณต๊ฐ„๊ณผ ์ตœ์ ํ™” ๋ชฉํ‘œ ์ง€ํ‘œ๋ฅผ ์ •์˜ํ•˜๋ฉด, Katib๊ฐ€ ์—ฌ๋Ÿฌ ์‹คํ—˜์„ ๋ณ‘๋ ฌ๋กœ ์‹คํ–‰ํ•˜๋ฉฐ ๋ชฉํ‘œ ์ง€ํ‘œ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํ•˜์ดํผํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์กฐ์ •ํ•ฉ๋‹ˆ๋‹ค. ์‹คํ—˜ ์ง„ํ–‰ ์ƒํ™ฉ์„ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๊ณ  ๊ฒฐ๊ณผ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์ตœ์  ๋ชจ๋ธ์„ ์„ ํƒํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, GPU ์ž์›์„ 24์‹œ๊ฐ„ AutoML ์‹คํ—˜์— ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 2์ฃผ ๋™์•ˆ 800ํšŒ ์ด์ƒ์˜ ์‹คํ—˜์„ ์ˆ˜ํ–‰ํ–ˆ๊ณ , ์ด ๊ฒฐ๊ณผ๋Š” ์ƒ์šฉํ™”์— ํ™œ์šฉ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

3.4. Kubeflow์—์„œ Training Operator ๊ตฌ์„ฑโ€‹

๋ถ„์‚ฐ ํ•™์Šต ํ™˜๊ฒฝ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•ด Kubeflow Training Operator๋ฅผ ์„ ํƒํ–ˆ์Šต๋‹ˆ๋‹ค. Training Operator๋Š” ํ•™์Šต ์ž‘์—…์— ๋Œ€ํ•œ ๊ณ ์ˆ˜์ค€ ์ถ”์ƒํ™”๋ฅผ ์ œ๊ณตํ•˜์—ฌ, ์—ฐ๊ตฌ์ž๋“ค์ด ํด๋Ÿฌ์Šคํ„ฐ์˜ ๋ชจ๋“  ๊ฐ€์šฉ GPU๋ฅผ ๋ณ‘๋ ฌ ํ•™์Šต์— ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋งŒ ์ €ํฌ๊ฐ€ ์‚ฌ์šฉํ•œ v1.6 ๋ฒ„์ „์—์„œ๋Š” Argo Workflows ๊ฐ™์€ ์™ธ๋ถ€ ์—”์ง„์„ ์ง€์›ํ•˜์ง€ ์•Š์•„, Kubeflow Training Operator ์ž์ฒด๋งŒ์œผ๋กœ ๋ถ„์‚ฐ ํ•™์Šต ํ™˜๊ฒฝ์„ ๊ด€๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค.

Training Operator๋ฅผ ํ†ตํ•ด GPU ์ˆ˜, ๋ฉ”๋ชจ๋ฆฌ, CPU ์ฝ”์–ด ์ˆ˜ ๋“ฑ ์ปค์Šคํ…€ ์ž์›์œผ๋กœ ํ•™์Šต ์ž‘์—…์„ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 2๋Œ€์˜ GPU ์„œ๋ฒ„์—์„œ GPU 8๊ฐœ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํ•™์Šต ์ž‘์—…์„ ๊ตฌ์„ฑํ•˜์—ฌ GPU ์ „์ฒด์— ๋ณ‘๋ ฌ ๋ถ„์‚ฐํ–ˆ์Šต๋‹ˆ๋‹ค. ๋•๋ถ„์— ์—ฐ๊ตฌ์ž๋“ค์€ ์ถ”๊ฐ€ ์ธํ”„๋ผ ์„ค์ • ์—†์ด ํ•™์Šต ์†๋„๋ฅผ ๋†’์ด๊ณ  ํด๋Ÿฌ์Šคํ„ฐ์˜ ๋ชจ๋“  GPU ์ž์›์„ ์ตœ๋Œ€ํ•œ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

3.5. ์—ฐ๊ตฌ์ž๋ฅผ ์œ„ํ•œ JupyterHub ๋ฐฐํฌโ€‹

์ฒ˜์Œ์—๋Š” JupyterLab์„ ๊ฒ€ํ† ํ–ˆ์ง€๋งŒ, ํด๋Ÿฌ์Šคํ„ฐ ์ž์› ํ˜„ํ™ฉ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” JupyterHub๋ฅผ ์ตœ์ข… ์„ ํƒํ–ˆ์Šต๋‹ˆ๋‹ค. JupyterHub๋Š” ํ˜„์žฌ ํด๋Ÿฌ์Šคํ„ฐ ์ƒํƒœ์™€ ๊ฐ€์šฉ ์ž์›์„ ์—ฐ๊ตฌ์ž๋“ค์—๊ฒŒ ์ง๊ด€์ ์œผ๋กœ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

TensorFlow, PyTorch, scikit-learn ๋“ฑ ML ์—ฐ๊ตฌ์— ํ•„์š”ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ๋„๊ตฌ๊ฐ€ ํฌํ•จ๋œ ์‚ฌ์ „ ๋นŒ๋“œ ๋…ธํŠธ๋ถ ์ด๋ฏธ์ง€๋ฅผ ์ œ๊ณตํ–ˆ์Šต๋‹ˆ๋‹ค. ์—ฐ๊ตฌ์ž๋“ค์€ ํ”„๋กœ๋น„์ €๋‹๋œ NFS ์Šคํ† ๋ฆฌ์ง€์˜ ๋ฐ์ดํ„ฐ ๋ ˆ์ดํฌ์— ์‰ฝ๊ฒŒ ์ ‘๊ทผํ•˜๊ณ , ์ž์› ์ œ์•ฝ ์—†์ด ์‹คํ—˜์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

4. ๊ฒฐ๋ก โ€‹

์ด ํ”„๋กœ์ ํŠธ์—์„œ Kubeflow, Argo Workflows, JupyterHub ๋“ฑ ์ตœ์‹  ์˜คํ”ˆ์†Œ์Šค ํ”„๋กœ์ ํŠธ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์˜จํ”„๋ ˆ๋ฏธ์Šค MLOps ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๊ตฌ์ถ•ํ–ˆ์Šต๋‹ˆ๋‹ค. ์—ฐ๊ตฌ์ž๋“ค์—๊ฒŒ ML ์‹คํ—˜์„ ๊ฐœ๋ฐœํ•˜๊ณ  ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์œ ์—ฐํ•˜๊ณ  ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ํ™˜๊ฒฝ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ํ•œ์ •๋œ GPU ์ž์› ํ™˜๊ฒฝ์—์„œ๋„ ํด๋Ÿฌ์Šคํ„ฐ์˜ ๋ชจ๋“  GPU๋ฅผ ํšจ์œจ์ ์œผ๋กœ ํ™œ์šฉํ•˜์—ฌ GPU ์œ ํœด ์‹œ๊ฐ„์„ ์ค„์ด๊ณ  ML ์›Œํฌ๋กœ๋“œ ์šด์˜ ๋น„์šฉ์„ ์ตœ์ ํ™”ํ–ˆ์Šต๋‹ˆ๋‹ค.

5. ํ–ฅํ›„ ๊ณ„ํšโ€‹

์•ž์œผ๋กœ๋Š” ์‚ฌ์šฉ์ž ๊ฒฝํ—˜ ๊ฐœ์„ ์„ ๊ณ„ํšํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ML ์—ฐ๊ตฌ์ž๋“ค์ด ์š”์ฒญํ•œ ํŽธ์˜ ๊ธฐ๋Šฅ ๋‘ ๊ฐ€์ง€๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:

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

6. ์‚ฌ์šฉ ๊ธฐ์ˆ โ€‹

์ด ํ”„๋กœ์ ํŠธ์—์„œ ํ™œ์šฉํ•œ ์ฃผ์š” ๊ธฐ์ˆ :