이 문서는 본 캠퍼가 Ubuntu Server → Docker + MLflow → Client 적용 순서로 진행했던 경험을 토대로 작성하는 회고록입니다. 여러분들께 약간의 도움이라도 되길 바랍니다 😁
팀원들 모두가 사용할 수 있는 MLOPS 환경을 구성하고자 했기에 실제 구동되는 환경은 다음과 같을 것입니다. 이후의 설정은 다음의 용어들을 활용하여 진행하겠습니다.
Client | Remote-ML | Remote | |
---|---|---|---|
구동 환경 | Windows / Mac | Linux (Colab, Upstage) | Ubuntu Server (강추) |
역할 | 코딩, 각 환경 접속 | 모델 학습 | 모델 학습 기록 |
또한 접속 모양은 다음과 같겠습니다.
Docker로 MLflow를 설치하여 구동하는 방식을 선택했습니다. 보안과 안정성, 그리고 이후 다른 서버로 옮길 때 용이하게 하기 위해서입니다.
Dockerfile 입니다.
FROM python:3.9.10-slim-buster
COPY requirements.txt mlflow-server/requirements.txt
WORKDIR mlflow-server
RUN apt-get update && \\
pip install pip --upgrade && \\
pip install -r requirements.txt
CMD ["mlflow", "ui", "-h", "0.0.0.0", "-p", "5000", "--default-artifact-root", "mlruns", "--backend-store-uri", "mlruns"]
pip install
중 특별히 주의할 점은 다음과 같습니다. requirements.txt
에 대한 설명입니다.
mlflow
: 핵심 모듈입니다. 22년 11.14. 부로 2.0.1 버전업 된 상태입니다.pyyaml
: mlflow
내부적으로 사용하는 모듈입니다. yml
파일을 읽고 쓰는 데 사용합니다. 이 모듈에서 오류가 난다면 강제 업데이트를 시도하십시오.flask
: mlflow
의 ui 페이지를 렌더링하기 위한 웹서버 모듈입니다. 이 모듈에서도 오류가 났었는데 별도 설치를 통해 해결할 수 있습니다.CMD(사용자 명령 줄)에 대한 설명입니다.
mlflow ui -h 0.0.0.0 -p 5000
: ui를 띄웁니다. 0.0.0.0 번 ip로 하여 외부 팀원들도 열어볼 수 있도록 합니다. 포트는 기본값인 5000을 그대로 사용합니다.--default-artifact-root
: artifact를 저장하는 저장소를 지정합니다. 저는 Remote 자체를 사용했지만 기호에 따라 S3나 외부 클라우드 저장소를 사용할 수 있습니다.--backend-store-uri
: MLflow 엔티티를 기록하는 저장소입니다. Remote 자체를 사용해도 무관하나 sqlite 등 DB를 활용할 수 있습니다.해당 폴더로 이동하여 docker build -t mlflow:2.0.1 .
명령어로 빌드하고 docker run --name mlflow -p 5000:5000 -v $(pwd):/mlflow-server --rm mlflow:2.0.1
로 실행합니다.
Pytorch Lightning
은 MLflow
를 공식 지원합니다. 다양한 메소드를 지원하며 추가적인 설정이 많이 필요하지 않습니다.Pytorch Lightning
데모Transformer
는 MLflow
를 공식 지원하기는 합니다. 4.19 버전 이상부터 6가지의 콜백을 지원합니다.MLflow
를 로드하기 전 설정이 완료되어 있어야합니다.Run
에 추가로 Artifacts
를 기록하는 것은 더 많은 설정이 필요합니다.Tranformer
에 적용한 함수입니다.