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 может быть достигнуто путем изменения двух строк кода. то есть использоватьMirroredStrategy
API может реализовать обучение с использованием нескольких графических процессоров без изменения входного конвейера, модели и цикла обучения, а также легко поддерживает контрольные точки, метрики и сводки.
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