Carregando e disponibilizando modelos de aprendizado de máquina
Carregamento do modelo joblib/keras na inicialização, inferência segura para threads e endpoints de previsão em lote.
Carregando e disponibilizando modelos de aprendizado de máquina é uma aula grátis de Learn AI with Python no CoddyKit. Esta é a aula 3 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Learn AI with Python, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Learn AI with Python inclui 4 aulas no total.
O problema do carregamento
Carregar um modelo do disco é lento. Se você o recarregar a cada solicitação, a latência dispara. A solução: carregar o modelo uma vez na inicialização e reutilizá-lo para todas as solicitações.
O evento de inicialização
O gancho @app.on_event("startup") é executado uma vez quando o servidor inicia, sendo o local perfeito para carregar o modelo antes que qualquer solicitação chegue.
from fastapi import FastAPI
import joblib
app = FastAPI()
@app.on_event("startup")
def load_model():
app.state.model = joblib.load("model.joblib")app.state para armazenamento seguro para threads
app.state é o local recomendado para armazenar objetos compartilhados, como o modelo. Armazená-lo uma vez na inicialização e apenas lê-lo durante as solicitações evita os problemas de variáveis globais mutáveis no nível do módulo.
from fastapi import Request
@app.post("/predict")
def predict(req: PredictRequest, request: Request):
model = request.app.state.model
return {"prediction": model.predict([req.features])[0]}Por que não usar uma variável global?
Uma variável global simples do módulo funciona, mas vincula o carregamento ao momento da importação e é mais difícil de testar ou substituir. app.state vincula o ciclo de vida do objeto à aplicação, o que é mais limpo e segue o padrão recomendado pelo FastAPI.
A abordagem moderna com lifespan
Versões mais recentes do FastAPI substituem on_event por um gerenciador de contexto lifespan, que cuida da inicialização e do encerramento em um único lugar.
from contextlib import asynccontextmanager
@asynccontextmanager
async def lifespan(app):
app.state.model = joblib.load("model.joblib") # startup
yield
app.state.model = None # shutdown
app = FastAPI(lifespan=lifespan)Aquecimento do modelo
A primeira previsão costuma ser lenta porque as estruturas são inicializadas de forma tardia na primeira chamada. Aqueça o modelo na inicialização com uma previsão fictícia para que a primeira solicitação real do usuário já seja rápida.
@app.on_event("startup")
def load_and_warm():
app.state.model = joblib.load("model.joblib")
app.state.model.predict([[0.0, 0.0, 0.0, 0.0]]) # warm-upPor que o aquecimento é importante
Sem aquecimento, a primeira solicitação após a implantação pode ser várias vezes mais lenta, prejudicando a latência de cauda e possivelmente fazendo as verificações de integridade falharem. Uma única inferência fictícia na inicialização assume esse custo fora do caminho crítico.
Um ponto de acesso de previsão em lote
Prever muitas linhas em uma única chamada é muito mais eficiente do que fazer várias chamadas individuais, pois os modelos vetorizam os dados em um lote. Aceite uma lista de vetores de atributos e retorne uma lista de previsões.
class BatchRequest(BaseModel):
items: list[list[float]]
@app.post("/predict/batch")
def predict_batch(req: BatchRequest, request: Request):
model = request.app.state.model
preds = model.predict(req.items)
return {"predictions": preds.tolist()}Individual versus em lote
- Individual: uma entrada, menor latência por chamada, clientes simples.
- Em lote: muitas entradas de uma vez, taxa de transferência muito maior, ideal para pontuação offline.
Oferecer as duas opções atende a casos de uso em tempo real e em massa.
Lendo o estado nos pontos de acesso
Cada ponto de acesso lê o modelo compartilhado por meio de request.app.state.model, sem nunca recarregá-lo, para que todas as solicitações compartilhem uma única instância na memória.
Juntando tudo
Uma configuração pronta para produção: carregue e aqueça o modelo em lifespan/inicialização, armazene-o em app.state e disponibilize pontos de acesso de previsão individual e em lote que leiam o estado. Isso minimiza a latência e maximiza a taxa de transferência.
Verificação rápida
Teste seus conhecimentos sobre disponibilização de modelos.
Recapitulação
Você carregou o modelo uma única vez por meio de inicialização/lifespan, armazenou-o em app.state para reutilização segura entre threads, adicionou uma previsão fictícia de aquecimento e disponibilizou um ponto de acesso em lote para aumentar a taxa de transferência. Próximo assunto: conteinerização da API.
Aprenda Python com um tutor de IA — grátis
Escreva e execute código real no seu navegador, obtenha ajuda instantânea de um tutor de IA 24/7 e continue de onde parou na web ou no app.
- Cursos
- 53
- Aulas
- 225
Perguntas Frequentes
A aula “Carregando e disponibilizando modelos de aprendizado de máquina” é grátis?
Sim — o texto completo de “Carregando e disponibilizando modelos de aprendizado de máquina” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Learn AI with Python, atualize para CoddyKit PRO. O curso de Learn AI with Python inclui 4 aulas no total.
O que vou aprender em “Carregando e disponibilizando modelos de aprendizado de máquina”?
Carregamento do modelo joblib/keras na inicialização, inferência segura para threads e endpoints de previsão em lote. Você pratica Learn AI with Python com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar Learn AI with Python?
Nenhuma experiência prévia é necessária. Learn AI with Python no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 3 de 4.
Quanto tempo leva a aula “Carregando e disponibilizando modelos de aprendizado de máquina”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de Learn AI with Python?
Sim. Cada aula de Learn AI with Python inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Fundamentos de FastAPI para engenheiros de aprendizado de máquina
- Esquemas Pydantic para requisições e respostas
- Carregando e disponibilizando modelos de aprendizado de máquina
- Conteinerização da API do modelo