본문 바로가기
인공지능/Generative AI

[6탄] FastAPI 애플리케이션 Google Cloud Run(Docker)에 배포하기

by 유일리 2023. 11. 26.

오늘은 프로젝트의 마지막 이야기를 써보려 한다!

1탄부터 5탄까지 prompt engineering, 웹 크롤링, langchain, gpt, 텍스트 임베딩 등 다양한 기술을 활용해서 AI 서비스를 개발해보았다.

이제 이렇게 개발된 파이썬 모델을 백엔드 측에 전달하기 위해서는 몇가지 단계가 필요하다.

우리 팀의 시스템 구조도

 

1. API를 통한 소통 : FastAPI를 이용해 REST API로 래핑하고, 이를 통해 모델을 외부에서 호출 가능하게 만들 수 있다.

2. Docker : FastAPI로 구축한 API와 AI/ML 모델을 도커 컨테이너 내에 패키징하여 환경 차이로 인한 문제를 방지하고, 쉽게 배포할 수 있도록 한다.

3. Google cloud run : 컨테이너화된 애플리케이션을 서버리스 환경에서 실행할 수 있게 해주는 서비스이다.

 

위의 도구들은 모두 함께 작동하여 머신러닝 모델의 지속적인 통합과 배포를 자동화하는데 중요한 역할을 한다. 개발자는 코드를 커밋하고 푸시하기만 하면, CI/CD 파이프라인이 자동으로 빌드, 테스트, 컨테이너화 및 배포를 수행하여 최신 버전의 애플리케이션이 항상 사용 가능하도록 한다. 이 과정은 소프트웨어 개발의 효율성을 크게 향상시키고, 머신러닝 모델을 신속하게 프로덕션 환경에 적용할 수 있게 한다.


 

1. 우선 Docker를 설치하고 GCP에 회원가입과 프로젝트 생성을 해야한다. 이후 Docker Desktop을 실행한다.

https://www.docker.com/products/docker-desktop/

 

Docker Desktop: The #1 Containerization Tool for Developers | Docker

Docker Desktop is collaborative containerization software for developers. Get started and download Docker Desktop today on Mac, Windows, or Linux.

www.docker.com

 

2. Dockerfile 생성(+requirement.txt 생성)

Cloud Run을 사용하려면 Dockerfile이 필요하다. Cloud Run은 컨테이너화된 애플리케이션을 서버리스로 실행하므로, 파이썬 애플리케이션을 컨테이너로 패키징하기 위한 Dockerfile을 작성해야 한다. 우리가 사용한 Dockerfile은 아래와 같다.

# 파이썬 베이스 이미지 사용
FROM python:3.11.3

# 작업 디렉토리 설정
WORKDIR /app

# 필요한 패키지 및 도구 설치
RUN apt-get update && \
    apt-get install -y wget unzip && \
    apt-get install -y libx11-xcb1 libxcomposite1 libxi6 libxrandr2 libasound2 libpangocairo-1.0-0 libatk1.0-0 libatk-bridge2.0-0 libgtk-3-0 libnss3

# Chrome 및 ChromeDriver 설치
RUN wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb && \
    apt-get install -y ./google-chrome-stable_current_amd64.deb && \
    rm google-chrome-stable_current_amd64.deb

RUN wget https://edgedl.me.gvt1.com/edgedl/chrome/chrome-for-testing/118.0.5993.70/linux64/chromedriver-linux64.zip && \
    unzip chromedriver-linux64.zip && \
    mv chromedriver-linux64/chromedriver /usr/bin/chromedriver && \
    chmod +x /usr/bin/chromedriver && \
    rm chromedriver-linux64.zip

# 환경 변수 설정
ENV GOOGLE_CHROME_BIN /usr/bin/google-chrome
ENV CHROMEDRIVER_PATH /usr/bin/chromedriver

# 의존성 파일 복사 및 설치
COPY requirements.txt requirements.txt
RUN pip install --no-cache-dir -r requirements.txt

# 애플리케이션 코드 복사
COPY . .

# 애플리케이션 실행
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8080"]

 

Google Cloud SDK를 설치한 후 다음 명령어들을 실행한다.

 

3. Docker 이미지 빌드

docker build -t gcr.io/PROJECT_ID/IMAGE_NAME:TAG .

 

4. Google Cloud 인증

gcloud auth login
gcloud auth configure-docker

 

5. GCR에 Docker 이미지 푸시

docker push gcr.io/PROJECT_ID/IMAGE_NAME:TAG

 

6. Google Cloud Run 배포

gcloud run deploy SERVICE_NAME --image gcr.io/PROJECT_ID/IMAGE_NAME:TAG --region REGION --platform managed

 

배포가 완료되면 접속 가능한 url이 뜰 것이다!

배포 단계에서 많은 오류가 발생하였는데..각 프로젝트의 설치해야 하는 패키지, 환경 변수 등 초기 설정을 잘하길 바란다.

그리고 우리 프로젝트는 원래 heroku 배포 방식을 썼는데, 자연어 응답 처리 속도에 따른 timeout error가 발생해서 google cloud run으로 바꾼 케이스이다. (비용 효율, 토큰 수 처리 등 많은 이점이 있으니 cloud run을 강추한다!!)

 

약 8개월간의 프로젝트를 마무리하는 날이 오다니..

기획부터 배포까지 하며 많은 에러와 난관에 부딪혔지만 어찌저찌 잘 해결해나가며 최종적으로 완성..했다..!!!

우리 팀 너무 고생많았고 마지막 시연 영상으로 마무리하겠다 안녕~~

 

https://youtu.be/kU2kh1HcYP4?si=Q3IuhmwtLZA54HJr

 

댓글