Недавно мы рассказывали про оптимизацию SQL-запросов в PXF – интеграционном фреймворке Greenplum. Сегодня рассмотрим, как этот способ обращения к внешним источникам данных можно применить к задачам машинного обучения на примере распознавания изображений. Platform Extension Framework как инструмент извлечения и преобразования изображений из облачных объектных хранилищ для обучений глубоких нейросетей с Apache MADlib.
Еще раз про PXF: интеграция с внешними источниками данных
Обработка изображений с помощью нейросетей – одно из наиболее востребованных сегодня приложений методов Machine Learning. В частности, с помощью сверточных нейросетей (CNN) можно сравнивать спутниковые снимки Земли и отслеживать изменения ландшафта с течением времени. Для этого нужны инструменты, которые позволяют не только создавать ML-модели, но и запрашивать изображения из различных источников, а также масштабировать вычислительные ресурсы по мере изменения объемов данных. Поскольку Greenplum является надежной аналитической MPP-СУБД, ее вполне можно использовать в этом качестве. А интеграционный фреймворк Platform Extension Framework (PXF) позволяет пользователям Greenplum запрашивать внешние источники данных с помощью встроенных коннекторов, обеспечивая параллельный доступ к информации с высокой пропускной способностью. Еще PXF дает возможность выполнять операторы SQL-запроса в других системах: транзакционных или аналитических базах (PostgreSQL, MySQL, Oracle, Apache Hive и пр.), облачных объектных хранилищах (AWS S3, Azure Blob Starage, Google Cloud Storage) и файловых системах типа Apache Hadoop HDFS. По сути, PXF предоставляет SQL-интерфейс для запросов к сторонним системам, а его встроенные коннекторы сопоставляют определения внешних таблиц Greenplum с источниками данных в различных форматах и структурах.
PXF позволяет пользователям читать и записывать данные из/в разнородные источники данных с помощью внешних таблиц, поддерживая масштабирование и распараллеливание операций для всех сегментов. PXF реализует pxf-протокол Greenplum для создания внешней таблицы, которая ссылается на данные во внешнем хранилище. После настройки PXF и назначения привилегий пользователь через команду CREATE EXTERNAL TABLE может создать внешнюю таблицу по pxf-протоколу. Например, если файлы изображений хранятся в AWS S3, обратиться к ним из PXF через создание внешней таблицы можно следующим образом:
CREATE READABLE EXTERNAL TABLE image_table( fullpaths TEXT[], directories TEXT[], names TEXT[], image INT[] ) LOCATION ('pxf://bucket/chip_images/*.png? PROFILE=s3:image&SERVER=s3&BATCH_SIZE=64') FORMAT 'CSV';
В этом SQL-запросе условие LOCATION определяет протокол pxf как URI пути расположения внешних данных, а PROFILE определяет профиль для доступа к ним, в зависимости от формата: текст, AVRO, JSON, RCFile, Parquet, SequenceFile, ORC и файлы изображений. SERVER предоставляет информацию о сервере: местоположение, учетные данные для доступа и пр, а BATCH_SIZE определяет количество изображений, загружаемых PXF в одну строку. Подробнее о параметрах SQL-запроса в PXF мы писали здесь.
Greenplum и MADlib для машинного обучения
Расширяемая архитектура PXF позволяет получать много изображений из внешнего источника очень быстро благодаря высокой степени параллелизма и встроенному механизму фрагментации всего набора данных на подмножества, которые могут извлекаться и обрабатываться параллельно каждым worker’ом сегмента Greenplum. PXF считывает каждый файл изображения как строку данных и попиксельно переводит изображение в математическое представление для эффективного хранения и обработки в Greenplum. Так PXF переводит каждый пиксель картинки в трехэлементный массив из значений красного, зеленого и синего цветов. Например, изображение CMYK размером 256×256×4 может быть представлено как трехмерный целочисленный RGB-массив размером 256×256×3.
При таком подходе одно изображение может храниться в кортеже базы данных с использованием целочисленного типа массива. Однако сжатие большего количества данных в кортеже является преимуществом для машинного обучения, поскольку сокращает количество сканирований таблиц во время обучения модели. Можно уместить несколько изображений в один кортеж базы данных: Greenplum позволяет хранить до 1 ГБ данных в кортеже, поэтому в один кортеж войдет 675 изображений размером 256×256 пикселей. PXF обычно обращается к строке данных из одного файла, разбивает его на поля, чтобы сформировать кортеж базы данных, а затем передает его в Greenplum. Для загрузки изображений PXF считывает данные из любого количества файлов, которое может поместиться в один кортеж.
Создание кортежа базы данных из всех изображений сразу перед отправкой кортежа в Greenplum неэффективно. Решить эту проблему поможет итератор, который добавляет одно изображение к кортежу во время обработки и отправляет его в Greenplum до того, как весь кортеж будет получен и обработан. В несколько раз снизить объем памяти поможет потоковая передача метаданных во время вызова фрагментации.
Что касается самих алгоритмов машинного обучения, их помогут реализовать специальные фреймворки или библиотеки, которые содержат популярные ML-методы, от логистической регрессии, деревьев решений и k-средних до нейросетей глубокого обучения, сверточных и рекуррентных. Глубокое обучение – это подвид машинного обучения, когда ML-модель обучается представления, т.н. фичам, а не специализированным алгоритмам под конкретные задачи. Глубокие нейросети имеют сложную архитектуру слоев, а потому их обучение требует большого количества вычислительных ресурсов. Сегодня глубокие нейросети часто используются в задачах распознавания речи, визуальных образов и генерации изображений.
Чтобы реализовать глубокую нейросеть, можно взять Apache Spark с его модулями ML и MLLib или проект с исходным кодом MADlib, который имеет SQL-интерфейс и интегрируется с Greenplum, тоже поддерживая распараллеливание вычислений. В частности, благодаря наличию определяемых пользователем агрегатов (UDA, User Defined Aggregate) и функций (UDF, User Defined Functions) в MADlib можно реализовать математические вычисления на языке SQL-запросов, которые принимают на вход значения произвольного числа строк.
UDF используются для реализации сложных итерационных stateful-методов и вызывают UDA с фактическими вычисления, которые затем выполняются для отдельных сегментов. Затем результаты этих отдельных сегментов собираются обратно в главный узел Greenplum, который затем возвращает окончательный набор результатов. Таким образом, все большие перемещения данных выполняются в ядре базы данных, а вычисления эффективно распараллеливаются.
После того, как изображения были загружены в СУБД и преобразованы с помощью PXF, можно строить ML-модели классификации. Обучение глубоких нейросетей требует много вычислительных ресурсов из-за серии испытаний для создания хорошей архитектуры модели и настройки ее гиперпараметров. MPP-архитектура Greenplum оптимизирует эту задачу, распараллеливая вычисления для обучения разных конфигураций ML-моделей.
А ускорить определенные операции с базой данных за счет распараллеливания некоторой части рабочей нагрузки, например, операций агрегирования, сортировки, группировки, и уменьшения зависимости от индексации и секционирования поможет использование графических процессоров. Greenplum поддерживает гетерогенные архитектуры и специализированные DL-фреймворки типа CUDA, cuDNN, Keras, TensorFlow и пр. также применять специальные методы машинного обучения для обработки данных, хранящихся в GP, можно с помощью соответствующих расширений, например, PostgresML, о котором мы рассказываем в новой статье.
Данный подход совместного использования Greenplum, PXF и Apache MADlib был предложен в 2020 году исследователями из компаний VMware, Intuit и Университета California San Diego и успешно протестирован на кластере из 4 хостов в Google Cloud Platform, каждый с 32 виртуальными ЦП, 150 ГБ памяти и 4 графическими процессорами NVIDIA Tesla P100. База данных Greenplum 5 и Apache MADlib 1.17 были установлены в кластере с 4 сегментами, настроенными на каждый хост, т.е. всего 16 worker’ов. В качестве Deep Learning фреймворков использовались Keras 2.2.4 и TensorFlow 1.13.1. Подробные результаты исследования представлены в источнике [3].
Освойте администрирование и эксплуатацию Greenplum с Arenadata DB для эффективного хранения и аналитики больших данных на специализированных курсах в нашем лицензированном учебном центре обучения и повышения квалификации для разработчиков, менеджеров, архитекторов, инженеров, администраторов, Data Scientist’ов и аналитиков Big Data в Москве:
Источники
- https://greenplum.org/platform-extension-framework-pxf-enabling-parallel-query-processing-over-heterogeneous-data-sources-in-greenplum/
- https://greenplum.org/image-classification-in-greenplum-database-using-deep-learning/
- https://s3.amazonaws.com/greenplum.org/wp-content/uploads/2020/05/12170349/Image-Classification-in-Greenplum.pdf