지난번까지 모델 로컬화와 실험 과정이 끝나면서 이제 사실상 모델을 돌릴준비는 완료되었다고 보면 된다.
그럼 이제 이 모델들을 잘 배포하고 요청에따라 Cloud위에서 잘 돌려주기만 하면 되었다.
그래서 이번 포스팅은 어떤식으로 배포 파이프라인을 구성했는지 차근차근 설명하겠다.
1. Docker 파일 배포
먼저 아래 파일 구성을 보면 정말 많은 요소들이 포함되어있다.
먼저 이 파일의 main 실행 코드는 app.py 이다. 즉 누군가 이 모델을 돌리려고 한다면, 바로 저 app.py 만 실행하면 되는 것이다. app.py 안을 간단하게 살펴보면 아래와 같다
app = Flask(__name__)
@app.route('/ping', methods=['GET'])
def ping():
"""
Determine if the container is healthy by running a sample through the algorithm.
"""
try:
return Response(response='{"status": "ok"}', status=200, mimetype='application/json')
except:
return Response(response='{"status": "error"}', status=500, mimetype='application/json')
## 중간 생략
if __name__ == '__main__':
parser = argparse.ArgumentParser()
parser.add_argument('--port', type=int, default=8080)
args, unknown = parser.parse_known_args()
app.run('0.0.0.0', port=args.port, debug=True)
중간은 생략하고 일단 위에 보이는 api는 ping을 보내는 api로 주기적으로 health check를 해주는 역할이다. 중간 코드는 너무 길어서 생략했지만 저것 외에도 음성을 학습 혹은 추론 시키는 api가 들어 있다.
어쨌든 우리는 docker로 배포하기 위해 모델을 사용할 누군가에게 사용 설명서를 만들어줘야한다. 그것이 바로 dockerfile 이다.
실제 컨테이너 위에서 혹은 Cloud 환경 위에서 저 도커를 실행시키려면 어떻게 실행을 하는지, 무엇을 준비해야하는지 알려줘야하기 때문에 작성하는것이라 생각하면 된다.
그래서 내가 작성한 dockerfile은 아래와 같다.
FROM pytorch/pytorch:2.1.0-cuda11.8-cudnn8-runtime
RUN apt-get update
# 작업 디렉토리 생상
RUN mkdir -p /opt/ml/code
WORKDIR /opt/ml/code
COPY . .
RUN pip install -r requirements.txt
# 환경변수 설정
ENV AWS_ACCESS_KEY_ID=
ENV AWS_SECRET_ACCESS_KEY=
ENV AWS_REGION_NAME=
EXPOSE 8080
ENTRYPOINT ["./run.sh"]
먼저 첫줄은 이 도커가 실행가능한 환경을 얘기해준다. 여기서는 pytorch 2.1.0과 cudnn8-runtime 환경을 요구하고 있는 것이다.
FROM pytorch/pytorch:2.1.0-cuda11.8-cudnn8-runtime
그 다음으로 확인할 부분은 이 모델에 필요한 라이브러리이다. 여기에 필요한 라이브러리를 설치하라고 알려줘야한다.
RUN pip install -r requirements.txt
그렇다면 requirements.txt는 어떻게 생겼을까?
아래와 같이 필요한 라이브러리들을 명시해주면 전부 알아서 설치가 완료된다!
numpy
soundfile
scipy
tqdm
librosa
demucs
onnxruntime-gpu
torch>=1.13.0
pyyaml
ml_collections
pytorch_lightning
samplerate
segmentation_models_pytorch==0.3.3
flask==2.2.5
boto3
그리고 마지막으로 MKDIR 과 ENTRYPOINT(app.py)를 지정해 주면 비로소 도커 허브에 올릴 수 있는 것이다.!
사실 도커를 써본 것이 이번이 처음이었었기에 생각보다 Docker라는 구동방식과 환경을 이해하기 쉽지 않았지만 한번 배포해보고나니, 금방 적응할 수 있었다

다음 포스팅에는 배포한 Docker를 AWS에 배포하고 어떤식으로 아키텍쳐를 구성했는지 그 과정에 대해 설명하겠다
'MLOps > MLOps projects' 카테고리의 다른 글
AI Voice Conversion Project(음성 합성 모델) #3: 모델 로컬화 (2) | 2024.03.26 |
---|---|
AI Voice Conversion Project(음성 합성 모델) #2: 모델 생성 (0) | 2024.03.19 |
AI Voice Conversion Project(음성 합성 모델) (0) | 2024.03.06 |