Pull to refresh
463.37
Rating
Яндекс
Как мы делаем Яндекс

Познаём Нирвану – универсальную вычислительную платформу Яндекса

Яндекс corporate blogCloud computingMachine learning
Машинное обучение превратилось в модный термин, но при работе с большими объёмами данных оно уже много лет является жизненной необходимостью. Яндекс обрабатывает более 200 миллионов запросов ежедневно! Когда-то в интернете было так мало сайтов, что наилучшие из них помещались в каталог, а теперь за релевантность ссылок на страницы в выдаче отвечают сложные формулы, обучающиеся на новых и новых данных. Задача ложится на так называемые конвейеры, регулярные процессы, обучающие и контролирующие эти формулы.

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



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

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

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

Как появилась Нирвана


Процесс обучения формул ранжирования — постоянная и объемная задача. Яндекс сейчас работает с технологиями CatBoost и Матрикснет, в обоих случаях построение ранжирующих моделей требует значительных вычислительных ресурсов — и понятного интерфейса.

Сервис FML (Friendly Machine Learning) в свое время стал большим шагом в автоматизации и упрощении — он поставил работу с машинным обучением на поток. FML открыл простой доступ к инструментам конфигурации параметров обучения, анализа результатов и управления аппаратными ресурсами для распределённого запуска на кластере.

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

Но вместе с этими достоинствами мы получили плохую масштабируемость разработки. Поток заказов на доработки и улучшения форм FML превысил все наши ожидания — а чтобы сделать всё и быстро, пришлось бы расширять команду безгранично.

FML был создан как внутренний сервис для Поиска, но о нем быстро узнали разработчики из других департаментов, чьи рабочие задачи тоже были связаны с Матрикснетом и машинным обучением. Оказалось, что возможности FML гораздо шире поисковых задач, а спрос значительно превышает наши ресурсы — мы оказались в тупике. Как развивать популярный сервис, если это требует пропорционального расширения команды?

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

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

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

Нирвана не только сделала машинное обучение доступнее, она стала местом встречи: менеджер создает проект, зовет разработчика, затем разработчик собирает процесс и запускает его, а после множества запусков, за которыми наблюдает менеджер, аналитик приходит, чтобы разобраться в результатах. Нирвана позволила переиспользовать операции (или целые графы!), созданные и поддерживаемые другими пользователями, чтобы не приходилось делать двойную работу. Графы бывают очень разными: от нескольких блоков до нескольких тысяч операций и объектов данных. Их можно собирать в графическом интерфейсе (скриншот будет в конце статьи) или с помощью сервисов API.

Как устроена Нирвана


В Нирване есть три больших раздела: Проекты (крупные бизнес-задачи или группы, которыми ребята пилят общие задачи), Операции (библиотека готовых компонентов и возможность создать новый), Данные (библиотека всех загруженных в Нирвану объектов и возможность загрузить новый).

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

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

А потом перейдем к скриншоту интерфейса и примерам из жизни.


Сначала пользователи обычно приходят в графический интерфейс Нирваны (single page application), со временем постоянные процессы многие переносят на сервисы API. В целом Нирване безразлично, каким интерфейсом пользуются, графы запускаются одинаковые. Но чем больше продакшн-процессов переносят в Нирвану, тем заметнее, что через API запускается большинство графов. UI остается для экспериментов и первичной настройки, а также для изменений по необходимости.

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

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



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

Процессор по отношению к Нирване играет роль внешнего сервиса, реализующего заданный API — поэтому можно написать свой процессор, не внося правок ни в Нирвану, ни в уже существующие процессоры. Есть три основных метода: запуск, остановка и получение статуса задачи. Нирвана (а точнее — Workflow Processor), убедившись, что все входящие зависимости операции на графе готовы, отправляет запрос на запуск в указанный в задаче процессор, передаёт конфигурацию и ссылки на входные данные. Мы периодически запрашиваем статус выполнения и в случае готовности переходим далее по зависимостям.

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

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



Ещё одним ключевым компонентом Нирваны является key-value хранилище, в котором хранятся как результаты операций, так и загруженные исполняемые файлы или другие ресурсы. Мы заложили в архитектуру Нирваны возможность работать сразу с несколькими локациями и реализациями хранилища, что позволяет улучшать эффективность и структуру хранения данных, а также проводить необходимые миграции, не прерывая процессы пользователей. За время работы платформы мы успели пожить с файловой системой CEPH и с нашей технологией MapReduce-a и хранения данных YT, в конце концов переехали в MDS, ещё одно внутреннее хранилище.

У любой системы хранения есть ограничения. В первую очередь – это максимальный объём хранимых данных. При постоянном росте количества пользователей Нирваны и процессов мы рискуем заполнить любое, даже самое большое хранилище. Но мы считаем, что большинство данных в системе являются временными, а значит, их можно удалить. Благодаря известной структуре эксперимента тот или иной результат можно получить заново, перезапустив соответствующий граф. А если какой-то объект данных нужен пользователю вечно, он может целенаправленно сохранить его в хранилище Нирваны с бесконечным TTL, чтобы защитить от удаления. У нас есть система квот, позволяющая делить хранилище между разными бизнес-задачами.

Как выглядит и для чего полезна Нирвана


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



Для чего сервисы и разработчики Яндекса используют Нирвану? Вот несколько примеров.

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

2. Команда Погоды использует Нирвану для ML-задач. Из-за сезонной изменчивости предсказываемых значений необходимо постоянно переобучать модель, добавляя в обучающую выборку самые актуальные данные. В Нирване есть граф, который в автоматическом режиме клонирует себя через API и перезапускает новые версии на свежих данных, чтобы пересчитывать и регулярно обновлять модель.

Погода также собирает в Нирване эксперименты по улучшению текущего продакшн-решения, тестирует новые фичи, сравнивает между собой ML-алгоритмы, подбирая нужные настройки. Нирвана гарантирует воспроизводимость экспериментов, предоставляет мощности для проведения объемных вычислений, умеет работать с другими внутренними и внешними продуктами (YT, CatBoost и т.д.), избавляет от необходимости локальной установки фреймворков.

3. Команда компьютерного зрения с помощью Нирваны может провести перебор гиперпараметров нейронной сети, запустив сотню копий графа с разными параметрами — и выбрать наилучшие из них. Благодаря Нирване новый классификатор для любой задачи при необходимости создаётся «по кнопке» без помощи специалистов по компьютерному зрению.

4. Команда Справочника проводит через Толоку и асессоров тысячи оценок в день, используя Нирвану для автоматизации этого конвейера. Например, так фильтруются фотографии к организациям, идет сбор новых через мобильную Толоку. Нирвана помогает кластеризовать организации (находить дубли и склеивать их). А главное — строить автоматические процессы для совсем новых оценок можно буквально за часы.

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

Обсудим?


В наших офисах регулярно проводятся специальные встречи «Яндекс изнутри». На одной из них мы уже немного рассказывали о Нирване (есть видео про устройство Нирваны, применение Нирваны в машинном обучении), и она вызвала большой интерес. Пока она доступна только сотрудникам Яндекса, но нам хочется узнать ваше мнение об описанном нами устройстве Нирваны, о тех ваших задачах, для которых она была бы полезна. Мы будем благодарны, если вы расскажете о системах, похожих на нашу, в комментариях. Возможно, в ваших компаниях уже применяются подобные вычислительные платформы, и мы будем благодарны за советы и отзывы, истории из практики, рассказы о вашем опыте.
Tags:машинное обучениенирванаяндексоблачные вычисления
Hubs: Яндекс corporate blog Cloud computing Machine learning
Total votes 81: ↑81 and ↓0 +81
Views37.1K

Comments 29

Only those users with full accounts are able to leave comments. Log in, please.

Top of the last 24 hours

Information

Founded
Location
Россия
Website
www.yandex.ru
Employees
over 10,000 employees
Registered

Habr blog