Anvil

No ar

Projeto pessoal - fine-tuning QLoRA completo do Llama 3.1 8B para extração de contratos sintéticos, com 100% de JSON válido, custo medido de $58,46 e breakeven de 0,80M tokens/mês.

Função
Solo - Python, QLoRA, avaliação, RunPod, modelagem de custo
Período
mai. de 2026
Stack
  • Python 3.12
  • uv
  • QLoRA (NF4 + LoRA)
  • Unsloth
  • TRL (SFTTrainer)
  • OpenAI GPT-4o (synthesis and eval)
  • Llama 3.1 8B
  • Hugging Face gated model access
  • RunPod A40
  • Weights & Biases
  • Matplotlib
  • Ruff
  • mypy (strict)
  • pytest
  • GitHub Actions

O que é

Um artefato de engenharia focado, não um SaaS. O que foi entregue:

  • Pipeline de dataset - gerou 4.000 NDAs, MSAs e licenças sintéticos via GPT-4o com validação estrita de JSON schema; curou 3.707 registros aceitos; dividiu em 2.966 exemplos de treino, 371 de validação e 370 de teste.
  • Treinamento - QLoRA (NF4 + LoRA, rank 16, alpha 32, targets all_linear) no Llama 3.1 8B via Unsloth em um único RunPod A40. O run pago completou 558 passos de otimização em 8.259 segundos, cerca de 2h18m.
  • Avaliação - modelos base, fine-tuned e GPT-4o sob o mesmo protocolo, rodando sobre o mesmo split de teste com 370 exemplos e pontuados em validade de JSON e qualidade de extração por campo.
  • Modelo de custo - custo medido do run de treinamento (API de síntese, tempo de GPU, avaliação com GPT-4o) mais um modelo de $/1M tokens self-hosted e volume de breakeven contra continuar chamando o GPT-4o.
  • CI e ensaio - o pipeline completo pode ser ensaiado em um M1 contra fixtures antes de alugar uma GPU; o CI cobre parsing, schema, custo, gráficos, preflight, configuração de treinamento e utilitários de avaliação.

Por que construí

Para provar que consigo fazer fine-tuning e avaliação de um modelo aberto de ponta a ponta, com uma justificativa de custo defensável, em vez de só chamar uma API hospedada. A pergunta útil é se o fine-tuning fecha a lacuna para um modelo de fronteira em uma tarefa específica de saída estruturada, e quanto tempo leva para o custo único de treinamento se pagar.

O Anvil responde isso com números vinculados a artefatos concretos: as contagens do dataset, o log de treinamento, o JSON de avaliação, as imagens dos gráficos e o relatório de custo são todos reproduzíveis a partir do workflow do repositório.

Resultado medido

O modelo base falhou no gate estrito de schema: 0% de JSON válido nos 370 casos do split de teste. O adapter fine-tuned produziu 100% de JSON válido, levemente acima dos 99,73% de validade do GPT-4o nos mesmos casos.

Gráfico de barras comparando a validade de JSON dos modelos base, fine-tuned e GPT-4o.
A validade do JSON é o gate: output inválido não recebe crédito em nenhum campo.

No score de extração por campo, o adapter fine-tuned atingiu macro score de 0,899 contra 0,881 do GPT-4o. A tarefa é específica e sintética, então trato isso como evidência de que o adapter aprendeu o schema alvo e a distribuição dos campos — não como uma afirmação ampla de que supera o GPT-4o.

Gráfico de barras agrupadas comparando os scores de extração do fine-tuned e do GPT-4o por campo do contrato.
Score por campo nos contratos sintéticos de teste.

Como funciona

Síntese de dados com guard anti-contaminação

O conjunto de treinamento é composto por contratos sintéticos gerados sob um JSON schema estrito, então cada exemplo tem uma extração ground-truth conhecida. Antes do treinamento, um guard faz hash do texto normalizado de cada exemplo e aborta o run se algum documento aparecer em mais de um split. Isso elimina a forma mais comum de um benchmark de fine-tuning inflar silenciosamente seus próprios resultados.

QLoRA em um único A40, ensaiado no M1

O mesmo orquestrador que roda o job pago no RunPod também roda em modo dry-run em um MacBook M1 base contra fixtures do repositório, de ponta a ponta (data-smoke -> train-smoke -> eval-smoke -> cost), sem nenhum gasto com API. Esse ensaio precisa passar antes de alugar uma GPU paga.

O run pago usou um RunPod A40 a $0,44/hr, treinou por 3 épocas e terminou com train loss de 0,346 e eval loss de 0,328.

Gráfico de linha com as perdas de treino e validação do Anvil ao longo de 558 passos de otimização.
O treinamento convergiu rapidamente e se manteve estável durante o run de 3 épocas no A40.

Avaliação tripla com gate de validade de JSON

Os modelos base, fine-tuned e GPT-4o respondem aos mesmos prompts. A validade é o gate: um output que não passa no schema não recebe crédito em nenhum campo, porque um número de F1 sobre JSON inválido não significa nada. É aqui que o modelo base colapsa e o fine-tuning se torna útil.

Custo e breakeven

O run completo custou $58,46: $54,00 para síntese, $1,76 de tempo de GPU no A40 e $2,70 para avaliação com GPT-4o. A linha de inferência self-hosted é intencionalmente rotulada como premissa configurada de serving no A40, não como um benchmark de serving medido neste projeto.

Gráfico de barras comparando o custo por milhão de tokens do Anvil self-hosted no A40 configurado contra GPT-4o e Claude Sonnet.
O custo self-hosted usa a premissa configurada de throughput de serving no A40.

Com essas premissas, o custo único do run atinge breakeven frente ao GPT-4o em 0,80M tokens por mês ao longo de 12 meses.

Curva de breakeven comparando o custo acumulado do modelo fine-tuned contra o GPT-4o ao longo de doze meses.
Volume de breakeven: 0,80M tokens por mês frente ao GPT-4o.

Status

Concluído. O milestone principal do Anvil está completo: geração de dados paga, treinamento, avaliação, análise de custo, gráficos e documentação estão entregues. Intencionalmente não incluo publicação no Hugging Face nem um Space de demo no escopo.

Perguntas

O que é o Anvil?

Anvil é um artefato completo de fine-tuning e avaliação para extração estruturada de contratos. Ele sintetiza contratos com GPT-4o, cura e divide o dataset, faz fine-tuning do Llama 3.1 8B com QLoRA em um único A40, e compara os modelos base, fine-tuned e GPT-4o no mesmo split de teste.

O que o run pago provou?

O adapter fine-tuned atingiu 100% de JSON válido em 370 contratos de teste, enquanto o modelo base produziu 0% de JSON válido. Ele também superou levemente o GPT-4o no macro field score: 0,899 contra 0,881, neste benchmark sintético de extração.

Como a metodologia é mantida honesta?

Um guard anti-contaminação faz hash do texto normalizado de cada contrato e aborta o run se algum exemplo aparecer em mais de um split. A validade do JSON é pré-requisito para qualquer pontuação — output que não passa no schema estrito não recebe crédito em nenhum campo. O modelo de custo separa o custo medido do run das premissas configuradas de throughput de serving no A40.

Como o Anvil se relaciona com o Forge?

O Forge responde o quão barata e rápida é a inferência self-hosted quando utilização, latência e quantização são levados em conta. O Anvil responde se um fine-tuning QLoRA pequeno consegue fechar a lacuna para um modelo de fronteira em uma tarefa estruturada e específica.

Publicado 28 de mai. de 2026, 22:29 GMT-3 · Atualizado 31 de mai. de 2026, 22:35 GMT-3

← Todos os projetos