# 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///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//`). 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.