Errore tensorflow / stream_executor / cuda / cuda_dnn.cc: 338] Impossibile creare l’handle cudnn: CUDNN_STATUS_INTERNAL_ERROR

AI, INTELLIGENZA ARTIFICIALE, TUTORIAL

Devo ammettere che questo errore è stato un grosso problema da risolvere ed in parte lo è ancora. Ho trovato e verificato molti metodi discussi su Internet in diversi forum, ma nessuno in sostanza è stato utile per risolvere il  problema in via definitiva, almeno nel mio caso.

2019-05-05 09:34:42.298865: I tensorflow/stream_executor/platform/default/dso_loader.cc:42] Successfully opened dynamic library libcublas.so.10.0
2019-05-05 09:34:42.469839: I tensorflow/stream_executor/platform/default/dso_loader.cc:42] Successfully opened dynamic library libcudnn.so.7
2019-05-05 09:34:43.086143: E tensorflow/stream_executor/cuda/cuda_dnn.cc:338] Could not create cudnn handle: CUDNN_STATUS_INTERNAL_ERROR
2019-05-05 09:34:43.100978: E tensorflow/stream_executor/cuda/cuda_dnn.cc:338] Could not create cudnn handle: CUDNN_STATUS_INTERNAL_ERROR

Ovviamente ho seguito attentamente le istruzioni per l’installazione delle librerie così come indicato sul sito ufficiale di tensorflow  ed ho provato le varie versioni disposnibili  di cuda da 10. .1 fino a 9.0 e relative cudnn ma  l’errore è sempre stato impossibile da eliminare.

Alla fine  ho capito che il problema è nella compatibilità delle librerie installate sull’ambiente e non è facile capire qualce in particolare genera il problema. Dopo vari tentativi ho scoperto che utilizzando anaconda per installare tensorflow-gpu nell’ambiente virtuale, vengono  installate automaticamente cuda e cudnn nell’ambiente compatibili conl a verisone di tensorflow da utilizzare. Inoltre ho verificato che la versione funaionante è la 1.12. Pertanto per ricolvere il problema sarà sufficiente creare una ambiente virtuale lanciando ad esempio il  comando:

conda create --name tf12

ed installare tensorflow-gpu lanciando il seguente comando:

conda install tensorflow-gpu==1.12

Al momento non ho trovato una via aternativa per sfruttare la gpu con tensorflow con versioni più recenti.

Qualche piccola nota; esiste la possibilità nel caso di più GPU di settare la GPU da utilizzare lannciando il seguente comando:

export CUDA_VISIBLE_DEVICES=1

Nel caso in cui si avesse una sola gpu e si utilizzasse l’espressione precedente in realtà non verrebbe utilizzata alcuna gpu ma la CPU. Questo trick viene spesso suggerito nei post come risolutivo del bug precedente ma ovviamente non è vero.

In caso di una sola GPU l’espressione corretta dovrebbe essere:

export CUDA_VISIBLE_DEVICES=0

 

 

Se vuoi farmi qualche richiesta o contattarmi per un aiuto riempi il seguente form

    Comments