Come usare “conda” per configurare gli ambienti in tensorflow

AI, INTELLIGENZA ARTIFICIALE, TUTORIAL

In questo articolo fornirò alcune indicazioni su come configurare correttamente gli ambienti per usare le gpu con tensorflow attraverso l’uso di conda.

Molto spesso tensorflow per problemi di compatibilità con le versioni delle Cuda non riesce ad allocare correttamente le librerie necessarie e quindi restituisce errori che impediscono l’uso delle stesse.

In prima istanza cerchiamo di creare un ambiente con la versione di python di nostro interesse. In primo luogo verifichiamo le versioni di python a nostro disposizione eseguendo il comando:

conda search python

che ci restituirà qualcosa del genere:

 which returns something like this:

 Fetching package metadata: ....
 ipython                      0.13                     py27_0  defaults        
                              0.13.1                   py27_0  defaults        
                              0.13.1                   py26_0  defaults        
                              0.13.1                   py33_1  defaults        
                              0.13.1                   py27_1  defaults        
                              0.13.1                   py26_1  defaults        
                              0.13.2                   py33_0  defaults             

                             ....

 ipython-notebook             0.13.2                   py27_0  defaults        
                              1.0.0                    py27_0  defaults        
                              1.1.0                    py33_0  defaults        
                              1.1.0                    py27_0  defaults        

                             ....

 python                       2.6.8                         5  defaults        
                              2.6.8                         6  defaults        
                              2.6.9                         0  defaults        
                              2.6.9                         1  defaults        
                              2.7.3                         2  defaults        
                              2.7.3                         3  defaults        
                              2.7.3                         4  defaults        
                              2.7.3                         5  defaults        
                              2.7.3                         6  defaults        
                                 
                              ....

                              2.7.8                         0  defaults        
                              2.7.9                         0  defaults        
                           *  2.7.9                         1  defaults        
                              2.7.10                        0  defaults        
                              2.7.10                        1  defaults        
                              2.7.10                        3  defaults        
                              2.7.10                        4  defaults        
                             	 
                          	 ....
	                             
                              3.4.3                         5  defaults        
                              3.5.0                         0  defaults        
                           .  3.5.0                         1  defaults        
                              3.5.0                         2  defaults        
                              3.5.0                         3  defaults        
                              3.5.0                         4  defaults        
                              3.5.1                         0  defaults

a questo punto sappiamo che possiamo scegliere tra le varie versione proposte e possiamo dunque procedere all’installazione del nostro ambiento con la versione python di nostro interesse esegundo il comando:

Prima di tutto creiamo il nostro ambiente:

conda create --name <nome env>  python=<version>

ad esempio:

conda create --name my_env python=3.7

A questo punto verifichiamo la nostra gpu eseguendo un test con il comando

$ nvcc -V
a questi punto attiviamo il nostro ambiente:
conda activate <nome env>
conda install tensorflow-gpu
conda install cudatoolkit=9.0
E’ molto facile scontrarsi con problemi di compatibilità tra tensorflow e cuda per cui bisogna essere certi di quello che si sta installando.

pertanto per conoscere le versioni a nostra disposizione di cudatolkit puoi usare il comando:

conda search cudatoolkit

il cui risultato sarà qualcosa del genere:

                                                                                                                                                                        Loading channels: done
# Name                       Version           Build  Channel             
cudatoolkit                      9.0      h13b8566_0  pkgs/main           
cudatoolkit                      9.2               0  pkgs/main           
cudatoolkit                 10.0.130               0  pkgs/main           
cudatoolkit                 10.1.168               0  pkgs/main

stessa cosa per conoscere le versioni di  cudnn :

conda search cudnn

il cui risultato sarà qualcosa del genere:

                                                                                                                                                                                                Loading channels: done
# Name                       Version           Build  Channel             
cudnn                          7.0.5       cuda8.0_0  pkgs/main           
cudnn                          7.1.2       cuda9.0_0  pkgs/main           
cudnn                          7.1.3       cuda8.0_0  pkgs/main           
cudnn                          7.2.1       cuda9.2_0  pkgs/main           
cudnn                          7.3.1      cuda10.0_0  pkgs/main           
cudnn                          7.3.1       cuda9.0_0  pkgs/main           
cudnn                          7.3.1       cuda9.2_0  pkgs/main           
cudnn                          7.6.0      cuda10.0_0  pkgs/main           
cudnn                          7.6.0      cuda10.1_0  pkgs/main           
cudnn                          7.6.0       cuda9.0_0  pkgs/main           
cudnn                          7.6.0       cuda9.2_0  pkgs/main

ovviamente per installare le versioni di nostro interesse sarà sufficiente lanciare i comandi:

conda install cudatoolkit=<version>

e

conda install cudnn=<version>

di seguito lascio una tebella che da idea delle corrispondenze di versione:

Versione Versione Python Compilatore Strumenti di costruzione cuDNN CUDA
tensorflow_gpu-2.4.0 3.6-3.8 MSVC 2019 Bazel 3.1.0 8.0 11.0
tensorflow_gpu-2.3.0 3.5-3.8 MSVC 2019 Bazel 3.1.0 7.6 10.1
tensorflow_gpu-2.2.0 3.5-3.8 MSVC 2019 Bazel 2.0.0 7.6 10.1
tensorflow_gpu-2.1.0 3.5-3.7 MSVC 2019 Bazel 0.27.1-0.29.1 7.6 10.1
tensorflow_gpu-2.0.0 3.5-3.7 MSVC 2017 Bazel 0.26.1 7.4 10
tensorflow_gpu-1.15.0 3.5-3.7 MSVC 2017 Bazel 0.26.1 7.4 10
tensorflow_gpu-1.14.0 3.5-3.7 MSVC 2017 Bazel 0.24.1-0.25.2 7.4 10
tensorflow_gpu-1.13.0 3.5-3.7 Aggiornamento 3 di MSVC 2015 Bazel 0.19.0-0.21.0 7.4 10
tensorflow_gpu-1.12.0 3.5-3.6 Aggiornamento 3 di MSVC 2015 Bazel 0.15.0 7.2 9.0
tensorflow_gpu-1.11.0 3.5-3.6 Aggiornamento 3 di MSVC 2015 Bazel 0.15.0 7 9
tensorflow_gpu-1.10.0 3.5-3.6 Aggiornamento 3 di MSVC 2015 Cmake v3.6.3 7 9
tensorflow_gpu-1.9.0 3.5-3.6 Aggiornamento 3 di MSVC 2015 Cmake v3.6.3 7 9
tensorflow_gpu-1.8.0 3.5-3.6 Aggiornamento 3 di MSVC 2015 Cmake v3.6.3 7 9
tensorflow_gpu-1.7.0 3.5-3.6 Aggiornamento 3 di MSVC 2015 Cmake v3.6.3 7 9
tensorflow_gpu-1.6.0 3.5-3.6 Aggiornamento 3 di MSVC 2015 Cmake v3.6.3 7 9
tensorflow_gpu-1.5.0 3.5-3.6 Aggiornamento 3 di MSVC 2015 Cmake v3.6.3 7 9
tensorflow_gpu-1.4.0 3.5-3.6 Aggiornamento 3 di MSVC 2015 Cmake v3.6.3 6 8
tensorflow_gpu-1.3.0 3.5-3.6 Aggiornamento 3 di MSVC 2015 Cmake v3.6.3 6 8
tensorflow_gpu-1.2.0 3.5-3.6 Aggiornamento 3 di MSVC 2015 Cmake v3.6.3 5.1 8
tensorflow_gpu-1.1.0 3.5 Aggiornamento 3 di MSVC 2015 Cmake v3.6.3 5.1 8
tensorflow_gpu-1.0.0 3.5 Aggiornamento 3 di MSVC 2015 Cmake v3.6.3 5.1 8
sarà chiaro adesso quale versione di tensorflow scegliere
pip install tensorflow-gpu==<version>

ora sarà possibile testare l’ambiente:

python
Python 3.7.3 (default, Mar 27 2019, 22:11:17)
[GCC 7.3.0] :: Anaconda, Inc. on linux
Type "help", "copyright", "credits" or "license" for more information.

e le gpu:

>>> import tensorflow as t
>>> print (tf.__version__)
2.3.0
>>> tf.test.gpu_device_name()

eseguendo il comando di test dovreste ottenere qualcosa del genere:

2021-02-11 20:45:13.435263: I tensorflow/core/platform/cpu_feature_guard.cc:142] This TensorFlow binary is optimized with oneAPI Deep Neural Network Library (oneDNN)to use the following CPU instructions in performance-critical operations:  AVX2 FMA

To enable them in other operations, rebuild TensorFlow with the appropriate compiler flags.

2021-02-11 20:45:13.472888: I tensorflow/core/platform/profile_utils/cpu_utils.cc:104] CPU Frequency: 3600000000 Hz

2021-02-11 20:45:13.473152: I tensorflow/compiler/xla/service/service.cc:168] XLA service 0x55ae3af21600 initialized for platform Host (this does not guarantee that XLA will be used). Devices:

2021-02-11 20:45:13.473168: I tensorflow/compiler/xla/service/service.cc:176]   StreamExecutor device (0): Host, Default Version

2021-02-11 20:45:13.475558: I tensorflow/stream_executor/platform/default/dso_loader.cc:48] Successfully opened dynamic library libcuda.so.1

2021-02-11 20:45:13.566097: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:982] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero

2021-02-11 20:45:13.566618: I tensorflow/compiler/xla/service/service.cc:168] XLA service 0x55ae3cd1a250 initialized for platform CUDA (this does not guarantee that XLA will be used). Devices:

2021-02-11 20:45:13.566644: I tensorflow/compiler/xla/service/service.cc:176]   StreamExecutor device (0): GeForce RTX 2080, Compute Capability 7.5

2021-02-11 20:45:13.568061: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:982] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero

2021-02-11 20:45:13.568892: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1716] Found device 0 with properties:

pciBusID: 0000:01:00.0 name: GeForce RTX 2080 computeCapability: 7.5

coreClock: 1.86GHz coreCount: 46 deviceMemorySize: 7.79GiB deviceMemoryBandwidth: 417.23GiB/s

2021-02-11 20:45:13.568956: I tensorflow/stream_executor/platform/default/dso_loader.cc:48] Successfully opened dynamic library libcudart.so.10.1

2021-02-11 20:45:13.618663: I tensorflow/stream_executor/platform/default/dso_loader.cc:48] Successfully opened dynamic library libcublas.so.10

2021-02-11 20:45:13.641680: I tensorflow/stream_executor/platform/default/dso_loader.cc:48] Successfully opened dynamic library libcufft.so.10

2021-02-11 20:45:13.647272: I tensorflow/stream_executor/platform/default/dso_loader.cc:48] Successfully opened dynamic library libcurand.so.10

2021-02-11 20:45:13.690931: I tensorflow/stream_executor/platform/default/dso_loader.cc:48] Successfully opened dynamic library libcusolver.so.10

2021-02-11 20:45:13.697987: I tensorflow/stream_executor/platform/default/dso_loader.cc:48] Successfully opened dynamic library libcusparse.so.10

2021-02-11 20:45:13.777413: I tensorflow/stream_executor/platform/default/dso_loader.cc:48] Successfully opened dynamic library libcudnn.so.7

2021-02-11 20:45:13.777705: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:982] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero

2021-02-11 20:45:13.779043: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:982] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero

2021-02-11 20:45:13.780114: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1858] Adding visible gpu devices: 0

2021-02-11 20:45:13.780752: I tensorflow/stream_executor/platform/default/dso_loader.cc:48] Successfully opened dynamic library libcudart.so.10.1

2021-02-11 20:45:14.643383: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1257] Device interconnect StreamExecutor with strength 1 edge matrix:

2021-02-11 20:45:14.643408: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1263]      0

2021-02-11 20:45:14.643413: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1276] 0:   N

2021-02-11 20:45:14.644692: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:982] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero

2021-02-11 20:45:14.644967: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:982] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero

2021-02-11 20:45:14.645194: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1402] Created TensorFlow device (/device:GPU:0 with 7246 MB memory) -> physical GPU (device: 0, name: GeForce RTX 2080, pci bus id: 0000:01:00.0, compute capability: 7.5)

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

    Comments