Этот пост был написан в соавторстве с Micah Groh, специалистом по данным, и Michael Green, старшим специалистом по данным.

Искусственный интеллект. Глубокое обучение. Большие данные. Введите в Google любую из этих фраз (или, глоток, все три сразу), и вы сразу же будете завалены результатами, утверждающими, что они дают вам ноу-хау, возможность или и то, и другое для анализа и обучения ваших данных с использованием их Платформа «все в одном. Мы не утверждаем, что знаем все, но с нашим опытом создания Платформы данных Empower мы можем указать на множество примеров, когда мы помогали нашим клиентам обрабатывать свои байты для достижения результатов. Наши сообщения в блоге призваны помочь специалистам по обработке и анализу данных и инженерам сделать осознанный выбор.

Apache Spark широко признан золотым стандартом с открытым исходным кодом для инженерии данных и исследований и разработок в области искусственного интеллекта в деловом мире [1, 2, 3]. Недавно мы видели статьи о переходе со Spark на другую платформу данных, такую ​​как Snowflake [1, 2]. С момента выпуска Snowpark в начале года, который был создан для расширения рабочих процессов AI/ML, мы еще не нашли тщательной оценки функциональности Snowflake AI/ML. Чтобы исправить это, мы решили предоставить критическому взглядупараллельное сравнение, предназначенное для обучения моделей искусственного интеллекта между Databricks (разработчики последней версии Apache Spark) и Snowflake. В этом посте мы хотим выяснить, является ли Snowflake со Snowpark сильным соперником в отношении рабочих процессов искусственного интеллекта.

TLDR это не так. Продолжайте читать нашу разбивку.

Сравнение рабочего пространства

Блоки данных

Databricks использует управляемые кластеры Spark, построенные поверх data Lakehouse. Эта архитектура позволяет объединить общие хранилища данных, аналитику данных, науку о данных, разработку данных и машинное обучение на одной платформе. Основной интерфейс разработчика — это всем знакомый блокнот, который имеет встроенную интеграцию с Git и может редактироваться несколькими соавторами одновременно. В дополнение к Python, ноутбуки позволяют выполнять уценку, R, SQL, Scala и Shell, все со встроенной документацией. Рабочая область поддерживает полную экосистему библиотек Python PyPI, а пакеты Linux можно устанавливать с помощью настраиваемых скриптов инициализации. Стоит отметить, что пользователи также могут разрабатывать в своей любимой среде IDE или на сервере ноутбуков и использовать Databricks Connect для планирования заданий Spark в кластере Databricks.

Снежинка/Сноупарк

Snowflake — это хранилище данных, основным интерфейсом которого является рабочий лист только для SQL, который может выполнять команды в таблицах SQL. У них нет встроенной интеграции с Git, и несколько пользователей не могут совместно редактировать лист, как в Databricks. API Snowpark позволяет пользователям определять преобразования данных в своей локальной среде для использования в таблицах, хранящихся в Snowflake. Это означает, что данные, обрабатываемые с помощью Snowpark, остаются в Snowflake. Snowpark также позволяет загружать пользовательские функции в среду выполнения Snowflake, а затем вызывать их для запуска в хранилище Snowflake. Мы изучили библиотеку Python Snowpark, но Snowpark также поддерживает SQL, Scala и Java. Кластеры Snowflake поддерживают несколько сторонних пакетов Python, предоставленных и созданных Anaconda, но их список ограничен, и поддерживаются не все версии библиотек.

Победитель: Databricks

Snowpark получает баллы за то, что позволяет вам разрабатывать, не выходя из собственной среды/языка разработки. В то же время то же самое происходит и с Databricks с помощью Databricks Connect. Блокноты Databricks для совместной работы — это огромный плюс, как и нативная интеграция с Git. Разнообразие языков, поддерживаемых записными книжками Databricks, обеспечивает чрезвычайное удобство для разных разработчиков и вариантов использования, а отладка становится проще простого. Кроме того, Databricks имеет лучшую поддержку пакетов.

Управление оборудованием

Блоки данных

Кластеры Databricks могут быть созданы для обработки рабочих нагрузок ЦП и ГП. Помимо стандартного пользовательского интерфейса Databricks, существуют также инструменты Databricks API и CLI, которые могут управлять ресурсами и модулями Databricks в рабочей области с другого компьютера. Вы можете выбрать тип и количество узлов для своих кластеров в Azure. Администраторы могут настроить шаблонные политики кластера, чтобы уменьшить перегрузку опций для обычных пользователей. Кластеры могут быть специализированы для общих рабочих нагрузок или рабочих нагрузок машинного обучения. Кластеры заданий можно использовать для оптимизации затрат, так как они могут обнаруживать экземпляры.

Снежинка/Сноупарк

С другой стороны, Snowflake поддерживает только кластеры ЦП. Вы можете выбрать размеры кластера, определяемые футболкой, но помимо этого вариантов не так много. SnowSQL, клиент командной строки Snowflake, позволяет вам выполнять вызовы API к вашему кластеру для удаленного перемещения данных, запросов и управления хранилищами. В Snowflake можно настроить выполнение запланированных задач (аналог кластеров заданий в Databricks).

Победитель: Databricks

Паралич выбора — вещь реальная, но не тогда, когда нужно оптимизировать кластер для обучения машинному обучению. У каждой компании своя философия настройки: Snowflake убирает за вас многие варианты выбора, а Databricks предлагает вам множество вариантов. В зависимости от ваших потребностей, вы можете предпочесть одно другому. Тем не менее, Databricks поддерживает графические процессоры в своей среде, что имеет решающее значение для обучения ИИ на больших моделях, особенно в области компьютерного зрения и обработки естественного языка.

Обучение с одним узлом

Блоки данных

Обучение на одном узле в Databricks ничем не отличается от обучения на записной книжке Jupyter в вашей локальной среде. Вы можете разработать модель и запустить ее внутри ноутбука, используя любые популярные фреймворки ML и DL, такие как Scikit-Learn, PyTorch или Tensorflow. Вы также можете запустить свою записную книжку в качестве задания, и Databricks будет переключаться между ресурсами для обработки обучения. Все данные в рабочей области Databricks доступны для вашей записной книжки. Обратите внимание, что вариант использования Spark по умолчанию — выполнение вычислений с несколькими узлами. Пользователи Databricks, желающие провести распределенное крупномасштабное обучение или обучение на одном узле, одинаково чувствуют себя как дома. Мы обсудим распределенное обучение в следующем разделе сравнения.

Снежинка/Сноупарк

Snowflake проводит одноузловое обучение немного по-другому. Есть два известных нам способа сделать это в кластерах Snowflake: определяемые пользователем функции и хранимые процедуры.

Определяемые пользователем функции (UDF)

UDF полезны для определения сложных преобразований в кадрах данных. Snowpark поддерживает скалярные пользовательские функции [1, 2], которые могут принимать строку в качестве входных данных и выводить новое одиночное значение. UDF не являются стандартным методом для обучения моделей, но Snowflake дает пример того, как использовать UDF для параллельного обучения многих моделей для прогнозирования временных рядов. В этом примере они объединяют данные обучения и логического вывода в списки перед передачей их в UDF со Snowpark. Оказавшись внутри UDF, данные распаковываются обратно в кадры данных и передаются в цикл обучения модели. После обучения модель может делать выводы на основе данных вывода, а UDF может вставлять прогнозы в нужную таблицу.

Если приведенный выше абзац кажется вам запутанным, вы не одиноки. Нам потребовалось немало попыток, чтобы понять и построить это самостоятельно. Процесс выравнивания фреймов данных и возврата их обратно подвержен человеческим ошибкам и не интуитивно понятен. Отладка может быть сложной, поскольку код выполняется в среде выполнения Snowflake, которая, будучи предназначена для SQL, не всегда помогает при выводе ошибок Python. Кроме того, время выполнения пользовательских функций ограничено одной минутой, что ограничивает этот метод самыми маленькими моделями и/или наборами данных. Пользовательские функции не могут возвращать объекты, поэтому обученная модель должна сделать вывод внутри пользовательской функции, прежде чем она будет отброшена.

Хранимые процедуры

Хранимые процедуры позволяют повторно использовать выполнение ряда команд. Они позволяют выполнять произвольный код Python, что делает их более подходящими для обучающих моделей для более широкого спектра вариантов использования, чем пользовательские функции. Таблицы Snowflake можно загрузить из хранилища данных Snowflake в Snowpark, а преобразования этих таблиц с помощью Snowpark будут переданы операторам SQL для выполнения над таблицами в хранилище Snowflake. Таблицы также могут быть преобразованы в кадры данных Pandas и работать с обычными функциями кадра данных Pandas. Как и UDF, хранимые процедуры разделяют среду разработки и выполнения, что усложняет разработку или отладку кода. Кроме того, хранимые процедуры поддерживают только скалярное возвращаемое значение, а это означает, что любой неподдерживаемый тип данных будет возвращен в виде сериализованной строки JSON, даже списки Python (поскольку SQL не может «мариновать» объекты). Хранимые процедуры также ограничены временем выполнения в один час. Это больше времени, чем UDF, но все же очень ограничено при обучении на большом количестве данных.

Победитель: Databricks

Посмотрите, насколько короче стал раздел Databricks. Мы не шутим: одноузловое обучение проводить намного проще. Во время нашего исследовательского анализа мы поняли, что Snowflake не поддерживает OpenCV, популярную библиотеку обработки изображений компьютерного зрения, в их кластерах Linux. Snowflake также не поддерживает пакеты Linux, такие как libsndfile, для обработки аудиофайлов. Наконец, Snowflake не поддерживает библиотеки обучения с подкреплением, такие как KerasRL, OpenAI Baselines и Stable Baselines. Это удаляет довольно много ответвлений искусственного интеллекта из вашего набора инструментов. Если вы ограничены обучением на одном узле, вы также будете ограничены характеристиками оборудования одного экземпляра. Если вашей модели требуется больше памяти, вычислительной мощности или ускоренных вычислений, единственным вариантом является использование более мощной машины. Имейте в виду, что пользовательские функции и хранимые процедуры также имеют ограничение памяти, определяемое хранилищем. Если вы достигнете этого предела, вам нужно будет связаться со службой поддержки Snowflake, чтобы увеличить этот предел для каждого склада.

Многоузловое/распределенное обучение

Блоки данных

Библиотека Databricks Spark ML изначально поддерживает многоузловые реализации многих популярных алгоритмов машинного обучения, включая линейную/логистическую регрессию, случайные леса и деревья решений с градиентным усилением. Наш опыт преобразования одноузловых конвейеров глубокого обучения с использованием Tensorflow в многоузловые ЦП или ГП был таким же простым, как использование реализации Хоровод Spark. Это потребовало от нас изменения менее десяти строк кода в нашей записной книжке. Это также возможно с помощью Pytorch, который также поддерживает Databricks.

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

Снежинка/Сноупарк

На первый взгляд, многоузловое/распределенное обучение невозможно в среде выполнения Snowflake из-за настройки среды и возможностей, предоставляемых пользователю. Важно отметить, что многоузловая система в смысле одновременного обучения нескольких независимых моделей в одном и том же кластере вполне возможна с использованием хранимых процедур и определяемых пользователем функций, как утверждается в этом сообщении в блоге. Но это не следует путать с настоящим распределенным обучением (например, DDP для Pytorch/Pytorch Lightning или Хоровод для TensorFlow/Keras/Pytorch), определенным Microsoft как рабочая нагрузка для обучать одну модель, разделенную на несколько процессоров, которые работают параллельно, чтобы ускорить процедуру обучения модели. Мы предпочитаем, чтобы термин распределенное машинное обучение использовался только для таких распределенных процессов обучения. Существует два основных типа распределенного обучения: параллелизм данных и параллелизм моделей, ни один из которых Snowflake не поддерживает изначально.

Для распределенного обучения с несколькими узлами с помощью Snowflake необходимо использовать отдельный кластер, например кластер Spark с открытым исходным кодом, или поставщика, например Azure Synapse или AWS EMR. Модели могут обучаться, распределенные внутри этого стороннего кластера, при этом обмениваясь данными со Snowflake как с хранилищем данных (предпочтительно с использованием API Snowpark) для получения обучающих данных по мере необходимости.

Победитель: Databricks, руки вниз

Snowflake должна использовать сторонних партнеров даже для обучения на нескольких узлах. Snowpark выступает в качестве моста, позволяющего Snowflake быть вашим хранилищем данных, но в таком случае вы действительно занимаетесь ИИ с Snowflake или с партнером Snowflake? Между тем, Databricks делает это невероятно простым для вас.

Заключение?

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

Выше мы ограничили наше сравнение только рабочими процессами обучения ИИ. У Snowflake есть потенциал, и мы ценим его инженерное качество с точки зрения решений для хранения данных, в которых он великолепно проявляет себя. Если вы планируете перейти к разработке ИИ в ближайшем будущем, имеет смысл начать с Databricks и Spark. И мы даже не взламывали реестр моделей, хранилище функций, путешествия во времени, отслеживание экспериментов, решения с низким/отсутствием кода, такие как AutoML, или другие важные части конвейеров машинного обучения, ни один из которых Snowflake не поддерживает изначально. Наш следующий пост в блоге будет посвящен этим областям. Короче говоря, Databricks превосходит Snowflake/Snowpark для обучения ИИ.

В Empower мы поняли, что наука о данных, машинное обучение и потоковая передача гораздо более управляемы с помощью Databricks Lakehouse и открытого формата Delta Lake, чем альтернативные решения.

У вас есть вопросы о том, как мы можем ускорить ваши современные инициативы по управлению данными? Свяжитесь с нашими экспертами!