MLOps

[MLOps] 2. 도커 사용 실습 - 이미지 build 및 .py파일 재현

mlslly 2024. 4. 17. 17:03

1. 설치된 패키지 확인하기 

$pip3 freeze

설치된 패키지들 및 버전을 확인할 수 있다. 

 

2. 도커 설치하기 

 

나는 맥북을 사용중이라 아래 사이트에서 맥용 데스크탑 버전을 다운 받았다. 

https://docs.docker.com/desktop/install/mac-install/ 

 

3. 도커 파일 만들기 

 

매우 단순한 iris ML 모델을 아래와 같이 train.py 파일에 미리 저장 후, 도커로 빌드해주려고 한다. 

train.py파일 내용은 아래 참고 

 

<train.py파일 내용>

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score

# load data
iris = load_iris(as_frame=True)
X, y = iris['data'], iris['target']

X_train, X_valid, y_train, y_valid = train_test_split(X,y,test_size=0.3, random_state=2024)

# train data

clf = RandomForestClassifier(n_estimators=100, max_depth=5, random_state=2024)
clf.fit(X_train, y_train)

# evaluate data

y_pred = clf.predict(X_valid)
acc_score = accuracy_score(y_valid, y_pred)
print('Accuracy score is {:.4f}'.format(acc_score))

 

그리고 나서 VScode에서 파일명 'Dockerfile'로 아래 내용을 작성해주고 저장하였다. 

이때 WORKDIR은 도커 파일을 저장하는 디렉토리에,

RUN의 python, scikit-learn, pandas의 버전은 1.에서 확인한 라이브러리 버전에 맞추어 기재한다.

 

<Dockerfile 내용>

FROM amd64/python:3.12.2-slim

WORKDIR /User/username/python-code


RUN pip install -U pip &&\
    pip install scikit-learn==1.3.2 pandas==2.1.4


COPY train.py train.py

ENTRYPOINT '/bin/bash'

 

4. 도커 이미지 빌드하기

도커 파일을 만들어 주고 나면, 다시 터미널로 돌아와서 아래 명령어를 실행한다.

맨 마지막 .은 동일한 파일 경로 내에 있는 도커 파일을 실행한다는 뜻이고,

-t는 태그를 의미하는데, 딱히 지정해주지 않으면 가장 최신의 파일로 자동 실행한다.

$ docker build -t reproduce .

 

아래처럼 빌드 진행 및 완료된 것을 볼 수 있는데, 

도커 파일에 명령했던 것과 동일하게 총 [4/4] 4가지의 명령어 실행됨.

[1/4] 베이스 이미지 가지고오기

[2/4] 디렉토리 설정 

[3/4] 패키지 설치

[4/4] train.py 복사 

 

제대로 생성되었는지 아래 명령으로 이미지 확인하기.

reproduce ~ 항목 생긴 것을 볼 수 있고, 위에 언급한 것처럼 TAG 지정 안해주어서 'latest'로 처리됨.

$ docker image ls

 

5. 도커 실행하기 

$ docker run -it reproduce

 

도커가 실행되면 아래처럼 컨테이너 내부로 들어온 것을 확인 가능하고, (root@~)

train.py파일을 실행해 주었을때 정상 작동하여 ML 모델의 accuracy 값을 print한 것을 볼 수 있음.

 

 

 

* 프로그래머스의 마키나락스 MLOps 강의를 참고하여 작성한 내용임 

'MLOps' 카테고리의 다른 글

[MLOps] 6. MLflow 로깅 방법  (1) 2024.04.18
[MLOps] 5. 도커 Compose로 MLflow 시작하기  (0) 2024.04.17
[MLOps] 4. MLflow 시작하기 (feat.도커)  (0) 2024.04.17
[MLOps] 3. 실험 관리  (0) 2024.04.17
[MLOps] 1. MLOps 개념  (0) 2024.04.17