оптимизация в gpflow 2: зачем устанавливать autograph = False? - PullRequest
1 голос
/ 17 февраля 2020

в текущих руководствах для ноутбуков (gpflow 2.0) все теги @ tf.function включают параметр autograph = False, например (https://gpflow.readthedocs.io/en/2.0.0-rc1/notebooks/advanced/gps_for_big_data.html):

@tf.function(autograph=False)
def optimization_step(optimizer, model: gpflow.models.SVGP, batch):
    with tf.GradientTape(watch_accessed_variables=False) as tape:
        tape.watch(model.trainable_variables)
        objective = - model.elbo(*batch)
        grads = tape.gradient(objective, model.trainable_variables)
    optimizer.apply_gradients(zip(grads, model.trainable_variables))
    return objective

Кто-нибудь знаете, почему это так, или какова причина этого? Насколько я понял, autograph=True просто позволяет преобразовать поток управления python в структуру графа. Имеет ли установка / сохранение значения true, даже если функциональность не требуется, какие-либо недостатки?

Я полагаю, что это всего лишь небольшие накладные расходы во время компиляции графика, но они должны быть незначительными. Это неправильно?

Спасибо

1 Ответ

1 голос
/ 18 февраля 2020

Причина, по которой мы устанавливаем autograph в False в большинстве обернутых целей tf.function, заключается в том, что GPflow использует много диспетчерский диспетчер, который внутренне использует генераторы. Однако TensorFlow не может работать с объектами генератора в режиме автографа (см. Возможности и ограничения AutoGraph ), что приводит к следующему предупреждению:

WARNING:tensorflow:Entity <bound method Dispatcher.dispatch_iter of <dispatched sample_conditional>> appears to be a generator function. It will not be converted by AutoGraph.
WARNING: Entity <bound method Dispatcher.dispatch_iter of <dispatched sample_conditional>> appears to be a generator function. It will not be converted by AutoGraph.
WARNING:tensorflow:Entity <bound method Dispatcher.dispatch_iter of <dispatched conditional>> appears to be a generator function. It will not be converted by AutoGraph.
WARNING: Entity <bound method Dispatcher.dispatch_iter of <dispatched conditional>> appears to be a generator function. It will not be converted by AutoGraph.

Мы знаем об этой проблеме какое-то время, но не удосужились его исправить - спасибо, что обратили на это наше внимание. Я только что создал PR , который устраняет эту проблему и больше не требует от вас установки автографа на False. Я ожидаю, что этот PR будет объединен довольно скоро.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...