Come usare “conda” per configurare gli ambienti in tensorflow
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
conda activate <nome env> conda install tensorflow-gpu conda install cudatoolkit=9.0
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 |
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) |
Sono amante della tecnologia e delle tante sfumature del mondo IT, ho partecipato, sin dai primi anni di università ad importanti progetti in ambito Internet proseguendo, negli anni, allo startup, sviluppo e direzione di diverse aziende; Nei primi anni di carriera ho lavorato come consulente nel mondo dell’IT italiano, partecipando attivamente a progetti nazionali ed internazionali per realtà quali Ericsson, Telecom, Tin.it, Accenture, Tiscali, CNR. Dal 2010 mi occupo di startup mediante una delle mie società techintouch S.r.l che grazie alla collaborazione con la Digital Magics SpA, di cui sono Partner la Campania, mi occupo di supportare ed accelerare aziende del territorio .
Attualmente ricopro le cariche di :
– CTO MareGroup
– CTO Innoida
– Co-CEO in Techintouch s.r.l.
– Board member in StepFund GP SA
Manager ed imprenditore dal 2000 sono stato,
CEO e founder di Eclettica S.r.l. , Società specializzata in sviluppo software e System Integration
Partner per la Campania di Digital Magics S.p.A.
CTO e co-founder di Nexsoft S.p.A, società specializzata nella Consulenza di Servizi in ambito Informatico e sviluppo di soluzioni di System Integration, CTO della ITsys S.r.l. Società specializzata nella gestione di sistemi IT per la quale ho partecipato attivamente alla fase di startup.
Sognatore da sempre, curioso di novità ed alla ricerca di “nuovi mondi da esplorare“.
Comments