Авторы: Yuan Tang (Ant Group), Wei Yan (Ant Group) и Rong Ou (NVIDIA).

Kubeflow недавно анонсировал свой первый крупный выпуск 1.0, который позволяет инженерам по машинному обучению и специалистам по обработке данных легко использовать облачные ресурсы (общедоступные или локальные) для рабочих нагрузок машинного обучения. В этом посте мы хотели бы представить Оператор MPI (docs), один из основных компонентов Kubeflow, который в настоящее время находится в альфа-версии, что позволяет легко запускать синхронизированное распределенное обучение в стиле allreduce в Kubernetes.

В настоящее время существуют две основные стратегии распределенного обучения: одна основана на серверах параметров, а другая - на примитивах коллективного взаимодействия, таких как allreduce.

Стратегия распространения на основе сервера параметров основана на централизованных серверах параметров для координации между рабочими, отвечающих за сбор градиентов от рабочих и отправку обновленных параметров рабочим. На диаграмме ниже показано взаимодействие между серверами параметров и рабочими узлами в рамках этой распределенной стратегии обучения.

Хотя распределенное обучение, основанное на серверах параметров, может поддерживать обучение очень больших моделей и наборов данных путем добавления дополнительных рабочих процессов и серверов параметров, существуют дополнительные проблемы, связанные с оптимизацией производительности:

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

Напротив, распределенное обучение, основанное на примитивах коллективного общения, таких как allreduce, могло бы быть более эффективным и простым в использовании в определенных случаях использования. Согласно стратегии распределенного обучения, основанной на allreduce, каждый работник хранит полный набор параметров модели. Другими словами, сервер параметров не требуется. Распределенное обучение на основе Allreduce может решить многие из проблем, упомянутых выше:

  • Каждый воркер хранит полный набор параметров модели, сервер параметров не требуется, поэтому при необходимости легко добавить больше воркеров.
  • Сбои среди рабочих могут быть легко устранены путем перезапуска отказавших рабочих процессов и последующей загрузки текущей модели из любого из существующих рабочих процессов. Модель не требует репликации для обеспечения отказоустойчивости.
  • Модель можно обновлять более эффективно, полностью используя структуру сети и алгоритмы коллективного взаимодействия. Например, в алгоритме кольцевого сокращения каждому из N рабочих нужно всего лишь 2 * (N - 1) взаимодействовать с двумя своими равноправными рабочими, чтобы полностью обновить все параметры модели.
  • Увеличивать и уменьшать количество рабочих так же просто, как реконструировать лежащий в основе allreduce коммуникатор и переназначить ранги среди рабочих.

Доступно множество существующих технологий, которые обеспечивают реализации этих примитивов коллективной связи, такие как NCCL, Gloo и множество различных реализаций MPI.

Оператор MPI предоставляет общее Custom Resource Definition (CRD) для определения задания обучения для одного CPU / GPU, нескольких CPU / GPU и нескольких узлов. Он также реализует настраиваемый контроллер для управления CRD, создания зависимых ресурсов и согласования желаемых состояний.

В отличие от других операторов в Kubeflow, таких как TF Operator и PyTorch Operator, которые поддерживают только одну среду машинного обучения, оператор MPI отделен от базовой структуры, поэтому он может хорошо работать со многими платформами, такими как Horovod, TensorFlow, PyTorch, Apache MXNet и различные реализации коллективного взаимодействия, такие как OpenMPI.

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

Пример спецификации API

Мы тесно сотрудничаем с сообществом и отраслевыми разработчиками, чтобы улучшить спецификацию API для оператора MPI, чтобы он подходил для многих различных сценариев использования. Ниже приведен пример:

Обратите внимание, что оператор MPI предоставляет гибкий, но удобный API, который совместим с другими операторами Kubeflow.

Пользователи могут легко настроить свои средства запуска и рабочие модули, изменив соответствующие разделы в шаблоне. Например, настройка использования различных типов вычислительных ресурсов, таких как процессоры, графические процессоры, память и т. Д.

Кроме того, ниже приведен пример спецификации, которая выполняет распределенное задание обучения TensorFlow с использованием данных ImageNet в формате TFRecords, хранящихся в томе Kubernetes:

Архитектура

Оператор MPI содержит настраиваемый контроллер, который отслеживает изменения в ресурсах MPIJob. Когда создается новое задание MPIJob, контроллер выполняет следующие логические шаги:

  1. Создайте ConfigMap, который содержит:
  • Вспомогательный сценарий оболочки, который может использоваться mpirun вместо ssh. Он вызывает kubectl exec для удаленного выполнения.
  • Файл хоста, в котором перечислены модули в рабочем StatefulSet (в форме $ {job-id} -worker-0, $ {job-id} -worker-1,…) и доступные слоты (CPU / GPU). ) в каждой капсуле.

2. Создайте ресурсы RBAC (Role, ServiceAccount, RoleBinding), чтобы разрешить удаленное выполнение (pods / exec).

3. Подождите, пока будут готовы рабочие модули.

4. Создайте задание запуска. Он работает под ServiceAccount, созданным на шаге 2, и устанавливает необходимые переменные среды для удаленного выполнения команд mpirun. Бинарный файл kubectl доставляется на том emptyDir через контейнер инициализации.

5. После завершения задания модуля запуска установите для реплик значение 0 в StatefulSet рабочего.

Для получения более подробной информации, пожалуйста, ознакомьтесь с проектной документацией для оператора MPI.

Принятие в отрасли

На момент написания было 13 признанных приверженцев отрасли и многие другие, которые тесно сотрудничали с сообществом, чтобы достичь того уровня, на котором мы находимся сегодня. Мы хотели бы продемонстрировать некоторые варианты использования оператора MPI в нескольких компаниях. Если ваша компания хотела бы быть включенной в список последователей, отправьте нам запрос на включение на GitHub!

Группа Муравьев

В Ant Group мы управляем кластерами Kubernetes с десятками тысяч узлов и развернули оператор MPI вместе с другими операторами Kubeflow. Оператор MPI использует структуру сети и алгоритмы коллективной связи, чтобы пользователям не приходилось беспокоиться о правильном соотношении между количеством рабочих и серверов параметров для достижения наилучшей производительности. Пользователи могут сосредоточиться на построении своих архитектур моделей, не тратя время на настройку нижестоящей инфраструктуры для распределенного обучения.

Созданные модели широко используются в производстве и проходят боевые испытания во многих различных сценариях реальной жизни. Одним из примечательных вариантов использования является Saofu - мобильное приложение, в котором пользователи могут сканировать любой (китайский иероглиф, обозначающий удачу) через дополненную реальность, чтобы участвовать в розыгрыше счастливого розыгрыша, в котором каждый пользователь получит виртуальный красный конверт с частью значительная сумма денег.

Bloomberg

Bloomberg, мировой лидер в области деловой и финансовой информации и новостей, обладает огромным объемом данных - от исторических новостей до рыночных данных в реальном времени и всего остального. Платформа Bloomberg Data Science Platform была создана, чтобы позволить внутренним инженерам компании по машинному обучению и специалистам по обработке данных более легко использовать данные и алгоритмические модели в своей повседневной работе, в том числе при обучении рабочих мест и моделей автоматического машинного обучения, используемых в самых современных решениях. они строят.

Платформа Data Science в Bloomberg предлагает CRD TensorFlowJob, аналогичную собственной TFJob Kubeflow, что позволяет специалистам по обработке данных компании легко обучать модели нейронных сетей. Недавно команда Data Science Platform включила распределенное обучение на основе Horovod в своем TensorFlowJob через оператор MPI в качестве детали реализации. Использование MPIJob в серверной части позволило команде Bloomberg Data Science Platform быстро предложить своим инженерам по машинному обучению надежный способ обучения «модели BERT в течение нескольких часов с использованием большого корпуса текстовых данных компании », - говорит Chengjian Zheng, специалист по программному обеспечению. инженер из Bloomberg.

Caicloud

Caicloud Clever - это облачная платформа искусственного интеллекта на базе контейнерной облачной платформы Caicloud с мощным управлением аппаратными ресурсами и эффективными возможностями разработки моделей. Продукты Caicloud были развернуты во многих 500 компаниях China Fortune.

«Caicloud Clever поддерживает несколько структур обучения модели ИИ, включая TensorFlow, Apache MXNet, Caffe, PyTorch с помощью tf-оператора Kubeflow, оператора pytorch и других», - говорит Се Гао, инженер по инфраструктуре ИИ из команды Caicloud Clever. «В то время как поддержка распределенного обучения RingAllReduce требуется для повышения уровня зрелости клиентов».

Оператор Kubeflow MPI - это оператор Kubernetes для распределенного обучения в стиле allreduce. Команда Caicloud Clever использует API v1alpha2 оператора MPI. Собственный API Kubernetes упрощает работу с существующими системами на платформе.

Игуасио

Iguazio предоставляет облачную платформу для анализа данных с упором на автоматизацию, производительность, масштабируемость и использование инструментов с открытым исходным кодом.

По словам Ярона Хавива, основателя и технического директора Iguazio: «Мы оценили различные механизмы, которые позволят нам масштабировать фреймворки глубокого обучения с минимальными усилиями разработчика, и обнаружили, что использование комбинации Horovod с оператором MPI поверх Kubernetes - лучший инструмент для задание, поскольку оно обеспечивает горизонтальную масштабируемость, поддерживает несколько фреймворков, таких как TensorFlow и PyTorch, и не требует слишком большого количества дополнительного кода или сложного использования серверов параметров ».

Iguazio интегрировала MPI Operator в свое предложение управляемых услуг и свой быстрый уровень данных для максимальной масштабируемости и работает над упрощением использования с помощью проектов с открытым исходным кодом, таких как MLRun (для автоматизации и отслеживания машинного обучения). Ознакомьтесь с этим сообщением в блоге с примером приложения, которое демонстрирует использование Iguazio оператора MPI.

Полиаксон

Polyaxon - это платформа для воспроизводимого и масштабируемого машинного обучения в Kubernetes, она позволяет пользователям быстрее выполнять итерации своих исследований и создания моделей. Polyaxon предоставляет ученым данных и инженерам по машинному обучению простую абстракцию для оптимизации рабочего процесса экспериментов и очень связную абстракцию для обучения и отслеживания моделей с использованием популярных фреймворков, таких как Scikit-learn, TensorFlow, PyTorch, Apache MXNet, Caffe и т. Д.

«Несколько пользователей и заказчиков Polyaxon требовали простого способа проведения распределенного обучения в стиле allreduce. Оператор MPI был идеальным решением для обеспечения такой абстракции. Polyaxon развернут в нескольких компаниях и исследовательских учреждениях, а общедоступный докер-хаб имеет более 9 миллионов загрузок », - говорит Мурад Мурафик, соучредитель Polyxagon.

Сообщество и призыв к участию

Мы благодарны более 28 индивидуальным участникам из более чем 11 организаций, а именно Alibaba Cloud, Amazon Web Services, Ant Group, Bloomberg, Caicloud, Google Cloud, Huawei, Iguazio, NVIDIA, Polyaxon и Tencent, которые внесли непосредственный вклад в MPI. Кодовая база оператора и многие другие, которые сообщали о проблемах или помогали их решать, задавали вопросы и отвечали на них, а также участвовали в вдохновляющих обсуждениях. Мы составили дорожную карту, ​​которая дает общий обзор того, где оператор MPI будет развиваться в будущих выпусках, и мы приветствуем любой вклад сообщества!

Мы не смогли бы достичь поставленных целей без невероятно активного сообщества. Посетите нашу страницу сообщества, чтобы узнать больше о том, как присоединиться к сообществу Kubeflow!

Первоначально опубликовано на https://terrytangyuan.github.io 17 марта 2020 г.