AURORA v6 COMPLETO: roteamento por S-SOM (doc 18 §1, Teoremas 18.1–18.3), Reward/Punishment/Penalty (doc 18 §2), SGDR T_mult, pacote integral de métricas (CLIP/ITM/PPL-mm, CIDEr/BLEU/ROUGE/METEOR, MMMU/MME/MathVista proxies PT-BR, QE/TE/distorção/σ/α/drift/freq/U-Matrix), estados antigos apagados — treino do zero
06edf75 verified Download src/aurora/config.py from PowerMachine/aurora-multimodal-ptbr: direct link, hf CLI and curl.
- Browser
- Download file 14.8 kB
-
https://huggingface.co/PowerMachine/aurora-multimodal-ptbr/resolve/main/src/aurora/config.py
- Command line
-
hf download hf://PowerMachine/aurora-multimodal-ptbr/src/aurora/config.py
-
curl -L -o config.py https://huggingface.co/PowerMachine/aurora-multimodal-ptbr/resolve/main/src/aurora/config.py
14.8 kB
| # -*- coding: utf-8 -*- | |
| """Configuração central do AURORA — PT-BR total nos textos, identificadores em inglês. | |
| Toda constante de projeto vive aqui; scripts e módulos nunca fixam números soltos. | |
| Carregamento: ConfigPadrao() → sobrescreve com JSON via Config.de_arquivo(caminho). | |
| """ | |
| from __future__ import annotations | |
| import json | |
| from dataclasses import asdict, dataclass, field | |
| class ConfigDados: | |
| """Streaming dos datasets HF (item 4) — carregamento INDIVIDUAL (um por vez, | |
| requisito do usuário) com orçamento de RAM (item 1). v4: +10 datasets novos.""" | |
| datasets: list = field(default_factory=lambda: [ | |
| # --- corpus original (8) --- | |
| {"id": "dominguesm/restore-punctuation-ptbr-dataset", "tarefa": "pontuacao_tags", "max_exemplos": 400}, | |
| {"id": "CEIA-POSITIVO/ultrachat_br_clustred_balanced_v1", "tarefa": "instrucao", "max_exemplos": 500}, | |
| {"id": "dominguesm/Canarim-Instruct-PTBR-Dataset", "tarefa": "instrucao", "max_exemplos": 500}, | |
| {"id": "adalbertojunior/punctuation-ptbr", "tarefa": "pontuacao_par", "max_exemplos": 400, | |
| "via_parquet": True}, | |
| {"id": "iara-project/news-articles-ptbr-dataset", "tarefa": "noticia", "max_exemplos": 350}, | |
| {"id": "manoela/noticias_ptbr", "tarefa": "noticia", "max_exemplos": 350}, | |
| {"id": "carolina-c4ai/corpus-carolina", "tarefa": "lm", "max_exemplos": 350}, | |
| {"id": "BrunoN-Dev/corpus-ptbr-v1", "tarefa": "lm", "max_exemplos": 300}, | |
| # --- v4: datasets NOVOS (requisito do usuário, streaming individual) --- | |
| {"id": "marcelohaps/verbovision-oracle-facts-pt", "tarefa": "vqa", "max_exemplos": 200}, | |
| {"id": "amalia-llm/MMMU-PT", "tarefa": "vqa", "max_exemplos": 200}, | |
| {"id": "amalia-llm/MMMU-Pro-PT", "tarefa": "vqa", "max_exemplos": 200}, | |
| {"id": "amalia-llm/OCRBench-PT", "tarefa": "ocr", "max_exemplos": 200}, | |
| {"id": "amalia-llm/COCO-Caption2017-PT", "tarefa": "imagem_caption", "max_exemplos": 200}, | |
| {"id": "weikaih/imaginative-perception-token-pt-eval-real", "tarefa": "vqa", "max_exemplos": 200}, | |
| {"id": "opedromartins/asr-leaderboard-datasets-ptbr", "tarefa": "asr", "max_exemplos": 200}, | |
| {"id": "marcosremar2/pt-br-tts-synth", "tarefa": "tts", "max_exemplos": 200}, | |
| {"id": "leeaandrob/neurogrid-tts-synth-ptbr", "tarefa": "tts", "max_exemplos": 200}, | |
| ]) | |
| carregar_individual: bool = True # um dataset por vez; falha → registra e segue | |
| comprimento_max: int = 192 # tokens por janela | |
| semente: int = 2026 | |
| buffer_max_ram_mb: float = 256.0 # cache em RAM limitado | |
| cache_disco_dir: str = "/home/z/my-project/aurora/cache_dados" | |
| class ConfigModelo: | |
| """Modelo unificado multimodal. v4: vocab 16384, n_experts_fusao=4 | |
| (requisitos explícitos), NLP/NLG como unidades de primeira classe.""" | |
| vocab: int = 16384 # v4 — requisito do usuário | |
| d_modelo: int = 192 | |
| n_camadas: int = 3 | |
| n_cabecas: int = 4 | |
| d_ff: int = 512 | |
| comprimento_ctx: int = 192 | |
| janela_sliding: int = 32 # atenção em janela deslizante | |
| n_experts_fusao: int = 4 # v4 — requisito do usuário (era 2) | |
| dropout: float = 0.0 | |
| kv_cache_max: int = 512 # recorte do KV-cache (RAM) | |
| # v2 — MoE agrupável com foco na tarefa (doc 10 §1) | |
| moe: dict = field(default_factory=lambda: { | |
| "ativo": True, "n_camadas_moe": 2, "n_grupos": 3, "experts_por_grupo": 2, | |
| "d_ff_expert": 160, "top_k": 2, "margem_foco": 1.0, "n_tarefas": 9}) | |
| # v2 — predição multi-token com α aprendíveis (doc 10 §3) | |
| mtp: dict = field(default_factory=lambda: { | |
| "ativo": True, "k_cabecas": 2, "beta_entropia": 0.01, | |
| "k_adaptativo": True}) | |
| # v3 — microunidades escaláveis (doc 11 §§0–5): serial/paralela/isolada/recursiva | |
| microunidades: dict = field(default_factory=lambda: { | |
| "d_gru": 96, "d_ramo": 96, "d_refino": 128, "kernel1": 3, "kernel2": 5, | |
| "gamma_rec": 0.5, "k_rec_max": 2, "eps_stop": 1e-2, | |
| "tau0": 0.8, "kappa_conf": 1.0, "delta_explora": 0.15}) | |
| # v4 — AUTO-ESCALA por computo (doc 12): capacidade segue o ambiente | |
| escalacao: dict = field(default_factory=lambda: { | |
| "ativo": True, "d0": 64, "n_max_ramos": 6, "k_rec_max": 3, | |
| "alpha": 0.5, "reavaliar_a_cada": 100}) # passos entre reavaliações | |
| # v6 — ROTEADOR S-SOM (doc 18 §1): roteamento de MoE supervisionado | |
| roteador: dict = field(default_factory=lambda: { | |
| "ativo": True, "k": 24, "lambda_rota": 0.35, "gamma_empate": 0.15, | |
| "conf_min": 0.25, "min_amostras": 200}) | |
| # v4 — unidades NLP (processar) e NLG (gerar) de primeira classe (doc 15 §1) | |
| nlp: dict = field(default_factory=lambda: {"ativo": True, "n_intencoes": 10}) | |
| # v5 — atenção ENTRE camadas MoE (doc 16 §§1–2): nasce neutra (α=β=0) | |
| atencao_moe: dict = field(default_factory=lambda: {"ativo": True, "alpha0": 0.0}) | |
| nlg: dict = field(default_factory=lambda: {"ativo": True, "n_estilos": 8, | |
| "peso_rerank": 0.35}) | |
| # encoders multimodais "completo pesado" com escala configurável: | |
| imagem: dict = field(default_factory=lambda: { | |
| "tam_patch": 16, "resolucao": 96, "d": 192, "n_camadas": 3, "n_cabecas": 4}) | |
| audio: dict = field(default_factory=lambda: { | |
| "n_mels": 80, "d": 192, "n_camadas": 2, "n_cabecas": 4}) | |
| video: dict = field(default_factory=lambda: { | |
| "n_frames": 4, "tam_patch": 16, "resolucao": 96, "d": 128, "n_camadas": 2}) | |
| class ConfigSOM: | |
| """Mapas auto-organizáveis (item 2) — todas as variantes + orquestrador.""" | |
| dim_entrada: int = 192 # = d_modelo (espaço latente compartilhado) | |
| gg: dict = field(default_factory=lambda: {"lado": 8, "lambda_insercao": 400, "beta": 0.9995, "kmax": 64}) | |
| gcs: dict = field(default_factory=lambda: {"kmax": 48, "lambda_insercao": 300, "beta": 0.9995}) | |
| gsom: dict = field(default_factory=lambda: {"sf": 0.35, "lambda_vizinhos": 0.3, "max_unidades": 96}) | |
| hsom: dict = field(default_factory=lambda: {"k_nivel1": 12, "k_filho": 10}) | |
| tkm: dict = field(default_factory=lambda: {"k": 32, "lambda_janela": 0.5, "janela": 8}) | |
| rsom: dict = field(default_factory=lambda: {"k": 32, "alpha": 0.3}) | |
| cpn: dict = field(default_factory=lambda: {"k": 24, "d_saida": 64, "eta0": 0.05}) | |
| ssom: dict = field(default_factory=lambda: {"k": 24, "lambda_sup": 0.5, "n_classes": 8}) | |
| orquestrador: dict = field(default_factory=lambda: {"atualizacao_por_epoca": 1}) | |
| class ConfigTreino: | |
| """Treino extenso multi-época (item 6) com punição/retreino e W8A8 (item 9). | |
| v2 (doc 10): fases DENSA (máx conexões) → FOCO (top-k) → DPO → SOM (máx | |
| neurônios ativos); PCGrad entre CE e auxiliares; barreira ABMO no lr. | |
| """ | |
| epocas: int = 4 | |
| lote: int = 8 | |
| lr_max: float = 3e-3 | |
| lr_min: float = 3e-4 | |
| warmup: int = 60 | |
| clip_grad: float = 1.0 | |
| janela_estagnacao: int = 120 # passos por janela (eq. 9.3) | |
| epsilon_estagnacao: float = 0.01 | |
| max_punicoes_por_epoca: int = 3 | |
| checkpoint_a_cada: int = 150 # passos | |
| avaliar_a_cada: int = 100 | |
| qat_ultimos_passos: int = 80 # ativa STE-W8A8 no fim (item 9) | |
| mistura_tarefas: dict = field(default_factory=lambda: { | |
| "instrucao": 0.22, "lm": 0.14, "noticia": 0.1, "pontuacao": 0.1, | |
| "imagem_caption": 0.1, "vqa": 0.1, "ocr": 0.07, "asr": 0.09, "tts": 0.08}) | |
| # v2 — pipeline denso→SOM (item d do escopo) | |
| fase_densa_ate_epoca: int = 3 # épocas 0..2 densas; última = foco+QAT | |
| pcgrad: bool = True # cirurgia de gradiente CE × auxiliares | |
| lambda_moe_lb: float = 0.01 # peso da perda de balanceamento | |
| lambda_moe_ort: float = 0.01 # peso da penalidade ortogonal intra-grupo | |
| lambda_mtp: float = 0.3 # peso da perda multi-token | |
| lambda_som: float = 0.05 # peso do alinhamento SOM | |
| # v2 — barreira analítica de LR (ABMO corrigido, doc 10 §6) | |
| abmo: dict = field(default_factory=lambda: { | |
| "ativo": True, "margem": 0.25, "cap_min": 0.05, "cap_max": 500.0}) | |
| # v2 — DPO pós-SFT (doc 10 §4) | |
| dpo: dict = field(default_factory=lambda: { | |
| "ativo": True, "passos": 150, "beta": 0.1, "lr": 5e-5, "lr_beta": 1e-3, | |
| "kl_alvo": 0.2, "lote": 4}) | |
| # v2 — fase SOM com máximo de neurônios ativos (doc 10 §2.3) | |
| fase_som: dict = field(default_factory=lambda: { | |
| "ativo": True, "epocas": 2, "alvo_ativos": 0.90, "gamma_empate": 0.15, | |
| "lambda_novidade": 0.25, "dim_lote": 64}) | |
| # v3 — PRS V8 (doc 11 §7): histerese, SGDR+piso↓, clip-percentil, 2 regimes | |
| prs_v8: dict = field(default_factory=lambda: { | |
| "ativo": True, "eta_up": 0.05, "eta_down": 0.02, "T_ciclo": 400, | |
| "decay_piso": 0.5, "percentil": 0.75, "janela_clip": 50, | |
| "coef_streak": 0.3, "vel_alvo": 0.01, "boost_max": 1.5}) | |
| # v3 — AgenteConfiança (doc 11 §8): Beta+Bernstein+PAC-Bayes, κ assimétrico | |
| confianca: dict = field(default_factory=lambda: { | |
| "ativo": True, "kappa_punicao": 0.3, "kappa_premio": 0.1, | |
| "janela_tau": 50, "quantil_tau": 0.25, "h_escrita_memoria": 0.5}) | |
| # v3 — GestorCrescimento (doc 11 §5): Hutchinson diag-H → expandir/podar | |
| crescimento: dict = field(default_factory=lambda: { | |
| "ativo": True, "a_cada": 200, "tau_expand": 0.10, "tau_prune": 0.01, | |
| "eps_gate": 0.05, "janela_uso": 8, "n_max_ramos": 5, "n_sondas": 2}) | |
| # v6 — RPP (doc 18 §2): Reward/Punishment/Penalty (Teoremas 18.4–18.7) | |
| rpp: dict = field(default_factory=lambda: { | |
| "ativo": True, "rho_max": 0.15, "rho_step": 0.05, "rho_decaimento": 0.5, | |
| "janela": 30, "kappa_rotas_mortas": 0.01, "alvo_ativos": 0.90}) | |
| # v6 — SGDR com T_mult (Teorema 18.5): ciclos T_i = T_0·T_mult^i | |
| sgdr_t_mult: int = 2 | |
| class ConfigMemoriaInterna: | |
| """Memória interna multimodal (v3, doc 11 §9): slots conficientes, evicção | |
| por utilidade, compressão VQ e índice SOM + contratos de acesso.""" | |
| ativo: bool = True | |
| n_slots: int = 64 | |
| h_escrita: float = 0.5 | |
| idade_compressao_s: float = 900.0 | |
| n_codigos: int = 64 | |
| lambda_utilidade: float = 0.1 | |
| meia_vida_s: float = 1800.0 | |
| replay_a_cada: int = 40 # passos entre replays de memória como contexto | |
| class ConfigJanela1M: | |
| """Janela de contexto 1M tokens com compressão INDEXADA (v4, doc 13).""" | |
| ativo: bool = True | |
| n_max_tokens: int = 1_000_000 | |
| l_fino: int = 4096 # janela fina (atenção normal) | |
| w_segmento: int = 256 # tamanho do segmento/resumo | |
| s_passo: int = 128 # passo com overlap 50% | |
| k_recall: int = 4 # resumos recuperados por consulta | |
| viz_r: int = 2 # anel da busca coarse (Teorema 13.1) | |
| m_max: int = 7813 # orçamento de resumos (eq. 13.1) | |
| class ConfigCheckpoints: | |
| """Checkpoints LOCAIS do treino (item c — doc 16 §8). | |
| v5: nenhum upload parcial no Hub durante o treino (o Hub bloqueia | |
| envios parciais em sequência curta). O snapshot final entra no commit | |
| único de publicação (GestorCheckpoints.preparar_para_publicacao).""" | |
| dir_local: str = "/home/z/my-project/aurora/estados_local" | |
| pasta_publicacao: str = "estados/fase-v6" | |
| class ConfigSOMAtencao: | |
| """Atenção ENTRE variantes Kohonen (v5, doc 16 §§3–5): recall atencional | |
| sobre TODAS as variantes + invariante ZERO neurônios isolados.""" | |
| ativo: bool = True | |
| tau: float = 0.5 # temperatura do softmax de variantes | |
| gamma_novidade: float = 0.15 # bônus a variantes com órfãos (Teo. 16.5) | |
| class ConfigDifusao: | |
| """Difusão multimodal (v5, doc 17): SD txt2img/img2img/inpaint com ciclo | |
| fechado de compreensão geracional. Default: repositório TINY (testes); | |
| produção: stabilityai/stable-diffusion-2-1-base (GPU ≥ 8GB).""" | |
| ativo: bool = True | |
| repo_id: str = "hf-internal-testing/tiny-stable-diffusion-torch" | |
| altura: int = 128 | |
| largura: int = 128 | |
| passos_inferencia: int = 8 | |
| guia_escala: float = 7.5 | |
| class ConfigAgenteEngenheiro: | |
| """Agente Engenheiro (v5, doc 16 §9): revisão pré-modificação + | |
| observação de TODAS as métricas fundamentais por módulo (treino+inferência).""" | |
| ativo: bool = True | |
| intervalo: int = 50 # passos entre observações completas | |
| tolerancia_regressao: float = 0.05 | |
| class ConfigTelemetria: | |
| """Telemetria/indicadores (item 5).""" | |
| arquivo_jsonl: str = "/home/z/my-project/aurora/telemetria_out/telemetria.jsonl" | |
| ema_beta: float = 0.98 | |
| psi_limite: float = 0.25 | |
| rank_efectivo_min: float = 4.0 | |
| grad_faixa: tuple = field(default_factory=lambda: (1e-7, 1e2)) | |
| class ConfigCiclo: | |
| """Raciocínio cíclico PDCA (item 3) + ferramentas com cache (item 10).""" | |
| tau_escalada: float = 0.35 # p abaixo disso → humano (Teorema 9.5) | |
| entropia_limite: float = 0.85 | |
| orcamento_passos: int = 6 | |
| cache_ferramentas_ttl: int = 600 # s | |
| cache_ferramentas_max: int = 64 | |
| class Config: | |
| dados: ConfigDados = field(default_factory=ConfigDados) | |
| modelo: ConfigModelo = field(default_factory=ConfigModelo) | |
| som: ConfigSOM = field(default_factory=ConfigSOM) | |
| treino: ConfigTreino = field(default_factory=ConfigTreino) | |
| telemetria: ConfigTelemetria = field(default_factory=ConfigTelemetria) | |
| ciclo: ConfigCiclo = field(default_factory=ConfigCiclo) | |
| checkpoints: ConfigCheckpoints = field(default_factory=ConfigCheckpoints) | |
| memoria_interna: ConfigMemoriaInterna = field(default_factory=ConfigMemoriaInterna) | |
| janela_1m: ConfigJanela1M = field(default_factory=ConfigJanela1M) | |
| som_atencao: ConfigSOMAtencao = field(default_factory=ConfigSOMAtencao) | |
| difusao: ConfigDifusao = field(default_factory=ConfigDifusao) | |
| agente_engenheiro: ConfigAgenteEngenheiro = field( | |
| default_factory=ConfigAgenteEngenheiro) | |
| def de_arquivo(self, caminho: str) -> "Config": | |
| """Sobrescreve campos recursivamente a partir de JSON.""" | |
| with open(caminho, "r", encoding="utf-8") as f: | |
| sobrescrita = json.load(f) | |
| for nome_secao, valores in sobrescrita.items(): | |
| secao = getattr(self, nome_secao, None) | |
| if secao is None: | |
| setattr(self, nome_secao, valores) | |
| continue | |
| for k, v in valores.items(): | |
| setattr(secao, k, v) | |
| return self | |
| def para_dict(self) -> dict: | |
| return asdict(self) | |