Tensorflow渴望比图形慢得多

时间:2018-12-12 20:49:57

标签: tensorflow

几个月前,我将基于LSTM的低级图重写为热切的形式,并且性能上的差异令人惊讶。

我使用tqdm来确定运行时间,并且它急切地要慢20:1。我两者都使用tf.data.Dataset,当然,区别在于在图形中使用迭代器,在渴望中使用循环。

所有应该放在类的初始化中的东西(我为LSTM创建了一个自定义的tf.keras.Model类。

所有矩阵乘法都是通过张量完成的,而不是numpy数组,因此我认为这不是CPU-> GPU问题。

还有其他想法供我尝试吗?我从下面的eager程序中获得了来自cProfile的最昂贵呼叫的前50行。这是在gtx 1070上运行的。

Ordered by: cumulative time


List reduced from 4335 to 50 due to restriction <50>

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
   1435/1    0.100    0.000  145.364  145.364 {built-in method builtins.exec}
        1    0.001    0.001  145.364  145.364 <string>:1(<module>)
        1    0.000    0.000  145.361  145.361 rnn.py:153(main)
        1    0.075    0.075  140.358  140.358 rnn.py:108(train)
     2800    0.077    0.000  136.772    0.049 rnn.py:94(update)
     2920    0.032    0.000   65.949    0.023 base_layer.py:677(__call__)
     2920    1.429    0.000   65.879    0.023 rnn_models.py:184(call)
  2055097   58.464    0.000   58.568    0.000 {built-in method _pywrap_tensorflow_internal.TFE_Py_FastPathExecute}
     2800    0.035    0.000   34.264    0.012 backprop.py:823(gradient)
     2800    0.003    0.000   34.091    0.012 imperative_grad.py:31(imperative_grad)
     2800    5.599    0.002   34.088    0.012 {built-in method _pywrap_tensorflow_internal.TFE_Py_TapeGradient}
   753200    1.628    0.000   26.387    0.000 backprop.py:97(_gradient_function)
    17520    0.107    0.000   20.513    0.001 rnn_models.py:5(predict)
   664560    0.971    0.000   19.277    0.000 gen_math_ops.py:4527(mat_mul)
     2800    0.600    0.000   18.325    0.007 rnn.py:80(logger)
    66125    0.149    0.000   15.834    0.000 deprecation.py:454(new_func)
   227760    2.082    0.000   15.713    0.000 math_ops.py:1875(matmul)
    20320    0.241    0.000   13.568    0.001 nn_ops.py:1635(_softmax)
    17520    0.071    0.000   13.486    0.001 nn_ops.py:1719(softmax)
   218400    0.814    0.000   13.307    0.000 math_grad.py:1087(_MatMulGrad)
   111974    0.160    0.000   13.132    0.000 summary_ops_v2.py:410(scalar)
   111974    0.603    0.000   12.972    0.000 summary_ops_v2.py:357(summary_writer_function)
     2800    0.376    0.000   12.848    0.005 optimizer.py:526(apply_gradients)
    99400    1.276    0.000   12.661    0.000 array_ops.py:395(_slice_helper)
  1034571    2.396    0.000   11.690    0.000 ops.py:1055(internal_convert_to_tensor)
    35040    0.181    0.000   10.079    0.000 nn_ops.py:1657(_swap_axis)
   111974    0.164    0.000    9.743    0.000 smart_cond.py:27(smart_cond)
    36400    0.113    0.000    9.633    0.000 optimizer.py:159(update_op)
    36400    0.347    0.000    9.489    0.000 adam.py:163(_resource_apply_dense)
   825485    0.430    0.000    8.853    0.000 ops.py:993(convert_to_tensor)
   227066    0.958    0.000    8.475    0.000 math_ops.py:859(binary_op_wrapper)
   230409    0.276    0.000    7.261    0.000 ops.py:834(_copy_nograd)
    36400    0.068    0.000    7.056    0.000 gen_training_ops.py:1195(resource_apply_adam)
     2800    0.037    0.000    7.018    0.003 losses_impl.py:740(softmax_cross_entropy)
   230409    6.930    0.000    6.930    0.000 {method '_copy_to_device' of 'tensorflow.python.framework.ops.EagerTensor' objects}
    22374    0.188    0.000    6.925    0.000 summary_ops_v2.py:373(record)
   858687    0.984    0.000    6.811    0.000 constant_op.py:116(constant)
       18    0.000    0.000    6.320    0.351 __init__.py:16(<module>)
    87600    0.785    0.000    6.276    0.000 math_ops.py:1177(range)
    22374    0.075    0.000    5.786    0.000 summary_ops_v2.py:430(function)
       10    0.000    0.000    5.671    0.567 __init__.py:21(<module>)
    99400    0.249    0.000    5.612    0.000 array_ops.py:582(strided_slice)
    99400    0.169    0.000    5.327    0.000 gen_array_ops.py:8176(strided_slice)
   864527    3.574    0.000    4.944    0.000 constant_op.py:71(convert_to_eager_tensor)
   184665    0.478    0.000    4.836    0.000 ops.py:724(numpy)
    40640    0.079    0.000    4.664    0.000 array_ops.py:1030(concat)
   663506    0.315    0.000    4.587    0.000 constant_op.py:225(_constant_tensor_conversion_function)
    40640    0.205    0.000    4.567    0.000 gen_array_ops.py:1010(concat_v2)
    45744    0.217    0.000    4.547    0.000 ops.py:849(_copy)
   298200    0.194    0.000    4.396    0.000 array_ops.py:820(stack)

0 个答案:

没有答案