PyML — это платформа, позволяющая быстро разрабатывать модели машинного обучения, совместимые с инфраструктурой Uber.

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



Uber была одной из самых активных компаний, пытающихся ускорить внедрение реальных решений для машинного обучения. Только в этом году Uber представил такие технологии, как Michelangelo, Pyro.ai и Horovod, которые фокусируются на ключевых строительных блоках решений машинного обучения в реальном мире. Одной из малоизвестных областей стека Uber ML является PyML, библиотека, позволяющая быстро разрабатывать приложения Python таким образом, чтобы они были совместимы с их рабочей средой выполнения.

Проблема, которую пытается решить PyML, является одной из тех вездесущих проблем в крупномасштабных приложениях машинного обучения. Как правило, существует ощутимое несоответствие между инструментами и платформами, используемыми специалистами по обработке и анализу данных для создания прототипов моделей, и соответствующими рабочими средами выполнения. Например, специалисты по данным очень часто используют платформы на основе Python, такие как PyTorch или Keras, для создания экспериментальных моделей, которые затем необходимо адаптировать к среде выполнения, такой как Apache Spark ML Pipelines, которая накладывает очень специфические ограничения. Технологи машинного обучения называют эту проблему компромиссом между гибкостью и эффективностью использования ресурсов. В случае с Uber специалисты по обработке и анализу данных строили модели в фреймворках машинного обучения Python, которые команда Michelangelo должна была реорганизовать, чтобы они соответствовали ограничениям пайплайнов Apache Spark.

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

Введите PML

Цель PyML от Uber — упростить разработку приложений машинного обучения и сократить разрыв между экспериментальной и производственной средами. Для этого PyML фокусируется на трех основных аспектах:

1) Предоставьте стандартный контракт для моделей прогнозирования машинного обучения.

2) Включите согласованную модель для упаковки и развертывания моделей машинного обучения с использованием контейнеров Docker.

3) Включить среды выполнения, интегрированные с Michelangelo, для онлайн- и офлайн-моделей прогнозирования.

На следующем рисунке показаны основные принципы архитектуры PyML.

Стандартный контракт машинного обучения

Модели PyML могут быть созданы с помощью различных сред машинного обучения, таких как TensorFlow, PyTorch или Scikit-Learn. В моделях могут использоваться два основных типа наборов данных: DataFrames, в которых хранятся табличные структурированные данные, и Tensors, в которых хранятся именованные многомерные массивы. После создания моделей они адаптируются к стандартному определению контракта PyML, которое по существу является классом, наследуемым от абстрактных классов DataFrameModel или TensorModel соответственно. В обоих случаях пользователям нужно реализовать только два метода: конструктор для загрузки параметров модели и метод predict(), который принимает и возвращает либо кадры данных, либо тензоры.

Упаковка и развертывание

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

Используя эту структуру, разработчик может упаковать и развернуть модель PyML, используя следующий код. Образ PyML Docker будет содержать модель и все соответствующие зависимости. Модели сразу будут доступны для исполнения в консоли Michelangelo.

Оффлайн и онлайн прогнозы

PyML поддерживает модели пакетного (автономного) и онлайн-выполнения прогнозов. Автономные прогнозы моделируются как абстракция над PySpark. В этом контексте пользователи PyML просто предоставляют SQL-запрос с именами и типами столбцов, соответствующими входным данным, ожидаемым их моделью, и именем целевой таблицы Hive, в которой хранятся выходные прогнозы. За кулисами PyML запускает контейнерное задание PySpark, используя то же изображение и среду Python, что и для обслуживания модели в Интернете, гарантируя отсутствие различий между прогнозами в автономном режиме и онлайн. Выполнение автономных прогнозов относительно просто, как показано в следующем коде:

Стандартный контракт моделей PyML с двумя операциями (инициализация, прогнозирование) упрощает реализацию онлайн-прогнозов. PyML обеспечивает онлайн-прогнозирование, включив упрощенные интерфейсы gRPC для контейнеров Docker, которые используются общей службой онлайн-прогнозирования, как показано на следующем рисунке. По запросу служба онлайн-прогнозирования запустит соответствующий образ Docker для конкретной модели PyML в качестве вложенного контейнера Docker через API Mesos. Когда контейнер запускается, он запускает RPC-сервер PyML и начинает прослушивать запросы прогнозирования в сокете домена Unix из службы онлайн-прогнозирования.

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