Moet Tensorflow™ worden gecompileerd?
In slechts twee jaar tijd is Tensorflow™ uitgegroeid tot een van de populairste bibliotheken voor deep-machine-learning. Het is essentieel om de hoogst mogelijke prestaties te bereiken tijdens het werken aan Tensorflow™-projecten, net als bij de ontwikkeling van elk ander softwareproduct.
Een van de effectieve manieren om de snelheid van de berekeningen te verhogen die Google adviseert, is het gebruik van een voorgecompileerd pakket van de Tensorflow™-bibliotheek te vermijden en dit te vervangen door een Tensorflow™-versie die rechtstreeks uit de broncode is gecompileerd. Onlangs werd een onderzoek uitgevoerd om de door Google voorgestelde methode te testen. Hierbij werden dezelfde projecten met Tensorflow™ gestart op drie verschillende manieren zonder de ondersteuning van het geïnstalleerde CUDA®-platform:
- Met behulp van een voorgecompileerd pakket;
- Direct gecompileerd vanuit de broncode zonder ondersteunende CPU-instructies;
- Direct gecompileerd vanuit de broncode met ondersteunende CPU-instructies (AVX, AVX2 en FMA, enz.).
Er werden ook Tensorflow™-bibliotheektesten met ondersteuning voor het CUDA®-platform uitgevoerd. De volgende testresultaten werden als benchmarks genomen:
- Testen met echte gegevens. Een netwerk van het type Inception-ResNet-v2 werd getraind om het geslacht van mensen te herkennen met behulp van de FaceScrub-dataset (http://vintage.winklerbros.net/facescrub.html).
- Synthetische testen van de officiële site van TensorFlow™. Het neuraal-netwerkmodel is Inception v3 (https://www.tensorflow.org/lite/performance/measurement).
De testen zijn uitgevoerd op de server met de volgende configuratie (www.leadergpu.nl):
- GPU: NVIDIA® Tesla® P100 (16 GB)
- CPU: 2 x Intel® Xeon® E5-2630v4 2.2 GHz
- RAM: 128 GB
- SSD: 960 GB
- Ports: 40 Gbps
- OS: CentOS 7
- Python 2.7
- TensorFlow™ 1.3
Opdrachten voor het installeren van Tensorflow™ zonder CUDA®-ondersteuning:
Installatie van Tensorflow™ vanuit een voorgecompileerd pakket:
# pip install tensorflow
Installatie van Tensorflow™, rechtstreeks gecompileerd vanuit de broncode:
# git clone https://github.com/tensorflow/tensorflow
# cd tensorflow
# git checkout r1.3
# ./configure
-
voor compilatie zonder ondersteuning voor CPU-opdrachten:
# bazel build -c opt //tensorflow/tools/pip_package:build_pip_package
-
voor compilatie met ondersteuning voor CPU-opdrachten:
# bazel build -c opt --copt=-mavx --copt=-mavx2 --copt=-mfma --copt=-mfpmath=both --copt=-msse4.1 --copt=-msse4.2 //tensorflow/tools/pip_package:build_pip_package bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg # pip install /tmp/tensorflow_pkg/1.3.0-cp27-cp27mu-linux_x86_64.whl
Testen op echte gegevens en synthetische gegevens zonder ondersteuning van CUDA
Opdrachten voor het starten van een netwerk voor testen met echte gegevens:
# cd gender_net
# python download_data.py
# python convert_data_FS.py
# time python model_FS_mulGPU_v3.py
Opdrachten voor het uitvoeren van testen met synthetische gegevens:
# mkdir ~/Anaconda
# cd ~/Anaconda
# git clone https://github.com/tensorflow/benchmarks.git
# cd ~/Anaconda/benchmarks/scripts/tf_cnn_benchmarks
# python tf_cnn_benchmarks.py --devicecpu model --inception3 --batch_size 32 --data_format NHWC --num_batches 40
Tensorflow™ testen, geïnstalleerd vanuit een voorgecompileerd pakket:
Resultaat van testen met echte gegevens:
10 images / sec;
uitvoeringstijd testscript
= 20m55s.
Resultaat van testen met synthetische gegevens:
0,73 images/sec;
uitvoeringstijd testscript
= 36m25s.
Tensorflow™ testen, direct gecompileerd vanuit de broncode zonder ondersteunende CPU-instructies:
Resultaat van testen met echte gegevens:
10 images/sec;
uitvoeringstijd testscript
= 20m55s.
Resultaat van testen met synthetische gegevens:
0,74 images/sec;
uitvoeringstijd testscript
= 36m21s.
Tensorflow™ testen, direct gecompileerd vanuit de broncode met ondersteunende CPU-instructies:
Resultaat van testen met echte gegevens:
15-16 images/sec;
uitvoeringstijd testscript
= 14m13s.
Resultaat van testen met synthetische gegevens:
1,44 images/sec;
uitvoeringstijd testscript
= 18m40s.
Hieronder vindt u een grafiek met de testresultaten.


Opdrachten voor het installeren van Tensorflow™ met CUDA®-ondersteuning:
Installatie van Tensorflow™ vanuit een voorgecompileerd pakket:
# pip install tensorflow
Installatie van Tensorflow™, rechtstreeks gecompileerd vanuit de broncode:
# git clone https://github.com/tensorflow/tensorflow
# cd tensorflow
# git checkout r1.3
#./configure
# bazel build -c opt --copt=-mavx --copt=-mavx2 --copt=-mfma --copt=-mfpmath=both --copt=-msse4.1 --copt=-msse4.2 --config=cuda //tensorflow/tools/pip_package:build_pip_package
bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg
# pip install /tmp/tensorflow_pkg/1.3.0-cp27-cp27mu-linux_x86_64.whl
De opdrachten voor het starten van netwerken zijn vergelijkbaar met de opdrachten van de vorige testen, behalve de opdracht om het script uit te voeren om te beginnen met het inleren van het netwerk met synthetische gegevens:
# python tf_cnn_benchmarks.py --num_gpus=1 --model inception3 --batch_size 32
Testen met echte gegevens en synthetische gegevens met ondersteuning van CUDA
Tensorflow™ testen, geïnstalleerd vanuit een voorgecompileerd pakket:
Resultaat van testen met echte gegevens:
214 images/sec.
Resultaat van testen met synthetische gegevens:
126,33 images/sec.
Tensorflow™ testen, direct gecompileerd vanuit de broncode met ondersteunende CPU-instructies:
Resultaat van testen met echte gegevens:
215 images/sec.
Resultaat van testen met synthetische gegevens:
126,34 images/sec.
Om de resultaten van de uitgevoerde testen samen te vatten, maakt het gebruik van Tensorflow™ rechtstreeks vanuit de broncode gecompileerd (met ondersteuning voor CPU-instructies) het mogelijk om een aanzienlijke versnelling te bereiken (1,5 keer met echte gegevens en het dubbele met synthetische gegevens) bij het uitvoeren van berekeningen op de CPU. Tijdens het werken met GPU kon met het gebruik van Tensorflow™, rechtstreeks gecompileerd vanuit de broncode, echter geen verbetering van de resultaten worden bereikt in vergelijking met Tensorflow™, geïnstalleerd vanuit het voorgecompileerde pakket.