Skip to content

Commit 3b44a61

Browse files
Merge pull request #562 from LayoutParser/feat-import-checkpoints
feat: checkpoints de importação
2 parents e684ad2 + 6e3079a commit 3b44a61

2 files changed

Lines changed: 43 additions & 0 deletions

File tree

‎.claude/agent-memory/lp-parser-llm/MEMORY.md‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
- [DSL mapper Camadas 0-1-2 implementadas](dsl-mapper-camadas-0-1-2-implementadas.md) — parser DSL→JSON (DslStructuredParser), schema versionado, catálogo de funções via MetadataLoadContext (ofuscação documentada), FewShotIndex.RetrieveStructured; branch feat/dsl-mapper-contexto-ia commit 8c6c2e0, 11 testes verdes.
2525
- [Smoke-test #3 checkpointing+chunking](finetuning-smoke-test3-checkpointing-chunking.md) — checkpointing resolve OOM em MAX_LEN=2048 (custa 2,7x/passo); chunking completo explode dataset 6,84x, inviável no fim de semana (56,6h/época).
2626
- [Issue #140 motor de resolução estrutural implementado](issue-140-motor-resolucao-estrutural-implementado.md) — XSD real NF-e via XmlSchemaSet (dono decidiu XSD > LayoutVO), classificador mappingKind, composer authoritative/best-effort; branch feat/resolucao-estrutural-txt-xml-140 commit 36ae5cb, 25 testes novos (36/36 verdes).
27+
- [Degeneração por época no fine-tuning (2026-08-30)](finetuning-degeneracao-por-epoca-2026-08-30.md) — checkpoints nunca existiam (save_strategy="no"); VM 15GB não aguenta treino+generate concorrentes (mata treino); resultado época-1 inconsistente com smoke-test #4 (protocolo frágil); repetition_penalty/no_repeat_ngram_size troca sintoma, não resolve.
2728
- [PR #209 falso conflito com develop](pr209-falso-conflito-develop-stale.md) — 2026-08-28: "conflito" era develop LOCAL desatualizado; origin/develop já tem 1992ed4 + fix IsDeclaredEmpty via PR #205; merge-tree limpo (docs-only), nenhum código a reconciliar.
2829
- [Fine-tuning smoke-test #2 dado real OOM](finetuning-smoke-test2-dado-real-oom.md) — MAX_LEN=4096 mata processo por OOM na VM; MAX_LEN=1024 usa 12Gi/15Gi e ~42s/passo; RAM é o limite real, não tempo; extrapolação anterior (256 tokens) inválida pro dado real.
2930
- [Smoke-test fine-tuning VM 2026-08-29](finetuning-smoke-test-vm-2026-08-29.md) — specs reais (i7-4790 4c, 15GB, sem GPU); sudo bloqueado contornado com pip --break-system-packages; bitsandbytes NÃO quantiza em CPU (LoRA fp32, não QLoRA); 10,7s/passo medido (Qwen2.5-Coder-1.5B, seq 256) — falta medir com seq_len real (~16.6k chars) antes do treino completo.
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
---
2+
name: finetuning-degeneracao-por-epoca-2026-08-30
3+
description: Diagnóstico de degeneração por época no smoke-test de fine-tuning (par único NFe) — checkpoints nunca existiam, resultado inconsistente com smoke-test #4, mitigadores de geração não resolvem sozinhos.
4+
metadata:
5+
type: project
6+
---
7+
8+
Investigação de 2026-08-30 sobre por que o treino de 3 épocas (171 passos, 57 chunks, 1 par NFe
9+
real, VM `elson@172.25.32.5`) degenerou em repetição alucinada.
10+
11+
**Achado 1 — checkpoints intermediários nunca existiram.** `smoke_train_single_pair.py` usa
12+
`save_strategy="no"`; só o adapter final é salvo, sobrescrito a cada rodada. Sempre confirmar isso
13+
lendo o script antes de assumir que dá pra "carregar o checkpoint da época X" — não tinha como.
14+
15+
**Achado 2 — VM tem teto duro de RAM: treino (~11,8GB pico) + `generate()` (~6,6GB) juntos
16+
excedem os 15GB e o SO mata o processo de treino silenciosamente** (sem mensagem visível sem
17+
`dmesg` root — o processo só some do `ps`). Aconteceu 2x nesta sessão. **Nunca rodar treino e
18+
inferência concorrentes nesta VM.** Isso limitou a coleta ao checkpoint da época 1 (retreino
19+
completo até 3 épocas ficou fora do orçamento de tempo).
20+
21+
**Achado 3 — resultado desta sessão é inconsistente com o smoke-test #4 documentado.** O
22+
smoke-test #4 (mesma config: greedy, `MAX_LEN=2048`, 1 época, `max_new_tokens=1024`) reportava
23+
convergência para XSLT válido com defaults semânticos corretos após ~1024 tokens de eco. A
24+
reprodução desta sessão (checkpoint da época 1, mesmo par, script equivalente) produziu eco puro
25+
sem nenhuma transição para XSLT (`xsl:` count = 0). Hipótese mais provável: sensibilidade a
26+
não-determinismo em CPU (ordem de float ops/threading), não uma mudança real de protocolo — a
27+
única diferença de script foi `save_strategy`. **Tratar "converge em N épocas" como resultado
28+
frágil/não confiável neste protocolo até reproduzir de forma estável.**
29+
30+
**Achado 4 — `repetition_penalty=1.2` + `no_repeat_ngram_size=3` NÃO resolve a degeneração
31+
sozinho.** Testado no adapter final de 3 épocas: elimina o padrão de repetição/eco degenerado, mas
32+
o modelo migra para **alucinação de conteúdo fora de domínio** (JSON pseudo-estruturado
33+
inventado), não para XSLT (`xsl:` continua em 0). Mitigador de geração troca o sintoma, não ataca
34+
a causa (transição prompt→resposta mal aprendida).
35+
36+
**Recomendação registrada no plano:** não investir mais em variar número de épocas neste
37+
protocolo; atacar a causa mais provável — truncamento do prompt a 1024 tokens de um `.tcl` real
38+
com >10K tokens, que corta a âncora da transição prompt→resposta. Ver
39+
`docs/architecture/plano-finetuning-especializacao-mapeamento-sysmiddle-2026-08-29.md`, seção
40+
"Diagnóstico de degeneração por época — 2026-08-30", para o detalhe completo.
41+
42+
Relacionado: [[finetuning-small-model-poc]] (memória de usuário), [[finetuning-poc-fase1-dataset]].

0 commit comments

Comments
 (0)