Recommanded Free YOUTUBE Lecture: Learning and Hacking VPC

MLOps

MLOps(Machine Learning Operations)๋Š” ๋จธ์‹ ๋Ÿฌ๋‹ ๋ชจ๋ธ์„ ํšจ์œจ์ ์œผ๋กœ ๊ฐœ๋ฐœ, ๋ฐฐํฌ, ์šด์˜, ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•๋ก , ํ”„๋กœ์„ธ์Šค, ๊ด€ํ–‰์„ ์˜๋ฏธํ•œ๋‹ค. DevOps, Data Engineering, ML Engineering ์˜ ๊ฐœ๋…์„ ๊ฒฐํ•ฉํ•˜์—ฌ ์ž๋™ํ™”, ์žฌํ˜„์„ฑ, ๊ด€์ธก๊ฐ€๋Šฅ์„ฑ(๋ชจ๋‹ˆํ„ฐ๋ง) ์„ ๊ฐ•ํ™”ํ•˜๋Š” ๊ฒƒ์ด ํ•ต์‹ฌ ๋ชฉํ‘œ๋‹ค.

MLOps ์˜ ์ฃผ์š” ๊ฐœ๋…

๋จธ์‹ ๋Ÿฌ๋‹์€ ๋Œ€๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ด์šฉํ•ด์„œ ์žฅ์‹œ๊ฐ„์˜ ์ž‘์—…์„ ๋ฐ˜๋ณต์ ์œผ๋กœ ํ•ด์•ผ ํ•œ๋‹ค. MLOps๋ฅผ ํ†ตํ•ด์„œ ๋ฐ˜๋ณต์ ์ธ ์ˆ˜์ž‘์—…์„ ์ค„์—ฌ์„œ ๋ชจ๋ธ ๋ฐฐํฌ ์†๋„๋ฅผ ๋†’์—ฌ์„œ ๋ณ€ํ™”ํ•˜๋Š” ํ™˜๊ฒฝ์— ์‹ ์†ํ•˜๊ฒŒ ๋Œ€์‘ ํ•  ์ˆ˜ ์žˆ๋‹ค. ์—ฌ๊ธฐ์—๋Š” ๋ฐ์ดํ„ฐ ์ค€๋น„, ์ „์ฒ˜๋ฆฌ, ๋ชจ๋ธ ํ•™์Šต, ๊ฒ€์ฆ, ์„œ๋น™(๋ฐฐํฌ)์˜ ๋ชจ๋“  ๊ณผ์ •์˜ ์ž๋™ํ™”๋ฅผ ํฌํ•จํ•˜์—ฌ ํšจ๊ณผ์ ์ด๊ณ  ์ง€์†์ ์ธ ๋ชจ๋ธ ๊ฐœ์„ ์ด ๊ฐ€๋Šฅํ•œ ํ™˜๊ฒฝ์„ ๋งŒ๋“ ๋‹ค.

๋งŽ์€ ๊ฐœ๋…๋“ค์ด ๋‚˜์˜ฌ ๊ฑด๋ฐ, ์ด๋Ÿฐ๊ฒŒ ์žˆ๊ตฌ๋‚˜ ํ•˜๊ณ  ๊ฐ€๋ณ๊ฒŒ ํ›‘๊ณ  ์ง€๋‚˜๊ฐ€๋ฉด ๋œ๋‹ค.

์ž๋™ํ™”(Automation)
  • ๋ฐ์ดํ„ฐ ์ค€๋น„, ๋ชจ๋ธ ํ•™์Šต, ๊ฒ€์ฆ, ๋ฐฐํฌ, ๋ชจ๋‹ˆํ„ฐ๋ง์˜ ์ „์ฒด ๊ณผ์ •์„ ์ž๋™ํ™”ํ•˜์—ฌ ์ผ๊ด€๋œ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ๊ตฌ์ถ•ํ•œ๋‹ค.

  • CICD ํŒŒ์ดํ”„๋ผ์ธ๊ณผ ํ†ตํ•ฉํ•˜์—ฌ ๋ชจ๋ธ์„ ์‹ ์†ํ•˜๊ฒŒ ํ”„๋กœ๋•์…˜์— ๋ฐ˜์˜ ํ•  ์ˆ˜ ์žˆ๋‹ค.

์žฌํ˜„์„ฑ(Reproductibility)
  • DVC(๋ฐ์ดํ„ฐ ๋ฒ„์ „ ๊ด€๋ฆฌ) , ๋ชจ๋ธ ๋ฐ ์‹คํ—˜์˜ ์ถ”์  ๋“ฑ์„ ํ†ตํ•ด ์žฌํ˜„ ๊ฐ€๋Šฅํ•œ ์‹คํ—˜ ํ™˜๊ฒฝ์„ ์œ ์ง€ํ•œ๋‹ค.

  • ์ปจํ…Œ์ด๋„ˆ(Docker, Kubernetes)๋“ฑ์˜ ํ™˜๊ฒฝ์„ ํ™œ์šฉํ•˜์—ฌ ๋ชจ๋ธ์„ ์ผ๊ด€๋˜๊ฒŒ ๊ฐœ๋ฐœํ•˜๊ณ  ๋ฐฐํฌ ํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ด€์ธก๊ฐ€๋Šฅ์„ฑ
  • ๋ชจ๋ธ์˜ ์„ฑ๋Šฅ์ €ํ•˜(Drift Detection) , ๋ฐ์ดํ„ฐ ํ’ˆ์งˆ ๊ฒ€์ฆ(Data Validation), ์ด์ƒ ๊ฐ์ง€(Anomaly Detection) ๋“ฑ์„ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜์—ฌ ์ง€์†์ ์œผ๋กœ ๋ชจ๋ธ์„ ๊ด€๋ฆฌ ํ•œ๋‹ค.

  • ํ”„๋กœ๋•์…˜์— ๋ฐฐํฌ๋œ ๋ชจ๋ธ์„ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๊ณ , ํ•„์š”ํ•˜๋ฉด ์žฌํ•™์Šต ๋ฐ ์žฌ๋ฐฐํฌ๋ฅผ ์ž๋™ํ™” ํ•œ๋‹ค.

MLOps ํŒŒ์ดํ”„๋ผ์ธ์˜ ๋ชจ์Šต

MLOps
MLOps ํŒŒ์ดํ”„๋ผ์ธ์˜ ์ „์ฒด ๋ชจ์Šต์„ ์กฐ๋งํ•ด๋ณด์ž.

Orchestrated experiment

๊ฐœ๋ฐœ์ž ๋ฐ ๋ฐ์ดํ„ฐ ์‚ฌ์ด์–ธํ‹ฐ์Šค๊ฐ€ ML ๋ชจ๋ธ ๊ฐœ๋ฐœ ๋ฐ ์‹คํ—˜์„ ํ•˜๋Š” ์˜์—ญ์ด๋‹ค.

  • Data Validation: ๋ฐ์ดํ„ฐ์˜ ์ •ํ•ฉ์„ฑ์„ ํ™•์ธํ•˜์—ฌ ๋ชจ๋ธ ํ•™์Šต์— ์ ์ ˆํ•œ์ง€ ๊ฒ€์ฆํ•œ๋‹ค.

  • Data Preparation: ๋ฐ์ดํ„ฐ ์ •์ œ, ์ •๊ทœํ™”, ํ”ผ์ฒ˜ ์—”์ง€๋‹ˆ์–ด๋ง ๋“ฑ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

  • Model Training: ML/DL ๋ชจ๋ธ์„ ํ•™์Šตํ•œ๋‹ค

  • Model Evaluation: ํ•™์Šตํ•œ ๋ชจ๋ธ์˜ ์„ฑ๋Šฅ์„ ํ‰๊ฐ€ํ•˜๊ณ  ์ง€ํ‘œ๋ฅผ ๋ ˆํฌํŒ…(์ •ํ™•๋„, F1-Score) ํ•œ๋‹ค.

  • Model Validation: ๋ชจ๋ธ์ด ๋ฐฐํฌ ๊ฐ€๋Šฅํ•œ ํ’ˆ์งˆ์„ ๊ฐ–์ถ”์—ˆ๋Š”์ง€๋ฅผ ๊ฒ€์ฆํ•œ๋‹ค.

  • Model Analysis: ๋ชจ๋ธ์˜ ๋™์ž‘์„ ๋ถ„์„ํ•˜๊ณ  ๊ฐœ์„ ์ ์„ ์ฐพ๋Š”๋‹ค.

์†Œ์Šค์ฝ”๋“œ ๊ด€๋ฆฌ ๋ฐ ๋ฐฐํฌ

๋ฐ์ดํ„ฐ ์ค‘์‹ฌ์ด๋ผ๋Š” ๊ฒƒ์„ ์ œ์™ธํ•˜๋ฉด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค์™€ ํฐ ์ฐจ์ด๋Š” ์—†๋‹ค. ์ด๋ฅผ ์œ„ํ•œ ์ฝ”๋“œ ๊ด€๋ฆฌ ๋ฐ ๋ฐฐํฌ ๊ณผ์ •์ด ํ•„์š”ํ•˜๋‹ค.

  • Source Code & Source Repository: ๋ชจ๋ธ ํ•™์Šต ์ฝ”๋“œ ๋ฐ MLOps ๊ด€๋ จ ์ฝ”๋“œ๋ฅผ ์ €์žฅํ•˜๊ณ  ๋ฒ„์ „์„ ๊ด€๋ฆฌํ•œ๋‹ค.

  • Pipeline deployment: ๋ชจ๋ธ์„ ์ž๋™ํ™”๋œ ML ํŒŒ์ดํ”„๋ผ์ธ์— ๋ฐฐํฌํ•˜์—ฌ, ์šด์˜ ํ™˜๊ฒฝ์—์„œ ์ž‘๋„์•Ÿ๋„๋ก ํ•œ๋‹ค.

Automated Pipeline(์ž๋™ํ™”๋œ ํŒŒ์ดํ”„๋ผ์ธ)

  • Data Extraction: Feature Store์—์„œ Feature์™€ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค

  • Data Validation: ๋ฐ์ดํ„ฐ์˜ ํ’ˆ์งˆ ๊ฒ€์‚ฌ๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค.

  • Data Preparation: ๋ฐ์ดํ„ฐ๋ฅผ ์ •๋ฆฌํ•˜๊ณ  ๋ณ€ํ™˜ํ•œ๋‹ค.

  • Model Training: ML ๋ชจ๋ธ ํ•™์Šต์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

  • Model Evaluation & Validation: ๋ชจ๋ธ์˜ ์„ฑ๋Šฅ์„ ํ‰๊ฐ€ํ•˜๊ณ  ๊ธฐ์ค€์„ ๋งŒ์กฑํ•˜๋ฉด ๋ฐฐํฌํ•  ์ค€๋น„๋ฅผ ํ•œ๋‹ค.

Model Registry & Continuous Deployment

๋ฐ์ดํ„ฐ๋กœ ๋ถ€ํ„ฐ ๋ชจ๋ธ์„ ๋งŒ๋“ค์—ˆ๋‹ค๋ฉด, ์ด์ œ ์ด ๋ชจ๋ธ์„ ๋ฐฐํฌํ•ด์•ผ ํ•  ๊ฒƒ์ด๋‹ค. CICD์—์„œ CD(Continues Delivery) ๋ถ€๋ถ„์ด๋‹ค.

  • Model Registry: ๊ฒ€์ฆ๋œ ๋ชจ๋ธ์„ ์ €์žฅํ•˜๊ณ  ๋ฒ„์ „ ๊ด€๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค.

  • Model Serving: ๋ชจ๋ธ์„ ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์— ๋ฐฐํฌํ•˜์—ฌ ์‚ฌ์šฉ์ž์—๊ฒŒ ์„œ๋น„์Šค ํ•œ๋‹ค.

Prediction Service & Performance Monitoring

  • Prediction Service: ๋ฐฐํฌ๋œ ๋ชจ๋ธ์ด ์‹ค์‹œ๊ฐ„ ๋˜๋Š” ๋ฐฐ์น˜ ๋ฐฉ์‹์œผ๋กœ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

  • Performance Monitoring: ๋ชจ๋ธ์˜ ์„ฑ๋Šฅ์„ ์ง€์†์ ์œผ๋กœ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜์—ฌ ๋ฐ์ดํ„ฐ ๋“œ๋ฆฌํ”„ํŠธ, ์„ฑ๋Šฅ ์ €ํ•˜ ๋“ฑ์„ ๊ฐ์ง€ํ•˜๊ณ  ๋Œ€์‘ํ•œ๋‹ค.

MLOps ๊ธฐ์ˆ  ์Šคํƒ

DevOps๊ฐ€ ML ์˜์—ญ์œผ๋กœ ํ™•์žฅ๋œ ๊ฐœ๋…์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ธฐ์ˆ  ์Šคํƒ์˜ ๋งŽ์€ ๋ถ€๋ถ„๋“ค์ด DevOps์™€ ๊ฒน์นœ๋‹ค. DevOps ๊ฒฝํ—˜์ด ์žˆ๋‹ค๋ฉด ์‰ฝ๊ฒŒ ๊ฐœ๋…์„ ์ดํ•ดํ•˜๊ณ  ๊ธฐ์ˆ  ์Šคํƒ์„ ์ž์‹ ์˜ ๊ฒƒ์œผ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค.
MLOps Tech Stack

MLOps์˜ ์ฃผ์š” ๊ธฐ์ˆ  ์Šคํƒ์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด์ž.

  1. ๋ฒ„์ „๊ด€๋ฆฌ: Git, DVC, MLFlow, KubeFlow

  2. ๋ชจ๋ธ ๊ด€๋ฆฌ: MLflow, Weights & Biases, KubeFlow

  3. CI/CD: GitHub Action, GitLab CI/CD, Jenkins

  4. ๋ฐฐํฌ ๋ฐ ์„œ๋น™: Docker, Kubernetes, FastAPI, TensorFlow Serving

  5. ๋ชจ๋‹ˆํ„ฐ๋ง: Prometheus, Grafana, Evidently AI
    ๋ฐ์ดํ„ฐ ์ˆ˜์ง‘์—์„œ, ์„œ๋น™/๋ชจ๋‹ˆํ„ฐ๋ง๊นŒ์ง€๋ฅผ ๋‹ค๋ฃจ๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค์–‘ํ•œ ๊ธฐ์ˆ ๋“ค์ด ์‚ฌ์šฉ๋˜๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. MLOps๋Š” ๋จธ์‹ ๋Ÿฌ๋‹๊ณผ ์„œ๋น™์— ํ•„์š”ํ•œ GPU ์ธํ”„๋ผ, ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋น„์Šค์— ํ•„์š”ํ•œ CPU ์ธํ”„๋ผ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ/๋ฐฐํฌ/๋ชจ๋‹ˆํ„ฐ๋ง ๊ด‘๋ฒ”์œ„ํ•œ ์˜์—ญ์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ ํ•„์š”ํ•˜๋‹ค. ํ•œ๋งˆ๋””๋กœ DevOps + ๋จธ์‹ ๋Ÿฌ๋‹ ์ด๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

๋”ฐ๋ผ์„œ ํˆด ํ•œ ๋‘๊ฐœ ๋ฐฐ์› ๋‹ค๊ณ  ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋‹ค. "ํ•˜๋‚˜์˜ ์—ฌ์ •"์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค. ์—ฌ๊ธฐ์—์„œ๋Š” Kubeflow ๋ฅผ ๊ธฐ์ค€์œผ๋กœ MLOps๋ฅผ ์‚ดํŽด๋ณผ ์ƒ๊ฐ์ด๋‹ค.

Kubeflow

Kubeflow๋Š” ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค(Kubernetes) ๊ธฐ๋ฐ˜์˜ MLOps ํ”Œ๋žซํผ ์œผ๋กœ ๋จธ์‹ ๋Ÿฌ๋‹ ๋ชจ๋ธ์˜ ๊ฐœ๋ฐœ, ํ•™์Šต, ๋ฐฐํฌ, ๋ชจ๋‹ˆํ„ฐ๋ง์„ ์ž๋™ํ™”ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•˜๋Š” ์˜คํ”ˆ ์†Œ์Šค ํ”„๋กœ์ ํŠธ์ด๋‹ค. ์›๋ž˜๋Š” Google์ด TensorFlow ๋ชจ๋ธ์„ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์—์„œ ์‰ฝ๊ฒŒ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด์„œ ๊ฐœ๋ฐœํ–ˆ์ง€๋งŒ, ํ˜„์žฌ๋Š” PyThorch, XGBoost ๋“ฑ ๋‹ค์–‘ํ•œ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์ง€์›ํ•˜๋Š” ๋ฒ”์šฉ MLOps ํ”Œ๋žซํผ์œผ๋กœ ๋ฐœ์ „ํ–ˆ๋‹ค.

Kubeflow

Kubeflow๋Š” Kubernetes๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜์—ฌ, GPU, TPU, CPU์— ๋Œ€ํ•œ ๊ด€๋ฆฌ, ๊ฒฉ๋ฆฌ, ๋ชจ๋‹ˆํ„ฐ๋ง, ํ• ๋‹น์€ Kubernetes์— ์œ„์ž„ํ•˜๊ณ  ๋ชจ๋ธ์˜ ๊ด€๋ฆฌ/๊ฐœ๋ฐœ/๋ฐฐํฌ์— ์ง‘์ค‘ํ•˜๊ฒŒ ๋œ๋‹ค.

Kubeflow ํŒŒ์ดํ”„๋ผ์ธ

Kubeflow Pipeline

Kubeflow๋Š” ๋ฐ์ดํ„ฐ ์ค€๋น„์—์„œ ํ›ˆ๋ จ, ํŒจํ‚ค์ง•์˜ ์ „ ๊ณผ์ •์„ ์ง€์›ํ•œ๋‹ค. ์ด ์ค‘ ๋ชจ๋ธ ํ›ˆ๋ จ๊ณผ ํ…Œ์ŠคํŠธ์—๋Š” GPU๊ฐ€ ํ•„์š”ํ•˜๋ฏ€๋กœ NVIDIA GPU๋ฅผ ์ง€์›ํ•˜๋Š” ๋„์ปค ๋Ÿฐํƒ€์ž„์ด ์„ค์น˜๋˜์–ด ์žˆ์–ด์•ผ ํ•œ๋‹ค.

Kubeflow ํ•ต์‹ฌ ๊ธฐ๋Šฅ

์—ฌ๊ธฐ์—์„œ๋Š” ์ฃผ์š” ๊ธฐ๋Šฅ์„ ๊ฐ„๋‹จํžˆ ๋‚˜์—ด ํ•  ๊ฒƒ์ด๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์‹ค์ œ ์„ค์น˜ํ•˜๊ณ  ๋ชจ๋ธ์„ ๋Œ๋ฆฌ๋ฉด์„œ ์‚ดํŽด๋ณผ ๊ฒƒ์ด๋‹ค.

**ํŒŒ์ดํ”„๋ผ์ธ(Kubeflow Pipelines, KFP)

  • ๋จธ์‹ ๋Ÿฌ๋‹ ์›Œํฌํ”Œ๋Ÿฌ์šฐ๋ฅผ ์ปจํ…Œ์ด๋„ˆ ๊ธฐ๋ฐ˜์œผ๋กœ ์ž๋™ํ™”

  • ๋‹จ๊ณ„๋ณ„ ์‹คํ–‰, ์‹คํŒจ์‹œ ์žฌ์‹œ๋„, ํŒŒ๋ผ๋ฏธํ„ฐ ํŠœ๋‹ ๋“ฑ ์ง€์›

  • GUI ๋Œ€์‹œ๋ณด๋“œ๋ฅผ ํ†ตํ•ด ์›Œํฌํ”Œ๋กœ์šฐ ๊ด€๋ฆฌ

Jupyter Notebook ๊ด€๋ฆฌ

  • ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์œ„์— Jupyter Notebook์„ ์†์‰ฝ๊ฒŒ ์ƒ์„ฑ ๋ฐ ๊ด€๋ฆฌ

  • ๊ฐœ๋ฐœ์ž ๋ฐ ๋ฐ์ดํ„ฐ ์‚ฌ์ด์–ธํ‹ฐ์ŠคํŠธ๊ฐ„ ํ˜‘๋ ฅ ์ด‰์ง„

๋ถ„์‚ฐ ํ•™์Šต(Kubeflow training Operators

  • TensorFlow, PyTorch, XGBoost ๋“ฑ์˜ ๋ถ„์‚ฐํ•™์Šต์„ ์ง€์›

  • Horovod ๋“ฑ์„ ํ™œ์šฉํ•œ ๋ฉ€ํ‹ฐ GPU ํ•™์Šต

๋ชจ๋ธ ์„œ๋น™(Kuberflow Serving)

  • KServe(KFServing) ๋ฅผ ํ†ตํ•ด ๋ชจ๋ธ์„ ์‹ค์‹œ๊ฐ„ ์„œ๋น™

  • TensorFlow Serving, TorchServe, Triton Inference Server ๋“ฑ์˜ ์„œ๋น™ ์—”์ง„ ์ง€์›

  • ์˜คํ†  ์Šค์ผ€์ผ๋ง, A/B ํ…Œ์ŠคํŠธ, Canary ๋ฐฐํฌ ์ง€์›

์‹คํ—˜ ๋ฐ ๋ชจ๋ธ ๊ด€๋ฆฌ(ML Metadata, Katib)

  • ์‹คํ—˜ ๊ฒฐ๊ณผ๋ฅผ ์ถ”์  ๋ฐ ์ €์žฅ

  • Katib๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์ž๋™ํ™”๋œ ํ•˜์ดํผํŒŒ๋ผ๋ฏธํ„ฐ ์ตœ์ €ํ™” ์ง€์›

Kubeflow๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ 

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ํ™˜๊ฒฝ์— ์ตœ์ ํ™”๋˜์–ด ์žˆ์–ด์„œ ํด๋ผ์šฐ๋“œ/์˜จ-ํ”„๋ ˆ๋ฏธ์Šค์— ์ƒ๊ด€์—†์ด ์‚ฌ์šฉ ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ดˆ๊ธฐ ์„ค์ •์ด ๋‹ค์†Œ ๋ณต์žกํ•˜๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ๊ธฐ๋Š” ํ•˜์ง€๋งŒ, ๊ธฐ๋Šฅ ์ธก๋ฉด์—์„œ๋„ ๋ถ€์กฑํ•จ์ด ์—†๋Š” ํˆด์ด๋‹ค.

๊ธฐ๋Šฅ Kubeflow MLflow SageMaker Vertex AI
์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๊ธฐ๋ฐ˜ โœ… โŒ โŒ โœ…
ML ํŒŒ์ดํ”„๋ผ์ธ โœ… โœ… โœ… โœ…
ํ•˜์ดํผํŒŒ๋ผ๋ฏธํ„ฐ ํŠœ๋‹ โœ… โœ… โœ… โœ…
๋ชจ๋ธ ์„œ๋น™ โœ… ์ผ๋ถ€ ์ง€์› โœ… โœ…
๋ชจ๋‹ˆํ„ฐ๋ง โœ… โœ… โœ… โœ…

Kubeflow ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ

์•„๋ž˜์™€ ๊ฐ™์€ ์‚ฌ์–‘์˜ ๋กœ์ปฌ PC์—์„œ Kubeflow๋ฅผ ์„ค์น˜ํ•˜๊ณ  ํ…Œ์ŠคํŠธํ•  ๊ฒƒ์ด๋‹ค.

  • ์šด์˜์ฒด์ œ: Ubuntu 24.10

  • Docker Engine: 27.4.0

  • CPU: AMD Ryzen 5 5600X 6-Core Processor

  • RAM: 32G

  • GPU: NVIDIA GeForce RTX 4060 VRAM 16G

  • Kubernetes: Minikube๋ฅผ ์ด์šฉํ•ด์„œ ๋กœ์ปฌ PC์— ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ํ™˜๊ฒฝ์„ ๊ตฌ์„ฑํ•œ๋‹ค

NVIDIA GPU ๋“œ๋ผ์ด๋ฒ„ ์„ค์น˜ํ•˜๊ธฐ

๐Ÿšง ํฌ์ง€ ์•Š์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ด์šฉํ•ด์„œ ํ•™์Šต๋ชฉ์ ์œผ๋กœ MLOps๋ฅผ ํ…Œ์ŠคํŠธ ํ•  ๊ฒฝ์šฐ GPU๋Š” ํ•„์ˆ˜๊ฐ€ ์•„๋‹ˆ๋‹ค. GPU๊ฐ€ ์—†๊ฑฐ๋‚˜ ์„ค์ •ํ•˜๊ธฐ ๊ท€์ฐฎ๋‹ค๋ฉด ์ด ๋ถ€๋ถ„์€ ๋„˜์–ด๊ฐ€๋„ ๋œ๋‹ค.

์šฐ๋ถ„ํˆฌ ๋ฆฌ๋ˆ…์Šค์—์„œ๋Š” ubuntu-drivers ๋ฅผ ์ด์šฉํ•ด์„œ ์ตœ์ ์˜ ๋“œ๋ผ์ด๋ฒ„๋ฅผ ์ž๋™์œผ๋กœ ์ถ”์ฒœํ•˜๊ณ  ์„ค์น˜ ํ•  ์ˆ˜ ์žˆ๋‹ค.

sudo ubuntu-drivers autoinstall

์ด ๋ช…๋ น์„ ๋‚ด๋ฆฌ๋ฉด ์‹œ์Šคํ…œ์— ๋งž๋Š” ์ตœ์ ์˜ NVDIA ๋“œ๋ผ์ด๋ฒ„๋ฅผ ์ž๋™์œผ๋กœ ์„ค์น˜ํ•œ๋‹ค. ์„ค์น˜ ํ›„์—๋Š” ์‹œ์Šคํ…œ์„ ์žฌ๋ถ€ํŒ…ํ•œ๋‹ค.

์„ค์น˜๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด nvidia-smi ๋ช…๋ น์„ ์ด์šฉํ•ด์„œ GPU๊ฐ€ ์ œ๋Œ€๋กœ ์ธ์‹๋˜๋Š”์ง€ ํ™•์ธ ํ•  ์ˆ˜ ์žˆ๋‹ค.

$ nvidia-smi
Sun Mar  9 14:27:58 2025       
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 550.135                Driver Version: 550.135        CUDA Version: 12.4     |
|-----------------------------------------+------------------------+----------------------+
| GPU  Name                 Persistence-M | Bus-Id          Disp.A | Volatile Uncorr. ECC |
| Fan  Temp   Perf          Pwr:Usage/Cap |           Memory-Usage | GPU-Util  Compute M. |
|                                         |                        |               MIG M. |
|=========================================+========================+======================|
|   0  NVIDIA GeForce RTX 4060 Ti     Off |   00000000:0B:00.0  On |                  N/A |
|  0%   43C    P8             20W /  165W |     464MiB /  16380MiB |     12%      Default |
|                                         |                        |                  N/A |
+-----------------------------------------+------------------------+----------------------+

NVIDIA Container Toolkit ์„ค์น˜

๐Ÿšง ํฌ์ง€ ์•Š์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ด์šฉํ•ด์„œ ํ•™์Šต๋ชฉ์ ์œผ๋กœ MLOps๋ฅผ ํ…Œ์ŠคํŠธ ํ•  ๊ฒฝ์šฐ GPU๋Š” ํ•„์ˆ˜๊ฐ€ ์•„๋‹ˆ๋‹ค. GPU๊ฐ€ ์—†๊ฑฐ๋‚˜ ์„ค์ •ํ•˜๊ธฐ ๊ท€์ฐฎ๋‹ค๋ฉด ์ด ๋ถ€๋ถ„์€ ๋„˜์–ด๊ฐ€๋„ ๋œ๋‹ค.

Installing the NVIDIA Container Toolkit

curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
  && curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
    sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
    sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list

์ €์žฅ์†Œ๋ฅผ ์—…๋ฐ์ดํŠธ ํ•œ๋‹ค.

sudo apt-get update

NVIDIA Container Toolkit ํŒจํ‚ค์ง€๋ฅผ ์ธ์Šคํ†จ ํ•œ๋‹ค.

sudo apt-get install -y nvidia-container-toolkit

๋„์ปค๋ฅผ ๋ฆฌ์Šคํƒ€ํŠธ ํ•œ๋‹ค.

sudo systemctl restart docker

๋„์ปค ์ปจํ…Œ์ด๋„ˆ๊ฐ€ GPU๋ฅผ ์ธ์‹ํ•˜๋Š”์ง€ ํ…Œ์ŠคํŠธํ•œ๋‹ค. ์•„๋ž˜์™€ ๊ฐ™์ด GPU ์ •๋ณด๊ฐ€ ์ถœ๋ ฅ๋˜๋ฉด ์„ฑ๊ณต์ด๋‹ค.

$ docker run --gpus all ubuntu nvidia-smi
Sat Mar  8 01:23:34 2025       
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 550.135                Driver Version: 550.135        CUDA Version: 12.4     |
|-----------------------------------------+------------------------+----------------------+
| GPU  Name                 Persistence-M | Bus-Id          Disp.A | Volatile Uncorr. ECC |
| Fan  Temp   Perf          Pwr:Usage/Cap |           Memory-Usage | GPU-Util  Compute M. |
|                                         |                        |               MIG M. |
|=========================================+========================+======================|
|   0  NVIDIA GeForce RTX 4060 Ti     Off |   00000000:0B:00.0  On |                  N/A |
|  0%   45C    P8             19W /  165W |     531MiB /  16380MiB |      0%      Default |
|                                         |                        |                  N/A |
+-----------------------------------------+------------------------+----------------------+
+-----------------------------------------------------------------------------------------+
| Processes:                                                                              |
|  GPU   GI   CI        PID   Type   Process name                              GPU Memory |
|        ID   ID                                                               Usage      |
|=========================================================================================|
+-----------------------------------------------------------------------------------------+

Minikube

Kubeflow๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ํด๋Ÿฌ์Šคํ„ฐ๊ฐ€ ์žˆ์–ด์•ผ ํ•˜๋Š”๋ฐ, minikube๋ฅผ ์ด์šฉํ•˜๋ฉด ๊ฐœ์ธ PC์—๋„ ๊ฐ„๋‹จํ•˜๊ฒŒ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ํ™˜๊ฒฝ์„ ๊ตฌ์„ฑ ํ•  ์ˆ˜ ์žˆ๋‹ค.

์—ฌ๊ธฐ์—์„œ๋Š” Minikube ์„ค์น˜๋ฅผ ์œ„ํ•œ ์ตœ์†Œํ•œ๋งŒ ์†Œ๊ฐœํ•œ๋‹ค. Minikube์™€ Kubernetes์— ๋Œ€ํ•ด์„œ ์ž์„ธํžˆ ์•Œ๊ณ  ์‹ถ๋‹ค๋ฉด Minikube์™€ ํ•จ๊ป˜ํ•˜๋Š” Kubernetes Study ๋ฌธ์„œ๋ฅผ ์ฐธ๊ณ ํ•˜์ž

kubectl

Minikube๋ฅผ ์„ค์น˜ํ•˜๋ ค๋ฉด Kubernetes๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” kubectl ์„ ์„ค์น˜ํ•ด์•ผ ํ•œ๋‹ค. ์šฐ๋ถ„ํˆฌ ๋ฆฌ๋ˆ…์Šค์—์„œ๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ๊ฐ„๋‹จํ•˜๊ฒŒ ์„ค์น˜ ํ•  ์ˆ˜ ์žˆ๋‹ค.

์ €์žฅ์†Œ๋ฅผ ๋“ฑ๋กํ•˜๊ณ 

sudo apt update
sudo apt install -y apt-transport-https ca-certificates curl
curl -fsSL https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo tee /etc/apt/trusted.gpg.d/kubernetes.asc

kubectl ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•œ๋‹ค.

sudo apt update
sudo apt install -y kubectl

kubectl์ด ์ž˜ ์„ค์น˜๋๋Š”์ง€ ํ™•์ธํ•ด๋ณด์ž. ์‹คํ–‰๋˜๋ฉด ์„ฑ๊ณต์ด๋‹ค.

$ kubectl version                                     
Client Version: v1.31.6-dispatcher
Kustomize Version: v5.4.2
Unable to connect to the server: dial tcp 192.168.49.2:8443: connect: no route to host

์•„์ง์€ (minikube๋ฅผ ์ด์šฉํ•ด์„œ) ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ํ™˜๊ฒฝ์ด ๊ตฌ์„ฑ๋˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— connect ์—๋Ÿฌ๊ฐ€ ๋–จ์–ด์งˆ ๊ฒƒ์ด๋‹ค.

Minikube ์„ค์น˜

minikube๋ฅผ ๋‹ค์šด๋กœ๋“œ ํ•˜๊ณ  ์„ค์น˜ํ•œ๋‹ค.

curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube

๋ฒ„์ „์„ ํ™•์ธํ•ด๋ณด์ž.

$ minikube version
minikube version: v1.35.0
commit: dd5d320e41b5451cdf3c01891bc4e13d189586ed-dirty

minikube๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.

 minikube start --cpus 4 --memory 8192 --disk-size=50g

minikube๋ฅผ ์ด์šฉํ•ด์„œ ๋งŒ๋“ค์–ด์ง„ ๋„คํŠธ์›Œํฌ๋Š” private ๋„คํŠธ์›Œํฌ๋กœ, ๋กœ์ปฌ PC์—์„œ ์ง์ ‘ ์ ‘๊ทผ ํ•  ์ˆ˜ ์—†๋‹ค. minikube tunnel ๋ช…๋ น์„ ์ด์šฉํ•ด์„œ ๋กœ์ปฌ์—์„œ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๋„๋ก ํ•œ๋‹ค.

$ minikube tunnel
Status:
        machine: minikube
        pid: 114312
        route: 10.96.0.0/12 -> 192.168.39.132
        minikube: Running
        services: []
    errors: 
                minikube: no errors
                router: no errors
                loadbalancer emulator: no errors

kubectl์„ ์ด์šฉํ•ด์„œ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ํ™˜๊ฒฝ์ด ์ž˜ ๋งŒ๋“ค์–ด์กŒ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.

$ kubectl cluster-info             
Kubernetes control plane is running at https://192.168.49.2:8443

$ kubectl get nodes                                   
NAME       STATUS   ROLES           AGE   VERSION
minikube   Ready    control-plane   21h   v1.32.0

Kubeflow

Kubeflow ์„ค์น˜

Kubeflow๋Š” kubeflow/manifests ์ €์žฅ์†Œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„ค์น˜ ํ•  ์ˆ˜ ์žˆ๋‹ค.

Kustomize ์„ค์น˜

Kubeflow๋Š” Kustomize ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐฐํฌํ•œ๋‹ค. Kustomize๋Š” Kubernetes ๊ฐ์ฒด ๊ตฌ์„ฑ์„ ์ •์˜ํ•˜๋Š” ๋„๊ตฌ๋‹ค. Kustomize๋ฅผ ์ด์šฉํ•˜๋ฉด ๊ธฐ์กด Kubernetes ๋งค๋‹ˆํŽ˜์ŠคํŠธ ํŒŒ์ผ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐฐํฌ๋ฅผ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

curl -s "https://raw.githubusercontent.com/kubernetes-sigs/kustomize/master/hack/install_kustomize.sh" | bash
sudo mv kustomize /usr/local/bin/

Kubeflow Manifest ๋‹ค์šด๋กœ๋“œ

git clone https://github.com/kubeflow/manifests.git
git checkout v1.8.0
cd manifests

์„ค์น˜ ๋ฐ ์‹คํ–‰

kubeflow ๋ฐฐํฌ๋ฅผ ์œ„ํ•ด์„œ "kubeflow" ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ๋งŒ๋“ ๋‹ค.

kubectl create namespace kubeflow

kustomize๋ฅผ ์ด์šฉํ•ด์„œ kubeflow๋ฅผ ์„ค์น˜ํ•œ๋‹ค.

while ! kustomize build example | kubectl apply -f -; do echo "Retrying to apply resources"; sleep 10; done

Kubeflow ์ƒํƒœ ํ™•์ธ

$ kubectl get pods -n kubeflow

NAME                                                     READY   STATUS    RESTARTS         AGE
admission-webhook-deployment-69976d468d-ldb8d            1/1     Running   1 (12h ago)      12h
cache-server-54dd59f65c-bl4q7                            2/2     Running   2 (12h ago)      12h
centraldashboard-76965b8847-469ck                        2/2     Running   2 (12h ago)      12h
jupyter-web-app-deployment-69995b57db-6ft76              2/2     Running   2 (12h ago)      12h
katib-controller-78f4cbc88f-lgwh7                        1/1     Running   2 (2m36s ago)    12h
katib-db-manager-5ddf8fd5f4-b6pfr                        1/1     Running   10 (48s ago)     12h
katib-mysql-5dfcbbc87f-qwknq                             0/1     Running   2 (12h ago)      12h
katib-ui-6887769bf8-d7zkm                                2/2     Running   2 (12h ago)      12h
kserve-controller-manager-9b9ff6875-dbbgl                2/2     Running   2 (12h ago)      12h
kserve-models-web-app-965b75bdf-8dbbt                    2/2     Running   2 (12h ago)      12h
kubeflow-pipelines-profile-controller-68469d866f-x7n7f   1/1     Running   1 (3m15s ago)    12h
metacontroller-0                                         1/1     Running   2 (2m32s ago)    12h
metadata-envoy-deployment-5f5d6986b9-trpnj               1/1     Running   1 (12h ago)      12h
metadata-grpc-deployment-76d6fb49f8-rmjkv                2/2     Running   11 (2m23s ago)   12h
metadata-writer-765c7b9664-2v92p                         2/2     Running   7 (12h ago)      12h
minio-847b65dd88-4nw2k                                   2/2     Running   2 (12h ago)      12h
ml-pipeline-64f8c78ddc-lz2cv                             2/2     Running   5 (12h ago)      12h
ml-pipeline-persistenceagent-744467d649-ggkz6            2/2     Running   2 (12h ago)      12h
ml-pipeline-scheduledworkflow-5f55545d8c-vwd82           2/2     Running   2 (12h ago)      12h
ml-pipeline-ui-776b8f4456-mfgnv                          2/2     Running   2 (3m15s ago)    12h
ml-pipeline-viewer-crd-644ddd8f94-jzcs6                  2/2     Running   5 (2m41s ago)    12h
ml-pipeline-visualizationserver-76495876dc-424sn         2/2     Running   2 (3m15s ago)    12h
mysql-767f4d9f9b-fzthf                                   2/2     Running   2 (12h ago)      12h
notebook-controller-deployment-76445ffdf9-jmt22          2/2     Running   5 (2m40s ago)    12h
profiles-deployment-576bc6dc96-4njrj                     3/3     Running   7 (2m20s ago)    12h
pvcviewer-controller-manager-6fc5985fd9-mzmrs            3/3     Running   7 (2m24s ago)    12h
tensorboard-controller-deployment-66f4ff67b9-vljbf       3/3     Running   6 (2m40s ago)    12h
tensorboards-web-app-deployment-7b78c4d6c-4sc79          2/2     Running   2 (12h ago)      12h
training-operator-549d6b4bfb-fcc8j                       1/1     Running   1 (12h ago)      12h
volumes-web-app-deployment-55cd5bbd4f-cgsdj              2/2     Running   2 (12h ago)      12h
workflow-controller-7dd7dfd785-crmgv                     2/2     Running   5 (2m37s ago)    12h

Kubeflow Dashboard

ํฌํŠธํฌ์›Œ๋”ฉ์„ ํ†ตํ•ด์„œ kubeflow dashboard ์— ์ ‘๊ทผ ํ•  ์ˆ˜ ์žˆ๋‹ค.

kubectl port-forward -n istio-system svc/istio-ingressgateway 8080:80

localhost:8080 ์œผ๋กœ ์ ‘๊ทผํ•œ๋‹ค. ๊ธฐ๋ณธ ์•„์ด๋”” ํŒจ์Šค์›Œ๋“œ๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

  • User name: user@example.com

  • ๋น„๋ฐ€๋ฒˆํ˜ธ: 12341234

Kubeflow Dashboard

๊ฐœ๋ฐœ์ž ๋ฐ ๋ฐ์ดํ„ฐ ์‚ฌ์ด์–ธํ‹ฐ์ŠคํŠธ๋Š” kubeflow๋ฅผ ์ด์šฉํ•ด์„œ ๋จธ์‹ ๋Ÿฌ๋‹ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์‹œ๊ฐ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ณ  ๋ชจ๋‹ˆํ„ฐ๋ง ํ•  ์ˆ˜ ์žˆ๋‹ค. ์‚ฌ์šฉ์ž๋Š” ์•„๋ž˜์™€ ๊ฐ™์€ ์ผ๋“ค์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.

Kubeflow ๊ตฌ์„ฑ์š”์†Œ ๊ด€๋ฆฌ

  1. Notebooks: Jupyter ๋…ธํŠธ๋ถ ์„œ๋ฒ„๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ  ์ƒ์„ฑํ•ด์„œ ๋ฐ์ดํ„ฐ ํƒ์ƒ‰, ๋ชจ๋ธ ๊ฐœ๋ฐœ ๋ฐ ์‹คํ—˜์„ ์ˆ˜ํ–‰ ํ•  ์ˆ˜ ์žˆ๋‹ค.

  2. Pipelines: ๋จธ์‹ ๋Ÿฌ๋‹ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ํŒŒ์ดํ”„๋ผ์ธ ํ˜•ํƒœ๋กœ ์‹œ๊ฐํ™”ํ•˜๊ณ  ์‹คํ–‰, ๋ชจ๋‹ˆํ„ฐ๋ง ํ•  ์ˆ˜ ์žˆ๋‹ค.

  3. Katib: ํ•˜์ดํผํŒŒ๋ผ๋ฏธํ„ฐ ํŠœ๋‹ ์ž‘์—…์„ ๊ด€๋ฆฌํ•˜๊ณ  ๊ฒฐ๊ณผ๋ฅผ ์‹œ๊ฐ์ ์œผ๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

  4. KFServing: ๋ชจ๋ธ ์„œ๋น™์„ ๊ด€๋ฆฌํ•˜๊ณ  ๋ฐฐํฌ๋œ ๋ชจ๋ธ์˜ ์ƒํƒœ๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋ง ํ•  ์ˆ˜ ์žˆ๋‹ค.

  5. Volumes: Kubeflow์—์„œ ์‚ฌ์šฉํ•˜๋Š” persistant ๋ณผ๋ฅจ์„ ๊ด€๋ฆฌํ•œ๋‹ค

  6. TensorBoards: ํ…์„œ๋ณด๋“œ ์ธ์Šคํ„ด์Šค๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ  ํ•™์Šต ๊ณผ์ •์„ ์‹œ๊ฐํ™” ํ•  ์ˆ˜ ์žˆ๋‹ค.

  7. ํŒŒ์ดํ”„๋ผ์ธ ์‹คํ–‰ ์ƒํƒœ, ๋ชจ๋ธ ๋ฐฐํฌ ์ƒํƒœ, ๋ฆฌ์†Œ์Šค ์‚ฌ์šฉ๋Ÿ‰ ๋“ฑ Kubeflow ์›Œํฌํ”Œ๋กœ์šฐ์˜ ์ „๋ฐ˜์ ์ธ ์ƒํƒœ๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ชจ๋‹ˆํ„ฐ๋ง ํ•  ์ˆ˜ ์žˆ๋‹ค.

์ •๋ฆฌ

์˜ค๋Š˜์€ MLOps์˜ ๊ฐœ๋…์„ ์‚ดํŽด๋ณด๊ณ  ๋Œ€ํ‘œ์ ์ธ ์˜คํ”ˆ์†Œ์Šค MLOps ํ”Œ๋žซํผ์ธ Kubeflow๋ฅผ ์„ค์น˜ํ–ˆ๋‹ค. ๋‹ค์Œ ํฌ์ŠคํŠธ์—์„œ๋Š” Pipeline์„ ๊ฐœ๋ฐœํ•˜๊ณ  ๊ฐ„๋‹จํ•œ ML ์›Œํฌ๋กœ๋“œ๋ฅผ ์‹คํ–‰ํ•ด๋ณด๊ฒ ๋‹ค.