Spark + Deeplearning (SparkDL)
Spark에서 Deeplearning을 사용하기 위한 타 라이브러리가 많이 존재하지만, 이번 포스팅에서는 Databricks에서 개발되고 있는 SparkDL이라는 라이브러리를 이용하여 딥러닝을 수행해봅니다.
현재 Spark 개발을 주도하고 있는 Databricks에서 지원하는 SparkDL은 딥러닝과 관련된 기능을 제공하고 있으며 주로 이미지 데이터에 대한 DL Pipeline과 Transfer Learning, Hyperparameter Tuning의 기능을 제공하고 있다. SparkDL 자체만을 가지고는 다양한 모델의 개발은 좀 한계가 있는 걸로 보이며, 지원하는 모델은 아래와 같다.
- InceptionV3
- Xception
- ResNet50
- VGG16
- VGG19
현재 호환되는 버전은 아래와 같다.
- Spark 2.3.0
- Python 3.6 & Scala 2.11
사용법
from pyspark.ml.image import ImageSchema
image_df = ImageSchema.readImages("/data/myimages")
from sparkdl.image import imageIO as imageIO
image_df = imageIO.readImagesWithCustomFn("/data/myimages",decode_f=<your image library, see imageIO.PIL_decode>)
from pyspark.ml.classification import LogisticRegression
from pyspark.ml.evaluation import MulticlassClassificationEvaluator
from pyspark.ml import Pipeline
from sparkdl import DeepImageFeaturizer
featurizer = DeepImageFeaturizer(inputCol="image", outputCol="features", modelName="InceptionV3")
lr = LogisticRegression(maxIter=20, regParam=0.05, elasticNetParam=0.3, labelCol="label")
p = Pipeline(stages=[featurizer, lr])
model = p.fit(train_images_df) # train_images_df is a dataset of images and labels
# Inspect training error
df = model.transform(train_images_df.limit(10)).select("image", "probability", "uri", "label")
predictionAndLabels = df.select("prediction", "label")
evaluator = MulticlassClassificationEvaluator(metricName="accuracy")
print("Training set accuracy = " + str(evaluator.evaluate(predictionAndLabels)))
더 자세한 개요와 내용은 SparkDL github에서 확인 할 수 있다.
https://github.com/databricks/spark-deep-learning
databricks community를 이용하면 바로 SparkDL 라이브러리를 사용해 볼 수 있다. databricks community에 가입하여 로그인 합니다.
로그인하면 아래와 같은 databricks notebook을 사용 할 수 있는 메인화면으로 접속됩니다.
databricks에서 제공되는 SparkDL 샘플 코드를 노트북에 업로드 합니다.
메인화면 가운데에 Import & Explore Data 버튼을 클릭하여 다운로드한 SparkDL 샘플 코드를 선택합니다.
업로드하여 노트북을 오픈하면 SparkDL을 사용 할 수 있는 환경이 제공되고 Jupyter Notebook과 유사하게 실행하여 사용하면 됩니다.