Как Spark работает с платформами глубокого обучения для обработки неструктурированных данных

глубокое обучение
Как Spark работает с платформами глубокого обучения для обработки неструктурированных данных

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

Введение в Спарк

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

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

Поскольку библиотека Spark предоставляет API-интерфейсы, написанные на Python, Scale и Java, а также встроенные модули для машинного обучения, потоковой передачи данных, графовых алгоритмов и SQL-подобных запросов, Spark быстро становится одной из самых важных сред распределенных вычислений на сегодняшний день. . В сочетании с YARN Spark представляет собой дополнение, а не замену существующего кластера Hadoop. В последней версии Spark Spark добавил поддержку K8s, обеспечивая лучшую поддержку интеграции возможностей Spark и AI.

Введение в фреймворки глубокого обучения

TensorFlow

Первоначально TensorFlow был разработан командой Google Brain в отделе исследований машинного интеллекта Google и построен на DistBelief, инфраструктуре глубокого обучения, разработанной Google в 2011 году. Благодаря огромному влиянию Google и сильным возможностям продвижения в области глубокого обучения, TensorFlow сразу же после запуска привлек большое внимание и быстро стал фреймворком для глубокого обучения с большинством пользователей сегодня.

TensorFlow — очень простая система, поэтому ее можно применять во многих областях. Однако из-за чрезмерно сложной конструкции системы читатели очень болезненно изучают базовый механизм работы TensorFlow. Интерфейс TensorFlow был в быстрой итерации, а обратная совместимость не рассматривалась должным образом, что привело к тому, что многие открытые исходные коды теперь не могут работать в новой версии TensorFlow, а также косвенно привело к появлению многих сторонних фреймворков, основанных на TensorFlow. ОШИБКА.

Keras

Keras, впервые выпущенный в марте 2015 года, имеет «API, разработанный для людей, а не машин» и поддерживается Google. Это библиотека нейронных сетей высокого уровня для быстрого создания прототипов глубокого обучения. Она написана на чистом Python и использует TensorFlow, CNTK, Theano и MXNet в качестве базовых механизмов. Она предоставляет простой в использовании интерфейс API, который может значительно снизить потребность в общих приложениях.Рабочая нагрузка на пользователя.

Строго говоря, Keras нельзя назвать фреймворком для глубокого обучения, это скорее интерфейс глубокого обучения, который построен на стороннем фреймворке. Недостаток Keras очевиден: чрезмерная инкапсуляция приводит к потере гибкости. Keras начинался как высокоуровневый API для Theano, а позже добавил TensorFlow и CNTK в качестве серверных частей. Изучить Keras легко, но он быстро сталкивается с узким местом, потому что ему не хватает гибкости. Кроме того, большую часть времени при использовании Keras пользователи в основном обращаются к интерфейсу, и по-настоящему изучить содержание глубокого обучения сложно.

PyTorch

Выпущенный в октябре 2016 года PyTorch представляет собой низкоуровневый API, предназначенный для прямого манипулирования выражениями массива. Ранее Torch (библиотека глубокого обучения на основе языка Lua). Исследовательский институт искусственного интеллекта Facebook оказывает мощную поддержку PyTorch. PyTorch поддерживает динамические вычислительные графы, предоставляя методы более низкого уровня и большую гибкость для более склонных к математике пользователей.Многие недавно опубликованные статьи в настоящее время используют PyTorch в качестве инструмента для реализации на бумаге, что становится предпочтительным решением для академических исследований.

Caffe/Caffe2.0

Полное название Caffe — Convolutional Architecture for Fast Feature Embedding, Это четкая и эффективная структура глубокого обучения, разработанная Калифорнийским университетом в Беркли в конце 2013 г. Основным языком является C++. Он поддерживает интерфейсы командной строки, Python и MATLAB. Важной особенностью Caffe является то, что модели можно обучать и развертывать без написания кода. Если вы являетесь опытным пользователем C++ и знакомы с вычислениями CUDA, вы можете рассмотреть возможность выбора Caffe.

Использование фреймворков глубокого обучения в Spark для обработки больших данных

Используйте предварительно обученную модель в программе Spark и применяйте ее для параллельной обработки больших наборов данных. Например, модель классификации, которая может распознавать изображения, была обучена на стандартном наборе данных (например, ImageNet). Платформа, такая как TensorFlow или Keras, может быть вызвана в программе Spark для распределенного прогнозирования. Неструктурированные данные можно обрабатывать напрямую, вызывая предварительно обученные модели во время обработки больших данных.

Мы сосредоточимся на использовании Keras + TensorFlow для вывода моделей в программах Spark.

Первым шагом в использовании глубокого обучения для обработки изображений является их загрузка. ImageSchema, новая в Spark 2.3, содержит служебные функции для загрузки миллионов изображений в Spark DataFrames и автоматического декодирования их распределенным способом, что позволяет масштабировать операции.

Используя ImageSchema Spark:

from pyspark.ml.image import ImageSchema
image_df = ImageSchema.readImages("/data/myimages")
image_df.show()

Вы также можете использовать библиотеку обработки изображений Keras:

from keras.preprocessing import image
img = image.load_img("/data/myimages/daisy.jpg", target_size=(299, 299))

Spark DataFrame может быть создан из пути к изображению:

def get_image_paths_df(sqlContext, dirpath, colName):
    files = [os.path.abspath(os.path.join(dirpath, f)) for f in os.listdir(dirpath) if f.endswith('.jpg')]
    return sqlContext.createDataFrame(files, StringType()).toDF(colName)

Загрузите предварительно обученную модель с помощью интерфейса Keras:

from keras.applications import InceptionV3
model = InceptionV3(weights="imagenet")
model.save('/tmp/model-full.h5')
model = load_model('/tmp/model-full.h5')

Определите метод вывода распознавания изображений:

        def iv3_predict(fpath):
            model = load_model('/tmp/model-full.h5')
            img = image.load_img(fpath, target_size=(299, 299))
            x = image.img_to_array(img)
            x = np.expand_dims(x, axis=0)
            x = preprocess_input(x)
 
            preds = model.predict(x)
            preds_decode_list = decode_predictions(preds, top=3)
            tmp = preds_decode_list[0]
            res_list = []
            for x in tmp:
                res = [x[0], x[1], float(x[2])]
                res_list.append(res)
            return res_list

Определите схему результата ввода логического вывода:

def get_labels_type():    
    ele_type = StructType()    
    ele_type.add("class", data_type=StringType())    
    ele_type.add("description", data_type=StringType())    
    ele_type.add("probability", data_type=FloatType())    
    return ArrayType(ele_type)

Определите метод вывода как пользовательскую функцию Spark:

spark.udf.register("iv3_predict", iv3_predict, returnType=get_labels_type())

Загрузите определение изображения в виде таблицы данных:

df = get_image_paths_df(self.sql)
df.createOrReplaceTempView("_test_image_paths_df")

Используйте операторы SQL для подключения изображений для обработки:

df_images = spark.sql("select fpath, iv3_predict(fpath) as predicted_labels from _test_image_paths_df")
df_images.printSchema()
df_images.show(truncate=False)

Эпилог

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

Служба HUAWEI CLOUD DLI использует бессерверную архитектуру больших данных, и пользователям не нужно воспринимать фактический физический кластер.В то же время служба DLI имеет встроенную вычислительную среду ИИ и базовые библиотеки зависимостей (Keras/tensorflow/scikit Learn/pandas/numpy и т. д.) в кластере больших данных. ). Последняя версия DLI уже поддерживает экосистему k8s+Docker и открывает для пользователей возможность настраивать образы Docker, предоставляя пользователям возможность расширять свои фреймворки, модели и пакеты алгоритмов ИИ. На основе Serverless он предоставляет пользователям более открытые возможности пользовательских расширений.


Нажмите «Подписаться», чтобы впервые узнать о новых технологиях HUAWEI CLOUD~