Как создать хранилище функций для AI/ML с использованием NoSQL ScyllaDB

Машинное обучение (ML) хранилища функций привлекают внимание и использование для критически важных бизнес-приложений с тех пор, как Uber ввел концепцию с Michelangelo в 2017 году. В этом блоге мы погрузимся в основы хранилищ функций ML и исследуем, почему и как ScyllaDB может стать ключевой частью вашей архитектуры хранилища функций.

Чтобы понять, что такое хранилища функций, важно сначала понять, что такое features.

Что Такое Feature?

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

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

Что Такое Хранилище Функций?

A feature store is a central database in your machine-learning architecture that contains your real-time and historical features. Feature stores allow your data engineers and data scientists to use the same central repository to discover, monitor, and analyze features.
What does a feature store architecture look like?

Онлайн и Оффлайн Базы Данных в Хранилище Функций

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

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

Онлайн-база данных: Эта база данных может содержать данные из реальных потоков данных и офлайн-базы данных. Онлайн-хранилище используется для обслуживания производственной модели и других приложений в реальном времени с самыми актуальными данными признаков. В данном случае важны производительность и низкая задержка. Если ваша база данных не способна доставить реальные признаки достаточно быстро, то ваша модель может использовать устаревшие или неточные данные для прогнозирования.

Моделирование данных хранилища признаков: Широкая vs. Узкая таблица

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

Широкая таблица

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

Пример широкой таблицы

create table feature_store.wide_example(
    date TIMESTAMP,
    feature_id INT,
    feature_col1 FLOAT,
    feature_col2 FLOAT,
    feature_col3 FLOAT,
    feature_col4 FLOAT,
    feature_col5 FLOAT,
    feature_col6 FLOAT,
    feature_col7 FLOAT
)

view rawgistfile1.txt 

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

Узкая таблица

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

Пример узкой таблицы

create table feature_store.narrow_example(
    feature_id INT,
    feature_name TEXT,
    feature_value FLOAT
)

view rawgistfile1.txt 

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

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

Что такое ScyllaDB и как его можно использовать в архитектуре вашего хранилища функций?

Для того чтобы команды машинного обучения могли создавать приложения реального времени для вывода, им нужны базы данных, которые могут возвращать функции масштабируемо и с низкой задержкой. ScyllaDB — это высокопроизводительная, низкозатратная NoSQL-база данных, способная обрабатывать большие объемы операций чтения и записи. Кроме того, ScyllaDB является надежной базой данных для критически важных рабочих нагрузок хранилищ функций в таких компаниях, как GE Healthcare или ShareChat. Благодаря высокой доступности и устойчивости к сбоям, он может выполнять тяжелую работу в вашей инфраструктуре там, где важны производительность и надежность.

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

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

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

ScyllaDB выделяется в случаях, когда требуется низкая задержка и высокая производительность. Более того, ScyllaDB совместим с Cassandra и DynamoDB, что означает, если вы уже используете одну из этих баз данных, вы можете бесшовно перенестись, не меняя свои запросы.

Учебник: Онлайн-магазин ScyllaDB

Чтобы помочь вам начать работу с ScyllaDB в качестве вашего онлайн-магазина, мы создали пример приложения (также доступный на GitHub).

  1. Клонировать репозиторий
  2. Зарегистрироваться на ScyllaDB Cloud или установить ScyllaDB локально
  3. Создать схему:
    cqlsh "node-0.aws_us_east_1.xxxxxxxxx.clusters.scylla.cloud" 9042 -u scylla -p "password" -f schema.cql
  4. Подключиться к экземпляру с помощью cqlsh и импортировать образец данных
    cqlsh "node-0.aws_us_east_1.xxxxxxxxx.clusters.scylla.cloud" 9042 -u scylla -p "password" scylla@cqlsh> COPY feature_store.flight_features FROM 'flight_features.csv';

Эта команда вводит образец данных о полете:

op_carrier_fl_num|actual_elapsed_time|air_time|arr_delay|arr_time|cancellation_code|cancelled|carrier_delay|crs_arr_time|crs_dep_time|crs_elapsed_time|dep_delay|dep_time|dest|distance|diverted|fl_date            |late_aircraft_delay|nas_delay|op_carrier|origin|security_delay|taxi_in|taxi_out|weather_delay|wheels_off|wheels_on|
—————–+——————-+——–+———+——–+—————–+———+————-+————+————+—————-+———+——–+—-+——–+——–+——————-+——————-+———+———-+——+————–+——-+——–+————-+———-+———+
             4317|               96.0|    73.0|    -19.0|  2113.0|                 |      0.0|             |        2132|        2040|           112.0|     -3.0|  2037.0|MLI |   373.0|     0.0|2018-12-31 02:00:00|                   |         |OO        |DTW   |              |    5.0|    18.0|             |    2055.0|   2108.0|
             3372|               94.0|    74.0|     81.0|  1500.0|                 |      0.0|          0.0|        1339|        1150|           109.0|     96.0|  1326.0|RNO |   564.0|     0.0|2018-12-31 02:00:00|               81.0|      0.0|OO        |SEA   |           0.0|    3.0|    17.0|          0.0|    1343.0|   1457.0|
             1584|              385.0|   348.0|    -21.0|  2023.0|                 |      0.0|             |        2034|        1700|           394.0|     -9.0|  1658.0|SFO |  2565.0|     0.0|2018-12-31 02:00:00|                   |         |UA        |EWR   |              |   13.0|    33.0|             |    1731.0|   2019.0|
             4830|              119.0|    85.0|    -35.0|  1431.0|                 |      0.0|             |        1437|        1245|           136.0|    -13.0|  1232.0|MSP |   546.0|     0.0|2018-12-31 02:00:00|                   |         |OO        |MSP   |              |   16.0|    18.0|             |    1250.0|   1415.0|
             2731|              158.0|   146.0|    -19.0|  1911.0|                 |      0.0|             |        1930|        1800|           160.0|     -8.0|  1800.0|MSP |   842.0|     0.0|2018-12-31 02:00:00|                   |         |WN        |PVD   |              |    7.0|     7.0|             |    1807.0|   1904.0|

view rawgistfile1.txt hosted with ❤ by GitHub.

ScyllaDB + Feast

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

Чтобы настроить ScyllaDB в качестве онлайн-хранилища Feast, вам нужно отредактировать файл конфигурации Feast и добавить учетные данные ScyllaDB. ScyllaDB совместим с Cassandra, поэтому вы можете использовать встроенный соединитель Cassandra от Feast.

# feature_store.yaml
project: scylla_feature_repo
registry: data/registry.db
provider: local
online_store:
    type: cassandra
    hosts:
        – node-0.aws_us_east_1.xxxxxxxx.clusters.scylla.cloud
        – node-1.aws_us_east_1.xxxxxxxx.clusters.scylla.cloud
        – node-2.aws_us_east_1.xxxxxxxx.clusters.scylla.cloud
    keyspace: feast
    username: scylla
    password: password

view rawgistfile1.txt hosted with ❤ by GitHub.

Заключение

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

Source:
https://dzone.com/articles/tutorial-whats-an-aiml-feature-store-and-how-to-bu