Errore tensorflow / stream_executor / cuda / cuda_dnn.cc: 338] Impossibile creare l’handle cudnn: CUDNN_STATUS_INTERNAL_ERROR
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

Comments