“Could not find valid device for node.” while eagerly executing.

Hojjat
1 min readJan 29, 2019

--

This cryptic error happens when the input to a function has the wrong type!

Here is an example:

import tensorflow as tf
tf.enable_eager_execution()
tf.sqrt(4)

This will return a long error that basically says:

InternalError: Could not find valid device for node.                                                                                                                                                        
Node: {{node Sqrt}} = Sqrt[T=DT_INT32](dummy_input)
All kernels registered for op Sqrt :
device='XLA_CPU'; T in [DT_FLOAT, DT_DOUBLE, DT_COMPLEX64, DT_HALF]
device='XLA_GPU'; T in [DT_FLOAT, DT_DOUBLE, DT_COMPLEX64, DT_BFLOAT16, DT_HALF]
device='XLA_CPU_JIT'; T in [DT_FLOAT, DT_DOUBLE, DT_COMPLEX64, DT_HALF]
device='XLA_GPU_JIT'; T in [DT_FLOAT, DT_DOUBLE, DT_COMPLEX64, DT_BFLOAT16, DT_HALF]
device='GPU'; T in [DT_DOUBLE]
device='GPU'; T in [DT_HALF]
device='GPU'; T in [DT_FLOAT]
device='CPU'; T in [DT_COMPLEX128]
device='CPU'; T in [DT_COMPLEX64]
device='CPU'; T in [DT_BFLOAT16]
device='CPU'; T in [DT_DOUBLE]
device='CPU'; T in [DT_HALF]
device='CPU'; T in [DT_FLOAT]
[Op:Sqrt] name: Sqrt/

If you pay close attention, it is saying the the input to the function sqrt should be one of double, half, float, complex,... but our input is dt_int32 that’s the problem. This works:

import tensorflow as tf
tf.enable_eager_execution()
tf.sqrt(4.) #notice that now the input is a float number

--

--

Hojjat

Publishing how I fixed some software/AI/PhD/Robotics/Linux related stuff…