Архитектурный подход Infostrux к AutoML в Snowflake.

Авторы сценария: Фабиан Эрнандес, Милан Мосни, Аугусто Киниама Роса

Решения Автоматизированное машинное обучение (AutoML) могут сократить трудоемкие задачи (такие как ручное кодирование или развертывание модели) при создании продуктов ML. Кроме того, эти решения ML могут помочь стандартизировать цикл разработки машинного обучения в организации.

Кроме того, исследование Forrester в 2020 году показало, что 61% лиц, принимающих решения в области данных и аналитики, чьи фирмы внедряют ИИ, заявили, что внедряют (или находятся в процессе внедрения) решения AutoML.

Несмотря на то, что в сообществе Data Science есть определенные опасения по поводу этих решений, связанных с эффективностью, доверием и гибкостью, предполагаемый рост рынка для решений AutoML в обозримом будущем подчеркивает их технологическую актуальность в спектре решений ML.

Вот почему в этой статье мы хотим показать, как демонстрационное решение AutoML может быть реализовано с использованием архитектуры AI/ML, ориентированной на Snowflake, внешней функции Snowflake и AWS SageMaker Autopilot.

Чтобы продемонстрировать эту реализацию, мы будем использовать ранее разработанную Демо-версию Snowflake Forecasting Sales и «Автопилотная интеграция Snowflake и Amazon SageMaker: машинное обучение с SQL». Но сначала давайте углубимся в некоторые определения.

Автопилот AWS SageMaker

AWS Sagemaker Autopilot — это решение AutoML, которое автоматически создает, обучает, настраивает и развертывает лучшие модели машинного обучения на основе ваших данных.

Решение исследует данные, выбирает алгоритмы, соответствующие типу проблемы, и подготавливает данные для облегчения обучения и настройки модели.

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

AWS предоставляет руководство Справочник по API для взаимодействия с сервисом. Тем не менее, из-за ограничений безопасности процедур хранения и UDF Snowflake API необходимо вызывать с использованием внешних функций Snowflake.

Внешние функции Snowflake

(На основе документации Snowflake) Внешняя функция является типом UDF, но в отличие от других UDF, этот тип функции не содержит собственного кода; вместо этого внешняя функция вызывает код, хранящийся и выполняемый вне Snowflake в удаленной службе.

Snowflake не вызывает удаленный сервис напрямую. Вместо этого Snowflake вызывает прокси-сервис, который передает данные удаленному сервису. Некоторые примеры прокси-сервисов включают в себя:

  • Шлюз API Amazon.
  • Служба управления API Microsoft Azure.

Мы будем использовать Amazon API Gateway в качестве прокси-сервиса для этой демонстрации.

Кроме того, Snowflake хранит информацию о внешних функциях, связанных с безопасностью, в разделе Интеграция с API. Эта функциональность обеспечивает интерфейс между Snowflake и сторонними сервисами.

На изображении ниже показано, как работает функция вызова удаленной службы в Snowflake.

Случай использования

Как упоминалось ранее, мы будем использовать часть демонстрации Прогнозирование продаж с помощью архитектуры Infostrux AI/ML, ориентированной на Snowflake, чтобы показать, как AWS Sagemaker Autopilot можно использовать на Snowflake.

В демонстрации прогнозирования:

  • Мы использовали архитектуру слоев Infostrux AI/ML, ориентированную на Snowflake, и dbt, чтобы создать надежный конвейер данных для задачи прогнозирования демо-продаж.
  • Мы показали, как можно реализовать целостность, непротиворечивость, повторяемость и воспроизводимость модели с помощью эталонной архитектуры Infostrux и собственных функций Snowflake.
  • Мы интегрировали несколько источников продаж, чтобы создать уровень базы данных для таблиц, связанных с машинным обучением.
  • Мы не пытались найти наилучшую модель для решения этой проблемы. Демонстрация была больше сосредоточена на деталях архитектуры, чем на процессах Data Science. Мы признаем, что процесс поиска наилучшей возможной модели требует гораздо больше усилий, чем тот, который показан здесь.

Используя эту архитектуру, мы создали табличную модель с именем channel_store_daily_model_set со следующими столбцами:

  • Channel_ID: канал продаж.
  • Sale_amount_in_cad: дневные продажи в канадской валюте.
  • Sale_amount_in_cad_7_day_average: продажи за последние 7 дней в канадской валюте.
  • Sale_amount_in_cad_14_day_average: продажи за последние 14 дней в канадской валюте.
  • Sale_amount_in_cad_30_day_average: продажи за последние 30 дней в канадской валюте.

В этой статье мы будем использовать столбцы channel_id, sale_amount_in_cad_7_day_average, sale_amount_in_cad_14_day_average и sale_amount_in_cad_30_day_averageэтоймодели, для прогнозирования сумма продажи. Для этого мы будем использовать линейную модель, развернутую на AWS SageMaker Autopilot с использованием внешних функций Snowflake.

Важно подчеркнуть, что, как и в последней демонстрации, мы не пытаемся найти лучшее решение этой проблемы. Нас больше волнуют архитектурные детали решения. Это пример только для демонстрационных целей.

Интеграция Snowflake AWS SageMaker Autopilot API

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

К счастью для нас, Snowflake Labs предоставила стек формирования облака AWS с конфигурацией, необходимой для предоставления эталонного API Autopilots в виде внешних функций Snowflake. Этот стек развертывает следующую архитектуру:

Подробности реализации

  • Учетные данные пользователя обрабатываются через AWS Secrets Manager. Важно помнить об использовании правильного accountid Snowflake. Это значение меняется в зависимости от зоны Наличие Снежинки.
  • Для автопилота AWS требуется корзина AWS S3 для хранения метаданных, связанных с процессом. Этот сегмент можно сканировать напрямую с помощью AWS SageMaker, если это необходимо.
  • Перед выполнением стека формирования облака сначала настройте конфигурацию Snowflake.

После выполнения стека в AWS функции API развертываются в виде внешних функций Snowflake в базе данных и схеме, указанных в Cloud-Formationшаблоне. Аналогично тому, как показано на рисунке. ниже.

Каждая функция представляет собой функциональность API автопилота. Тем не менее, не все возможности Autopilot API развернуты. Тем не менее, Шаблон стека формирования облака можно легко модифицировать, добавив в него дополнительные функции.

Внешние функции

Большая часть развернутой внешней функции состоит из трех компонентов:

  • Ссылка на интеграцию API Snowflake, в которой хранится информация о прокси-сервисе HTTPS (в данном случае шлюз API AWS).
  • Ссылка на конечную точку шлюза AWS API, предоставляющую функции сопоставления Autopilot.
  • Транслятор запроса/ответа.
CREATE OR REPLACE EXTERNAL FUNCTION AWS_AUTOPILOT_DESCRIBE_ENDPOINT("ENDPOINTNAME" VARCHAR(16777216))
RETURNS VARIANT
API_INTEGRATION = "AWS_AUTOPILOT_API_INTEGRATION"
MAX_BATCH_ROWS = 1
REQUEST_TRANSLATOR = AUTOPILOT_DB.DEMO.AWS_AUTOPILOT_DESCRIBE_ENDPOINT_REQUEST_TRANSLATOR
RESPONSE_TRANSLATOR = AUTOPILOT_DB.DEMO.AWS_AUTOPILOT_DESCRIBE_ENDPOINT_RESPONSE_TRANSLATOR
AS 'https://d6quceqr9j.execute-api.us-west-2.amazonaws.com/main/sagemaker/describeendpoint';

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

Например, конечная точка Autopilot describe_model ожидает данные с определенной полезной нагрузкой. Удобно, что эта полезная информация может быть добавлена ​​перед вызовом API путем реализации функции транслятора запросов для изменения данных запроса перед вызовом конечной точки.

CREATE OR REPLACE FUNCTION AWS_AUTOPILOT_DESCRIBE_MODEL_REQUEST_TRANSLATOR("EVENT" OBJECT)
RETURNS OBJECT
LANGUAGE JAVASCRIPT
AS '
  let item = EVENT.body.data[0][1];
  let payload = {
      "AutoMLJobName" : item + "-job"
  };
  return {"body": JSON.stringify(payload)};
';

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

Модель прогнозирования продаж

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

select aws_autopilot_create_model (
   'daily-sales-model'  -- model name
   ,'channel_store_daily_model_set' -- data location
   ,'sale_amount_in_cad' -- target column
   ,'MSE'                -- objective metric
   ,'Regression'         -- problem type
   ,10                   -- number of candidates to be evaluated
                         -- via hyperparameter tuning 
   ,1*60*60              -- training timeout
   ,'True'               -- create scoring endpoint yes/no
   ,1*60*60              -- endpoint TTL
); 

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

Используя открытую функцию Autopilot, мы можем создать конечную точку SageMaker для внешнего вызова.

select aws_autopilot_create_endpoint (
 'daily-sales-model' 
 ,'daily-sales-model4-m5-4xl-2' 
 ,1*60*60
);

И, конечно же, мы можем вызвать нашу созданную модель, чтобы получить прогнозы на основе наших данных в Snowflake.

select 
    *,
    (parse_json(aws_autopilot_predict_outcome(
    'daily-sales-model', 
    array_construct(
        channel_id,
        sale_amount_in_cad_7_day_average,
        sale_amount_in_cad_14_day_average,
        sale_amount_in_cad_30_day_average))
    )) as prediction
from channel_store_daily_model_set;

Сводка

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

  • Мы показали, как использовать внешнюю функцию Snowflake для размещения функций AWS SageMaker Autopilot.
  • Мы показали, как использовать трансляторы запросов/ответов Snowflakes для преобразования данных в соответствии с собственным форматом ввода удаленного сервиса.
  • Мы показали, как использовать Snowflake и AWS SageMaker Autopilot для создания модели прогнозирования продаж.

Спасибо, что проследили за статьей до этой части! Пожалуйста, дайте нам знать, что вы думаете об этом контенте в разделе комментариев.

Следите за нашими усилиями по открытому исходному коду через наш GitHub.