张量流分析时间线与墙时间不一致

2024-05-14 23:54:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前正在gtx1070上开发和分析一个在tensorflow中的神经网络。由于一些昂贵的FFT操作,我的第一个实现变得相当低效。 上图中的时间线显示,一个训练步骤需要大约115ms,而第二个(在数学上等价)实现似乎花费的时间要少得多,一个步骤需要不到10ms

timelines (对不起,我还不能发布照片)

令人惊讶的是,在python中测量时,这两种方法花费的时间几乎相同:

build model, get train_op...
sess = tf.Session()

import timeit
t = timeit.default_timer()
for i in range(100):
    sess.run(train_op)
dt = timeit.default_timer() - t
print(dt)

在这两种情况下,100次运行需要大约17s>;100*115ms>;100*10ms,这比我预期的python开销要多。 网络使用队列进行馈送,但结果是相同的,直接将numpy数组送入图中,因此我得出结论empyt队列不会成为瓶颈。在

原则上,时间线的记录与我测量的两次运行的差异相同:

^{pr2}$

第一次运行的时间总是比相应的后续运行时间长得多,tensorflow是在进行一些优化还是首次分配内存?在

timelines_first_runs

有人能解释这些不一致的结果吗? 为什么我的第二个实现所用的时间与python中测量的时间相同,而profiling时间轴显示它应该运行得更快?在


Tags: gtdefault队列tensorflow时间dt步骤train
1条回答
网友
1楼 · 发布于 2024-05-14 23:54:54

由于全局内存池增长、PTX编译和优化,首次运行可能需要更长的时间。在

您可以关闭一些优化,如下所示

sess = tf.Session(config=tf.ConfigProto(graph_options=tf.GraphOptions(optimizer_options=tf.OptimizerOptions(opt_level=tf.OptimizerOptions.L0)))

但是,PTX编译仍然可以为第一次运行增加1-2秒。因此,出于分析的目的,人们通常会在分析之前包含一个“预热”运行来运行相同的计算。在

另外,如果您的train_op类似于assign或{},那么运行train_op会将结果返回到Python中。Python<;->;TensorFlow内存传输不会反映在时间线上(grpc传输也会丢失,跟踪issue)。为了进行分析,可以运行op并省略Python传输,如下所示

^{pr2}$

相关问题 更多 >

    热门问题