Fast API를 사용하여 기계 학습 API를 구축하는 단계별 접근 방식

Mar 22 2022
모델을 API로 제공하는 빠르고 간단한 접근 방식
소개 기계 학습 모델이 아무리 효율적이더라도 비즈니스에 가치를 창출할 때만 유용합니다. 이것은 컴퓨터의 폴더에 저장되어 있는 경우에는 발생하지 않습니다.
Unsplash의 Kurt Cotoaga 사진

소개

기계 학습 모델이 아무리 효율적이더라도 비즈니스에 가치를 창출할 때만 유용합니다. 이것은 컴퓨터의 폴더에 저장되어 있는 경우에는 발생하지 않습니다. 빠르게 성장하는 이 환경에서 AI 솔루션을 시장에 출시하려면 속도와 우수한 배포 전략이 필요합니다!

이 문서에서는 이 Fast API문제에 대해 어떻게 도움을 줄 수 있는지 설명합니다. 먼저 API를 생성하여 Fast API와 해당 일러스트레이션에 대한 글로벌 개요를 살펴보겠습니다.

FastAPI — 무엇을 그리고 왜?

Flask, Django 등과 같은 다양한 프레임워크에 이미 익숙할 수도 있습니다. 그러나 Fast API는 RESTful 마이크로서비스를 위한 고성능 및 개발 측면에서 두드러집니다. 이것은 techempower 의 벤치마킹 분석에서 발췌한 내용으로 강조될 수 있습니다 .

출처: techempower 벤치마크

사용 사례에 대한 구현

여기에서 목표는 주어진 문자 메시지가 스팸인지 햄인지 예측하는 것을 목표로 하는 감정 분류 모델을 제공하는 것입니다. 이 기사의 목적은 모델이 이미 훈련되어 있어야 하는 API 생성에 중점을 두고 있기 때문에 전체 데이터 과학 프로세스(데이터 분석, 데이터 전처리, 모델 훈련 등)에 대해 더 깊이 들어가지는 않을 것입니다. 이에 대해 더 알고 싶다면 이 기사 를 참조하십시오 .

달성하려는 주요 구성 요소를 강조하는 워크플로를 이해하는 것으로 시작하겠습니다.

기사의 두 가지 주요 프로세스(저자별 이미지)

1단계: API 빌드

  • 사용자/클라이언트는 API와 상호 작용하여 예측 모델을 트리거하는 uvicorn 서버 에 요청을 보냅니다.
  • 모델은 극성(스팸 또는 햄)을 반환하고 결과는 JSON 형식으로 사용자에게 표시됩니다.
  • API를 생성한 후 앱이 실행될 Docker 이미지를 생성합니다.

다음 이미지는 우리 프로젝트의 주요 폴더와 그 내용을 보여줍니다.

프로젝트 구조(저자별 이미지)

다음 사항에 더 중점을 둘 것입니다.

  • app.py서버 측의 모든 지침 포함
  • docker컨테이너를 생성하기 위한 Dockerfile 을 포함 합니다.

python 파일의 API 구현 app.py은 다음 세 가지 주요 섹션으로 나뉩니다.

  1. API에 필요한 모든 라이브러리를 가져옵니다( 2~3행 ). 그 전 단계는 해당 라이브러리를 설치하는 것입니다 . 이 작업은 pip install -r requirements.txt명령을 실행하여 수행할 수 있습니다.
  2. 직렬화된 모델과 벡터를 로드하고( 라인 6 및 9 ) Fast API를 인스턴스화합니다( 라인 12 ).
  • default route : 매개변수를 사용하지 않는 root()"/” 함수를 통해 JSON 형식 "message": "Welcome to Your Sentiment Classification FastAPI"를 단순히 반환합니다 .
  • 예측 경로 : 이것은 매개변수로 사용자의 메시지를 취하는 함수를 "/predict_sentiment"트리거하고 19-22 에서 정의된 형식으로 JSON 응답을 반환합니다 . 감정 극성은 모델의 예측입니다.predict_sentiment()

uvicorn app:app --reload

  • app: 파이썬 파일에 해당합니다 app.py. ":" 기호 왼쪽에 있는 파일입니다.
  • appapp.py: 명령어 내부에 생성된 객체에 해당합니다 app = FastAPI(). 파일 이름이 main.py인 경우 지침은 다음과 같습니다.uvicorn main:app --reload
  • --reload: 코드 변경 후 서버를 다시 시작하는 데 사용되는 옵션입니다. 이것은 배포 단계가 아니라 개발 단계에 있을 때만 사용된다는 점을 명심하십시오.

1행 은 유니콘 서버가 로컬 호스트(http://127.0.0.1) 포트 8000에서 실행되고 있음을 보여줍니다.

기본 경로에 액세스하는 것은 간단합니다. 즐겨찾는 브라우저에 다음 URL을 입력하기만 하면 됩니다.

이것이 우리가 얻은 결과입니다.

기본 경로의 응답(작성자별 이미지)

여기 흥미로운 부분이 있습니다. URL http://127.0.0.1:8000/docs 는 API와 상호 작용하기 위한 완전한 대시보드를 제공합니다. 아래는 결과입니다.

http://127.0.0.1:8000/docs URL의 API 문서(저자 이미지)

이전 이미지에서 녹색 상자에서 /predict_sentiment 를 선택하면 아래와 같이 API와 상호 작용하기 위한 전체 가이드가 표시됩니다.

사용해 보기 탭을 선택 하고 text_message 영역 에서 예측할 메시지를 제공하기만 하면 됩니다.

API에 예측을 요청하기(Image by Author)

text_message 상자에 입력한 메시지를 잘 보이도록 축소했습니다. Execute 버튼 을 선택하면 최종적으로 다음과 같은 결과를 얻을 수 있습니다 .

문자 메시지에 대한 API 응답(저자별 이미지)

API 응답 본문 섹션을 보면 다음과 같은 결과를 볼 수 있습니다.

{
  "text_message": "Congratulations!!! You won today’s lottery.          Please provide your bank information to transfer the total amount on your account",
  "sentiment_polarity": "Spam"
}

Docker 컨테이너에 배포

API가 준비되었습니다. 이제 이를 Docker 컨테이너에 배포할 차례입니다. 컨테이너화 이면의 아이디어는 API를 이식성 있게 만들고 모든 플랫폼(클라우드 포함)에서 보다 안전한 방식으로 균일하고 일관되게 실행할 수 있다는 것입니다. 또한 Kubernetes를 사용하면 API를 더 쉽게 확장할 수 있습니다. 그러나 쿠버네티스의 역할은 또 다른 시간이 될 것입니다.

아래는 Dockerfile우리 앱의 내용입니다.

도커파일을 이해하자 🧐

Dockerfile 파일에는 아래와 같이 5가지 주요 지침이 포함되어 있습니다.

  • FROM도커 허브에서 공식 파이썬 이미지를 가져오면 해당 이미지에서 파일이 빌드됩니다.
  • WORKDIR: 응용 프로그램의 작업 디렉터리로 /app을 만듭니다.
  • COPY: 원본 폴더에서 대상 폴더로 파일을 복사합니다.
  • RUN: 프로젝트 종속성을 설치하기 위해 requirements.txt 파일을 실행합니다.
  • CMD: 최종적으로 이미지를 실행 가능하게 만들기 위해 진입점을 만듭니다.

docker build -t fastapiapp:latest -f docker/Dockerfile .

Successfully built 9ecdd7e21323
Successfully tagged fastapiapp:latest

docker run -p 80:80 fastapiapp:latest

INFO:     Started server process [1]
INFO:     Waiting for application startup.
INFO:     Application startup complete.
INFO:     Uvicorn running on http://0.0.0.0:80(Press CTRL+C toquit)

      
                
The Dashboard of interaction with the API after deployment (Image by Author)

결론

축하합니다! 🎉 🍾 Fast API를 사용하여 API를 만드는 방법을 방금 배웠습니다. 이 기사를 재미있게 읽고 필요한 기술을 배웠기를 바랍니다. 학습을 심화하려면 아래 추가 리소스를 찾으십시오.

Medium , Twitter 에서 저를 팔로우 하거나 LinkedIn 에서 안녕하세요 라고 말 하십시오 . AI, ML, 데이터 과학, NLP 및 MLOps에 대해 토론하는 것은 언제나 즐거운 일입니다!

일단은 안녕 🏃

추가 리소스

GitHub의 소스 코드

FastAPI 문서