이 레포지토리는 MLOps의 전체 라이프사이클을 자동화된 파이프라인으로 경험해볼 수 있도록 설계되어 있습니다. 단순히 모델을 학습시키는 것에서 끝나는 것이 아니라, 실험 추적, 모델 배포, 모니터링까지 실제 현업에서 사용하는 MLOps 흐름을 직접 따라해볼 수 있도록 구성되어 있습니다. MLOps가 왜 필요한지, 그리고 어떤 방식으로 머신러닝 프로젝트의 품질과 효율을 끌어올릴 수 있는지를 이 레포를 통해 직접 체험해볼 수 있습니다. 각 단계는 실제로 실무에서 필요한 작업들입니다.
- 데이터 수집 및 전처리 자동화
- 모델 학습 및 실험 관리
- 모델 레지스트리에 등록
- 배포 자동화
- 운영 중 모델 모니터링 및 재학습
이 레포지토리는 다음과 같은 패키지를 사용합니다:
- Airflow: 워크플로우 관리
- MLFlow: 실험 관리
- Prometheus: 모니터링
- Grafana: 모니터링 UI
- Triton Inference Server: 실시간 추론을 위한 모델 배포
- Python 3.10+
- Kubernetes
Kubernetes는 주로 Linux 환경에서 사용되기 때문에, 이 튜토리얼은 Linux 환경(amd64)을 기준으로 작성되었습니다. Windows 환경에서는 WSL2를 사용하여 Linux 환경을 구축할 수 있습니다. for linux and mac
uname -m- x86_64일 경우: amd64 -> 정상적으로 동작함
- arm64일 경우: aarch64 -> 정상적으로 동작하지 않을 수 있음
- 그 외 i686 또는 i386: 32비트이므로 동작하지 않을 수 있음
for windows
echo %PROCESSOR_ARCHITECTURE%- AMD64일 경우: amd64 -> 정상적으로 동작함
- ARM64일 경우: aarch64 -> 정상적으로 동작하지 않을 수 있음
- 그 외: 32비트이므로 동작하지 않을 수 있음
이 레포에는 k3s, kubectl, k9s, helm을 한번에 설치할 수 있는 스크립트가 있습니다.
./install.sh- 노드에 NVIDIA 드라이버와 관련 패키지를 설치합니다.
./install_nvidia_driver.sh- nvidia-smi를 실행해봤을 때 GPU 정보가 잘 뜨는지 확인이 되어야 합니다.
k3s: Lightweight Kubernetes
k3s는 가볍고 쉽게 설치할 수 있는 Kubernetes 클러스터입니다. 가볍지만 이 튜토리얼에서 사용하는 모든 기능을 지원합니다. 또한, 튜토리얼만 진행하기 때문에 단일 노드로만 구성합니다.
- --write-kubeconfig-mode 644: kubeconfig 파일의 권한을 644로 설정
- (옵션) --kubelet-arg="max-pods=250": 최대 파드 수를 250개로 설정(기본값은 110개)
- (옵션) --default-runtime nvidia: GPU 사용 설정(GPU가 없는 경우 무시)
curl -sfL https://get.k3s.io | sh -s - --write-kubeconfig-mode 644 --kubelet-arg="max-pods=250" --default-runtime nvidia확인
systemctl status k3sKUBECONFIG 환경변수 설정
echo 'export KUBECONFIG=/etc/rancher/k3s/k3s.yaml' >> ~/.bashrc
source ~/.bashrchttps://coding-groot.tistory.com/236 참고
grep nvidia /var/lib/rancher/k3s/agent/etc/containerd/config.toml출력 결과
default_runtime_name = "nvidia"
[plugins.'io.containerd.cri.v1.runtime'.containerd.runtimes.'nvidia']
[plugins.'io.containerd.cri.v1.runtime'.containerd.runtimes.'nvidia'.options]
BinaryName = "/usr/bin/nvidia-container-runtime"kubectl: Kubernetes CLI
kubectl은 쿠버네티스 클러스터에 리소스들을 배포/관리하기 위한 CLI 도구입니다. k3s만 설치해도 kubectl을 사용할 수 있기 때문에 별도로 설치할 필요는 없습니다. 하지만 k3s가 아닌 다른 클러스터를 사용하는 경우 별도로 설치해야 합니다.
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
chmod +x ./kubectl
sudo mv ./kubectl /usr/local/bin/kubectlbrew install kubectl확인
kubectl get nodesk9s: Kubernetes CLI
k9s는 kubectl와 비슷한 도구이지만 더 편리한 인터페이스(UI)를 제공합니다.
K9S_VERSION=$(curl -s https://api.github.com/repos/derailed/k9s/releases/latest | grep -Po '"tag_name": "\K.*?(?=")')
curl -LO https://github.com/derailed/k9s/releases/download/$K9S_VERSION/k9s_Linux_amd64.tar.gz
tar -zxvf k9s_Linux_amd64.tar.gz
sudo mv k9s /usr/local/bin/
rm k9s_Linux_amd64.tar.gzbrew install k9shelm: Kubernetes Package Manager
helm은 Kubernetes 클러스터에 애플리케이션을 배포하기 위한 패키지 매니저입니다.
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bashbrew install helm이 레포에는 k3s, kubectl, k9s, helm을 한번에 제거할 수 있는 스크립트가 있습니다.
./uninstall.shcluster를 제거하면 설치된 모든 리소스들을 한번에 제거할 수 있습니다.
k3s-uninstall.sh 파일 위치 찾기
which k3sk3s-uninstall.sh 파일은 위에서 찾은 경로와 같은 디렉토리에 있습니다.
sudo /usr/local/bin/k3s-uninstall.shcharts/mlops-platform를 배포한 상태에서 다음 명령어를 실행합니다.
kubectl apply -f argocd-apps/applicationset.yamlArgoCD에 Airflow, API Server, Triton Inference Server helm chart들이 application으로 등록됩니다.
k3s로 k8s 클러스터를 설치하면 기본 local-path-provisioner가 설치됩니다. 이 프로비저너는 로컬 디스크에 볼륨을 만들어서 사용합니다. /var/lib/rancher/k3s/storage/ 폴더에서 모든 볼륨을 확인할 수 있습니다.