Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Speed up the initial TensorFlow startup

Each time I run a Python code using TensorFlow (CPU), such as:

import keras

I see this:

2020-10-30 15:27:20.518894: W tensorflow/stream_executor/platform/default/dso_loader.cc:55] Could not load dynamic library 'cudart64_101.dll'; dlerror: cudart64_101.dll not found
2020-10-30 15:27:20.518894: I tensorflow/stream_executor/cuda/cudart_stub.cc:29] Ignore above cudart dlerror if you do not have a GPU set up on your machine.
2020-10-30 15:27:23.713077: W tensorflow/stream_executor/platform/default/dso_loader.cc:55] Could not load dynamic library 'nvcuda.dll'; dlerror: nvcuda.dll not found
2020-10-30 15:27:23.713077: E tensorflow/stream_executor/cuda/cuda_driver.cc:313] failed call to cuInit: UNKNOWN ERROR (303)
2020-10-30 15:27:23.716077: I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:169] retrieving CUDA diagnostic information for host: User1-PC
2020-10-30 15:27:23.716077: I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:176] hostname: User1-PC
2020-10-30 15:27:23.729078: I tensorflow/compiler/xla/service/service.cc:168] XLA service 0x10cad0c0 initialized for platform Host (this does not guarantee that XLA will be used). Devices:
2020-10-30 15:27:23.729078: I tensorflow/compiler/xla/service/service.cc:176]   StreamExecutor device (0): Host, Default Version
Using TensorFlow backend.

If I sum all the waiting time, there is ~ 10 seconds of waiting time.

Is there a way to speed up this process? Especially if I'm using TensorFlow for inference (and not training), I don't want to have to wait 10 seconds on each startup of the engine.


NB: Of course, when my code will be ready, I'll keep the process using TensorFlow constantly running, and I'll use some sort of inter-process communication, to avoid restart the whole program.

My question here is mostly for the prototyping stages, when you often need to restart the program: when prototyping, having to wait 10 or 15 seconds on each script start is highly unconvenient.

like image 780
Basj Avatar asked Oct 30 '20 14:10

Basj


People also ask

How do I disable GPU usage in TensorFlow?

Playing with the CUDA_VISIBLE_DEVICES environment variable is one of if not the way to go whenever you have GPU-tensorflow installed and you don't want to use any GPUs. You to want either export CUDA_VISIBLE_DEVICES= or alternatively use a virtualenv with a non-GPU installation of TensorFlow.


1 Answers

For your inference problem, you'll probably want a longer-lived process that you can request inference results from, maybe over HTTP, gRPC, XML-RPC, named pipes, reading files from a directory...?

Failing that, get a faster machine or disk. On my machine, starting a new Python process and importing Keras takes about 2 seconds:

$ pip install tensorflow
Collecting tensorflow
  Downloading tensorflow-2.3.1-cp38-cp38-macosx_10_14_x86_64.whl (165.2 MB)
[...]
Successfully installed absl-py-0.11.0 astunparse-1.6.3 cachetools-4.1.1 chardet-3.0.4 gast-0.3.3 google-auth-1.23.0 google-auth-oauthlib-0.4.2 google-pasta-0.2.0 grpcio-1.33.2 h5py-2.10.0 idna-2.10 keras-preprocessing-1.1.2 markdown-3.3.3 numpy-1.18.5 oauthlib-3.1.0 opt-einsum-3.3.0 packaging-20.4 protobuf-3.13.0 pyasn1-0.4.8 pyasn1-modules-0.2.8 requests-2.24.0 requests-oauthlib-1.3.0 rsa-4.6 tensorboard-2.3.0 tensorboard-plugin-wit-1.7.0 tensorflow-2.3.1 tensorflow-estimator-2.3.0 termcolor-1.1.0 werkzeug-1.0.1 wrapt-1.12.1
$ time python -c 'import tensorflow.keras as keras'

________________________________________________________
Executed in    2.02 secs   fish           external
   usr time    2.85 secs  118.00 micros    2.85 secs
   sys time    0.62 secs  946.00 micros    0.62 secs
like image 80
AKX Avatar answered Oct 12 '22 19:10

AKX