Новая структура упрощает распределенное и масштабируемое обучение для агентов обучения с подкреплением.

Недавно я начал выпускать образовательный информационный бюллетень, посвященный ИИ, на который уже подписано более 70 000 человек. TheSequence - это информационный бюллетень, ориентированный на ML (то есть без рекламы, без новостей и т. Д.), На чтение которого уходит 5 минут. Наша цель - держать вас в курсе проектов, исследовательских работ и концепций машинного обучения. Пожалуйста, попробуйте, подписавшись ниже:



Вычислительные затраты - одна из основных проблем при внедрении моделей машинного обучения. Некоторые из недавних прорывных моделей в таких областях, как глубокое обучение с подкреплением (DRL), имеют вычислительные требования, которые запрещены для большинства организаций, из-за которых DRL остается ограниченным экспериментами в крупных исследовательских лабораториях AI. Чтобы DRL получил широкое распространение, он должен сопровождаться эффективными методами распределенных вычислений, которые эффективно удовлетворяют сложные требования к вычислениям. Недавно появился Uber open source Fiber, масштабируемая среда распределенных вычислений для DRL и методов на основе популяции.

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

Распределенные вычисления для обучения с подкреплением

Интуитивно мы склонны думать, что структура для распределенного обучения моделей контролируемого обучения должна работать для методов DRL. Однако в действительности все обстоит иначе. Учитывая, что методы DRL часто обучаются с использованием большого количества разнообразных симуляций, нам нужна распределенная вычислительная среда, которая адаптируется к этой уникальной среде. Во-первых, большинство имитационных моделей работают на процессорах и не оптимизированы для сред графического процессора. С этой точки зрения распределенный метод обучения должен иметь возможность одновременно использовать большое количество ресурсов в зависимости от конкретных требований. Кроме того, методы DRL обычно требуют разных ресурсов на протяжении всего жизненного цикла обучения. Очень часто метод DRL постепенно масштабирует обучение в зависимости от характеристик окружающей среды. Эти факторы делают масштабирование обучения DRL очень уникальной задачей, не подходящей для распределенных структур обучения, разработанных для контролируемых моделей.

В дополнение к уникальным характеристикам DRL, распределенное обучение / вычисление обладает уникальными особенностями, которые следует учитывать:

  • Между тем, как заставить код работать локально на ноутбуках или настольных компьютерах и запускать код в производственном кластере, существует огромный разрыв. Вы можете заставить MPI работать локально, но запускать его на компьютере - это совершенно другой процесс. кластер.
  • Динамическое масштабирование недоступно. Если вы запускаете задание, требующее большого количества ресурсов, то, скорее всего, вам придется подождать, пока все будет выделено, прежде чем вы сможете запустить задание. Ожидание масштабирования снижает его эффективность.
  • Отсутствует обработка ошибок. Во время выполнения некоторые задания могут завершаться ошибкой. И вы можете попасть в очень неприятную ситуацию, когда вам придется восстановить часть результата или отбросить весь прогон.
  • Высокая стоимость обучения. Каждая система имеет разные API и соглашения по программированию. Чтобы запускать задания в новой системе, пользователь должен изучить набор совершенно новых соглашений, прежде чем задания можно будет запускать.

Это некоторые из проблем, которые Uber решил решить с помощью своей новой платформы с открытым исходным кодом.

Представляем волокна

Fiber - это библиотека распределенных вычислений на базе Python для современных компьютерных кластеров. Платформа предоставляет пользователям возможность писать приложения для большого компьютерного кластера со стандартным и знакомым библиотечным интерфейсом. С точки зрения дизайна Fiber включает в себя некоторые ключевые возможности, которые облегчают распределенное обучение моделей DRL:

  • Простота в использовании. Fiber позволяет писать программы, которые работают в компьютерном кластере, без необходимости углубляться в детали компьютерного кластера.
  • Легко освоить. Fiber предоставляет тот же API, что и стандартная многопроцессорная библиотека Python, с которой люди знакомы.
  • Высокая производительность. Коммуникационная магистраль Fiber построена на основе Nanomsg - высокопроизводительной библиотеки асинхронного обмена сообщениями, обеспечивающей быструю и надежную связь.
  • Нет необходимости в развертывании. Вы запускаете приложение Fiber так же, как и обычное приложение в компьютерном кластере, а Fiber сделает все остальное за вас.
  • Надежные вычисления. Fiber имеет встроенную обработку ошибок при запуске пула рабочих.

Для достижения вышеупомянутых целей Fiber предоставляет архитектуру, которая разделена на три разных уровня: API, серверная часть и кластер. Уровень API предоставляет базовые строительные блоки для Fiber, такие как процессы, очереди, пулы и менеджеры. Они имеют ту же семантику, что и в многопроцессорной обработке, но расширены для работы в распределенных средах. Бэкэнд-уровень обрабатывает такие задачи, как создание или завершение заданий в различных менеджерах кластера. Наконец, уровень кластера состоит из различных менеджеров кластеров. Хотя они не являются частью самой Fiber, они помогают Fiber управлять ресурсами и отслеживать различные задания, тем самым сокращая количество элементов, которые Fiber необходимо отслеживать.

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

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

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

Наконец, менеджеры Fiber позволяют Fiber поддерживать такие возможности, как общее хранилище, что имеет решающее значение для распределенных систем. Обычно эта функция выполняется во внешнем хранилище, таком как Cassandra, Redis и т. Д. В компьютерном кластере. Вместо этого Fiber предоставляет приложениям встроенное хранилище в памяти. Интерфейс такой же, как у типа Менеджера многопроцессорной обработки.

Чтобы увидеть Fiber в действии, давайте рассмотрим пример, который работает с прототипной моделью DRL. Следующий упрощенный код иллюстрирует шаги, чтобы заставить Fiber работать. По сути, разработчикам требуется запустить менеджер (RemoveEnvManager), создать серию сред и распределить по ним модель для сбора окончательных результатов. Этот код, очевидно, зависит от базовой настройки инфраструктуры вашей оптоволоконной среды.

# fiber.BaseManager is a manager that runs remotely
class RemoteEnvManager(fiber.managers.AsyncManager):
    pass
class Env(gym.env):
    # gym env
    pass
RemoteEnvManager.register('Env', Env)
def build_model():
    # create a new policy model
    return model
def update_model(model, observations):
    # update model with observed data
    return new_model
def train():
    model = build_model()
    manager = RemoteEnvManager()
    num_envs = 10
    envs = [manager.Env() for i in range(num_envs)]
    handles = [envs[i].reset() for i in num_envs]
    obs = [handle.get() for handle in handles]
    for i in range(1000):
        actions = model(obs)
        handles = [env.step() for action in actions]
        obs = [handle.get() for handle in handles]
        model = update_model(model, obs)

Uber сравнил Fiber с современными методами распределенных вычислений, такими как Spark или IPyParallel, по различным критериям. Результаты показали, что Fiber смог превзойти альтернативные методы в большинстве тестов. Например, на следующем рисунке показано, что Fiber смог выполнять задачи в 24 раза быстрее, чем IPyParallel, и в 38 раз быстрее, чем Spark.

Fiber обеспечивает очень надежную архитектуру для распределенного обучения моделей DRL. Fiber выполняет множество задач, включая эффективное использование большого количества разнородного вычислительного оборудования, динамическое масштабирование алгоритмов для повышения эффективности использования ресурсов и снижение инженерной нагрузки, необходимой для того, чтобы сложные алгоритмы работали на компьютерных кластерах. Первоначальная версия Fiber была с открытым исходным кодом в GitHub, и исследовательская статья также доступна.