FastAPI vs Flask | FastAPI é a substituição correta para frascos?

Conteúdo

Depois de concluir a construção do modelo e o ajuste adequado do hiperparâmetro, a próxima etapa em projetos de ciência de dados é mostrar os resultados finais Para o público em geral. É essencial fazer desta forma porque nem todos estão interessados ​​em ver o código e estão mais interessados ​​no resultado final. Também ajuda os aspirantes a ciência de dados a construir um projeto do início ao fim o que lhes dá uma vantagem sobre os outros e lhes dá o gosto por outras tecnologias.

A implantação de modelos de aprendizado de máquina pode seguir caminhos diferentes, dependendo da plataforma na qual você deseja entregar o modelo. a interface web é a maneira mais comum de postar um modelo, mas não se limita a Aplicativos Android e IOS ou um dispositivo IOT como Raspberry Pi. Se você investigar isso em detalhes, portanto, um quadro que encabeça a consulta de pesquisa é o moldura de frasco que é um aplicativo minimalista para configurar servidores web rapidamente, mas tem alguns problemas que agora resolve para uma chamada de quadro recentemente lançada FastAPI que está ganhando muita popularidade nos dias de hoje.

Neste artigo, veremos como o framework FastAPI tem uma vantagem sobre o Flask com alguns exemplos de código para entender as coisas de uma maneira melhor. Antes disso, Se você estiver interessado em implementação de aplicativo Android então você pode ler meu artigo Implementação de ML no aplicativo Android.

É uma estrutura baseada em Python que permite conectar sites com menos quantidade de código. Você pode criar um site em pequena escala com isso, uma vez que permite a personalização em cada etapa. Sendo um pacote minimalista, apenas os componentes principais estão incluídos e todas as outras extensões requerem configuração explícita. Muitos desenvolvedores usam Flask para hospedar suas APIs. API (Interface do programa de aplicação) é uma interface que permite a comunicação entre vários intermediários, o que significa que se pode acessar qualquer tipo de dados usando qualquer tecnologia. Por exemplo, você pode acessar uma API usando Javascript que pode ser construída usando Python. Um programa simples em um frasco se parece com isto:

from flask importar Flask, jsonify
app = Flask(__nome__)
@ app.route("/<nome>", métodos =['PEGUE'])
def casa(nome):
    retornar jsonify({"mensagem": f"Olá! {nome}"})
if __name__ == "__a Principal__":
    app.run(debug = True)

Pressionando o url localhost / AnyNameHere, um resultado JSON semelhante a este será exibido: (Eu uso a extensão do Chrome chamada visualizador JSON. Você pode ser solicitado a fornecer texto simples em vez desta saída formatada)

img_1-8741078

Problemas com o frasco

O problema com esta abordagem é que existem sem validação de dados, o que significa que podemos passar qualquer tipo de dados, sejam correntes, tuplas, números ou qualquer personagem. Isso pode interromper o programa com frequência e você pode imaginar que, se um modelo de ML receber tipos de dados errados, o programa irá travar. Você pode criar um verificador de dados antes de passar os valores, mas eu iria adicionar trabalho adicional.

Páginas de erro no Flask como páginas HTML simples que podem gerar erros de decodificador quando a API é chamada em outros aplicativos. Existem outros problemas com o Flask, como natureza lenta, não assíncronoe suporte de web socket que pode acelerar processos e, Finalmente, nenhum sistema automatizado de geração de documentos. Você precisa projetar manualmente a IU para uso da API e exemplos. Todos esses problemas são resolvidos na nova estrutura.

FastAPI

É uma estrutura moderna que permite criar APIs sem problemas e sem muito esforço. Tem a capacidade de separar o código do servidor da lógica de negócios aumentando a capacidade de manutenção do código. Como o próprio nome é rápido, é muito mais rápido em comparação com o frasco porque é construído em ASGI (Interface de gateway de servidor assíncrono) em vez de WSGI (Interface de gateway do servidor web). Possui um sistema de validação de dados que pode detectar qualquer tipo de dados inválido em tempo de execução e retorna o motivo das entradas erradas para o usuário apenas no formato JSON, que libera os desenvolvedores de lidar com essa exceção explicitamente.

Isso gera a documentação em movimento quando você está desenvolvendo a API, que é o mais solicitado por todos os desenvolvedores. A documentação é uma ótima maneira para outros desenvolvedores colaborarem em um projeto, pois apresenta tudo o que pode ser feito com as instruções necessárias. Também gera um boa GUI que resolve tudo que faltava no frasco.

Ele faz tudo isso com as especificações OpenAI e Swagger para implementar essas especificações. Como desenvolvedor, está focando apenas na parte de construção lógica e o resto do material é gerenciado por FastAPI. Vamos ver o mesmo exemplo que foi criado usando o Flask agora implementado no FastAPI:

importar uvicórnio
de importação de fastapi FastAPI
app = FastAPI()
@ app.get("/")
def casa(nome: str):
    Retorna {"mensagem": f"Olá! {nome}"}
if __name__ == "__a Principal__":
    uvicorn.run(aplicativo, host ="127.0.0.1", porta = 8000, debug = True)

Pressionando o url localhost /? Nome = AnyNameHere, você será solicitado por um resultado como:

img_2-7383572

Você pode ver que o código é muito semelhante ao flask, mas aqui estamos usando o servidor uvicorn, o que é uma implementação ASGI. O que mais, estamos aqui sem rotear nenhum ponto final e criá-los diretamente usando decoradores, o que faz mais sentido. A função aqui simplesmente leva os argumentos necessários além de elimina a necessidade do objeto de solicitação ser chamado.

img_3-9515011

Existe outro gerador de documentação que está incluído no FastAPI, quer dizer, ReDoc que também gerou uma bela documentação com todos os endpoints listados. Ele pode ser acessado pressionando o ponto final / redoc:

25693temp-4256177

Para configurar a validação de dados, podemos simplesmente criar a classe de tipo de dados herdada do Modelo de base Pydantic. É uma biblioteca que oferece validação de dados por meio de anotações de tipo Python. Podemos adicionar a descrição das entidades e fornecer o exemplo personalizado para exibir nos documentos.

Exemplo de ML FastAPI

Eu gostaria de compartilhar um exemplo em que um modelo de classificador ML DecisionTree foi implementado usando FastAPI. A declaração do problema para este é um classificador de gênero musical onde baseado em aspectos técnicos da música, como tempo, a valencia, a música é rock ou hip-hop. Fiz uma aula de música para validar os dados que serão passados ​​para o modelo que se parece com este:

from pydantic import BaseModel
aula de musica(BaseModel):
    acústico: flutuador
    dança: flutuador
    energia: flutuador
    instrumentalidade: flutuador
    vivacidade: flutuador
    discurso: flutuador
    tempo: flutuador
    valência: flutuador

img_4-1385000

Se você quiser ver o código completo, vá para isso Repositório GitHub.

conclusão: Qual escolher?

Depois de toda essa discussão, a questão permanece sem resposta, quem ganha? Com base em todos os fatores, eu faria Eu sugiro adotar FastAPI em vez de Flask. É muito fácil de configurar, migrar um projeto de frasco antigo para este não vai demorar muito, assíncrono, web sockets y função de geração automática de documentos é a cereja no topo.

Pode-se escolher o flask frame para configurar toda a interface da web (Front-end e back-end) mas em relação ao ML onde o objetivo principal é verificar se o modelo está funcionando em ambiente de produção ou não, criar uma API faz mais sentido porque o resto do material pode ser gerenciado por outras equipes de desenvolvedores e para explicar claramente a eles o uso do programa que você desenvolveu, FastAPI auto docs é uma boa solução.

Conecte-se com o autor

Você pode se conectar comigo em Linkedin discutir qualquer coisa relacionada ao desenvolvimento Python e ciência de dados, GitHub para veja meus projetos ou você pode leia meus artigos no meio.

Kaustubh – Metade

Assine a nossa newsletter

Nós não enviaremos SPAM para você. Nós odiamos isso tanto quanto você.