Tensorflow 实时时间明显大于 CPU 时间

Tensorflow Real Time Significantly Greater Than CPU Time

提问人:cxz 提问时间:10/31/2023 最后编辑:cxz 更新时间:11/1/2023 访问量:41

问:

所以我有一个模型,它以一种格式保存。我正在尝试使用这个模型进行一些实时推理。这对性能至关重要,因此我通过编写一个简单的谷歌基准测试代码来测试推理延迟。但是读取时间远大于结果的 CPU 时间。enter image description here这是我的环境:tensorflowprotobuf

os:Ubuntu 18.04
tensorflow version:v 2.4.0, compiled from source, but same with distributed libtensorflow.so.
compiler: gcc 7.5.0
model: see screenshot below

enter image description here

下面是基准测试代码的片段:

constexpr static std::tuple<const char*, const char*, const char*>
MODELS[ 20 ]
{
    {"/home/echeng/tmp/tensorflow_trial/models/lstm_model_2023-10-05/",
     "serving_default_lstm_2_input",
     "StatefulPartitionedCall"
    },
    {"/home/echeng/tmp/tensorflow_models/v2.6.2/lstm_model_2023-10-31/",
     "serving_default_lstm_input:0",
     "StatefulPartitionedCall"
    }
};



const static cppflow::tensor t_tensor = cppflow::fill( {1, 1, 9}, 1.0f );
// cppflow::model model_1("/home/echeng/tmp/tensorflow_trial/models/lstm_model_2023-10-05/");
cppflow::model model_1(std::get<0>(MODELS[1]));

static void predict_timestamp_n( benchmark::State& in_state)
{
    std::size_t n_times = in_state.range(0);
    for ( auto _: in_state )
    {
        for (std::size_t i = 0; i<n_times ; ++i)
        {
            auto output = model_1(
                // { { "serving_default_lstm_2_input", t_tensor } },
                { { std::get<1>(MODELS[1]), t_tensor } },
                { std::get<2>(MODELS[1]) }
            )[0];
        }
    }
}

BENCHMARK( predict_timestamp_n )
    ->Arg(1)
    ->Arg(10)
    ->Arg(100)
    ->Arg(1000)
;

BENCHMARK_MAIN();

这是缓存问题吗?或者原则上我可以接近 CPU 时间吗?因为 AFAIK 神经网络推理大多是 CPU 计算量大的任务,所以 CPU 时间应该接近实时吗?

编辑1: 更多信息:

  • 我创建了一个总共仅包含 44 个参数的虚拟模型,并重新运行了基准测试。看起来每个数字都保持相似。
  • 以下是结果的一瞥:gperfenter image description here

编辑 2: 我还测试了一次多个时间戳的推理。即传入形状为 {1, 10, 9} 的张量一次,而不是传入 {1, 1, 9} 10 次。前者在基准测试中下降到非常接近 CPU 时间。

C++ 性能 TensorFlow 基准测试

评论


答: 暂无答案