eda_trainning_lora / docs /METRICS.md
Ademir
Initial clean commit: scripts and config without logs
d4a00b2
# Métricas de treino (TensorBoard e relatórios)
## Onde são geradas
Em [`train.py`](../train.py) o `TrainingArguments` usa `report_to=["tensorboard"]` e `logging_dir` aponta para `./results` (junto com `output_dir`). Os eventos ficam em ficheiros `events.out.tfevents.*` dentro de `results/` (e subpastas de checkpoints).
O [`app.py`](../app.py) do Space **não** arranca um processo TensorBoard à parte; no Hugging Face Space com Docker só a porta da app é exposta publicamente. Para inspecionar curvas, use análise **offline** (script abaixo), descarregue os event files, ou carregue os `events.out.tfevents.*` para um repositório de modelo no Hub.
### TensorBoard no Hub (repositório de modelo)
Se os ficheiros de eventos estiverem versionados no repositório (por exemplo após `hf upload`), o Hugging Face mostra o TensorBoard em `https://huggingface.co/<org>/<repo>/tensorboard`. Exemplo: [beAnalytic/eda-llm-model](https://huggingface.co/beAnalytic/eda-llm-model) — [separador TensorBoard](https://huggingface.co/beAnalytic/eda-llm-model/tensorboard).
## Script de análise automática
[`scripts/analyze_training_metrics.py`](../scripts/analyze_training_metrics.py) lê os event files, extrai escalares (loss, learning rate, etc.) e gera:
- `training_metrics_report.txt` (legível)
- `training_metrics.json` (programático)
**Requisito:** `tensorboard` instalado (`pip install tensorboard`, também listado em `requirements.txt`).
### Uso
```bash
cd ml/configs/huggingface_training_config
pip install -r requirements.txt
# Diretório com events (típico após treino local)
python scripts/analyze_training_metrics.py ./results
# Diretório atual
python scripts/analyze_training_metrics.py .
```
### Obter eventos do Space
No container do [Space de treino](https://huggingface.co/spaces/beAnalytic/Training), os eventos ficam por defeito em **`/app/results`** (equivalente a `./results` no código do `train.py`). Podem aparecer na raiz de `results/` ou em subpastas (ex.: `runs/<run_name>/`).
1. Abra o Space no Hub → **Files** (ou **Files and versions** no repositório Git do Space, se fizer commit dos artefactos).
2. Descarregue a pasta `results/` completa (ou pelo menos os ficheiros `events.out.tfevents.*`).
3. No PC, use essa pasta como `--logdir` do TensorBoard (ex.: `tensorboard --logdir=./results`) ou corra o script de análise na pasta que contém os eventos.
### Treino local
Os eventos ficam em `./results/` por defeito; pode haver também `./logs/` conforme configuração.
## Métricas típicas
| Série | Significado |
|-------|-------------|
| `train/loss` | Loss de treino |
| `eval/loss` | Loss de validação (se avaliação por steps estiver ativa) |
| `train/learning_rate` | LR efetiva |
O relatório calcula estatísticas (mínimo, máximo, melhoria percentual) e um **gap** entre eval e train para sinalizar overfitting/underfitting (heurística no script).
## Interpretação rápida
- **Train loss alto (> 2):** ainda a aprender; verificar dados e hiperparâmetros.
- **Train loss baixo (< 0.5):** convergência razoável (depende da tarefa).
- **Gap eval vs train:** gap grande e eval pior → possível overfitting; gap negativo estranho → rever split/validação.
- **Learning rate:** oscilações fortes podem indicar LR alta; estagnação longa pode indicar LR baixa ou poucos dados.
## TensorBoard interativo (local)
Se tiver a pasta `results/` (ou o valor de `TENSORBOARD_LOGDIR`) com eventos:
```bash
cd ml/configs/huggingface_training_config
python scripts/launch_tensorboard.py --logdir ./results
```
Equivalente manual:
```bash
tensorboard --logdir=./results --host=127.0.0.1 --port 6006
```
Abrir no browser o URL indicado (por defeito `http://127.0.0.1:6006`). No Space não assuma acesso à porta 6006 a partir do exterior.
### Variáveis de ambiente (treino)
| Variável | Efeito |
|----------|--------|
| `TENSORBOARD_LOGDIR` ou `LOGGING_DIR` | Diretório dos eventos TensorBoard (predefinido: mesmo que `TRAINING_OUTPUT_DIR` ou `./results`). |
| `TRAINING_RUN_NAME` | Nome da corrida no TensorBoard (predefinido: `eda-lora-UTC...`). |
| `TRAINING_OUTPUT_DIR` | Diretório de checkpoints e, por defeito, dos logs TB. |
O [`train.py`](../train.py) regista `train/loss`, `eval/loss`, `train/learning_rate`, etc., com `logging_first_step=True` e `metric_for_best_model=eval_loss`.
## Problemas
- **Nenhum arquivo de eventos:** confirmar que o treino já escreveu steps; `logging_steps` em `train.py`; pasta correta.
- **TensorBoard não disponível:** instalar `tensorboard`; sem ele o script pode limitar-se a extrair configurações dos eventos.
- **Nenhuma métrica de treino:** treino ainda no início ou `logging_steps` muito grande.
## CI/CD
Pode consumir `training_metrics.json` para gates (ex.: melhoria mínima de loss, status de overfitting). Ver estrutura no ficheiro gerado após uma execução bem-sucedida.