π MLOps νμ΄νλΌμΈ ꡬν
νλμ€ν μλ² - 3μΌ 24μκ° MLOps μ€μ΅ μλ£
β οΈ νλ
: μ¬μ νκ²½ μ€μ
π΄ κ΅μ‘ μμ μ λ°λμ νκ²½ μ€μ μ μλ£ν΄μ£ΌμΈμ!
κ΅μ‘ λΉμΌμλ νκ²½ μ€μ μ μν λ³λμ μκ°μ΄ μ 곡λμ§ μμ΅λλ€.
μ€μ μ΄ μλ£λμ§ μμΌλ©΄ μ€μ΅ μ°Έμ¬κ° μ΄λ €μΈ μ μμ΅λλ€.
π μ΄μ체μ λ³ μ€μ κ°μ΄λ
β
μ¬μ μ€μ 체ν¬λ¦¬μ€νΈ
λ€μ νλͺ©μ΄ λͺ¨λ μλ£λμ΄μΌ ν©λλ€:
π λΉ λ₯Έ νμΈ λͺ
λ Ήμ΄
# λͺ¨λ λꡬ λ²μ νμΈ
aws --version && kubectl version --client && docker --version && python3 --version && git --version
# Python ν¨ν€μ§ νμΈ
python3 -c " import kfp, mlflow, sklearn, onnxruntime; print('β
λͺ¨λ ν¨ν€μ§ μ€μΉ μλ£')"
νλͺ©
λ΄μ©
κ΅μ‘λͺ
MLOps νμ΄νλΌμΈ ꡬν
κΈ°κ°
3μΌ (24μκ°)
λμ
λ°μ΄ν°μ¬μ΄μΈν°μ€νΈ & λ°μ΄ν°μμ§λμ΄ 15λͺ
νκ²½
AWS EKS + Kubeflow + MLflow + KServe
Kubeflow Pipelines λ₯Ό νμ©ν ML μν¬νλ‘μ° μλν
MLflow λ₯Ό ν΅ν μ€ν μΆμ λ° λͺ¨λΈ λ²μ κ΄λ¦¬
KServe λ₯Ό μ¬μ©ν νλ‘λμ
λͺ¨λΈ μλΉ
λͺ¨λν°λ§ & μ¬νμ΅ νμ΄νλΌμΈ ꡬμΆ
λͺ¨λΈ μ΅μ ν (ONNX, Quantization) κΈ°λ² μ μ©
ꡬλΆ
μκ°
λΉκ³
μ€μ κ°μ
09:00 ~ 11:30
μ¬λμκ°: 10:20~10:30
μ μ¬μκ°
11:30 ~ 13:00
μ€ν κ°μ
13:00 ~ 17:30
μ¬λμκ°: λ§€ μκ° 20λΆ~30λΆ
Day 1: MLOps κΈ°μ΄ & Kubeflow νμ΄νλΌμΈ
μκ°
λ΄μ©
Lab
09:00-11:30
MLOps κ°μ, AWS EKS νκ²½ ꡬμΆ
Lab 1-1
13:00-15:30
Kubeflow λμ보λ, Hello Pipeline
Lab 1-2
15:30-17:30
Batch λ°μ΄ν° νμ΄νλΌμΈ
Lab 1-3
Day 2: λͺ¨λΈ μλΉ & MLflow
μκ°
λ΄μ©
Lab
09:00-11:30
FastAPI λͺ¨λΈ μλΉ, 컨ν
μ΄λν
Lab 2-1
13:00-15:30
MLflow Tracking & Registry
Lab 2-2
15:30-17:30
KServe λ°°ν¬, Canary λ°°ν¬
Lab 2-3
Day 3: λͺ¨λν°λ§ & νλ‘μ νΈ
μκ°
λ΄μ©
Lab
09:00-11:30
Drift Detection, μλ μ¬νμ΅
Lab 3-1
13:00-15:00
E2E Pipeline, λͺ¨λΈ μ΅μ ν
Lab 3-2, Lab 3-3
15:00-17:30
ν νλ‘μ νΈ & λ°ν
Project
ha-mlops-pipeline/
βββ README.md # π μ΄ νμΌ (λ©μΈ κ°μ΄λ)
βββ docs/ # π λ¬Έμ
β βββ SETUP_MACOS.md # π macOS νκ²½ μ€μ
β βββ SETUP_WINDOWS.md # πͺ Windows νκ²½ μ€μ
β βββ TROUBLESHOOTING.md # π§ νΈλ¬λΈμν
κ°μ΄λ
β
βββ day1/ # π
1μΌμ°¨ μ€μ΅
β βββ lab1-1_mlops-environment-setup/
β βββ lab1-2_hello-pipeline/
β βββ lab1-3_batch-pipeline/
β
βββ day2/ # π
2μΌμ°¨ μ€μ΅
β βββ lab2-1_fastapi-serving/
β βββ lab2-2_mlflow-tracking/
β βββ lab2-3_kserve-deployment/
β
βββ day3/ # π
3μΌμ°¨ μ€μ΅
βββ lab3-1_drift-monitoring/
βββ lab3-2_e2e-pipeline/
βββ lab3-3_model-optimization/ # π ONNX & Quantization
βββ project/ # ν νλ‘μ νΈ
git clone https://github.com/fastcampusdevmlops/ha-mlops-pipeline.git
cd ha-mlops-pipeline
# β οΈ λ³ΈμΈμ μ¬μ©μ λ²νΈλ‘ λ³κ²½νμΈμ!
export USER_NUM=" 01" # μ: 01, 02, ..., 15, 20
# μλ μ€μ λλ νκ²½ λ³μ
export NAMESPACE=" kubeflow-user${USER_NUM} "
export S3_BUCKET=" mlops-training-user${USER_NUM} "
export ECR_IRIS_API_REPO=" mlops-training/user${USER_NUM} "
# νμΈ
echo " λ€μμ€νμ΄μ€: ${NAMESPACE} "
echo " S3 λ²ν·: ${S3_BUCKET} "
3. AWS μ격 μ¦λͺ
μ€μ
aws configure
# AWS Access Key ID: [μ 곡λ Access Key]
# AWS Secret Access Key: [μ 곡λ Secret Key]
# Default region name: ap-northeast-2
# Default output format: json
4. EKS ν΄λ¬μ€ν° μ°κ²°
aws eks update-kubeconfig \
--region ap-northeast-2 \
--name mlops-training-cluster
# μ°κ²° νμΈ
kubectl get nodes
# ν¬νΈ ν¬μλ©
kubectl port-forward svc/istio-ingressgateway -n istio-system 8080:80
# λΈλΌμ°μ μμ μ μ
# http://localhost:8080
Lab
μ λͺ©
μκ°
λμ΄λ
Lab 1-1
MLOps νκ²½ ꡬμΆ
65λΆ
ββ
Lab 1-2
Hello World Pipeline
60λΆ
ββ
Lab 1-3
Batch λ°μ΄ν° νμ΄νλΌμΈ
90λΆ
βββ
Lab
μ λͺ©
μκ°
λμ΄λ
Lab 2-1
FastAPI λͺ¨λΈ μλΉ
90λΆ
βββ
Lab 2-2
MLflow Tracking & Registry
80λΆ
βββ
Lab 2-3
KServe λ°°ν¬
80λΆ
ββββ
Lab
μ λͺ©
μκ°
λμ΄λ
Lab 3-1
Drift Monitoring & Auto-Retraining
90λΆ
βββ
Lab 3-2
E2E MLOps Pipeline
80λΆ
ββββ
Lab 3-3
Model Optimization (ONNX & Quantization)
40λΆ
βββ
νλͺ©
λ΄μ©
Project
νλ³ E2E νμ΄νλΌμΈ ꡬμΆ
μκ°
15:00 ~ 17:30 (2μκ° 30λΆ)
ꡬμ±
5κ° ν Γ 3λͺ
λ°ν
νλ³ 15λΆ λ°ν + Q&A
κΈ°μ
λ²μ
μ©λ
AWS EKS
1.28+
Kubernetes ν΄λ¬μ€ν°
Kubeflow
1.8+
ML νμ΄νλΌμΈ νλ«νΌ
MLflow
2.9+
μ€ν μΆμ & λͺ¨λΈ λ μ§μ€νΈλ¦¬
KServe
0.11+
λͺ¨λΈ μλΉ
Istio
1.17+
μλΉμ€ λ©μ
κΈ°μ
μ©λ
AWS S3
λ°μ΄ν° & μν°ν©νΈ μ μ₯
AWS ECR
컨ν
μ΄λ μ΄λ―Έμ§ λ μ§μ€νΈλ¦¬
PostgreSQL
MLflow λ©νλ°μ΄ν°
MinIO
μ€λΈμ νΈ μ€ν λ¦¬μ§ (λ‘컬)
κΈ°μ
μ©λ
Python 3.9+
ML κ°λ°
KFP SDK
νμ΄νλΌμΈ μ μ
scikit-learn
ML λͺ¨λΈλ§
ONNX Runtime
λͺ¨λΈ μ΅μ ν
κ΅μ‘ μ€ λ¬Έμ λ°μ μ
π νΈλ¬λΈμν
κ°μ΄λ νμΈ
π κ°μ¬μκ² μ§λ¬Έ
π¬ μ μκ°μκ³Ό νλ ₯
Β© 2025 νλμ€ν μλ² MLOps Training