InfraestruturaDevOpsServerlessCost Optimization

Inferência de IA sem Falência: Otimizando Custos com Serverless

João Oliveira 2025-11-28 8 min

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.

Compartilhar artigo:

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.

Ver Mais Artigos