Как решать задачи машинного обучения в Greenplum с агентом gpMLBot и расширением PostgresML: возможности, ограничения и примеры.
Что такое gpMLBot: Greenplum Automated Machine Learning Agent
Чтобы использовать Greenplum как хранилище данных в задачах машинного обучения, в этой БД поддерживаются соответствующие механизмы. Одним из них является библиотека Apache MADlib, о которой мы писали здесь. Кроме нее в релизе VMware Greenplum 7.3.0 представлен gpMLBot (Greenplum Automated Machine Learning Agent) — CLI-интерфейс, помогающий пользователям использовать Apache MADlib и PostgresML для автоматизированной обработки данных, оптимизации гиперпараметров и управления моделями. Агент gpMLBot облегчает обучение, прогнозирование и развертывание ML-алгоритмов, упрощая сложные задачи и снижая порог входа в расширенную аналитику больших данных. Он входит в пакет Greenplum Clients RHEL 8.x/9.x. Поскольку задачи машинного обучения обычно занимают много ресурсов, использование gpMLBot может привести к высокому потреблению ЦП и памяти. Поэтому рекомендуется создать отдельную группу ресурсов Greenplum и добавить в нее роли пользователей, которые работают с gpMLBot.
Агент gpMLBot работает в 3 этапа:
- train — на этапе обучения gpMLBot запускает несколько алгоритмов и ранжирует их по точности и достоверности. Точный алгоритм генерирует значения, близкие к истинному или принятому значению, генерируя значения, которые последовательно близки друг к другу. Наиболее эффективный алгоритм сохраняется в качестве обученной модели для будущего прогнозирования или развертывания.
- predict — на этапе прогнозирования выбираются обученная модель и новый набор данных. Затем прогнозы запускаются для вывода прогнозируемых значений. На этом этапе следует выбрать целевую базу данных, целевую таблицу, столбец идентификатора, столбец прогнозирования и сохраненную ML-модель. Результаты прогнозирования включают количество прогнозируемых значений для задач классификации или диапазон прогнозируемых значений для задач регрессии.
- deploy – на этапе развертывания выбирается место назначения развертывания и ML-модель, которую надо использовать. Сгенерированные файлы нужны для загрузки модели в производственную базу данных, например Greenplum или PostgreSQL, и выполнения ML-модель в производственном конвейере.
Прогнозирование — это автоматизированный, одноразовый запуск модели. Развертывание подразумевает постоянную интеграцию модели в производственную среду, поэтому требует более ручного подхода.
Агент gpMLBot использует собственную базу данных Greenplum, в которую необходимо установить библиотеку MADlib, а также пакет Python Data Science Package для использования расширения PostgresML, которое мы рассмотрим далее. После установки или обновления gpMLBot следует от имени суперпользователя запустить миграцию схемы для создания внутренних объектов, используемых ML-агентом.
Расширение PostgresML и как его использовать в задачах Machine Learning
PostgresML — это расширение машинного обучения для PostgreSQL, которое позволяет вам выполнять обучение и вывод на основе текстовых и табличных данных с использованием SQL-запросов. Это расширение с открытым исходным кодом превращает PostgreSQL и основанную на ней Greenplum в сквозную платформу Machine Learning. Оно позволяет создавать, обучать и развертывать модели машинного обучения непосредственно в базе данных без перемещения данных между системами. PostgresML устанавливается как расширение в превращает PostgreSQL и Greenplum, предоставляя функции SQL API для каждого шага рабочего ML-процесса. Например, импорт данных, преобразование признаков, обучение моделей, создание прогнозов и пр. Модели сохраняются обратно в таблицы базы данных. Это ускоряет разработку ML-проектов и обеспечивает более тесную интеграцию между машинным обучением и бизнес-приложениями, гарантируя надежное хранение данных и соблюдение ACID-требований к транзакциям, а также горизонтальное масштабирование.
С PostgresML можно интегрировать модели машинного обучения в базу данных Greenplum и использовать мощные аналитические алгоритмы для эффективной обработки большого объема данных. Модуль PostgresML включает десятки тысяч предварительно обученных моделей машинного обучения с открытым исходным кодом от платформы Hugging Face AI data science.
Перед регистрацией модуля PostgresML в Greenplum необходимо установить пакет Data Science для Python3.11, добавить библиотеку pgml в набор библиотек, загружаемых сервером Greenplum при запуске, а также настроить виртуальную среду Python. Для этого надо использовать параметр конфигурации сервера shared_preload_libraries, а затем перезапустить кластер. Далее следует зарегистрировать расширение PostgresML в каждой базе данных Greenplum. После регистрации можно использовать функции расширения:
- pgml.load_dataset() – загружает набор данных в таблицы в Greenplum с помощью INSERT-оператора SQL;
- pgml.embed() – генерирует вложение для набора данных;
- pgml.transform() – применяет предварительно обученный трансформер для обработки данных;
- pgml.train() – обрабатывает различные задачи машинного обучения, которые настраиваются с помощью параметров функции;
- pgml.predict() – предоставляет онлайн-прогнозы с использованием лучшей, автоматически развернутой модели для проекта.
Чтобы понять, как это работает, рассмотрим пару примеров. Следующий пример загружает набор данных tweet_eval с меткой sentiment из Интернета и создает соответствующую таблицу для хранения данных.
SELECT pgml.load_dataset('tweet_eval', 'sentiment');
Далее используется ML-модель distilbert-base-uncased для создания векторного представления (эмбеддинга) для текста Star Wars christmas special is on Disney.
SELECT pgml.embed('distilbert-base-uncased', 'Star Wars christmas special is on Disney')::vector AS embedding;
Запрос извлекает текст и генерирует эмбеддинги для первых пяти записей в таблице tweet_eval, а затем создает новую таблицу tweet_embeddings, которая хранит текст и соответствующие эмбеддинги для первых пяти записей из исходной таблицы tweet_eval.
CREATE TABLE tweet_embeddings AS SELECT text, pgml.embed('distilbert-base-uncased', text) AS embedding FROM pgml.tweet_eval limit 5;
Наконец, для перевода текстов с английского языка на французский используется предобученную модель translation_en_to_fr. В данном примере переводятся две строки: «Welcome to the future!» и «Where have you been all this time?»
SELECT pgml.transform( 'translation_en_to_fr', inputs => ARRAY[ 'Welcome to the future!', 'Where have you been all this time?' ] ) AS french;
Другой пример выполняет загрузку данных, делает выборку первых нескольких записей, обучает ML-модель для классификации рукописных цифр и предсказывает первые 10 меток с использованием обученной модели. Чтобы загрузить датасет digits с изображениями рукописных цифр в Greenplum, используется функция pgml.load_dataset().
SELECT * FROM pgml.load_dataset('digits');
Этот запрос выбирает первые 5 записей из таблицы pgml.digits, получая столбцы target (истинные метки) и image (сами изображения).
SELECT target, image FROM pgml.digits LIMIT 5;
Для обучения ML-модели вызывается функция pgml.train() с параметрами:
SELECT * FROM pgml.train( 'Handwritten Digit Image Classifier', 'classification', 'pgml.digits', 'target' );
Наконец, чтобы спрогнозировать метки для первых 5 записей из таблицы pgml.digits с использованием обученной модели Handwritten Digit Image Classifier, используется следующий запрос:
SELECT target, pgml.predict('Handwritten Digit Image Classifier', image) AS prediction FROM pgml.digits LIMIT 5;
В результате его выполнения отображаются 5 истинных меток target и предсказанные значения prediction.
Таким образом, благодаря специальным расширениям PostgreSQL и Greenplum отлично подходят не только для транзакционных задач, но и для расширенной аналитики больших данных с помощью машинного обучения.
Освойте администрирование и эксплуатацию Greenplum для аналитики больших данных на специализированных курсах в нашем лицензированном учебном центре обучения и повышения квалификации для разработчиков, менеджеров, архитекторов, инженеров, администраторов, Data Scientist’ов и аналитиков Big Data в Москве:
Источники