Solução de problemas|Sobre o resumo e solução de erros de código CUDA

Este blog é principalmente sobre o resumo de erros e soluções comuns de código CUDA ~

1. Erro de execução RuntimeError

1.1.RuntimeError: erro CUDA: memória insuficiente

Os erros do kernel CUDA podem ser relatados de forma assíncrona em alguma outra chamada de API, portanto, o stacktrace abaixo pode estar incorreto.

Para depuração, considere passar CUDA_LAUNCH_BLOCKING=1.

Erro ao analisar:

O programa estava funcionando bem, o código estava bom, a memória de vídeo ainda era inútil e a memória de vídeo era suficiente, a GPU pode estar ocupada,

Pode ser devido ao problema de cache do treinamento anterior, porque ele está sendo executado no contêiner docker, então pare o contêiner docker primeiro e depois inicie o contêiner~

1.2.RuntimeError: erro cuDNN: CUDNN_STATUS_INTERNAL_ERROR

possíveis erros

  • A versão do pytorch e cuda está errada

  • Memória de vídeo insuficiente

Consulte outro código de teste de blog

# True:每次返回的卷积算法将是确定的,即默认算法。
torch.backends.cudnn.deterministic = True
# 程序在开始时花额外时间,为整个网络的每个卷积层搜索最适合它的卷积实现算法
# 实现网络的加速。
torch.backends.cudnn.benchmark = True

solução final

Definir numwork para 0

1.3.RuntimeError: CUDA sem memória

①RuntimeError: CUDA sem memória. Tentei alocar 152,00 MiB (GPU 0; 23,65 GiB de capacidade total; 13,81 GiB já alocado; 118,44 MiB livre; 14,43 GiB reservado no total pelo PyTorch) Se a memória reservada for >> memória alocada, tente definir max_split_size_mb para evitar a fragmentação. Consulte a documentação para gerenciamento de memória e PYTORCH_CUDA_ALLOC_CONF

Excedendo a memória ocupada pela GPU, os recursos da GPU local devem ser totalmente suficientes. No entanto, durante o processo de treinamento do pytorch, devido à retropropagação e parâmetros de avanço dos parâmetros da rede neural, como gradiente descendente , uma grande quantidade de memória da GPU será ocupada , por isso precisa ser reduzido. batch.

Solução:

  • Reduza o lote, ou seja, reduza o tamanho da amostra do treinamento de palavras

  • Liberar memória de vídeo: arch.cuda.empty_cache()

②torch.cuda.OutOfMemoryError : CUDA sem memória. Tentei alocar 128,00 MiB (GPU 0; 23,65 GiB de capacidade total; 22,73 GiB já alocados; 116,56 MiB livres; 22,78 GiB reservados no total pelo PyTorch) Se a memória reservada for >> memória alocada, tente definir max_split_size_mb para evitar a fragmentação. Consulte a documentação para gerenciamento de memória e PYTORCH_CUDA_ALLOC_CONF

arch.cuda.OutOfMemoryError: CUDA não tem memória. Tentando alocar 128,00 MiB (GPU 0; 23,65 GiB total; 22,73 GiB alocado; 116,56 MiB livre; 22,78 GiB total reservado pelo PyTorch) Se a memória reservada >> memória alocada, tente definir max_split_size_mb para evitar a fragmentação. Consulte a documentação para gerenciamento de memória e PYTORCH_CUDA_ALLOC_CONF.

Análise da causa do erro:

Durante o treinamento do modelo de aprendizado profundo, o código não libera a memória de vídeo toda vez que é treinado

solução:

ver nvidia-smi

Neste momento , a GPU está rodando sem programa, e a memória de vídeo ainda está ocupada, conforme mostra a figura

Usar consulta de fusor

fuser -v /dev/nvidia*

(Opção) Se você inserir o comando acima e ele informar que não há fusor, instale

apt-get install  psmisc

Se não for possível localizar o pacote XXX aparecer, então

apt-get update

Força (-9) para matar o processo, digite o seguinte comando

kill -9 PID

Diagrama de exemplo

Apenas libere a memória de vídeo~

Acho que você gosta

Origin blog.csdn.net/weixin_44649780/article/details/128911586
Recomendado
Clasificación