Я пытаюсь создать приложение, которое оценивает время, затрачиваемое на выполнение каждого слоя модели keras. Хотя я получаю некоторые показания времени, они не точны, поскольку они отличаются в 500 раз друг от друга. Как я могу получить точное время, требуемое каждым слоем на этапе вывода / прогнозирования?
Я реализовал функцию разделения предыдущей модели на разные модели, чтобы иметь возможность выполнять модель на разных устройствах. Таким образом, я хочу профилировать приложение на уровне слоя.
Я пробовал два способа получения потребленного времени:
Увеличение детализации функции вызова для предсказания и класса обратного вызова, который выможно увидеть ниже.
273/273 [====================================] - 0s 13us / step (Verbosity = 1)
Время шага: 7,518984 мс. (Обратный вызов)
Я использую Python 3.7 и Keras 2.3 поверх TensorFlow 2.0. И я на самом деле не заинтересован в производительности, но в том, чтобы быть в состоянии профилировать модели по слоям.
pred = model.predict(next_step, batch_size=256, verbose=1, callbacks=[MyCustomCallback()])
class MyCustomCallback(tf.keras.callbacks.Callback):
def on_predict_begin(self, batch, logs=None):
set_batch_time(time.time_ns())
def on_predict_end(self, batch, logs=None):
curr_time = time.time_ns()
diff_time = curr_time - get_batch_time()
print('Predict {} duration: {}'.format(self.model.layers[1].name, diff_time))
Я чувствую, что есть простой и причудливый способ сделать это, но я не в состоянии найти его .. .
Спасибо!