Упростить управление распределенными данными и машинное обучение

Миссия

Я Монте Цвебен, генеральный директор и соучредитель Splice Machine (https://www.splicemachine.com), компании по базам данных, стремящейся упростить создание операционных приложений, которые в полной мере используют преимущества больших данных и машинного обучения. .

Наша миссия - сделать распределенное управление данными и машинное обучение доступным для всех.

Сложность платформы данных

Создание приложения для работы с большими данными обычно требует интеграции нескольких платформ данных. Обычно вам нужна оперативная база данных, аналитическая база данных и платформа для науки о данных / машинного обучения. Многие из вас слишком хорошо знакомы с этим упражнением. Например, один полный стек данных для приложения ML может объединить масштабируемую базу данных NoSQL, такую ​​как MongoDB, для работы приложения, со Snowflake для управления аналитикой и Databricks для получения записных книжек Jupyter, SparkML, MLFlow и развертывания модели в Sagemaker или Azure ML. .

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

Под капотом

После нескольких стартапов, включая Rocket Fuel и Blue Martini, мы с моими соучредителями были крайне разочарованы этим процессом и решили что-то с этим делать. В ответ мы создали Splice Machine, чтобы наши партнеры-разработчики приложений, специалисты по обработке данных и инженеры по обработке данных могли сосредоточиться на своей основной миссии - создании моделей, конвейеров и приложений - без необходимости интеграции платформ или управления всеми DevOps.

OLTP и OLAP вместе

Для реализации этой цели мы взяли несколько компонентов с открытым исходным кодом, описанных выше, и плотно интегрировали их в Kubernetes, чтобы разработчики могли просто использовать их как полноценную платформу. Никакой инженерии не требуется. Мы создали open source, горизонтально масштабируемую SQL RDBMS, которая может выбирать между различными механизмами в зависимости от характера запроса. Наш механизм OLTP - это хранилище ключей и значений Apache HBase. Для тех, кто не знаком с HBase, вот одна подсказка: HBase автоматически разбивает данные по кластеру и сохраняет данные, упорядоченные по первичному ключу, для быстрого поиска, мутаций и сканирования диапазона. Вы не используете HBase как таковой в Splice. Вы не ограничены его API или причудливостью. Мы это разработали, и вы просто взаимодействуете с ANSI SQL. Кроме того, и это было наиболее технически сложной задачей, мы построили уровень транзакции ACID над этим хранилищем ключ-значение, которое представляет собой полный SQL MVCC, реализующий семантику изоляции моментальных снимков. Это не массовая ACID, как Databricks Delta или Hive. Это истинное соответствие OLTP, ACID, которое позволяет одновременную мутацию отдельных ячеек без блокировки. Наш оптимизатор на основе затрат оценивает количество строк, которые он планирует сканировать, и выбирает Spark или HBase для выполнения скомпилированного плана SQL на основе этой метрики. Мы тесно интегрировали HBase и Spark с нашим MVCC, чтобы все вычисления учитывали соответствие ACID, передавали данные друг другу с высокой производительностью, а все фоновые процессы, такие как сжатие, запланированы на Spark, что избавляет HBase от конкуренции за память. Мы также поддерживаем полные столбчатые таблицы ORC / Parquet как первоклассные объекты для аналитического выполнения. Вы можете объединить таблицы на основе строк и столбцов вместе и создать очень интересные гибридные представления.

Добавление машинного обучения

В дополнение к базе данных мы тесно интегрировали ряд компонентов машинного обучения, таких как:

  • JupyterHub
  • Spark ML
  • Стакан X
  • MLFlow
  • H2O
  • Scikit
  • Керас
  • PyTorch.

Мы также встроили менеджеры развертывания в AWS Sagemaker, Azure ML и, наконец, механизм развертывания, встроенный в нашу базу данных. В нашей системе Jupyter все пользователи получают собственную инфраструктуру Notebook с предварительно настроенным BeakerX. Одна из наиболее важных функций этой настройки - программирование полиглота. Это позволяет специалистам по обработке данных писать код на нескольких разных языках, таких как: Python, SQL, Javascript, Java, Scala, Ruby, HTML, markdown, sh и даже LateX в одной записной книжке. Более того, вы можете использовать переменные в этих многоязычных ячейках. Наконец, мы создали собственный источник данных Spark, чтобы специалисты по данным и инженеры по обработке данных могли манипулировать фреймами данных Spark в качестве входных и выходных данных для операций CRUD базы данных без сериализации данных, как в случае с традиционным подключением JDBC / ODBC к Spark.

Мы также хотели предоставить полное решение для управления и развертывания рабочего процесса модели. Мы выбрали библиотеку MLFlow с открытым исходным кодом для отслеживания моделей и экспериментов ML, потому что она была наиболее гибкой. У нас есть философия проектирования, согласно которой мы не навязываем какой-либо конкретный рабочий процесс моделирования и не ограничиваем параметры, метрики или библиотеку моделей, которые могут отслеживать специалисты по данным.

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

И, наконец, мы можем развертывать модели прямо в базе данных. Это немного тонко, но мощно. Мы сериализуем модели, сохраняем их в базе данных и автоматически создаем скоринговую функцию в базе данных. Затем мы генерируем триггер для таблицы векторов признаков, чтобы при вставке новых записей в эту таблицу срабатывали функции оценки и вставляли прогнозы непосредственно в таблицу. Все это под ключ, без написания кода. Итак, теперь вы можете отслеживать прогнозы в таблице на предмет перекоса, а приложение может просто получить доступ к таблице для прогнозов. Мы считаем, что это упрощает использование моделей для разработчиков приложений, поскольку прогнозы в реальном времени превращаются в простой поиск в таблице. Мы также поддерживаем другие механизмы развертывания, такие как AWS Sagemaker и Azure ML.

Работа, которую нужно еще сделать

Splice Machine поддерживает как OLTP, так и OLAP. Это инженерный трюизм, что невозможно быть оптимальным для всего одновременно. При этом производительность OLTP аналогична архитектурам BigTable, а производительность OLAP сопоставима со Spark SQL (то есть действительно хороша). Мы включили тест HTAP, чтобы инженеры могли тестировать различные рабочие нагрузки. Кроме того, мы пока не поддерживаем JSON как первоклассный тип данных, но большинство клиентов свободно упорядочивают свои данные в схему с помощью функций поддержки Spark JSON или GraphQL. Наконец, UI / UX нашего облачного сервиса не так совершенен, как у некоторых других, но он быстро улучшается.

Kubernetes

Мы развертываем все компоненты прямо в Kubernetes. Мы скрываем эту сложность от наших пользователей, развертывая Splice Machine в их облачной учетной записи в кластере Kubernetes, которым мы для них управляем. Наши пользователи могут просто взаимодействовать с нашим веб-интерфейсом и нашим API / CLI - им не нужно копаться в Kubernetes.

Платформа доступна на AWS, Azure и GCP (бета). Некоторые из наших клиентов используют нас для своих новых приложений искусственного интеллекта, которым требуются модели машинного обучения, например, один клиент, который создает медицинское консультативное приложение для прогнозирования траектории неврологических заболеваний. Но многие клиенты также используют нас для переноса своих старых приложений в облако, как один страховой клиент, который перенес свое приложение для обработки претензий на основе Db2 в облако. В некоторых случаях, например, в старых приложениях IBM Db2, мы можем перенести приложение практически без изменений кода из-за наших расширений диалекта Db2. Наконец, некоторые клиенты используют нас, как обычно используется Snowflake - для разгрузки рабочих нагрузок из дорогих хранилищ данных, таких как Teradata.

Обратная связь

Как и любой поставщик программного обеспечения, мы прилагаем много усилий, но мы надеемся, что вы найдете наш подход уникальным! Мы рады поделиться нашей историей с сообществом сегодня, и мы с нетерпением ждем вашего опыта в области инженерии данных и анализа данных при развертывании приложений машинного обучения. Приходилось ли вам склеивать эти платформы вместе, как мы описали выше, и испытывали ли вы разочарование, о котором мы говорили? Если вы планируете объединить такие вещи, как Dynamo или Mongo, со Snowflake и Databricks для своего следующего проекта, выглядит ли наша платформа привлекательной? Приглашаем вас попробовать на cloud.splicemachine.io. Мы рады предоставить вам неограниченную бесплатную пробную версию - то есть кластер любого размера - в вашей облачной учетной записи в обмен на ваш отзыв.

Спасибо!

Монте