MLOps
Machine Learning + Operation
머신 러닝 서비스를 유지, 관리 해주는 도구
ML Service
머신 러닝 모델을 통해 유의미한 결과를 얻어가는 것
머신러닝 서비스의 발전
Y=f(x)
AI = software(data)
MLOps구축시 기대효과
1. 문제풀이와 모델링에 더 집중
모델말고도 많은 과정이 필요
2. 더 정교한 실험 설계와 실험 관리가 가능
3. 배포한 모델의 문제가 생기는 경우 빠르게 환경을 재현할 수 있다.
Silently Failure = cat 반환
Data drift
데이터는 계속해서 변한다
를 진행해 보겠음.
데이터가 바뀌면 모델도 바뀐다.
명제의 이 : 데이터가 같으면 모델도 같다.
같은 데이터를 이용하도록 만듦
파이썬에서 난수를 활용하는 법 때문에 다른결과를 나타나게 됨
같은 난수 추출 법
1. 난수표를 초기화 후 같은 순서로 요청
-> 커널 재시작 후 실행 순서를 같게 한다.
2. 난수표에서 난수를 추출하는 순서를 지정한다.
->random seed / random state 지정
2방법을 자주 사용함
random_state=2024
사실은 근사라고 볼 수 있음
env =
싸이킷런, XGBoost
Docker.
한명에게만 공유하는경우 --> 작업했던 노트북을 실행해보라고 보내주면 됨
but 3명 요청한 경우
같은 노트북을 사용하면 셀들 간 중복실행 문제가 생김
노트북을 여러 대 만들어서 제공
Virtual machines VS Container
1. Dockerfile
2. build
3. 이미지 실행 -> 컨테이너
4. 학습 코드 실행
FROM amd64/python:3.9-slim
# 이미지를 만들 때 base가 되는 이미지를 지정합니다.
# 실습에서는 amd54/python:3.9-slim을 사용
WORKDIR /usr/app
# 작업 directory를 지정. 해당 directory가 없으면 새로 생성
# 작업 directory를 지정하면 그 이후에는 작성되는 명령어는 해당 directory를 기준으로 동작
# 실습에서는 /usr/app을 사용
RUN pip install -U pip &&\
pip install scikit-learn==1.2.2 pandas==2.0.2
# 이미지를 만들때 실행할 코드를 지정
# 컨테이너에서 python스크립트를 실행할 때 필요한 scikit-learn, pandas패키지를 설치
COPY train.py train.py
# 파일이나 폴더를 이미지에 복사. 상대경로를 사용할 경우 WORKDIR로 지정한 directory를 기준으로 복사
# 실습에서는 컨테이너에서 실행시키기 위해 앞서 작성한 train.py를 복사
ENTRYPOINT "/bin/bash"
# 컨테이너가 실행될 때 시작할 프로세스를 입력
# 터미널을 실행
docker에서 다시 빌드할 때 시간이 덜 걸리는 이유는
캐싱을 통해 같은 레이어라고 판단이 되는 경우에는 레이어를 만들지 않음. 재사용
이미지가 실행되면 컨테이너라고 부름
-it옵션 실행되는 컨테이너와 인터랙션을 할 수 있도록 함
docker build -t reproduce .
실험관리
실험 = 주어진 데이터를 이용해 모델을 학습 후 학습된 모델을 평가하는 행위
실험관리 = 수행한 실험들을 기록하고 관리 하는 것
실험관리는 왜?
- 어제 실행한 코드는 학습이 잘 완료 되었나?
- 가장 성능이 좋았떤 모델의 파라미터가 뭐였지?
실험관리는 어떻게 할까?
== 실험 기록의 자동화
1. 실험 중 발생하는 정보 기록
train loss history, metric score
2. 실험을 재현하기 위해 필요한 정보 기록
1. Tensorboard
Local에서 쉽게 설치 가능
2. Mlflow
자체 서버 구축이 쉬움
여러 시험결과 시각화
3. WandB
자체서버 구축 X
mlflow server --host 0.0.0.0
도커에 담아서 실행할 경우 페이지가 출력되지 않음. 이러한 원리 때문임.
데스크탑 네트워크와 컨테이너 네트워크를 연결해야함
5000:5001
접근하기 위해
docker run -p 5001:5000 mlflow-server
MLflow버전 충돌로 인해 새로운 가상환경 생성
python3 -m venv myenv
source myenv/bin/activate
pip install tensorflow==2.6.0
5000번 포트 충돌로 인해 우선 8000번으로 생성 후 MLflow UI를 확인
확인완료
docker로 mlflow 빌드
그러나 또다시 에러.
이러한 문제는 맥북의 고유한 에러로 인해
수신모드를 끄면 됨
서버실행완료.
서버를 이제 다시 끄고
이제 docker-compose.yaml파일을 제작
version: "3"
services:
mlflow-server:
build:
context: .
dockerfile: Dockerfile
ports:
- 5001:5000
version :
Compose파일의 버전을 의미
3을 사용
services:
Compose에 묶일 서비스들을 의미
하나의 서비스는 하나의 컨테이너를 의미
mlflow-server:
사용할 서비스의 이름
build:
build할 이미지의 정보들을 입력
port:
사용할 포트를 입력
docker compose 실행
docker compose up -d --build
Detached모드 백그라운드에서 컨테이너 실행 후 유지
dockercompose logs
compose의 로그 확인
'Tech Stack > MLflow' 카테고리의 다른 글
MLOps - 교차검증 (0) | 2024.02.23 |
---|---|
MLOps - HPO 반영 (0) | 2024.02.22 |
MLOps - Optuna (0) | 2024.02.22 |
MLOps - Hyperparameter Optimization (0) | 2024.02.22 |
MLOps - 학습 코드 로깅 추가 (0) | 2024.02.22 |