Distributed TensorFlow: API стратегии распространения 丨 Конференция разработчиков Google, 2018 г.

Google искусственный интеллект TensorFlow Архитектура
Distributed TensorFlow: API стратегии распространения 丨 Конференция разработчиков Google, 2018 г.

Google Developer Days (GDD) – это глобальное мероприятие, на котором демонстрируются новейшие продукты и платформы Google для разработчиков, призванные помочь вам быстро разрабатывать высококачественные приложения, расширять и сохранять активную пользовательскую базу, а также использовать инструменты для получения большего дохода. Конференция разработчиков Google 2018 прошла в Шанхае 20 и 21 сентября. ?Конференция разработчиков Google, 2018 г., самородки

21 сентября 2018 г. Юефэн Чжоу (разработчик программного обеспечения Google Brain) выступил с докладом «Distributed TensorFlow: API стратегии распределения», в этой статье будет дан обзор выступления.

Почему распределенное обучение?

Как показано на графике выше, для обучения точности на одном графическом процессоре потребовалось 87 часов. Но в реальной производственной среде мы тратим столько времени на обучение одной модели. Если мы сократим время с нескольких дней до нескольких часов, за то же время можно будет обучить больше моделей, опробовать больше идей и значительно повысить производительность, поэтому для реальных производственных сред требуется использование распределенного обучения.

Distribution Strategy API

Цель:

  • Простота в использовании - минимальные изменения кода
  • Отличная производительность «из коробки»
  • Универсальность — поддерживает различные распределенные архитектуры и API.

Обучите ResNet50 с помощью Keras (нераспределенный)

train_dataset = tf.data.Dataset(...)
eval_dataset = tf.data.Dataset(...)
model = tf.keras.applications.ReyNet50()
optimizer = tf.train.GradientDescentOptimizer(learning_rate = 0.1)

model.compile(loss = "categorcial_crossentropy",optimizer = optimizer)

model.fit(train_dataset, epochs = 10)
model.evaluate(eval_dataset)

Обучайте ResNet50 на нескольких графических процессорах с помощью Keras (доступно в TensorFlow r1.11)

train_dataset = tf.data.Dataset(...)
eval_dataset = tf.data.Dataset(...)
model = tf.keras.applications.ReyNet50()
optimizer = tf.train.GradientDescentOptimizer(learning_rate = 0.1)

strategy = tf.contrib.distribute.MirroredStrategy()
model.compile(loss = "categorcial_crossentropy",optimizer = optimizer, 
    distribute = strategy)

model.fit(train_dataset, epochs = 10)
model.evaluate(eval_dataset)

Для сравнения, мы можем обнаружить, что обучение на нескольких GPU может быть достигнуто путем изменения двух строк кода. то есть использоватьMirroredStrategyAPI может реализовать обучение с использованием нескольких графических процессоров без изменения входного конвейера, модели и цикла обучения, а также легко поддерживает контрольные точки, метрики и сводки.

MirroredStrategy

Модифицируя всего две строки кода, можно провести обучение с использованием нескольких графических процессоров.MirroredStrategyчто ты сделал?

  • параллелизм данных
  • Зеркальные переменные
  • ALL- reduce
  • Синхронная тренировка
параллелизм данных

Зеркальные переменные

ALL - reduce

Синхронная тренировка

  • Каждое устройство имеет модель (модель двухслойная)
  • Каждое устройство получает часть данных и использует локальную зеркальную переменную для расчета
  • Поменяйте местами градиенты с ВСЕМИ — уменьшите, просто суммируйте градиенты и используйте сумму для обновления локальной зеркальной переменной.
  • Следующий шаг выполняется только при обновлении зеркала, что обеспечивает согласованность
Производительность нескольких графических процессоров

Обучайте ResNet50 с помощью keras на Cloud TPU (ожидается в TF r1.12)

Точно так же вам нужно только изменить две строки кода, отмеченные прямоугольником на рисунке выше, чтобы добиться расширения облачного TPU.

TPUStrategy

Расширение до нескольких машин

Развернуть в кластере

Для развертывания кластера рекомендуется использовать kubernetes.

Collective ALL-Reduce Strategy

Коллективная операция имеет следующие характеристики:

  • Автоматический выбор лучшего алгоритма, объединение градиентов
  • Поддержка плагинов, которые могут добавить поддержку новых архитектур и алгоритмов.
  • Отказоустойчивость (будущее)

Между тем, Collective поддерживает различные алгоритмы All-Reduce.

Ring All - Reduce

Hierarchical All - Reduce

Другие многомашинные архитектуры

Пример реализации выглядит следующим образом:

Также нужно лишь изменить небольшой объем кода, чтобы добиться желаемого эффекта.

пройти черезKubernetesКоличество PS может быть установлено

Новый распределенный метод обучения

Мы можем построить нашу модель на ноутбуке, кластер работаетTensorFlowСервис предоставляет интерфейс, а блокнот реализует распределенное обучение через интерфейс.

Запустите кластер, как показано выше.

Пример кода выглядит следующим образом:

После запуска на ноутбуке мы можем просмотреть журнал работы. Обучение можно прервать, закрыв процесс, или модифицировать модель для обучения на том же кластере.

реализуется

Справочные ресурсы

Выше приведено все содержание этого выступления, надеюсь, оно будет вам полезно. Узнайте больше о технических материалах Google Developers Conference 2018