| νλͺ© | λ΄μ© |
|---|---|
| μμμκ° | 65λΆ |
| λμ΄λ | ββ (μ΄μ€κΈ) |
| λͺ©ν | AWS EKS κΈ°λ° MLOps νλ«νΌ νκ²½ νμΈ λ° Tenant κ²μ¦ |
| λμ | μκ°μ 15λͺ (user01~user15) + κ°μ¬ 1λͺ (user20) |
μ΄ μ€μ΅μ ν΅ν΄ λ€μμ νμ΅ν©λλ€:
- AWS EKS ν΄λ¬μ€ν° μ°κ²° λ° μν νμΈ
- Kubeflow Tenant μ€μ νμΈ (Profile, Namespace, ServiceAccount)
- MLflow Tracking Server μ°κ²° λ° PodDefault νμΈ
- AWS S3 & ECR μ€ν λ¦¬μ§ κ΅¬μ± νμΈ
- MLOps νλ«νΌ μ 체 μν€ν μ² μ΄ν΄
Lab 1-1: MLOps νκ²½ κ΅¬μΆ (65λΆ)
β
βββ μ¬μ μ€λΉ (10λΆ)
β βββ νμ λꡬ μ€μΉ νμΈ
β βββ νκ²½ λ³μ μ€μ
β βββ AWS μ격 μ¦λͺ
μ€μ
β βββ EKS ν΄λ¬μ€ν° μ°κ²°
β
βββ Part 1: Kubeflow Tenant κ²μ¦ (20λΆ)
β βββ Namespace μ‘΄μ¬ νμΈ
β βββ Profile λ° Owner Email νμΈ
β βββ ServiceAccount νμΈ
β βββ ResourceQuota νμΈ
β βββ κΆν 격리 ν
μ€νΈ
β
βββ Part 2: MLflow νκ²½ κ²μ¦ (20λΆ)
β βββ MLflow Server μν νμΈ
β βββ PostgreSQL λ°±μλ νμΈ
β βββ PodDefault μ€μ νμΈ
β βββ MLflow UI ν¬νΈ ν¬μλ© ν
μ€νΈ
β
βββ Part 3: AWS μ€ν λ¦¬μ§ νμΈ (15λΆ)
βββ S3 λ²ν· νμΈ
βββ ECR λ μ§μ€νΈλ¦¬ νμΈ
βββ MLflow Artifacts ν΄λ νμΈ
βββ μ 체 μν€ν
μ² μ΄ν΄
lab1-1_mlops-environment-setup/
βββ README.md # β μ΄ νμΌ (μ€μ΅ κ°μ΄λ)
βββ verify_all.sh # π§ ν΅ν© κ²μ¦ μ€ν¬λ¦½νΈ
β
βββ 1_kubeflow_setup/
β βββ verify_kubeflow.sh # Part 1: Kubeflow κ²μ¦ μ€ν¬λ¦½νΈ
β
βββ 2_mlflow_setup/
β βββ verify_mlflow.sh # Part 2: MLflow κ²μ¦ μ€ν¬λ¦½νΈ
β
βββ 3_storage_setup/
βββ verify_storage.sh # Part 3: Storage κ²μ¦ μ€ν¬λ¦½νΈ
λ³Έ κ΅μ‘μμλ μκ°μ 15λͺ κ³Ό κ°μ¬ 1λͺ μκ² κ°κ° λ 립λ MLOps νκ²½μ μ 곡ν©λλ€.
ββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββ
β Profile β Owner Email β 리μμ€ β
ββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββΌβββββββββββββββββββββββββββββββ€
β profile-user01 β user01@mlops.local β CPU 8, Memory 16Gi β
β profile-user02 β user02@mlops.local β CPU 8, Memory 16Gi β
β profile-user03 β user03@mlops.local β CPU 8, Memory 16Gi β
β profile-user04 β user04@mlops.local β CPU 8, Memory 16Gi β
β profile-user05 β user05@mlops.local β CPU 8, Memory 16Gi β
β profile-user06 β user06@mlops.local β CPU 8, Memory 16Gi β
β profile-user07 β user07@mlops.local β CPU 8, Memory 16Gi β
β profile-user08 β user08@mlops.local β CPU 8, Memory 16Gi β
β profile-user09 β user09@mlops.local β CPU 8, Memory 16Gi β
β profile-user10 β user10@mlops.local β CPU 8, Memory 16Gi β
β profile-user11 β user11@mlops.local β CPU 8, Memory 16Gi β
β profile-user12 β user12@mlops.local β CPU 8, Memory 16Gi β
β profile-user13 β user13@mlops.local β CPU 8, Memory 16Gi β
β profile-user14 β user14@mlops.local β CPU 8, Memory 16Gi β
β profile-user15 β user15@mlops.local β CPU 8, Memory 16Gi β
β profile-user20 β user20@mlops.local (κ°μ¬) β CPU 16, Memory 32Gi β β
ββββββββββββββββββββββ΄βββββββββββββββββββββββββββββββββ΄βββββββββββββββββββββββββββββββ
μ΄ μ€μ΅μ μμνκΈ° μ μ λ€μ λκ΅¬κ° μ€μΉλμ΄ μμ΄μΌ ν©λλ€:
# 1. AWS CLI λ²μ νμΈ
aws --version
# μμ μΆλ ₯: aws-cli/2.x.x Python/3.x.x ...
# 2. kubectl λ²μ νμΈ
kubectl version --client
# μμ μΆλ ₯: Client Version: v1.27.x ...
# 3. Git λ²μ νμΈ
git --version
# μμ μΆλ ₯: git version 2.x.xμ€μΉλμ§ μμ κ²½μ°:
| λꡬ | macOS | Windows |
|---|---|---|
| AWS CLI | brew install awscli |
AWS CLI μ€μΉ νλ‘κ·Έλ¨ |
| kubectl | brew install kubectl |
choco install kubernetes-cli |
| Git | brew install git |
Git for Windows |
macOS / Linux:
# μ¬μ©μ λ²νΈ μ€μ (μ: 01, 02, 03... 15, 20)
export USER_NUM="01" # β οΈ λ°λμ λ³ΈμΈ λ²νΈλ‘ λ³κ²½νμΈμ!
# κ΄λ ¨ νκ²½ λ³μ μλ μ€μ
export NAMESPACE="kubeflow-user${USER_NUM}"
export S3_BUCKET="mlops-training-user${USER_NUM}"
export AWS_REGION="ap-northeast-2"
# νκ²½ λ³μ νμΈ
echo "μ¬μ©μ λ²νΈ: $USER_NUM"
echo "λ€μμ€νμ΄μ€: $NAMESPACE"
echo "S3 λ²ν·: $S3_BUCKET"Windows PowerShell:
# μ¬μ©μ λ²νΈ μ€μ
$env:USER_NUM = "01" # β οΈ λ°λμ λ³ΈμΈ λ²νΈλ‘ λ³κ²½νμΈμ!
# κ΄λ ¨ νκ²½ λ³μ μλ μ€μ
$env:NAMESPACE = "kubeflow-user$env:USER_NUM"
$env:S3_BUCKET = "mlops-training-user$env:USER_NUM"
$env:AWS_REGION = "ap-northeast-2"
# νκ²½ λ³μ νμΈ
echo "μ¬μ©μ λ²νΈ: $env:USER_NUM"
echo "λ€μμ€νμ΄μ€: $env:NAMESPACE"
echo "S3 λ²ν·: $env:S3_BUCKET"κ°μ¬κ° μ 곡ν AWS Access Keyμ Secret Keyλ₯Ό μ€λΉνμΈμ.
# AWS μ격 μ¦λͺ
μ€μ
aws configure
# μ
λ ₯ νλͺ©:
# AWS Access Key ID: (κ°μ¬ μ 곡)
# AWS Secret Access Key: (κ°μ¬ μ 곡)
# Default region name: ap-northeast-2
# Default output format: json
# μ€μ νμΈ
aws sts get-caller-identityμμ μΆλ ₯:
{
"UserId": "AIDAXXXXXXXXXXXXXXXXX",
"Account": "123456789012",
"Arn": "arn:aws:iam::123456789012:user/mlops-training"
}# EKS ν΄λ¬μ€ν° μ°κ²°
aws eks update-kubeconfig \
--region ap-northeast-2 \
--name mlops-training-cluster
# μ°κ²° νμΈ
kubectl cluster-infoμμ μΆλ ₯:
Kubernetes control plane is running at https://XXXXX.ap-northeast-2.eks.amazonaws.com
CoreDNS is running at https://XXXXX.ap-northeast-2.eks.amazonaws.com/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
# GitHub μ μ₯μ ν΄λ‘
git clone https://github.com/fastcampusdevmlops/ha-mlops-pipeline.git
cd ha-mlops-pipeline
# Lab 1-1 λλ ν λ¦¬λ‘ μ΄λ
cd day1/lab1-1_mlops-environment-setupKubeflow Tenantλ κ° μ¬μ©μμκ² λ 립λ MLOps νκ²½μ μ 곡ν©λλ€. μ΄ μΉμ μμλ λ³ΈμΈμ Tenantκ° μ¬λ°λ₯΄κ² μ€μ λμλμ§ νμΈν©λλ€.
cd 1_kubeflow_setup
# μ€ν κΆν λΆμ¬
chmod +x verify_kubeflow.sh
# νκ²½ λ³μ μ€μ λ° μ€ν
export USER_NUM="01" # λ³ΈμΈ λ²νΈλ‘ λ³κ²½
./verify_kubeflow.sh| Step | κ²μ¦ νλͺ© | μ€λͺ |
|---|---|---|
| 1 | Namespace | kubeflow-user{XX} λ€μμ€νμ΄μ€ μ‘΄μ¬ νμΈ |
| 2 | Profile | profile-user{XX} νλ‘ν λ° Owner email μΌμΉ νμΈ |
| 3 | ServiceAccount | default-editor, default-viewer SA νμΈ |
| 4 | ResourceQuota | CPU, Memory ν λΉλ νμΈ |
| 5 | RoleBinding | μ¬μ©μ κΆν μ€μ νμΈ |
| 6 | PodDefault | MLflow, Pipeline μ κ·Ό μ€μ νμΈ |
| 7 | 리μμ€ μν | Pods, Services, PVC νν© νμΈ |
| 8 | κΆν 격리 | λ€λ₯Έ μ¬μ©μ Namespace μ κ·Ό μ°¨λ¨ νμΈ |
| 9 | μμ€ν μν | Kubeflow μ£Όμ μ»΄ν¬λνΈ μν νμΈ |
| 10 | μ΅μ’ νλ¨ | μ€μ΅ κ°λ₯ μ¬λΆ νλ¨ |
μ€ν¬λ¦½νΈ μμ΄ μλμΌλ‘ νμΈνλ €λ©΄:
# 1. Namespace νμΈ
kubectl get namespace kubeflow-user${USER_NUM}
# 2. Profile νμΈ
kubectl get profile profile-user${USER_NUM}
kubectl get profile profile-user${USER_NUM} -o jsonpath='{.spec.owner.name}'
# 3. ServiceAccount νμΈ
kubectl get serviceaccount -n kubeflow-user${USER_NUM}
# 4. ResourceQuota νμΈ
kubectl get resourcequota -n kubeflow-user${USER_NUM}
# 5. PodDefault νμΈ
kubectl get poddefaults -n kubeflow-user${USER_NUM}
# 6. κΆν 격리 ν
μ€νΈ (λ€λ₯Έ μ¬μ©μ μ κ·Ό μλ - μ€ν¨ν΄μΌ μ μ)
kubectl get pods -n kubeflow-user02 # user01μΈ κ²½μ°============================================================
κ²μ¦ κ²°κ³Ό μμ½
============================================================
β
ν΅κ³Ό: 10
β μ€ν¨: 0
β οΈ κ²½κ³ : 0
π μ΄μ : 10/10
π λͺ¨λ κ²μ¦μ μλ²½νκ² ν΅κ³Όνμ΅λλ€!
λ€μ λ¨κ³: Part 2 (MLflow νκ²½ κ²μ¦)λ‘ μ§ννμΈμ.
MLflowλ ML μ€ν μΆμ , λͺ¨λΈ κ΄λ¦¬, λ°°ν¬λ₯Ό μν νλ«νΌμ λλ€. μ΄ μΉμ μμλ MLflow μλ² μ°κ²° λ° Tenantλ³ μ€μ μ νμΈν©λλ€.
cd ../2_mlflow_setup
# μ€ν κΆν λΆμ¬
chmod +x verify_mlflow.sh
# νκ²½ λ³μ μ€μ λ° μ€ν
export USER_NUM="01" # λ³ΈμΈ λ²νΈλ‘ λ³κ²½
./verify_mlflow.sh| Step | κ²μ¦ νλͺ© | μ€λͺ |
|---|---|---|
| 1 | Namespace | Kubeflow Namespace μ‘΄μ¬ νμΈ |
| 2 | Profile | Profile λ° Owner email νμΈ |
| 3 | S3 λ²ν· | mlops-training-user{XX} λ²ν· νμΈ |
| 4 | ECR λ μ§μ€νΈλ¦¬ | mlops-training/user{XX}* νμΈ |
| 5 | MLflow PodDefault | access-mlflow PodDefault νμΈ |
| 6 | MLflow Server | MLflow Tracking Server μν νμΈ |
| 7 | κΆν 격리 | Namespace κ° μ κ·Ό μ°¨λ¨ νμΈ |
# MLflow νλ μν νμΈ (μμ μ λ€μμ€νμ΄μ€)
kubectl get pods -n kubeflow-user${USER_NUM} -l app=mlflow-server
# MLflow μλΉμ€ νμΈ
kubectl get svc -n kubeflow-user${USER_NUM} | grep mlflow
# PostgreSQL μν νμΈ (MLflow Backend)
kubectl get pods -n mlflow-system -l app=postgres# MLflow UI ν¬νΈ ν¬μλ©
kubectl port-forward svc/mlflow-server -n kubeflow-user${USER_NUM} 5000:5000
# λΈλΌμ°μ μμ μ μ
# http://localhost:5000PodDefaultλ Jupyter Notebookμμ MLflowμ μλμΌλ‘ μ°κ²°ν μ μλλ‘ νκ²½ λ³μλ₯Ό μ£Όμ ν©λλ€.
# MLflow PodDefault νμΈ
kubectl get poddefault access-mlflow -n kubeflow-user${USER_NUM} -o yamlνμΈν νκ²½ λ³μ:
env:
- name: MLFLOW_TRACKING_URI
value: "http://mlflow-server.kubeflow-user{XX}.svc.cluster.local:5000"
- name: MLFLOW_S3_ENDPOINT_URL
value: "https://s3.ap-northeast-2.amazonaws.com"
- name: AWS_DEFAULT_REGION
value: "ap-northeast-2"============================================================
κ²μ¦ κ²°κ³Ό μμ½
============================================================
β
ν΅κ³Ό: 7
β μ€ν¨: 0
β οΈ κ²½κ³ : 0
π μ΄μ : 7/7
π λͺ¨λ κ²μ¦μ μλ²½νκ² ν΅κ³Όνμ΅λλ€!
λ€μ λ¨κ³: Part 3 (AWS μ€ν λ¦¬μ§ νμΈ)λ‘ μ§ννμΈμ.
MLOps νλ«νΌμμ μ¬μ©νλ AWS μ€ν 리μ§(S3, ECR)λ₯Ό νμΈν©λλ€.
cd ../3_storage_setup
# μ€ν κΆν λΆμ¬
chmod +x verify_storage.sh
# νκ²½ λ³μ μ€μ λ° μ€ν
export USER_NUM="01" # λ³ΈμΈ λ²νΈλ‘ λ³κ²½
./verify_storage.sh| Step | κ²μ¦ νλͺ© | μ€λͺ |
|---|---|---|
| 1 | S3 λ²ν· | mlops-training-user{XX} λ²ν· μ‘΄μ¬ λ° μ κ·Ό νμΈ |
| 2 | ECR λ μ§μ€νΈλ¦¬ | mlops-training/user{XX} λ μ§μ€νΈλ¦¬ νμΈ |
| 3 | MLflow Artifacts | S3 MLflow Artifacts ν΄λ νμΈ |
| 4 | Pipeline Artifacts | Kubeflow Pipeline Artifacts ν΄λ νμΈ |
| 5 | μν€ν μ² | μ 체 μ€ν λ¦¬μ§ μν€ν μ² μμ½ |
| 6 | λ°μ΄ν° νλ¦ | νμ΅ β μ μ₯ β λ°°ν¬ νλ¦ μ€λͺ |
# S3 λ²ν· μ‘΄μ¬ νμΈ
aws s3 ls s3://mlops-training-user${USER_NUM} --region ap-northeast-2
# λ²ν· λ΄μ© νμΈ
aws s3 ls s3://mlops-training-user${USER_NUM}/ --region ap-northeast-2
# MLflow Artifacts ν΄λ νμΈ
aws s3 ls s3://mlops-training-user${USER_NUM}/mlflow-artifacts/ --region ap-northeast-2# ECR λ μ§μ€νΈλ¦¬ νμΈ
aws ecr describe-repositories \
--repository-names mlops-training/user${USER_NUM} \
--region ap-northeast-2
# ECR λ‘κ·ΈμΈ
aws ecr get-login-password --region ap-northeast-2 | \
docker login --username AWS --password-stdin \
$(aws sts get-caller-identity --query Account --output text).dkr.ecr.ap-northeast-2.amazonaws.comβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β AWS MLOps Storage Architecture β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β βββββββββββββββββββ ββββββββββββββββββββ β
β β Kubeflow β β MLflow β β
β β Pipeline ββββββββββΆβ Tracking Server β β
β β β β (Port 5000) β β
β βββββββββββββββββββ βββββββββββ¬βββββββββ β
β β β β
β β βββββββββββΌβββββββββ β
β β β PostgreSQL β β
β β β (Metadata DB) β β
β β ββββββββββββββββββββ β
β β β
β βββββββββΌβββββββββ β
β β AWS S3 ββββββββββββββββββββββββββββββββββββββββ β
β β (Artifacts) β (Model & Artifact Store) β
β β β β
β β π mlops-training-user{XX}/ β
β β βββ mlflow-artifacts/ β
β β βββ kubeflow-pipeline-artifacts/ β
β ββββββββββββββββββ β
β β
β ββββββββββββββββββ β
β β AWS ECR ββββββββββββββββββββββββββββββββββββββββ β
β β (Container β (Container Images) β
β β Registry) β β
β β β β
β β π¦ mlops-training/user{XX} β
β ββββββββββββββββββ β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
1. νμ΅ μ€ν
βββΆ MLflow Tracking
βββΆ S3: Model νμΌ, Artifacts μ μ₯
βββΆ PostgreSQL: Metrics, Parameters κΈ°λ‘
2. λͺ¨λΈ λ°°ν¬
βββΆ S3: λͺ¨λΈ νμΌ μ‘°ν
βββΆ ECR: μΆλ‘ μλ² μ΄λ―Έμ§ μ μ₯
βββΆ KServe: InferenceService μμ±
3. νμ΄νλΌμΈ μ€ν
βββΆ ECR: μ»΄ν¬λνΈ μ΄λ―Έμ§ μ¬μ©
βββΆ S3: μ
λ ₯ λ°μ΄ν° λ‘λ
βββΆ S3: μ€ν κ²°κ³Ό μ μ₯
μΈ κ°μ§ Partλ₯Ό ν λ²μ κ²μ¦νλ €λ©΄:
cd .. # lab1-1_mlops-environment-setup λλ ν λ¦¬λ‘ μ΄λ
# ν΅ν© κ²μ¦ μ€ν¬λ¦½νΈ μ€ν
chmod +x verify_all.sh
export USER_NUM="01" # λ³ΈμΈ λ²νΈλ‘ λ³κ²½
./verify_all.sh#!/bin/bash
# Lab 1-1 ν΅ν© κ²μ¦ μ€ν¬λ¦½νΈ
echo "============================================================"
echo " Lab 1-1: MLOps νκ²½ ν΅ν© κ²μ¦"
echo "============================================================"
# νκ²½ λ³μ νμΈ
if [ -z "$USER_NUM" ]; then
read -p "μ¬μ©μ λ²νΈλ₯Ό μ
λ ₯νμΈμ (μ: 01): " USER_NUM
export USER_NUM
fi
echo ""
echo "π€ μ¬μ©μ: user${USER_NUM}"
echo ""
# Part 1: Kubeflow κ²μ¦
echo "ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ"
echo "[Part 1] Kubeflow Tenant κ²μ¦"
echo "ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ"
cd 1_kubeflow_setup && ./verify_kubeflow.sh
PART1_RESULT=$?
cd ..
# Part 2: MLflow κ²μ¦
echo ""
echo "ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ"
echo "[Part 2] MLflow νκ²½ κ²μ¦"
echo "ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ"
cd 2_mlflow_setup && ./verify_mlflow.sh
PART2_RESULT=$?
cd ..
# Part 3: Storage κ²μ¦
echo ""
echo "ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ"
echo "[Part 3] AWS μ€ν λ¦¬μ§ κ²μ¦"
echo "ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ"
cd 3_storage_setup && ./verify_storage.sh
PART3_RESULT=$?
cd ..
# μ΅μ’
κ²°κ³Ό
echo ""
echo "============================================================"
echo " μ΅μ’
κ²μ¦ κ²°κ³Ό"
echo "============================================================"
echo ""
TOTAL_FAIL=$((PART1_RESULT + PART2_RESULT + PART3_RESULT))
if [ $TOTAL_FAIL -eq 0 ]; then
echo "π λͺ¨λ κ²μ¦μ ν΅κ³Όνμ΅λλ€!"
echo ""
echo "λ€μ λ¨κ³: Lab 1-2 (Hello Pipeline)λ‘ μ§ννμΈμ."
else
echo "β οΈ μΌλΆ κ²μ¦μ΄ μ€ν¨νμ΅λλ€."
echo ""
echo "μ€ν¨ν Partλ₯Ό νμΈνκ³ κ°μ¬μκ² λ¬ΈμνμΈμ."
fi
exit $TOTAL_FAILμ¦μ:
error: You must be logged in to the server (Unauthorized)
ν΄κ²°:
# kubeconfig κ°±μ
aws eks update-kubeconfig \
--region ap-northeast-2 \
--name mlops-training-cluster
# μ°κ²° νμΈ
kubectl cluster-infoμ¦μ:
β οΈ Owner email λΆμΌμΉ!
μμ: user07@mlops.local
μ€μ : user@example.com
ν΄κ²°: κ°μ¬μκ² λ¬Έμνμ¬ Profile Owner μμ μ μμ²νμΈμ.
# κ°μ¬κ° μ€νν λͺ
λ Ήμ΄
kubectl patch profile profile-user07 --type=merge \
-p '{"spec":{"owner":{"name":"user07@mlops.local"}}}'μ¦μ:
An error occurred (AccessDenied) when calling the ListBuckets operation
ν΄κ²°:
# AWS μ격μ¦λͺ
μ¬μ€μ
aws configure
# μ격μ¦λͺ
νμΈ
aws sts get-caller-identityμ¦μ:
β MLflow PodDefault μμ: access-mlflow
ν΄κ²°: κ°μ¬μκ² λ¬Έμνμ¬ PodDefault μμ±μ μμ²νμΈμ.
μ¦μ:
β MLflow Serverλ₯Ό μ°Ύμ μ μμ΅λλ€
ν΄κ²°:
# MLflow νλ μν νμΈ
kubectl get pods -n mlflow-system
# νλ λ‘κ·Έ νμΈ
kubectl logs -n mlflow-system -l app=mlflow-serverμ¦μ:
β οΈ λ€λ₯Έ λ€μμ€νμ΄μ€ μ κ·Ό κ°λ₯ (κΆν νμΈ νμ)
ν΄κ²°: μ΄ κ²½μ° RBAC μ€μ μ΄ μ¬λ°λ₯΄μ§ μμ μ μμ΅λλ€. κ°μ¬μκ² NetworkPolicy λ° RBAC μ€μ νμΈμ μμ²νμΈμ.
- AWS CLI μ€μΉ λ° μ격 μ¦λͺ μ€μ
- kubectl μ€μΉ λ° EKS ν΄λ¬μ€ν° μ°κ²°
- νκ²½ λ³μ μ€μ (USER_NUM, NAMESPACE, S3_BUCKET)
- GitHub μ μ₯μ ν΄λ‘
- Namespace μ‘΄μ¬ νμΈ (
kubeflow-user{XX}) - Profile λ° Owner Email νμΈ (
user{XX}@mlops.local) - ServiceAccount νμΈ (
default-editor,default-viewer) - ResourceQuota νμΈ
- κΆν 격리 ν μ€νΈ ν΅κ³Ό
- MLflow Server μ€ν μ€
- PostgreSQL μ€ν μ€
- MLflow PodDefault μ‘΄μ¬ (
access-mlflow) - Pipeline PodDefault μ‘΄μ¬ (
access-ml-pipeline) - MLflow UI ν¬νΈ ν¬μλ© ν μ€νΈ
- S3 λ²ν· μ‘΄μ¬ (
mlops-training-user{XX}) - ECR λ μ§μ€νΈλ¦¬ νμΈ
- ECR λ‘κ·ΈμΈ μ±κ³΅
λͺ¨λ κ²μ¦μ ν΅κ³Όνλ€λ©΄ λ€μ μ€μ΅μΌλ‘ μ§ννμΈμ:
β‘οΈ Lab 1-2: Hello World Pipeline
cd ../lab1-2_hello-pipelineLab 1-2μμλ Kubeflow Pipelinesλ₯Ό μ¬μ©νμ¬ μ²« λ²μ§Έ ML νμ΄νλΌμΈμ μμ±ν©λλ€.
λ¬Έμ λ°μ μ κ°μ¬μκ² λ€μ μ 보λ₯Ό μ λ¬νμΈμ:
- μ¬μ©μ λ²νΈ (μ: 07)
- κ²μ¦ μ€ν¬λ¦½νΈ μ€ν κ²°κ³Ό μΊ‘μ²
- μ€λ₯ λ©μμ§ μ λ¬Έ
- μ€νν λͺ λ Ήμ΄
- Kubeflow 곡μ λ¬Έμ
- MLflow 곡μ λ¬Έμ
- AWS EKS μ¬μ©μ κ°μ΄λ
- AWS S3 λ¬Έμ
- AWS ECR λ¬Έμ
Β© 2025 νλμ€ν μλ² MLOps Training