Skip to content

pedrocarvalho-git/Deploy_FastAPI

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

18 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Deploy FastAPI

Este é o projeto que consiste em uma API que contem um metodo POST que recebe os parametros do iris dataset, essa API retorna a predição através de um modelo de RandomForest

OS ARQUIVOS 📁

  • app
    • IrisData.py -> Arquivo que recebe os valores inputados no metodo POST da API
    • main.py -> Onde a mágica acontece, onde a API é criada, o metodo POST é definido e onde temos a predição do modelo
    • randomforest.pkl -> Pickle File que contem o treino do nosso modelo
  • notebook
  • src
    • IrisTraining.py -> Onde o nosso modelo foi treinado e a partir desse arquivo obtivemos o randomforest.pkl
    • iris.csv -> A nossa fonte de dados para treinarmos o nosso modelo
  • Dockerfile -> O Dockerfile que irá criar a nossa imagem docker da nossa API
  • requirements.txt -> A lista de pacotes que intalaremos na nossa imagem Docker

O MODELO 📈

O modelo é um modelo de classificação que da a predição de qual tipo de Iris temos de acordo com o tamanho e comprimento da petala e da sepala da flor, o modelo utilizado foi o RandomForest que foi treinado no arquivo IrisTraining.py e consumo no arquivo main.py atráves do Pickle File 'randomforest.pkl', a predição é o output do método POST do endpoint '/predict'

A API 💻

A API foi feita através do framework Fast API, a API aceita requisições HTTP para o ip 35.175.141.255, a API apenas tem um método POST na porta 80 para o endpoint '/predict', então nossa url final é 'http://35.175.141.255:80/predict', esse metodo post recebe um json no seu body, esse json deve conter as seguintes chaves: 'sepal_length', 'sepal_width', 'petal_length', 'petal_width', todas recebendo seus devidos valores, esses valores são extraidos através do BaseModel no arquivo IrisData.py. A parte de como passar os valores no Body será mostrado melhor quando fizermos o teste de chamar a API através do notebook.

O DEPLOY 🐳

O Deploy deste desafio foi feito pelo Docker atráves de uma instancia EC2 da AWS, a imagem escolhida do Dockerfile é baseada na imagem do Python3:9, fazemos a copia dos arquivos para o container e depois instalamos as dependencias do nosso 'main.py', após isso executamos a nossa API e abrimos ela para receber requisições através do Uvicorn, para assim ativarmos o nosso servidor web.

  • Para iniciar esse esse Dockerfile em qualquer instancia você só precisa seguir esses passos:

    1. Garantir esses pontos de rede na sua instancia.

      Inbound Rules

    2. Garantir que a sua instancia contem o git e o docker instalados.

    3. Rodar os comandos abaixo

      git clone https://github.com/pedrocarvalho-git/deploy_modelo_fastapi.git
      
      cd deploy_modelo_fastapi
      
      docker build . -t mlapi
      
      docker run -t -i -p 80:80 mlapi:latest
      

Para você fazer requisições à sua API você só ira precisar passar o IP ou o DNS da sua instancia com a porta 80 e o endpoint '/predict', para esse exemplo iremos utilizar a url: 'http://35.175.141.255:80/predict' ou 'http://ec2-35-175-141-255.compute-1.amazonaws.com:80/predict'

VERIFICANDO A FUNCIONALIDADE DA API ✔️

Como foi dito acima a API aceita requisições HTTP, então a partir disso podemos fazer a nossa requisição. Iremos seguir o notebook consumo_api.ipynb que está na pasta notebook/, nele podemos mudar os valores referentes a petalas e sepalas, para ver qual seria o tipo de Iris para os valores que passamos.