AI/MLOps

Kubeflow๋กœ MLOps ํŒŒ์ดํ”„๋ผ์ธ ๊ตฌ์ถ•ํ•˜๊ธฐ: ๊ฐœ๋…๋ถ€ํ„ฐ ์‹ค์Šต๊นŒ์ง€

proggg 2024. 11. 5. 15:06
728x90

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

์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” Kubeflow์˜ ์ฃผ์š” ๊ธฐ๋Šฅ๊ณผ ๊ฐ ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•˜์—ฌ MLOps ํŒŒ์ดํ”„๋ผ์ธ์„ ๊ตฌ์ถ•ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋‹จ๊ณ„๋ณ„๋กœ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.


๋ชฉ์ฐจ

  1. Kubeflow ๊ฐœ์š”
  2. Kubeflow ์„ค์น˜
  3. Kubeflow์˜ ์ฃผ์š” ๊ตฌ์„ฑ ์š”์†Œ
  4. ํŒŒ์ดํ”„๋ผ์ธ ์ƒ์„ฑ ๋ฐ ์‹คํ—˜
  5. ๋ชจ๋ธ ๋ฐฐํฌ ๋ฐ ๊ด€๋ฆฌ
  6. Kubeflow์˜ ์žฅ๋‹จ์ 

1. Kubeflow ๊ฐœ์š”

Kubeflow๋Š” ๋จธ์‹ ๋Ÿฌ๋‹ ์›Œํฌํ”Œ๋กœ์šฐ์˜ ๋ชจ๋“  ๋‹จ๊ณ„๋ฅผ Kubernetes ์œ„์—์„œ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋•๋Š” ํ”„๋ ˆ์ž„์›Œํฌ๋กœ, ์ฃผ์š” ๊ธฐ๋Šฅ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:

  • ์ž๋™ํ™”๋œ ๋จธ์‹ ๋Ÿฌ๋‹ ํŒŒ์ดํ”„๋ผ์ธ ๊ตฌ์ถ•: ๋ชจ๋ธ ํ•™์Šต, ํ‰๊ฐ€, ๋ฐฐํฌ๊นŒ์ง€ ํŒŒ์ดํ”„๋ผ์ธ์„ ์ •์˜ํ•˜์—ฌ ๋ฐ˜๋ณต ์ž‘์—…์„ ์ž๋™ํ™”.
  • ํ™•์žฅ์„ฑ: Kubernetes ํด๋Ÿฌ์Šคํ„ฐ์˜ ํ™•์žฅ์„ฑ์„ ํ™œ์šฉํ•ด ํ•™์Šต ๋ฐ ๋ฐฐํฌ ์ž‘์—…์„ ํšจ์œจ์ ์œผ๋กœ ํ™•์žฅ.
  • ๋‹ค์–‘ํ•œ ๋จธ์‹ ๋Ÿฌ๋‹ ๋„๊ตฌ ํ†ตํ•ฉ: Jupyter Notebook, TensorFlow Serving, PyTorch, XGBoost, Katib ๋“ฑ ์—ฌ๋Ÿฌ ํˆด์„ ์ง€์›ํ•˜์—ฌ ๋‹ค์–‘ํ•œ ํ•™์Šต ๋ฐ ์˜ˆ์ธก ํ™˜๊ฒฝ ์ œ๊ณต.

2. Kubeflow ์„ค์น˜

Kubeflow๋ฅผ ์„ค์น˜ํ•˜๋ ค๋ฉด, Kubernetes ํด๋Ÿฌ์Šคํ„ฐ๊ฐ€ ์ด๋ฏธ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. Kubernetes๋Š” ์˜จํ”„๋ ˆ๋ฏธ์Šค ๋˜๋Š” ํด๋ผ์šฐ๋“œ ํ™˜๊ฒฝ ๋ชจ๋‘์— ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

2.1 ์„ค์น˜ ์ค€๋น„

Kubeflow ์„ค์น˜ ์ „, ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ํด๋Ÿฌ์Šคํ„ฐ๊ฐ€ ์ค€๋น„๋˜์–ด ์žˆ์–ด์•ผ ํ•˜๋ฉฐ, ๋‹ค์Œ ์„ค์น˜ ์˜ต์…˜ ์ค‘ ํ•˜๋‚˜๋ฅผ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

  • Kfctl ์„ค์น˜: Kubeflow ์„ค์ • ํŒŒ์ผ(kfctl_k8s_istio.yaml)์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ„๋‹จํžˆ ์„ค์น˜.
  • MiniKF: ๊ฐ„ํŽธํ•˜๊ฒŒ Kubeflow์™€ JupyterHub ํ™˜๊ฒฝ์„ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ€์ƒ๋จธ์‹  ๋ฐฐํฌ ์˜ต์…˜.
  • MicroK8s: ๋กœ์ปฌ Kubernetes ํ™˜๊ฒฝ์—์„œ Kubeflow๋ฅผ ์‰ฝ๊ฒŒ ์„ค์น˜ํ•˜๊ณ  ํ…Œ์ŠคํŠธํ•˜๋Š” ๋ฐฉ๋ฒ•.

2.2 ์„ค์น˜ ๋‹จ๊ณ„

์„ค์น˜ ๊ณผ์ •์€ Kubeflow์˜ ๊ณต์‹ ๋ฌธ์„œ์— ์ž์„ธํžˆ ๋‚˜์™€ ์žˆ์œผ๋ฉฐ, ๊ฐ„๋‹จํžˆ ์š”์•ฝํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:

  1. kfctl CLI ๋‹ค์šด๋กœ๋“œ ๋ฐ ์„ค์ •.
  2. ์„ค์น˜ ํŒŒ์ผ(kfctl_k8s_istio.yaml)์„ ๋‹ค์šด๋กœ๋“œํ•˜๊ณ , Kubeflow๋ฅผ ๋ฐฐํฌํ•  ๋””๋ ‰ํ† ๋ฆฌ ์„ค์ •.
  3. kfctl apply ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Kubeflow ์„ค์น˜.

์„ค์น˜ ํ›„, kubectl get all -n kubeflow ๋ช…๋ น์–ด๋กœ ํด๋Ÿฌ์Šคํ„ฐ ์ƒํƒœ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


3. Kubeflow์˜ ์ฃผ์š” ๊ตฌ์„ฑ ์š”์†Œ

Kubeflow๋Š” MLOps ํŒŒ์ดํ”„๋ผ์ธ์„ ์œ„ํ•œ ๋‹ค์–‘ํ•œ ๋„๊ตฌ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์•„๋ž˜๋Š” Kubeflow์˜ ํ•ต์‹ฌ ๊ตฌ์„ฑ ์š”์†Œ์ž…๋‹ˆ๋‹ค.

3.1 Jupyter Notebooks

Kubeflow๋Š” Kubernetes ํ™˜๊ฒฝ์—์„œ Jupyter Notebook์„ ์‰ฝ๊ฒŒ ์‹คํ–‰ํ•˜๊ณ  ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ ํƒ์ƒ‰, ๋ชจ๋ธ ํ•™์Šต, ์‹คํ—˜ ๋“ฑ์˜ ์ดˆ๊ธฐ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์ข‹์Šต๋‹ˆ๋‹ค.

  • Notebook ์„œ๋ฒ„ ์ƒ์„ฑ: Kubeflow ๋Œ€์‹œ๋ณด๋“œ์—์„œ Notebook Servers ๋ฉ”๋‰ด๋ฅผ ํ†ตํ•ด ์ƒˆ Notebook ์„œ๋ฒ„๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋ฆฌ์†Œ์Šค ํ• ๋‹น: GPU, ๋ฉ”๋ชจ๋ฆฌ, CPU ๋“ฑ ํ•„์š”ํ•œ ๋ฆฌ์†Œ์Šค๋ฅผ ์ง€์ •ํ•˜์—ฌ ์ตœ์ ์˜ ํ™˜๊ฒฝ์„ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

3.2 Kubeflow Pipelines

Kubeflow Pipelines๋Š” ๋จธ์‹ ๋Ÿฌ๋‹ ํŒŒ์ดํ”„๋ผ์ธ์˜ ๋ชจ๋“  ๋‹จ๊ณ„๋ฅผ ์ •์˜ํ•˜๊ณ , ์‹คํ–‰ ๋ฐ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๋Š” ํ•ต์‹ฌ ๊ตฌ์„ฑ ์š”์†Œ์ž…๋‹ˆ๋‹ค.

  • ํŒŒ์ดํ”„๋ผ์ธ ์ƒ์„ฑ: Python SDK ๋˜๋Š” YAML ํŒŒ์ผ์„ ํ†ตํ•ด ํŒŒ์ดํ”„๋ผ์ธ ๋‹จ๊ณ„๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์‹คํ—˜: ๊ฐ ํŒŒ์ดํ”„๋ผ์ธ ์‹คํ–‰์„ ํ†ตํ•ด ์‹คํ—˜์„ ๋ฐ˜๋ณตํ•˜์—ฌ ์ตœ์ ์˜ ๋ชจ๋ธ์„ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋ชจ๋ธ ์ถ”์ : ํŒŒ์ดํ”„๋ผ์ธ์˜ ๊ฐ ๋‹จ๊ณ„์—์„œ ํ•˜์ดํผํŒŒ๋ผ๋ฏธํ„ฐ์™€ ๋ชจ๋ธ ์„ฑ๋Šฅ์„ ๊ธฐ๋กํ•˜์—ฌ ์ถ”์ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํŒŒ์ดํ”„๋ผ์ธ ์˜ˆ์‹œ

์•„๋ž˜ ์ฝ”๋“œ๋Š” ํ•™์Šต ๋ฐ ํ‰๊ฐ€ ๋‹จ๊ณ„๋ฅผ ํฌํ•จํ•œ ๊ฐ„๋‹จํ•œ ํŒŒ์ดํ”„๋ผ์ธ ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค.

from kfp import dsl

@dsl.pipeline(
    name='My Training Pipeline',
    description='A sample pipeline to demonstrate Kubeflow Pipelines'
)
def my_pipeline():
    train_op = dsl.ContainerOp(
        name='train',
        image='my-training-image',  # ํ›ˆ๋ จ์šฉ Docker ์ด๋ฏธ์ง€
        arguments=['--train', '/mnt/data']
    )

    evaluate_op = dsl.ContainerOp(
        name='evaluate',
        image='my-evaluation-image',  # ํ‰๊ฐ€์šฉ Docker ์ด๋ฏธ์ง€
        arguments=['--evaluate', '/mnt/data'],
    ).after(train_op)

3.3 Katib (ํ•˜์ดํผํŒŒ๋ผ๋ฏธํ„ฐ ํŠœ๋‹)

Katib๋Š” ๋ชจ๋ธ ํ•™์Šต ์‹œ ํ•˜์ดํผํŒŒ๋ผ๋ฏธํ„ฐ ์ตœ์ ํ™”๋ฅผ ์ž๋™์œผ๋กœ ์ˆ˜ํ–‰ํ•˜๋Š” ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. ๋‹ค์–‘ํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ œ๊ณตํ•˜๋ฉฐ, ์ตœ์ ์˜ ํ•˜์ดํผํŒŒ๋ผ๋ฏธํ„ฐ ๊ฐ’์„ ์ฐพ์•„ ์„ฑ๋Šฅ์„ ๊ทน๋Œ€ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • Katib ์‹คํ—˜ ์ƒ์„ฑ: ํ•™์Šต์— ํ•„์š”ํ•œ ํ•˜์ดํผํŒŒ๋ผ๋ฏธํ„ฐ ๋ฒ”์œ„์™€ ์ตœ์ ํ™” ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ •์˜ํ•˜์—ฌ Katib ์‹คํ—˜์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ž๋™ํ™”๋œ ์ตœ์ ํ™”: ๋‹ค์–‘ํ•œ ํŒŒ๋ผ๋ฏธํ„ฐ ์กฐํ•ฉ์„ ์‹œํ—˜ํ•˜๊ณ , ์ตœ์ ์˜ ์กฐํ•ฉ์„ ์ž๋™์œผ๋กœ ํƒ์ƒ‰ํ•ฉ๋‹ˆ๋‹ค.

3.4 KFServing (๋ชจ๋ธ ๋ฐฐํฌ)

Kubeflow์—์„œ ๋ชจ๋ธ์„ ๋ฐฐํฌํ•˜๋Š” ๋ฐ๋Š” KFServing์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. KFServing์€ ์˜ˆ์ธก์„ ์œ„ํ•ด ํ•™์Šต๋œ ๋ชจ๋ธ์„ ๋‹ค์–‘ํ•œ ๋ฒ„์ „์œผ๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํŠธ๋ž˜ํ”ฝ์„ ๋ถ„๋ฐฐํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

  • ๋ชจ๋ธ ์„œ๋น„์Šค ์ƒ์„ฑ: ํ•™์Šต๋œ ๋ชจ๋ธ์„ KFServing์„ ํ†ตํ•ด ์„œ๋น„์Šค๋กœ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋ฒ„์ „ ๊ด€๋ฆฌ: ๋ชจ๋ธ์˜ ์ƒˆ๋กœ์šด ๋ฒ„์ „์„ ๋ฐฐํฌํ•˜๊ณ , ์‹ค์‹œ๊ฐ„ ํŠธ๋ž˜ํ”ฝ์˜ ์ผ๋ถ€๋ฅผ ์ƒˆ๋กœ์šด ๋ฒ„์ „์œผ๋กœ ์ „ํ™˜ํ•˜์—ฌ ์„ฑ๋Šฅ์„ ํ‰๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • Auto-scaling: ํŠธ๋ž˜ํ”ฝ์˜ ๋ณ€ํ™”์— ๋”ฐ๋ผ ์ž๋™์œผ๋กœ ํ™•์žฅํ•˜๊ฑฐ๋‚˜ ์ถ•์†Œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

4. ํŒŒ์ดํ”„๋ผ์ธ ์ƒ์„ฑ ๋ฐ ์‹คํ—˜

Kubeflow Pipelines์—์„œ ํŒŒ์ดํ”„๋ผ์ธ์„ ์ƒ์„ฑํ•˜๊ณ  ์‹คํ—˜์„ ์ˆ˜ํ–‰ํ•˜์—ฌ ๋ชจ๋ธ ํ•™์Šต ๋ฐ ๊ฒ€์ฆ ๊ณผ์ •์„ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

4.1 ํŒŒ์ดํ”„๋ผ์ธ ์ •์˜

Kubeflow Pipelines๋Š” ๊ฐ ๋‹จ๊ณ„๋ฅผ ๋…๋ฆฝ์ ์ธ Container Operation์œผ๋กœ ์ •์˜ํ•˜๋ฉฐ, ๊ฐ ๋‹จ๊ณ„๋Š” ์„œ๋กœ ์˜์กด ๊ด€๊ณ„๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • Python SDK ์‚ฌ์šฉ: ํŒŒ์ดํ”„๋ผ์ธ์„ Python ์ฝ”๋“œ๋กœ ์ •์˜ํ•˜๊ณ  @dsl.pipeline ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Kubeflow์— ๋“ฑ๋กํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋‹จ๊ณ„๋ณ„ ๋…๋ฆฝ์„ฑ: ๊ฐ ๋‹จ๊ณ„๋Š” ๊ฐœ๋ณ„์ ์ธ ์ปจํ…Œ์ด๋„ˆ๋กœ ์‹คํ–‰๋˜์–ด ๋…๋ฆฝ์ ์ด๋ฉฐ, ์žฌ์‚ฌ์šฉ ๋ฐ ๋ณ‘๋ ฌ ์‹คํ–‰์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

4.2 ์‹คํ—˜ ๋ฐ ๊ฒฐ๊ณผ ๋ถ„์„

  • ์‹คํ—˜ ๋ฐ˜๋ณต: ์—ฌ๋Ÿฌ ํŒŒ์ดํ”„๋ผ์ธ ์‹คํ–‰์„ ํ†ตํ•ด ๋ชจ๋ธ ์„ฑ๋Šฅ์„ ๊ฐœ์„ ํ•˜๊ณ , ํ•˜์ดํผํŒŒ๋ผ๋ฏธํ„ฐ ํŠœ๋‹ ๊ฒฐ๊ณผ๋ฅผ ๋น„๊ตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๊ฒฐ๊ณผ ์‹œ๊ฐํ™”: Kubeflow UI์—์„œ ํŒŒ์ดํ”„๋ผ์ธ์˜ ๊ฐ ๋‹จ๊ณ„์™€ ์„ฑ๋Šฅ ๊ฒฐ๊ณผ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์–ด ์ง๊ด€์ ์œผ๋กœ ๊ฒฐ๊ณผ๋ฅผ ๋ถ„์„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

5. ๋ชจ๋ธ ๋ฐฐํฌ ๋ฐ ๊ด€๋ฆฌ

๋ชจ๋ธ ํ•™์Šต ํ›„ KFServing์„ ์‚ฌ์šฉํ•˜์—ฌ ํ•™์Šต๋œ ๋ชจ๋ธ์„ ๋ฐฐํฌํ•˜๊ณ  ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

5.1 ์‹ค์‹œ๊ฐ„ ์˜ˆ์ธก API ์ƒ์„ฑ

KFServing์€ ๋ชจ๋ธ์„ ์‹ค์‹œ๊ฐ„ ์˜ˆ์ธก API๋กœ ์‰ฝ๊ฒŒ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐฐํฌ๋œ ๋ชจ๋ธ์€ REST API ํ˜•ํƒœ๋กœ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ์‹ค์‹œ๊ฐ„ ๋˜๋Š” ๋ฐฐ์น˜ ์˜ˆ์ธก์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

apiVersion: serving.kubeflow.org/v1alpha2
kind: InferenceService
metadata:
  name: my-model
spec:
  default:
    predictor:
      tensorflow:
        storageUri: "gs://my-bucket/model"

5.2 ๋ชจ๋ธ ๋ชจ๋‹ˆํ„ฐ๋ง ๋ฐ ์Šค์ผ€์ผ๋ง

  • Auto-scaling ์„ค์ •: ์˜ˆ์ธก ์š”์ฒญ์— ๋”ฐ๋ผ ๋ชจ๋ธ ์„œ๋ฒ„๊ฐ€ ์ž๋™์œผ๋กœ ํ™•์žฅํ•˜๊ฑฐ๋‚˜ ์ถ•์†Œํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์„ฑ๋Šฅ ๋ชจ๋‹ˆํ„ฐ๋ง: ๋ชจ๋ธ์ด ์˜ˆ์ƒ๋Œ€๋กœ ์ž‘๋™ํ•˜๋Š”์ง€ ์ง€์†์ ์œผ๋กœ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๋ฉฐ, ์„ฑ๋Šฅ ์ €ํ•˜๊ฐ€ ๋ฐœ์ƒํ•  ๊ฒฝ์šฐ ๊ฒฝ๊ณ ๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

6. Kubeflow์˜ ์žฅ๋‹จ์ 

์žฅ์ 

  • ๊ฐ•๋ ฅํ•œ ์ž๋™ํ™”: ๋ชจ๋ธ ํ•™์Šต, ํ•˜์ดํผํŒŒ๋ผ๋ฏธํ„ฐ ํŠœ๋‹, ๋ฐฐํฌ ๋“ฑ ๋‹ค์–‘ํ•œ ์ž‘์—…์„ ์ž๋™ํ™”ํ•˜์—ฌ ํšจ์œจ์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์œ ์—ฐํ•œ ํ™•์žฅ์„ฑ: Kubernetes ๊ธฐ๋ฐ˜์ด๋ฏ€๋กœ ๋ฆฌ์†Œ์Šค ํ™•์žฅ๊ณผ ํด๋Ÿฌ์Šคํ„ฐ ๊ด€๋ฆฌ๋ฅผ ์œ ์—ฐํ•˜๊ฒŒ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ง๊ด€์ ์ธ UI: Kubeflow๋Š” ์›น UI๋ฅผ ํ†ตํ•ด ํŒŒ์ดํ”„๋ผ์ธ ๊ด€๋ฆฌ, ์‹คํ—˜ ๊ฒฐ๊ณผ ํ™•์ธ, ๋ฐฐํฌ ์ƒํƒœ ๋ชจ๋‹ˆํ„ฐ๋ง ๋“ฑ์„ ํ•œ๋ˆˆ์— ํ™•์ธํ•  ์ˆ˜ ์žˆ์–ด ๊ด€๋ฆฌ๊ฐ€ ์šฉ์ดํ•ฉ๋‹ˆ๋‹ค.

๋‹จ์ 

  • ์„ค์น˜์™€ ์ดˆ๊ธฐ ์„ค์ •์˜ ๋ณต์žก์„ฑ: Kubeflow๋Š” ์„ค์น˜๊ฐ€ ๋ณต์žกํ•˜๊ณ  ๋งŽ์€ ๋ฆฌ์†Œ์Šค๋ฅผ ํ•„์š”๋กœ ํ•˜๋ฉฐ, Kubernetes์™€ ๋„คํŠธ์›Œํฌ ์„ค์ •์— ๋Œ€ํ•œ ๋†’์€ ์ดํ•ด๊ฐ€ ์š”๊ตฌ๋ฉ๋‹ˆ๋‹ค.
  • ๋ฆฌ์†Œ์Šค ์‚ฌ์šฉ๋Ÿ‰: Kubeflow๋Š” Kubernetes ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด์—์„œ ๋งŽ์€ ๋ฉ”๋ชจ๋ฆฌ์™€ CPU ์ž์›์„ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ, ๋ฆฌ์†Œ์Šค๊ฐ€ ๋ถ€์กฑํ•œ ํ™˜๊ฒฝ์—์„œ๋Š” ์‚ฌ์šฉ์— ์ œํ•œ์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ํ•™์Šต ๊ณก์„ : ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜์ง€๋งŒ ๊ทธ๋งŒํผ ์„ค์ •ํ•  ์š”์†Œ๋„ ๋งŽ์•„, ์ต์ˆ™ํ•ด์ง€๋Š” ๋ฐ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฝ๋‹ˆ๋‹ค.

๊ฒฐ๋ก 

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

Kubeflow๋ฅผ ํ™œ์šฉํ•œ MLOps์˜ ์ฃผ์š” ์žฅ์  ์š”์•ฝ:

  1. ์ž๋™ํ™”๋œ ํŒŒ์ดํ”„๋ผ์ธ ๊ด€๋ฆฌ: ๋ฐ์ดํ„ฐ ์ „์ฒ˜๋ฆฌ, ๋ชจ๋ธ ํ•™์Šต, ํ‰๊ฐ€, ๋ฐฐํฌ ๋“ฑ์˜ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ํ•˜๋‚˜์˜ ํŒŒ์ดํ”„๋ผ์ธ์œผ๋กœ ์ •์˜ํ•˜๊ณ  ์ž๋™ํ™”.
  2. ํ™•์žฅ์„ฑ ๋ฐ ์œ ์—ฐ์„ฑ: Kubernetes์˜ ํ™•์žฅ์„ฑ์„ ํ™œ์šฉํ•ด ๋ฆฌ์†Œ์Šค๋ฅผ ์œ ๋™์ ์œผ๋กœ ํ• ๋‹นํ•˜๊ณ , ๋Œ€๊ทœ๋ชจ ๋ฐ์ดํ„ฐ์™€ ๋ชจ๋ธ ํ•™์Šต์„ ์ฒ˜๋ฆฌ.
  3. ๋ชจ๋ธ ์ถ”์ ๊ณผ ๋ฒ„์ „ ๊ด€๋ฆฌ: ๊ฐ ์‹คํ—˜๊ณผ ๋ชจ๋ธ์„ ์ถ”์ ํ•˜๊ณ  ๋ฒ„์ „์„ ๊ด€๋ฆฌํ•˜์—ฌ ์žฌํ˜„ ๊ฐ€๋Šฅํ•œ ๋จธ์‹ ๋Ÿฌ๋‹์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•จ.
  4. ํ•˜์ดํผํŒŒ๋ผ๋ฏธํ„ฐ ์ตœ์ ํ™” ๋ฐ ์‹ค์‹œ๊ฐ„ ์˜ˆ์ธก ์ œ๊ณต: Katib์„ ํ™œ์šฉํ•œ ์ตœ์ ํ™”์™€ KFServing์„ ํ†ตํ•œ ์˜ˆ์ธก API ์ œ๊ณต์œผ๋กœ ์‹ค์‹œ๊ฐ„ ์„œ๋น„์Šค ๊ฐ€๋Šฅ.

Kubeflow๋Š” ํŠนํžˆ ๋Œ€๊ทœ๋ชจ ๋ชจ๋ธ ํ•™์Šต๊ณผ ๋ฐฐํฌ๊ฐ€ ํ•„์š”ํ•œ ๊ธฐ์—… ํ™˜๊ฒฝ์— ์ ํ•ฉํ•˜๋ฉฐ, Kubernetes์™€์˜ ์—ฐ๋™์„ ํ†ตํ•ด ์œ ์—ฐํ•œ ํ™•์žฅ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.  ๊ธฐ ์„ค์น˜์™€ ์‚ฌ์šฉ๋ฒ•์„ ์ตํžˆ๋Š” ๋ฐ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆด ์ˆ˜ ์žˆ์ง€๋งŒ, ์žฅ๊ธฐ์ ์œผ๋กœ๋Š” ๋งค์šฐ ๊ฐ•๋ ฅํ•œ MLOps ๋„๊ตฌ๋กœ ์ž๋ฆฌ ์žก์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

728x90