| # Dicas de Performance para Treinamento | |
| ## Configuração de Logs | |
| ### logging_steps | |
| Controla com que frequência os logs são exibidos durante o treinamento: | |
| ```okt | |
| TRAIN { | |
| epochs: 3 | |
| batch_size: 8 | |
| learning_rate: 0.0001 | |
| logging_steps: 5 # Log a cada 5 steps (mais frequente) | |
| # logging_steps: 20 # Log a cada 20 steps (menos frequente) | |
| } | |
| ``` | |
| **Valores recomendados:** | |
| - **Datasets pequenos (< 1000 exemplos)**: `logging_steps: 5` ou `10` | |
| - **Datasets médios (1000-10000)**: `logging_steps: 10` ou `20` | |
| - **Datasets grandes (> 10000)**: `logging_steps: 50` ou `100` | |
| ### save_steps | |
| Controla com que frequência os checkpoints são salvos: | |
| ```okt | |
| TRAIN { | |
| epochs: 3 | |
| batch_size: 8 | |
| learning_rate: 0.0001 | |
| save_steps: 100 # Salva checkpoint a cada 100 steps | |
| # save_steps: 500 # Salva checkpoint a cada 500 steps (padrão) | |
| } | |
| ``` | |
| **Dica**: Para datasets pequenos, use `save_steps` menor para não perder progresso. | |
| ## Otimização de Performance | |
| ### 1. Use GPU quando disponível | |
| ```okt | |
| ENV { | |
| accelerator: "gpu" | |
| precision: "fp16" # Usa menos memória e é mais rápido | |
| } | |
| MODEL { | |
| base: "t5-small" | |
| device: "cuda" # Força uso de GPU | |
| } | |
| ``` | |
| **Problema comum**: Se você tem GPU mas vê "No CUDA", instale: | |
| ```bash | |
| pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118 | |
| ``` | |
| ### 2. Aumente o batch_size (se tiver memória) | |
| ```okt | |
| TRAIN { | |
| epochs: 3 | |
| batch_size: 16 # Aumente de 8 para 16 ou 32 (se tiver memória) | |
| learning_rate: 0.0001 | |
| } | |
| ``` | |
| **Trade-off**: | |
| - Batch maior = treinamento mais rápido, mas usa mais memória | |
| - Batch menor = treinamento mais lento, mas usa menos memória | |
| ### 3. Use gradient_accumulation para simular batch maior | |
| Se não tiver memória para batch grande, use gradient accumulation: | |
| ```okt | |
| TRAIN { | |
| epochs: 3 | |
| batch_size: 8 | |
| gradient_accumulation: 4 # Efetivamente batch_size = 8 * 4 = 32 | |
| learning_rate: 0.0001 | |
| } | |
| ``` | |
| ### 4. Reduza o tamanho do input (se possível) | |
| Se seus inputs são muito longos (como JSON de menu embutido), considere: | |
| - **Usar context_fields**: Mova informações longas para campos de contexto | |
| - **Truncar inputs**: O tokenizer já faz isso (max_length: 512), mas inputs menores são mais rápidos | |
| ### 5. Use modelos menores para testes | |
| Para desenvolvimento/testes rápidos: | |
| ```okt | |
| MODEL { | |
| base: "t5-small" # Mais rápido | |
| # base: "t5-base" # Mais lento, mas melhor qualidade | |
| } | |
| ``` | |
| ### 6. Reduza epochs para testes | |
| ```okt | |
| TRAIN { | |
| epochs: 1 # Para testes rápidos | |
| # epochs: 3 # Para treinamento real | |
| batch_size: 8 | |
| } | |
| ``` | |
| ## Análise do Seu Caso | |
| Com base no seu dataset (582 exemplos, inputs longos com Menu JSON): | |
| ### Por que está lento? | |
| 1. **Sem CUDA**: Você está usando CPU, que é ~10-50x mais lento que GPU | |
| 2. **Batch size pequeno (8)**: Com 582 exemplos e batch 8, são ~73 steps por epoch | |
| 3. **Inputs longos**: O Menu JSON embutido aumenta o tempo de processamento | |
| 4. **Modelo T5**: T5-small é relativamente pesado para CPU | |
| ### Soluções Imediatas: | |
| 1. **Instalar CUDA** (se tiver GPU NVIDIA): | |
| ```bash | |
| pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118 | |
| ``` | |
| 2. **Aumentar batch_size** (se tiver RAM): | |
| ```okt | |
| TRAIN { | |
| epochs: 3 | |
| batch_size: 16 # Dobrar o batch_size | |
| logging_steps: 5 # Logs mais frequentes | |
| } | |
| ``` | |
| 3. **Usar context_fields** (recomendado): | |
| ```okt | |
| DATASET { | |
| train: "dataset/train.jsonl" | |
| input_field: "input" | |
| output_field: "target" | |
| context_fields: ["menu"] # Move Menu para contexto | |
| } | |
| ``` | |
| E no dataset, separe o Menu: | |
| ```jsonl | |
| {"input": "What pizzas do you have?", "target": "...", "menu": "{\"Margherita\":34,...}"} | |
| ``` | |
| 4. **Reduzir epochs para testes**: | |
| ```okt | |
| TRAIN { | |
| epochs: 1 # Teste rápido | |
| batch_size: 16 | |
| logging_steps: 5 | |
| } | |
| ``` | |
| ## Tempo Esperado | |
| ### CPU (seu caso atual): | |
| - **582 exemplos, batch 8, 3 epochs**: ~30-60 minutos | |
| - **Com batch 16**: ~15-30 minutos | |
| ### GPU (com CUDA): | |
| - **582 exemplos, batch 8, 3 epochs**: ~3-5 minutos | |
| - **Com batch 16**: ~2-3 minutos | |
| ## Exemplo Otimizado | |
| ```okt | |
| # okto_version: "1.2" | |
| PROJECT "pizzaria_optimized" | |
| ENV { | |
| accelerator: "gpu" | |
| precision: "fp16" | |
| backend: "oktoseek" | |
| } | |
| DATASET { | |
| train: "dataset/train.jsonl" | |
| validation: "dataset/val.jsonl" | |
| input_field: "input" | |
| output_field: "target" | |
| context_fields: ["menu"] # Menu separado como contexto | |
| } | |
| MODEL { | |
| base: "t5-small" | |
| device: "cuda" | |
| } | |
| TRAIN { | |
| epochs: 3 | |
| batch_size: 16 # Aumentado | |
| learning_rate: 0.0001 | |
| logging_steps: 5 # Logs mais frequentes | |
| save_steps: 50 # Salva checkpoints mais frequentemente | |
| } | |
| EXPORT { | |
| format: ["okm"] | |
| path: "export/" | |
| } | |
| ``` | |
| --- | |
| **Última atualização**: 2024 | |