#tensorflow #tensorflow2.0 #tpu
#тензорный поток #tensorflow2.0 #tpu
Вопрос:
В приведенном здесь коде: https://www.kaggle.com/ryanholbrook/detecting-the-higgs-boson-with-tpus
Перед компиляцией модели модель создается с использованием этого кода:
with strategy.scope():
# Wide Network
wide = keras.experimental.LinearModel()
# Deep Network
inputs = keras.Input(shape=[28])
x = dense_block(UNITS, ACTIVATION, DROPOUT)(inputs)
x = dense_block(UNITS, ACTIVATION, DROPOUT)(x)
x = dense_block(UNITS, ACTIVATION, DROPOUT)(x)
x = dense_block(UNITS, ACTIVATION, DROPOUT)(x)
x = dense_block(UNITS, ACTIVATION, DROPOUT)(x)
outputs = layers.Dense(1)(x)
deep = keras.Model(inputs=inputs, outputs=outputs)
# Wide and Deep Network
wide_and_deep = keras.experimental.WideDeepModel(
linear_model=wide,
dnn_model=deep,
activation='sigmoid',
)
Я не понимаю, что with strategy.scope()
здесь происходит и влияет ли это каким-либо образом на модель. Что именно он делает?
В будущем, как я мог бы выяснить, что это делает? Какие ресурсы мне нужно изучить, чтобы разобраться в этом?
Ответ №1:
Стратегии распределения были введены как часть TF2, чтобы помочь распределить обучение между несколькими графическими процессорами, несколькими машинами или процессорами с минимальными изменениями кода. Я бы порекомендовал это руководство по распределенному обучению для начинающих.
В частности, создание модели в рамках TPUStrategy
позволит разместить модель в реплицированном (одинаковые веса для каждого из ядер) виде на TPU и синхронизировать веса реплик путем добавления соответствующих коллективных сообщений (все это уменьшает градиенты). Для получения дополнительной информации ознакомьтесь с документом API по TPUStrategy, а также с этим введением к TPU в TF2 colab notebook.