tensorflow 2.0(CPU)中简单模型的推理速度?香草tensorflow/numpy仍然快50倍?

tensorflow 2.0(CPU)中简单模型的推理速度?香草tensorflow/numpy仍然快50倍?,numpy,keras,tensorflow2.0,Numpy,Keras,Tensorflow2.0,我发现tensorflow keras(2.0)与numpy相比仍然非常慢。tfdeploy是否仍在使用中?在推理中接近numpy速度的选项有哪些 更新: 下面是一个清理过的示例,显示了不同机器上的三种方法。tf.function包装的tensorflow调用现在是8x vanilla numpy,这可能是合理的,但仍然感觉有一些开销需要处理 import tensorflow as tf import numpy as np x = tf.convert_to_tensor(np.rando

我发现tensorflow keras(2.0)与numpy相比仍然非常慢。tfdeploy是否仍在使用中?在推理中接近numpy速度的选项有哪些

更新:

下面是一个清理过的示例,显示了不同机器上的三种方法。tf.function包装的tensorflow调用现在是8x vanilla numpy,这可能是合理的,但仍然感觉有一些开销需要处理

import tensorflow as tf
import numpy as np

x = tf.convert_to_tensor(np.random.randn(1, 12).astype(np.float32)) # YES! one row only
xnumpy = x.numpy()
model = tf.keras.models.Sequential([
    tf.keras.layers.Dense(16, use_bias=False) for i in range(10)
    ])

@tf.function
def f(x):
    return model(x)


def chain_layers_tf(x, kernels):
    y = x
    for kernel in kernels:
        y = tf.matmul(y, kernel)
    return y

# call once
f(x)
chain_layers_tf_wrapped = tf.function(chain_layers_tf)

kernels_tf = [x.kernel for x in model.layers]
kernels_np = [x.kernel.numpy() for x in model.layers]

chain_layers_tf_wrapped(x, kernels_np)
chain_layers_tf_wrapped(x, kernels_tf)

def chain_layers_np(x, kernels):
    y = x
    for kernel in kernels:
        y = y.dot(kernel)
    return y

model(x)

"""
%timeit t.model(t.x)
%timeit t.f(t.x)
%timeit t.chain_layers_tf(t.x, t.kernels_tf)
%timeit t.chain_layers_tf_wrapped(t.x, t.kernels_tf)
%timeit t.chain_layers_np(t.xnumpy, t.kernels_np)
"""

# In [107]: %timeit t.model(t.x)
#      ...: %timeit t.f(t.x)
#      ...: %timeit t.chain_layers_tf(t.x, t.kernels_tf)
#      ...: %timeit t.chain_layers_tf_wrapped(t.x, t.kernels_tf)
#      ...: %timeit t.chain_layers_np(t.xnumpy, t.kernels_np)
# 1.51 ms ± 1.73 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
# 131 µs ± 856 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)
# 491 µs ± 1.17 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
# 417 µs ± 1.53 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
# 5.21 µs ± 7.56 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
以前的说明:

更新:

Not just numpy as above, but tensorflow is faster than tensorflow.keras

In [22]: x = np.random.randn(100, 12).astype(np.float32)

In [23]: a = np.random.randn(12, 16).astype(np.float32)

In [24]: %timeit tf.matmul(x, a)
39.3 µs ± 98.5 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)


UPDATE: 

more layers not much different

这种比较是没有意义的,试着对一个具有多个层的复杂模型进行比较。另外,numpy不支持GPU推理。即使是有分支的多层也不会有太大的不同。我不打算做一个有1000层的模型。看起来tflite可能是微秒级。不过,它还没有完全正常工作。为什么你希望GPU推断出一个小模型@MasasValdEngRo你需要考虑模拟路径的具体情况(例如),你会多次调用这个模型,但不是一个批次。我认为python设置中有一些东西在每次调用时都很慢。我将使用另一个示例进行更新,并将标题更改为“tensorfflow仍然比tensorflow快1000倍。由于vanilla tf.matmulAre速度很快,您确定TensorFlow在m.prediction等过程中不会编译任何内容吗?如果你马上再计时呢?如果您将数据大小增加100倍会怎么样?此外,如果TF在GPU上计算,而numpy在CPU上计算,那么差异是合乎逻辑的。GPU处理少量数据的速度要慢得多