Dicas de Performance para Treinamento
Configuração de Logs
logging_steps
Controla com que frequência os logs são exibidos durante o treinamento:
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: 5ou10 - Datasets médios (1000-10000):
logging_steps: 10ou20 - Datasets grandes (> 10000):
logging_steps: 50ou100
save_steps
Controla com que frequência os checkpoints são salvos:
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
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:
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
2. Aumente o batch_size (se tiver memória)
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:
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:
MODEL {
base: "t5-small" # Mais rápido
# base: "t5-base" # Mais lento, mas melhor qualidade
}
6. Reduza epochs para testes
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?
- Sem CUDA: Você está usando CPU, que é ~10-50x mais lento que GPU
- Batch size pequeno (8): Com 582 exemplos e batch 8, são ~73 steps por epoch
- Inputs longos: O Menu JSON embutido aumenta o tempo de processamento
- Modelo T5: T5-small é relativamente pesado para CPU
Soluções Imediatas:
Instalar CUDA (se tiver GPU NVIDIA):
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118Aumentar batch_size (se tiver RAM):
TRAIN { epochs: 3 batch_size: 16 # Dobrar o batch_size logging_steps: 5 # Logs mais frequentes }Usar context_fields (recomendado):
DATASET { train: "dataset/train.jsonl" input_field: "input" output_field: "target" context_fields: ["menu"] # Move Menu para contexto }E no dataset, separe o Menu:
{"input": "What pizzas do you have?", "target": "...", "menu": "{\"Margherita\":34,...}"}Reduzir epochs para testes:
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
# 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