5
respostas

laço for do batch demorando muito

for batch in train_loader:

    dado, rotulo = batch
    print(dado.size(), rotulo.size())
    break

Na aula anterior, esse pedaço de código rodou super rápido, porém agora está demorando mais, mais de 7 min e eu interrompi. O que pode estar acontecendo?

5 respostas

Existem algumas possibilidades que podem estar causando essa demora. Vou listar algumas delas:

  1. Tamanho do batch: Verifique se o tamanho do batch é muito grande. Se for o caso, pode estar causando um gargalo no processamento. Tente reduzir o tamanho do batch e veja se isso melhora o desempenho.

  2. Complexidade do modelo: Se o seu modelo estiver muito complexo, com muitas camadas e parâmetros, isso pode impactar o tempo de processamento. Considere simplificar o modelo, removendo camadas desnecessárias ou reduzindo a quantidade de neurônios em cada camada.

  3. Recursos do sistema: Verifique se o seu sistema possui recursos suficientes para executar o código. Se você estiver usando uma máquina com pouca memória ou um processador lento, isso pode afetar o desempenho. Considere usar uma máquina com mais recursos ou otimizar o código para reduzir a carga no sistema.

Além dessas possibilidades, é importante ressaltar que o desempenho pode variar dependendo do contexto e dos dados que você está utilizando. Portanto, é difícil fornecer uma solução definitiva sem mais informações. Sugiro que você experimente as sugestões acima e veja se alguma delas melhora o desempenho do seu código.

Para mim aconteceu o mesmo problema.

Estou rodando na CPU de uma máquina local e travou na mesma parte.

Não consegui resolver de nenhuma forma até o momento.

Gustavo, eu tentei rodar mais uma vez, deixei mais de 15 minutos e interrompi. A pior parte é que coloquei pra rodar no Colab e foi tranquilamente, levou uns 3 minutos, se não me engano. No meu caso, acho que meu notebook que não deu conta, mesmo usando o cuda. :(

comigo foi a mesma coisa, com a diferença de que quando tento parar a celula ela nao para e quando saiu e entro novamente o jupyter nao consegue executar nem 4+4 em outra celula, ou seja, colab é a solução.

Consegui resolver o problema.

Na configuração de hiperparâmetros basta mudar o num_workers para 0 e irá rodar normalmente. Ficará da seguinte forma:

# Configurando hiperparâmetros.
args = {
    'epoch_num': 200,     # Número de épocas.
    'lr': 5e-5,           # Taxa de aprendizado.
    'weight_decay': 5e-4, # Penalidade L2 (Regularização).
    'num_workers': 0,     # Número de threads do dataloader.
    'batch_size': 20,     # Tamanho do batch.
}

Encontrei nos fóruns que é um problema relacionado ao ambiente Windows e que essa mudança não gera uma perca significativa na eficiencia do código, mas ninguém explicou qual é o problema propriamente dito.

E faz sentido o código rodar no Colab com num_workers = 3, pois o problema é com o Windows.