Что такое хранилище признаков, зачем это нужно в машинном обучении, каковы его главные компоненты и как использовать ClickHouse в качестве Feature Store для ML-задач.
Хранилище признаков для машинного обучения: архитектура и принципы работы Feature Store
Будучи колоночной базой данных, ClickHouse отлично подходит на роль хранилища фичей (Feature Store) для задач машинного обучения. Фичей или признаком называется некоторое свойство сущности, которое влияет на точность прогноза модели машинного обучения. Сущность — это набор признаков, а также класс или метка, представляющие реальное понятие. Например, банковская транзакция может считаться сущностью. Признаки должны быть полезными для классификации сущности. Сущность банковской транзакции может содержать такие признаки, как сумма, вид сделки (покупка или продажа). Задача классификации может решать, была ли транзакция мошеннической или нет.
Чтобы использовать набор признаков для обучения ML-модели, данные сперва надо подготовить и преобразовать. Затем их необходимо сохранить в удобном для эксплуатации виде. В качестве такого хранилища и используется Feature Store – централизованный репозиторий для хранения и управления данными признаков, а также источника истины. Feature Store обычно имеет API, позволяющие хранить, управлять версиями и извлекать признаки, обеспечивая их единообразное представление для обучения и прогнозного вывода в средах разработки и производства. Помимо предоставления данных в виде версионных сущностей, признаков и классов, Feature Store поддерживает функции аналитики данных, пакетирования, потоковой передачи и запросов на определенный момент времени, например, чтобы идентифицировать значения для признака в любой момент времени.
Некоторые хранилища фичей представляют собой полную платформу данных, способную агрегировать данные в признаков, имеют вычислительный движок для обучения ML-моделей, поддерживают векторные базы данных и конвейеры расширенной поисковой генерации (RAG, Retrieval Augmented Generation), которые позволяют извлекать данные за пределами базовой модели и добавлять их в контекст, дообучая нейросеть. Тем не менее, базовыми компонентами любого Feature Store считаются следующие:
- Источник данных — база данных или озеро данных с файлами в формате, например Iceberg, доступ к которым осуществляется через механизм запросов;
- Механизм преобразования исходных данных в признаки, включая соединения, агрегации и выражения, изменяющие структуру и/или тип значений. Некоторые хранилища признаков имеют встроенные возможности для достижения этого, другие используют хранимые функции или инструменты типа dbt или Spark. Для признаков, которые постоянно обновляются, используются потоковые конвейеры на основе Flink или Spark Streaming. В ClickHouse преобразование реализуется с помощью материализованных представлений, о которых мы писали здесь.
- Офлайн-хранилище (обучающих данных) хранит признаки, полученные в результате предыдущего конвейера преобразований. Эти признаки обычно группируются как сущности и связываются с меткой (целевым прогнозом). Обычно модели должны потреблять эти признаки выборочно, итеративно или через агрегации, многократно и в случайном порядке. Модели машинного обучения часто используют более одного признака, группируя их вместе по идентификатору сущности и временному измерению. Поэтому офлайн-хранилище должно предоставлять правильную версию признака и метки для определенного момента времени. Это особенно важно для моделей Machine Learning, которые необходимо обучать постепенно.
- Онлайн-хранилище для промышленного использования ML-модели после обучения. Оно содержит данные, которые доступны только на момент прогнозирования, например, идентификатор пользователя для оценки транзакции. Иногда этот этап может требовать признаков, которые должны быть предварительно вычислены, например, история покупок конкретного пользователя. Их слишком дорого вычислять во время вывода. Эти признаки должны использоваться в ситуациях, чувствительных к задержке, на основе самой последней версии данных. Особенно это актуально для сценариев, где прогнозы должны выполняться в режиме реального времени, например, для обнаружения мошенничества. Признаки могут быть материализованы из офлайн-хранилища в онлайн-хранилище для использования.
Вспомнив базовую архитектуру и принципы работы Feature Store, далее рассмотрим, почему ClickHouse подходит для такого варианта использования.
ClickHouse как основа Feature Store
ClickHouse может выполнять роль ряда компонентов хранилища признаков. В частности, эта колоночная база данных может выступать в качестве источника данных благодаря поддержке более 70 различных форматах файлов, включая Iceberg и Delta Lake. ClickHouse подходит для долгосрочного хранения и аналитических запросов большого объема данных. А облачная версия этой платформы ClickHouse Cloud разделяет хранение и вычисления с помощью объектного хранилища. Это дополнительно позволяет хранить данные неограниченное время с уменьшением масштаба вычислений или полным бездействием для минимизации затрат. Гибкие кодеки в сочетании с ориентированным на столбцы хранением и упорядочением данных на диске максимизируют показатели сжатия, сокращая потребности в дисковом пространстве.
Благодаря поддержке SQL в ClickHouse есть распространенные средства преобразования данных, которые можно расширить аналитическими и статистическими функциями. Табличные функции позволяют писать SQL-запросы к данным, хранящимся в таких форматах, как Parquet, дисковое или объектное хранилище, или во внешних базах. Полностью распараллеленный механизм выполнения запросов в сочетании с ориентированным на столбцы форматом хранения позволяет ClickHouse выполнять агрегации по петабайтам данных за считанные секунды. Это выгодно отличает ClickHouse от таких движков распределенных вычислений как Spark или Flink, где преобразования над крупными датафреймами ограничены свободной памятью.
Кроме того, материализованные представления позволяют преобразовывать данные во время вставки, гибко меняя время вычисления. Эти представления могут использовать тот же диапазон аналитических и статистических функций, которые отлично подходят для анализа и суммирования данных. Если существующих аналитических функций ClickHouse недостаточно, можно расширить их с помощью UDF. Хотя можно преобразовывать данные непосредственно в ClickHouse или перед вставкой с помощью SQL-запросов, эта колоночная СУБД также позволяет использовать внешние инструменты, например Python через chDB. Таким образом, MLOps-инженер может представить встроенный ClickHouse как модуль Python и использовать его для преобразования и манипулирования большими датафреймами данных в интерактивных блокнотах. Это позволяет выполнять работу по преобразованию данных на стороне клиента, а результаты материализовать в виде таблиц признаков в централизованном экземпляре ClickHouse.
ClickHouse может выступать как оффлайн-хранилище признаков с возможностями чтения данных из нескольких источников и применения преобразований через SQL. Результаты этих запросов сохраняются в ClickHouse с помощью операторов INSERT INTO SELECT. Поскольку преобразования часто группируются по идентификатору сущности и возвращают несколько столбцов в качестве результатов, схема вывода ClickHouse может автоматически определять требуемые типы из этих результатов и создавать соответствующую схему таблицы для их хранения. Функции для генерации случайных чисел и статистической выборки позволяют эффективно итерировать и масштабировать данные до миллионов или строк в секунду для подачи в конвейеры обучения ML-модели.
Часто признаки представлены в таблицах с меткой времени, указывающей значение для сущности и признака в определенный момент. Как было отмечено ранее, ML-конвейерам требуется состояние признаков в определенных моментах времени и в конкретных группах. Разреженные индексы ClickHouse, о которых мы писали здесь, позволяют быстро фильтровать данные для запросов на определенный момент времени и фильтров выбора признаков.
В отличие от пакетных stateful-запросов в Spark, Redshift и BigQuery, которые используют медленные оконные подходы с сохранением состояния для определения состояния признаков в определенный момент времени, ClickHouse поддерживает запрос ASOF (as-of-this-time) LEFT JOIN и функцию argMax. Помимо упрощения синтаксиса, такой подход отличается высокой производительностью на больших наборах данных за счет использования алгоритма сортировки и слияния. Это позволяет быстро создавать группы признаков, сокращая время подготовки данных перед обучением.
Наконец, ClickHouse имеет встроенную поддержку векторных вложений через массивы с плавающей точкой. Их можно искать и сравнивать с помощью функций расстояния, что позволяет использовать ClickHouse в качестве векторной базы данных. Это сравнение можно легко масштабировать и распараллеливать для больших наборов данных. Кроме того, ClickHouse имеет развивающуюся поддержку ANN-индексов алгоритма ближайших соседей (Approximate Nearest Neighbour) , а также гиперплоскостных индексов с использованием чистого SQL , как требуется для больших наборов векторных данных.
В заключение отметим, что возможности масштабирования ClickHouse становятся еще одним аргументом для использования этой колоночной базы данных в качестве хранилища признаков систем Machine Learning. Один экземпляр ClickHouse можно масштабировать вертикально для обработки петабайт данных, добавляя дополнительные экземпляры для обеспечения высокой доступности. Это сокращает перемещение данных между хранилищами, сводя к минимуму сетевые риски и задержку обработки.
Таким образом, ClickHouse хорошо подходит для ML-задач благодаря следующим характеристикам:
- высокая скорость аналитической обработки данных в режиме реального времени;
- колоночно-ориентированное хранение, что позволяет эффективно вычислять статистики по столбцам, выполнять агрегации и анализ данных;
- отличная масштабируемость позволяет обрабатывать возрастающие объемы данных без значительных потерь в производительности, что важно для ML-задач с большими датасетами;
- интеграция с инструментами сбора и анализа данных, от Apache Kafka и Spark до BI-систем;
- поддержка сложных SQL-запросов и широкий набор функций для работы с данными, включая временные ряды, распределенные вычисления и аналитические вычисления.
Эти возможности делают ClickHouse отличным выбором для ML-задач, требующих высокой производительности и гибкости в обработке больших объемов данных.
Освойте использование ClickHouse для аналитики больших данных на специализированных курсах в нашем лицензированном учебном центре обучения и повышения квалификации для разработчиков, менеджеров, архитекторов, инженеров, администраторов, Data Scientist’ов и аналитиков Big Data в Москве:
Источники