提问人:cxz 提问时间:10/31/2023 最后编辑:cxz 更新时间:11/1/2023 访问量:41
Tensorflow 实时时间明显大于 CPU 时间
Tensorflow Real Time Significantly Greater Than CPU Time
问:
所以我有一个模型,它以一种格式保存。我正在尝试使用这个模型进行一些实时推理。这对性能至关重要,因此我通过编写一个简单的谷歌基准测试代码来测试推理延迟。但是读取时间远大于结果的 CPU 时间。这是我的环境:
tensorflow
protobuf
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
下面是基准测试代码的片段:
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: 更多信息:
编辑 2: 我还测试了一次多个时间戳的推理。即传入形状为 {1, 10, 9} 的张量一次,而不是传入 {1, 1, 9} 10 次。前者在基准测试中下降到非常接近 CPU 时间。
答: 暂无答案
评论