Inferência de IA sem Falência: Otimizando Custos com Serverless
O Custo Oculto da IA
Rodar modelos próprios (Llama 3, Mistral) oferece privacidade, mas o custo de manter uma A100 ligada na AWS é proibitivo para startups: $3.50/hora × 730h/mês = $2,555/mês.
E se você tiver apenas 100 requisições por dia? Está pagando por 99% de ociosidade.
A Abordagem Scale-to-Zero
Utilizamos infraestrutura baseada em eventos. O container com o modelo só "acorda" quando chega uma requisição.
Arquitetura
User Request
↓
API Gateway (AWS/Vercel)
↓
Queue (SQS/Redis)
↓
Worker Pool (Auto-scaling)
↓ [Cold Start: ~3s]
Docker Container (GPU)
├─ Model (Quantized)
└─ vLLM Engine
↓
Response + Cache
Tecnologias Chave
1. Model Quantization
Usamos modelos quantizados (GGUF/AWQ) para reduzir o VRAM necessário:
- Llama-3-8B: 16GB (FP16) → 5GB (4-bit)
- Mistral-7B: 14GB (FP16) → 4GB (4-bit)
Impacto: Cold-start de 15s para 3s (modelo menor carrega mais rápido).
2. Multi-Stage Docker Build
# Stage 1: Model Download
FROM python:3.11-slim AS downloader
RUN pip install huggingface-hub
RUN huggingface-cli download TheBloke/Llama-3-8B-GGUF
# Stage 2: Runtime (minimal)
FROM nvidia/cuda:12.1-runtime-ubuntu22.04
COPY --from=downloader /models /models
RUN pip install vllm --no-cache-dir
CMD ["python", "server.py"]
Imagem final: 8.2GB (vs 25GB sem otimização).
3. Intelligent Load Balancer
Roteamos requisições baseado em complexidade:
def route_request(prompt, max_tokens):
estimated_cost_openai = (len(prompt) + max_tokens) * 0.00003
estimated_cost_local = 0.05 # Custo de wakeup do container
if estimated_cost_openai < estimated_cost_local:
return use_openai_api()
else:
return use_local_model()
Para queries curtas (< 500 tokens), OpenAI é mais barato. Para processamento batch (milhares de documentos), modelo local compensa.
Otimizações de Cold Start
Pré-carregamento do Model Weights
Mantemos o modelo em memória compartilhada para reduzir cold starts subsequentes:
import torch
import shared_memory
# Container mantém weights em RAM por 5 minutos após última requisição
model = load_model_to_shm("llama-3-8b.gguf")
Auto-scaling Preditivo
Analisamos padrões de uso:
- Segunda-feira 9h-12h: Alta demanda → Mantém 2 instâncias warm
- Sábado 3h: Zero demanda → Scale to zero
Resultados: OgmaVox em Números
Antes (Instância Dedicada - g4dn.xlarge)
- Custo fixo: $306/mês
- Utilização média: 12%
- Usuários simultâneos max: 4
Depois (Serverless)
- Custo médio: $89/mês (-71%)
- Picos de 50 usuários simultâneos (auto-scaling funciona)
- Latência P95: 4.2s (cold) / 0.8s (warm)
Breakdown de Custos
- API Calls (OpenAI/Anthropic): $52/mês (60%)
- Serverless Compute (AWS Lambda + Fargate): $28/mês (31%)
- Storage & Networking: $9/mês (9%)
Quando NÃO Usar Serverless
❌ Requisitos de latência < 500ms: Cold start é proibitivo ❌ Tráfego constante e previsível: Instância dedicada é mais barata ❌ Modelos > 20GB: Cold start fica inaceitável (> 10s)
Stack Técnica
- Model Serving: vLLM (alta throughput)
- Orchestration: AWS Fargate Spot (70% mais barato que on-demand)
- Queue: Redis para fila de requisições
- Cache: Redis para response caching (30% hit rate)
- Monitoring: CloudWatch + Langfuse
Próximos Passos
Estamos testando Serverless GPUs com providers especializados (Modal, RunPod) que prometem cold-starts de < 1s.
Conclusão
Serverless para IA não é sobre tecnologia, é sobre economia. Se seu tráfego é spiky (picos e vales), você pode economizar 60-80% sem sacrificar qualidade.
Essa arquitetura híbrida permitiu ao OgmaVox ser financeiramente sustentável desde o dia 1.
Gostou deste artigo?
Vamos conversar sobre como podemos aplicar essas técnicas no seu projeto. Nossa equipe está pronta para transformar sua visão em realidade.