DEV Community

LeoJulieta
LeoJulieta

Posted on

Fintechs e LLMs on‑prem: Guia prático para 2024

Revolut, Nubank e outras fintechs adotam LLMs on‑prem: guia prático de implantação em 2024

Introdução

Empresas de tecnologia financeira estão migrando seus grandes modelos de linguagem para ambientes on‑premises e isso já não é mais uma tendência experimental – é uma necessidade real de privacidade, controle de custos e customização. Nos últimos 12 meses, buscas por “self‑hosted LLM” e “LLM on‑prem” cresceram mais de 250 % no Google Trends, sinalizando que CTOs de fintechs como Revolut e Nubank estão buscando passo‑a‑passo para colocar esses modelos dentro de suas próprias redes.

Neste artigo você encontrará:

  • Comparação rápida dos principais modelos open‑source (Llama 3, Falcon 180B, Mistral 7B).
  • Arquitetura recomendada (Docker‑Compose → Kubernetes).
  • Scripts de monitoramento com Prometheus/Grafana.
  • Checklist de segurança e MLOps para CI/CD.
  • Tabela de custos vs. SaaS (OpenAI, Anthropic).

Tudo isso com exemplos de código prontos para copiar e colar.


1. Por que fintechs estão preferindo LLMs self‑hosted?

Motivo Impacto concreto
Privacidade Dados de transações, identidade e crédito permanecem dentro da rede, atendendo GDPR, LGPD e PCI‑DSS.
Custo em escala Redução de até 70 % no TCO quando o volume de chamadas ultrapassa 10 milhões de tokens/dia.
Customização total Fine‑tuning com dados internos, filtros de compliance e prompts alinhados ao vocabulário bancário.
Latência mínima Inferência local elimina a dependência de internet e garante respostas em < 50 ms.

2. Requisitos de hardware (baseline)

Componente Configuração mínima (inferencia em tempo real)
GPU 8 × NVIDIA H100 80 GB ou 16 × A100 40 GB
Armazenamento SSD NVMe ≥ 2 TB (RAID 1 para redundância)
Rede InfiniBand 200 Gbps ou Ethernet 100 Gbps
CPU / RAM 2 × Xeon Gold 6338 ou EPYC 7763 + 512 GB RAM

Dica: Para testes iniciais, o modelo Mistral‑7B roda em uma única H100 40 GB, permitindo validar a pipeline antes de escalar.


3. Arquitetura de implantação (Docker‑Compose → Kubernetes)

3.1 Docker‑Compose (primeiro protótipo)

version: "3.9"
services:
  llm:
    image: ghcr.io/abetlen/llama-cpp-python:latest
    command: ["--model", "/models/llama3-70b.gguf", "--port", "8080"]
    volumes:
      - ./models:/models:ro
    ports:
      - "8080:8080"
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: 8
              capabilities: [gpu]
Enter fullscreen mode Exit fullscreen mode

Execute:

docker compose up -d
Enter fullscreen mode Exit fullscreen mode

Teste rápido:

curl -X POST http://localhost:8080/generate -d '{"prompt":"Qual o limite de crédito para clientes premium?","max_tokens":64}'
Enter fullscreen mode Exit fullscreen mode

3.2 Migração para Kubernetes (produção)

apiVersion: apps/v1
kind: Deployment
metadata:
  name: llm-deployment
spec:
  replicas: 2
  selector:
    matchLabels:
      app: llm
  template:
    metadata:
      labels:
        app: llm
    spec:
      containers:
      - name: llm
        image: ghcr.io/abetlen/llama-cpp-python:latest
        args: ["--model","/models/llama3-70b.gguf","--port","8080"]
        resources:
          limits:
            nvidia.com/gpu: 4
        volumeMounts:
        - name: model-volume
          mountPath: /models
      volumes:
      - name: model-volume
        persistentVolumeClaim:
          claimName: llm-model-pvc
---
apiVersion: v1
kind: Service
metadata:
  name: llm-service
spec:
  selector:
    app: llm
  ports:
  - protocol: TCP
    port: 80
    targetPort: 8080
  type: ClusterIP
Enter fullscreen mode Exit fullscreen mode

Aplicar:

kubectl apply -f llm-deployment.yaml
Enter fullscreen mode Exit fullscreen mode

4. Monitoramento com Prometheus & Grafana

4.1 Exporter simples (Python)

from prometheus_client import start_http_server, Summary, Counter
import time, torch

REQUEST_TIME = Summary('llm_request_duration_seconds', 'Tempo de inferência')
REQUEST_COUNT = Counter('llm_requests_total', 'Número total de requisições')

@REQUEST_TIME.time()
def infer(prompt):
    REQUEST_COUNT.inc()
    # chamada ao modelo (exemplo fictício)
    return model.generate(prompt)

if __name__ == '__main__':
    start_http_server(9100)
    while True:
        time.sleep(10)
Enter fullscreen mode Exit fullscreen mode

4.2 Dashboard básico

  • CPU/GPU Utilização – node_gpu_utilization
  • Latência média – llm_request_duration_seconds
  • Erros – llm_requests_total com label status="error"

Importe o JSON disponível no repositório do artigo para criar o painel no Grafana.


5. Segurança prática

Camada Medida recomendada
Rede Namespace Kubernetes isolado, NetworkPolicy permitindo apenas IPs internos.
Transporte mTLS entre API gateway (Istio) e pods LLM.
Armazenamento Criptografia AES‑256 dos arquivos de peso (fscrypt).
Acesso RBAC estrito; ServiceAccount dedicado para o deployment.
Auditoria Log de todas as chamadas via OpenTelemetry → Loki.

Checklist rápido

  1. kubectl get networkpolicy – garante que apenas o namespace finance-api pode acessar.
  2. openssl s_client -connect llm-service:80 -tls1_3 – verifica mTLS.
  3. vault kv get secret/llm/keys – confirma que as chaves de criptografia estão no Vault.

6. MLOps & CI/CD

# .github/workflows/llm-ci.yml
name: LLM CI
on:
  push:
    paths:
      - 'models/**'
      - 'docker/**'
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Build Docker image
        run: |
          docker build -t ghcr.io/empresa/llm:${{ github.sha }} .
      - name: Push to registry
        run: |
          echo ${{ secrets.GHCR_TOKEN }} | docker login ghcr.io -u ${{ github.actor }} --password-stdin
          docker push ghcr.io/empresa/llm:${{ github.sha }}
      - name: Deploy to K8s
        uses: azure/k8s-deploy@v4
        with:
          manifests: |
            k8s/llm-deployment.yaml
          images: ghcr.io/empresa/llm:${{ github.sha }}
Enter fullscreen mode Exit fullscreen mode

Com este pipeline, toda nova versão dos pesos ou da imagem Docker é testada em um cluster de staging antes de ir para produção.


7. Comparativo de custos (2024)

Solução Custo mensal estimado (10 M tokens/dia) Latência média Controle de dados
OpenAI GPT‑4o US$ 45 k (pay‑as‑you‑go) 120 ms Dados enviados à nuvem
Anthropic Claude 2 US$ 38 k 150 ms Dados enviados à nuvem
Self‑hosted Llama 3 70B US$ 22 k (infra + energia) 45 ms 100 % on‑prem
Self‑hosted Falcon 180B US$ 30 k 55 ms 100 % on‑prem

Os valores são aproximados e consideram um data‑center próprio com contrato de energia e suporte.


8. FAQ rápido

Q1 – Quanto tempo leva para treinar um modelo de 7 B com dados internos?

≈ 48 h em 4 ×


Herramienta mencionada: Groq Cloud

Top comments (0)