Как использовать Greenplum в проектах машинного обучения: знакомимся с расширением PostgresML и модулем pgvector. Возможности и ограничения плагинов, превращающих MPP-СУБД в полноценный MLOps-инструмент.
Как превратить Greenplum в векторную базу данных с расширением pgvector
Будучи вариацией PostgreSQL с механизмами массово-параллельной загрузки, Greenplum отлично справляется с огромным объемом данных. Однако, к хранилищам данных, используемым в ML-проектах, предъявляются особые требования. В частности, современные ИИ-решения активно используют векторные СУБД для реализации встраиваний, о чем мы подробно рассказывали здесь.
Встраивание в ML представляет собой сложный объект, преобразованный в вектор — список чисел, который отражает семантические и синтаксические отношения данных. Обычно для работы со выстраиваниями используются специализированные векторные СУБД (Pinecone, Milvus, Weaviate, Enterprise-редакция key-value базы Redis, SingleStore, Relevance AI, Qdrant, Vespa и др.), однако, Greenplum тоже можно использовать для этого, если дополнить ее возможности модулем pgvector.
Модуль pgvector предоставляет возможности поиска векторного сходства, которые позволяют искать, хранить и запрашивать встраивания в больших масштабах. Этот модуль для Greenplum эквивалентен версии модуля pgvector 0.5.0, используемого с PostgreSQL. Модуль pgvector предоставляет тип данных vector и методы доступа к индексу ivfflat и hnsw. Тип, методы, а также вспомогательные функции и операторы, предоставляемые модулем, позволяют выполнять точный и приблизительный поиск соседей и определять L2, внутренний продукт и косинусное расстояние между вложениями. Также можно использовать модуль для хранения и запроса вложений.
Тип данных vector представляет собой n-мерную координату. Каждый vector занимает 4-х кратное измерение (4*dimensions) и 8 байт памяти. Каждый элемент представляет собой число одинарной точности с плавающей запятой аналогично типу real в Greenplum, и все элементы должны быть конечными (без NaN, Infinity или -Infinity). Векторы могут иметь до 16 000 измерений.
Модуль pgvector для Greenplum имеет следующие ограничения:
- оптимизатор запросов GPORCA не поддерживает методы доступа к индексу ivfflat и hnsw. Запросы к таблицам, использующим эти типы индексов, возвращаются к планировщику на основе PostgreSQL.
- AO-таблицы, оптимизированные для добавления, не могут использовать векторные индексы;
- Размер индекса (вектора) может быть больше размера таблицы.
Модуль pgvector устанавливается при установке базы данных Greenplum. Но, прежде чем использовать его типы данных и метод доступа к индексу, надо зарегистрировать расширение vector в каждой базе данных:
CREATE EXTENSION vector;
MLOps с MPP-СУБД: расширение PostgresML
Продолжая разговор про ИИ и машинное обучение при использовании Greenplum также следует сказать про PostgresML — ML-расширение для PostgreSQL, которое позволяет выполнять обучение и вывод текстовых и табличных данных с помощью SQL-запросов. С помощью PostgresML можно интегрировать ML-модели в базу данных VMware Greenplum и использовать возможности передовых алгоритмов для эффективной обработки данных. Модуль postgresml предоставляет функции PostgresML для использования десятков тысяч предварительно обученных ИИ-моделей с открытым исходным кодом, представленные платформой обработки данных Hugging Face AI.
Можно сказать, что PostgresML превращает PostgreSQL и Greenplum в комплексную MLOps-платформу, интегрируя в обработку данных ключевые компоненты рабочего процесса машинного обучения. Без привлечения внешних систем, т.е. не перемещая данные за пределы PostgreSQL и Greenplum, PostgresML позволяет этим СУБД работать как хранилище фичей и/или моделей, а также играть роль механизма машинного обучения и службы вывода. Такая консолидация упрощает создание и развертывание высокопроизводительных ИИ-приложений, работающих в режиме реального времени. PostgresML поддерживает контролируемые и неконтролируемые алгоритмы, такие как регрессия, кластеризация, глубокие нейронные сети и пр.
Можно строить ML-модели, используя SQL на данных, хранящихся в PostgreSQL и Greenplum. Модели сохраняются обратно в исходную базу данных для последующего вывода с малой задержкой. PostgresML также можно применять для работы с большими языковыми моделями, такими как GPT-3 и другими генеративными нейросетями. В частности, всего с помощью нескольких строк SQL-запросов можно использовать современные NLP-технологии для семантического поиска, анализа текста, извлечения информации, обобщения документов, перевода текста и прочих задач обработки естественного языка. PostgresML имеет открытый исходный код, но также предлагается как полностью управляемый облачный сервис. В дополнение к API SQL он предоставляет пакеты SDK для Javascript, Python и Rust для быстрого создания векторного поиска, чат-ботов и других ML-приложений.
Например, следующий код загружает в Greenplum набор данных и создает таблицу для их хранения, создает вложение для текста, а также загружает и запускает предварительно обученные модели:
# Download the dataset from the internet and create table for it SELECT pgml.load_dataset('tweet_eval', 'sentiment'); # Generate an embedding for the text SELECT pgml.embed('distilbert-base-uncased', 'Star Wars christmas special is on Disney')::vector AS embedding; --------------------------------------------------------------------------------------------- SELECT text, pgml.embed('distilbert-base-uncased', text) FROM pgml.tweet_eval limit 5; --------------------------------------------------------------------------------------------- CREATE TABLE tweet_embeddings AS SELECT text, pgml.embed('distilbert-base-uncased', text) AS embedding FROM pgml.tweet_eval limit 5; # Download and run pre-trained models SELECT pgml.transform( 'translation_en_to_fr', inputs => ARRAY[ 'Welcome to the future!', 'Where have you been all this time?' ] ) AS french;
Для горизонтального масштабирования PostgresML использует PgCat, усовершенствованный прокси-сервер PostgreSQL и балансировщик нагрузки. PgCat обеспечивает сегментирование, балансировку нагрузки, аварийное переключение и зеркалирование для достижения чрезвычайно высокой пропускной способности и низкой задержки. Сохраняя весь рабочий процесс машинного обучения в Postgres и Greenplum, PostgresML позволяет избежать дорогостоящих сетевых вызовов между разрозненными системами, обрабатывая миллионы запросов в секунду. Репликация PgCat и Postgres обеспечивает плавное масштабирование при сохранении целостности транзакций.
Модуль postgresml устанавливается при установке Greenplum, но, чтобы использовать его, нужно зарегистрировать это расширение в каждой базе данных с помощью инструкции
CREATE EXTENSION pgml;
Перед регистрацией модуля необходимо установить пакет Data Science для Python 3.9, добавить библиотеку pgml в набор библиотек, загружаемых при запуске сервером VMware Greenplum, и настроить виртуальную среду Python.
В заключение отметим, что расширение postgresml пока поддерживает не все функции PostgresML, а лишь часть из них:
- load_dataset() – загружает набор данных в таблицы в VMware Greenplum с помощью INSERTкоманды SQL;
- embed() – создает внедрение для набора данных;
- transform() – применяет предварительно обученный преобразователь для обработки данных.
Освойте администрирование и эксплуатацию Greenplum с Arenadata DB для эффективного хранения и аналитики больших данных на специализированных курсах в нашем лицензированном учебном центре обучения и повышения квалификации для разработчиков, менеджеров, архитекторов, инженеров, администраторов, Data Scientist’ов и аналитиков Big Data в Москве:
- Greenplum для инженеров данных
- Администрирование Greenplum / Arenadata DB
- Разработка и внедрение ML-решений
Источники