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
- 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
- consumo_api.ipynb -> Notebook que utilizaremos para consumir a API
- 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 é 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 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 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:
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'
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.