File size: 10,043 Bytes
64ae428
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
# BiGRU_T_version — Refatoração formal do GRU-RING v13.9.2

Refatoração matemática do modelo [PowerMachine/gru-ring-v13-9-2](https://huggingface.co/PowerMachine/gru-ring-v13-9-2) em torno de **4 lemas formais** que tornam explícitos os mecanismos de desacoplamento, cirurgia de gradiente, cancelamento de ruído de quantização e auto-configuração.

## Lemas

### Lema 1 — Desacoplamento via atenção hierárquica
Seleção dos módulos `u8cell_T` por softmax com temperatura controlada (α). Durante o treino, a temperatura é meta-ajustada e a entropia dos pesos é minimizada indiretamente pela regularização de agudeza, forçando especialização e reduzindo o produto interno dos gradientes (disputa).

**Implementação**: `src/bigru_t/model/module_selector.py` — `ModuleSelector`
- `module_logits: nn.Parameter(torch.zeros(K))` — logits aprendíveis
- `alpha = F.softmax(module_logits / T, dim=0)` no forward
- `entropy_reg = -lambda_ent * (alpha * log(alpha + eps)).sum()`

### Lema 2 — Gradiente cirúrgico
`apply_gradient_surgery` implementa a projeção ortogonal quando os gradientes da tarefa principal e da hipótese são conflitantes (produto interno negativo). Garante que ambas as perdas possam ser reduzidas sem interferência destrutiva.

**Implementação**: `src/bigru_t/training/gradient_surgery.py`
- `orthogonalize_gradient(g_main, g_hyp)`: projeção vetorial
- `apply_gradient_surgery(model, loss_main, loss_hyp)`: calcula gradientes independentes via `torch.autograd.grad`, aplica projeção e atribui `p.grad = g_main + g_hyp_perp`

### Lema 3 — Cancelamento de ruído de quantização
A hipótese (`hyp_T`) é treinada com a perda sobre `y_final = y_hat + delta`, aprendendo a corrigir o viés e variância introduzidos pela quantização W8A8 (simulada no forward pelas camadas `QuantizedLinear`). `stop_grad_hyp=True` isola o sinal de correção do gradiente principal, e a cirurgia gerencia os parâmetros compartilhados.

**Implementação**: `src/bigru_t/quantization/quantized_linear.py` + `src/bigru_t/model/hyp_t.py`
- `QuantizedLinear(nn.Linear)`: fake quant W8A8 no forward (STE backward)
- `HypT.forward(o, stop_grad=True)`: aplica `o.detach()` quando stop_grad
- Ativação condicional: hipótese só é calculada quando `loss_main > tau`

### Lema 4 — Auto-configuração e suavização
`MetaConfigurator` ajusta temperatura e limiar τ, e penaliza a agudeza da perda (norma do gradiente), empurrando o modelo para mínimos planos onde o ruído de gradiente é menor. A quantidade de módulos ativos é implicitamente controlada pela softmax com temperatura.

**Implementação**: `src/bigru_t/training/meta_configurator.py`
- `log_temperature: nn.Parameter` — `T = exp(log_temperature)` (positivo)
- `log_tau: nn.Parameter` — `τ = exp(log_tau)` (positivo)
- `forward_with_meta(x_val, y_val)`: meta-loss = `L_val + λ_s * ||∇_θ L_val||²`

## Arquitetura

```
x (batch, T, input_dim)
    │
    ├──→ u8cell_T_1  ─→ h_1 ─┐
    ├──→ u8cell_T_2  ─→ h_2 ─┤       Lema 1: alpha = softmax(logits / T)
    ├──→ ...                  ├─→ H = stack([alpha_k * h_k])  → OrqCell
    └──→ u8cell_T_K  ─→ h_K ─┘                │
                                               ↓
                                              o (batch, d_cache)
                                               │
                                ┌──────────────┴──────────────┐
                                ↓                              ↓
                            TrainT(o)                     HypT(o, stop_grad=True)
                                │                              │
                                ↓                              ↓
                            y_hat                           delta
                                │                              │
                                └──────→ y_final = y_hat + delta * use_hyp  ←── Lema 3

Lema 2: gradient_surgery(g_main, g_hyp) → projeção ortogonal
Lema 4: MetaConfigurator ajusta T (temperatura) e τ (limiar de ativação da hipótese)
```

### Componentes
| Componente | Arquivo | Descrição |
|---|---|---|
| `BiGRU4` | `model/bigru4.py` | 4 camadas BiGRU sequenciais |
| `TransformerUnit` | `model/transformer_unit.py` | Self-attention + FFN para 8 representações |
| `u8cell_T` | `model/u8cell_t.py` | 8 BiGRU4 paralelas + TransformerUnit |
| `OrqCell` | `model/orq_cell.py` | Cache aprendível + cross-attention |
| `TrainT` | `model/train_t.py` | Cabeça de predição principal |
| `HypT` | `model/hyp_t.py` | Cabeça de hipótese (correção delta) |
| `ModuleSelector` | `model/module_selector.py` | Lema 1: softmax + entropia |
| `UnifiedModel` | `model/unified_model.py` | Orquestra todos os componentes |
| `QuantizedLinear` | `quantization/quantized_linear.py` | Lema 3: W8A8 fake quant |
| `apply_gradient_surgery` | `training/gradient_surgery.py` | Lema 2: projeção ortogonal |
| `MetaConfigurator` | `training/meta_configurator.py` | Lema 4: auto-configuração |
| `KillSwitch` | `training/kill_switch.py` | Monitor RAM/disk/loss + kill automático |
| `BiGRU_T_Trainer` | `training/trainer.py` | Loop de treino (2 épocas) |

## Reaproveitamento do source (PowerMachine/gru-ring-v13-9-2)

| Componente | Source | Target |
|---|---|---|
| BBPE Tokenizer | `flexnet/bbpe_tokenizer.py` | `tokenizer/bbpe_tokenizer.py` |
| Streaming datasets (9 base + 3 PT-BR) | `scripts/streaming_datasets_v13_9.py` | `data/streaming_datasets.py` |
| W8A8 QOperator (inferência) | `flexnet/w8a8_qoperator.py` | `quantization/w8a8_qoperator.py` |
| Hardware detector | `flexnet/hardware_detector.py` | `utils/hardware_detector.py` |
| Xeon runtime | `flexnet/xeon_runtime.py` | `utils/xeon_runtime.py` |
| OOM guard | `flexnet/oom_guard.py` | `utils/oom_guard.py` |
| Memory monitor | `flexnet/memory_monitor.py` | `utils/memory_monitor.py` |
| Tensor ops | `xavante/utils/tensor_ops.py` | `utils/tensor_ops.py` |
| Validators | `xavante/utils/validators.py` | `utils/validators.py` |
| Logging utils | `xavante/utils/logging_utils.py` | `utils/logging_utils.py` |
| Hamiltonian-Wasserstein optimizer | `flexnet/hamiltonian_wasserstein_optimizer.py` | `optim/hamiltonian_wasserstein.py` |
| Multimodal: text/image/audio/video encoders | `xavante/multimodal/*` | `multimodal/*` |

## Datasets (12, PT-BR)

**9 base (v13.9.2)**:
1. `CEIA-POSITIVO/ultrachat_br_clustred_balanced_v1`
2. `Madras1/corpus-ptbr-v2`
3. `rhaymison/multmodal_175k_portuguese`
4. `TucanoBR/GigaVerbo`
5. `nvidia/OpenMathReasoning`
6. `MathLLMs/MathVision`
7. `nvidia/OpenMathInstruct-2`
8. `dominguesm/restore-punctuation-ptbr-dataset`
9. `carolina-c4ai/corpus-carolina`

**3 PT-BR finetune**:
10. `orion-research/translations-en_US-pt_BR` (format: `### Instruction:/### Response:`)
11. `cnmoro/Instruct-PTBR-10M` (format: `### Instruction:/### Response:`)
12. `strak2005/corpus-ptbr-v1` (plain text)

## Instalação

```bash
cd BiGRU_T_version
pip install -r requirements.txt
pip install -e .
```

## Uso — Treino de bug-detection (2 épocas)

```bash
export HF_TOKEN="hf_xxx"  # para datasets públicos, opcional
python scripts/train.py \
    --datasets CEIA-POSITIVO/ultrachat_br_clustred_balanced_v1,Madras1/corpus-ptbr-v2 \
    --max-samples 30 \
    --epochs 2 \
    --output-dir model_final
```

## Uso — Inferência

```python
import torch
from bigru_t import create_unified_model
from tokenizers import Tokenizer

model, config = create_unified_model()
state = torch.load("model_final/pytorch_model.bin", map_location="cpu")
model.load_state_dict(state, strict=False)
model.eval()

tokenizer = Tokenizer.from_file("model_final/tokenizer/tokenizer.json")
input_ids = torch.tensor([tokenizer.encode("O presidente anunciou que").ids])
y_hat, delta = model(input_ids, temperature=1.0, use_hypothesis=False)
next_token = y_hat.argmax(dim=-1)
print(tokenizer.decode([next_token.item()]))
```

## Configuração Xeon

O ambiente é automaticamente configurado para Xeon com AVX512/VNNI/AMX:
- `OMP_NUM_THREADS=2`, `MKL_NUM_THREADS=2`
- `torch.set_num_threads(2)`
- `optimize_xeon_environment()` (de `utils/xeon_runtime.py`) chamado no startup

## Estrutura

```
BiGRU_T_version/
├── README.md
├── requirements.txt
├── src/
│   ├── setup.py
│   └── bigru_t/
│       ├── __init__.py
│       ├── model/          # BiGRU4, TransformerUnit, u8cell_T, OrqCell, TrainT, HypT, ModuleSelector, UnifiedModel
│       ├── quantization/   # QuantizedLinear (Lema 3), w8a8_qoperator (reaproveitado)
│       ├── training/       # gradient_surgery (Lema 2), meta_configurator (Lema 4), kill_switch, trainer
│       ├── data/           # streaming_datasets (reaproveitado, 12 datasets)
│       ├── multimodal/     # text/image/audio/video encoders (reaproveitado)
│       ├── optim/          # hamiltonian_wasserstein (reaproveitado)
│       ├── utils/          # hardware_detector, xeon_runtime, oom_guard, memory_monitor, tensor_ops, validators, logging_utils
│       └── tokenizer/      # bbpe_tokenizer (reaproveitado)
├── scripts/
│   ├── train.py            # Treino de bug-detection (2 épocas)
│   ├── smoke_test.py       # Smoke test do pipeline
│   └── upload_to_hf.py     # Upload para HF
├── tests/
│   ├── test_model.py
│   ├── test_gradient_surgery.py
│   ├── test_meta_configurator.py
│   └── test_w8a8.py
├── docs/
│   ├── analysis.md         # Análise matemática dos 4 lemas
│   └── architecture.md
├── configs/
│   └── default.yaml
└── model_final/            # Artefatos treinados
    ├── config.json
    ├── pytorch_model.bin
    └── tokenizer/
```

## Licença

MIT (herdado do source PowerMachine/gru-ring-v13-9-2).