Docker swarm으로 mlflow를 쉽게 구성해 보자.
docker swarm 구성 장점.
Docker swarm으로 mlflow를 쉽게 구성해 보자.
Mlflow의 주요 특징 및 용어
MLflow는 오픈 소스 머신 러닝 라이프사이클 관리 도구로, 모델 훈련, 추적, 협업, 그리고 모델 배포를 간단하게 관리할 수 있게 해 줍니다. MLflow는 모델 훈련 코드, 파라미터, 메트릭, 모델 아티팩트 등을 추적하며, 실험과 버전을 관리합니다.
1.Tracking:모델 훈련의 메트릭, 파라미터 등을 추적하고, 여러 실험을 생성하고 비교할 수 있는 기능을 제공합니다.
2.Projects:모델 코드를 패키징하고 다양한 환경에서 쉽게 재현할 수 있도록 하는 프로젝트 관리 기능이 있습니다.
3.Registry:모델 버전을 추적하고 모델 레지스트리에서 모델을 저장, 검색, 배포할 수 있습니다.
4.Flavors:모델 아티팩트를 저장하고 로드하는 다양한 형식과 환경에 대한 지원을 제공합니다.
[Docker Swarm을 사용하여 MLflow를 구성했을 때 장점]
1.쉬운 배포:Docker Swarm은 Docker의 일부로 제공되며, 단일 명령어로 클러스터를 설정하고 서비스를 배포할 수 있습니다. 초기 구성이 상대적으로 간단하며, 단일 호스트에서 멀티노드 클러스터까지 쉽게 확장할 수 있습니다.
2.통합성:Docker Swarm은 Docker 컨테이너 기반으로 동작하기 때문에 기존에 Docker를 사용하는 환경에서 쉽게 도입할 수 있습니다. 도커 컨테이너는 환경에 관계없이 일관되게 동작합니다.
3.클러스터 관리:Docker Swarm은 클러스터 관리를 위한 간단한 명령어를 제공하며, 클러스터에서 서비스를 확장하고 관리하기가 상대적으로 쉽습니다.
4.역할 분리:MLflow는 모델 라이프사이클 관리에 중점을 둡니다. 따라서 각 도구가 자신의 역할을 수행하면서 역할을 분리할 수 있습니다.
5.모델 훈련과 배포:MLflow는 모델 훈련 코드를 관리하고 모델 버전을 추적하며, 편리하게 모델을 관리하고 배포할 수 있습니다.
6.스케일 다운 및 자동 복구:Docker Swarm은 서비스의 인스턴스 수를 쉽게 조절할 수 있습니다. 따라서 MLflow 서비스의 부하에 따라 스케일을 업 또는 다운하고 필요한 경우 자동으로 복구할 수 있습니다.
결론적으로, Docker Swarm을 사용하여 MLflow를 구성하면 쉽고 빠르게 시작할 수 있으며, 간단한 환경에서는 효과적일 수 있습니다. 그러나 기능의 확장성과 더 복잡한 워크 로드를 다루기 위해서는 Kubernetes와 같은 더 강력한 오케스트레이션 도구를 고려해 볼 수 있습니다.
(1)Docker swarm으로 Mlflow 구성 방법
저의 구성 환경입니다.[master, node1, node2]
OS: Ubuntu22.04[VM]
CPU: 4core
MEMORY: 10GB
DISK: 50GB
1: Docker 및 Docker Swarm 설치
docker 설치
# sudo apt update
# sudo apt install -y apt-transport-https ca-certificates curl software-properties-common
# curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
# sudo add-apt-repository \"deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable\"
# sudo apt update
# apt-cache policy docker-ce
# sudo apt install docker-ce
# sudo systemctl status docker
docker-compose 설치
# sudo apt-get install jq
# VERSION=$(curl --silent https://api.github.com/repos/docker/compose/releases/latest | jq .name -r)
DESTINATION=/usr/bin/docker-compose
# sudo curl -L https://github.com/docker/compose/releases/download/${VERSION}/docker-compose-$(uname -s)-$(uname -m) -o $DESTINATION
# sudo chmod 755 $DESTINATION
# which docker-compose
# sudo apt install docker-compose
Docker Swarm 초기화 (마스터 노드에서만 실행)
# sudo docker swarm init
나머지 노드 Join
docker swarm join --token SWMTKN-1-2c7c3b4ph7mgqo6ewwl867qqvz5m7asc0jx5mxm0awa5cojxbs-2j9llq4ti57vlqvfeb6eqo0gv 192.168.0.111:2377
node확인 방법 [마스터 노드에서 확인 가능합니다]
# sudo docker node ls
아래 이미지와 같이 나온다면 완료 입니다.
2. MLflow 서비스 생성:
MLflow Docker 이미지 가져오기
- docker file을 아래와 같이 작성하여 이미지를 빌드해 줍니다.
# sudo mkdir docker
# cd docker
# sudo vi Dockerfile
FROM python:3.8
RUN pip install mlflow
EXPOSE 5000
CMD [\"mlflow\", \"ui\", \"--host\", \"0.0.0.0\"]
# sudo docker build -t mlflow-server:latest .
MLflow 서비스 생성
# sudo vi mllfow-stack.yml
version: \'3.8\'
services:
mlflow:
image: mlflow-server:latest
deploy:
replicas: 1
ports:
- \"5000:5000\"
volumes:
- mlflow-data:/mlflow
volumes:
mlflow-data:
MLflow 실행
# sudo docker stack deploy -c mlflow-stack.yml flow-stack
MLflow 확인방법
# sudo docker stack list
AME SERVICES
flow-stack 1
# sudo docker stack ps flow-stack
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
tqfyevzwdpww flow-stack_mlflow.1 mlflow-server:latest master Running Running 37 seconds ago
이제 mlflow는 Docker Swarm에서 실행 중입니다. 웹 브라우저에서 http://:5000로 이동하여 MLflow 웹 UI에 액세스할 수 있습니다.
span{vertical-align: inherit;}
li span{vertical-align: middle;}
p span{vertical-align: top;}
2024.01.02