Deep Learning Pipelines

15년 전 MapReduce가 소개되었을 때, 미래를 엿볼 수 있었습니다. 처음으로 실리콘밸리의 기술 회사 엔지니어들은 전체 인터넷을 분석 할 수 있었습니다. 그러나 MapReduce는 사용하기가 매우 어려운 저수준 API를 제공했기 때문에 결과적으로 이 “초강력”능력은 사치였습니다. 많은 자원을 가진 고도로 숙련된 엔지니어 중 소수만이 이를 사용할 여력이 있었습니다.

오늘날, 딥러닝은 “MapReduce”와 같은 상황에 도달했습니다. 최근 몇 년의 업적은 상상도 할 수 없었습니다. 자율주행차와 AlphaGo는 기적으로 생각되었을 것입니다.

그러나 오늘날 딥러닝의 강력한 힘을 활용하는 것은 과거의 빅데이터만큼이나 어렵습니다. 딥러닝 프레임워크는 저수준 API 때문에 가파른 학습 곡선을 가지고 있습니다. 분산된 하드웨어를 확장하려면 상당한 수작업이 필요합니다. 시간과 자원의 결합으로도 성공을 달성하려면 지루한 조작과 파라미터 실험이 필요합니다. 딥러닝은 종종 “흑마술”이라고 불립니다.

7년전, Databricks는 머신러닝, ETL, 스트리밍, 대화형 SQL을 수행하는 고급 API와 통합 엔진을 제공함으로써 빅​​데이터를 쉽고 강력하게 사용할 수 있게 한다는 단 하나의 목표로 Spark 프로젝트를 시작했습니다. 오늘날 Apache Spark는 소프트웨어 엔지니어부터 SQL 분석가까지 모두에게 빅데이터 사용 기술을 제공합니다.

이러한 비전을 계속 이어가며, 모든 사람들이 머신러닝 종사자에서 비즈니스 분석가에 이르기까지 확장 가능한 딥러닝을 워크플로우에 쉽게 통합 할 수 있도록 돕는 새로운 오픈소스 라이브러리인 Deep Learning Pipeline을 발표하였습니다.

Deep Learning Pipeline은 학습을 위해 Apache Spark의 ML 파이프라인과 모델 배포를 위해 Spark DataFrame, SQL을 기반으로합니다. 딥러닝의 일반적인 기능에 대한 고급 API가 포함되어 있으므로 몇 줄의 코드로 효율적으로 수행 할 수 있습니다.

  • 이미지 로딩

  • Spark ML 파이프라인에서 transformer로 사전 훈련된 모델 적용

  • Transfer learning

  • 분산된 하이퍼파라미터 튜닝

  • DataFrame과 SQL에 모델 배포

나머지 게시물에서는 이러한 각 기능을 예제로 자세히 설명합니다. Databricks에서 이들과 추가 예제를 시험해 보려면 Notebook에서 Deep Learning Pipelines with Databricks를 확인하십시오.

이미지 로딩

이미지에 딥러닝을 적용하는 첫번째 단계는 이미지를 로드하는 것입니다. Deep Learning Pipeline에는 수백만 개의 이미지를 DataFrame에 로드하고 이를 분산 방식으로 자동으로 해독하여 규모에 맞게 조작 할 수 있는 유틸리티가 포함되어 있습니다.

df = imageIO.readImages(“/data/myimages”)

또한 텍스트나 시계열과 같은 더 많은 데이터 유형에 대한 지원을 추가하는 작업중에 있습니다.

확장 가능 예측을 위한 사전 훈련된 모델 적용

Deep Learning Pipeline은 사전 훈련된 모델을 Spark로 분산 방식으로 실행하는 것을 지원합니다 . 배치와 스트리밍 데이터 처리 모두에서 사용할 수 있습니다 . 이 모델에는 가장 인기있는 모델이 포함되어 있어 사용자가 모델 학습에 많은 비용을 들이지 않고도 딥러닝을 시작할 수 있습니다. 예를 들어 다음 코드는 이미지 분류를위한 CNN(Convolutional Neural Network) 모델인 InceptionV3을 사용하여 Spark 예측 파이프라인을 만들고 방금 로드한 이미지의 개체를 예측합니다. 물론 이 예측은 Spark와 함께 제공되는 모든 장점과 병행하여 수행됩니다.

from sparkdl import readImages, DeepImagePredictor
predictor = DeepImagePredictor(inputCol=”image”, outputCol=”predicted_labels”, modelName=”InceptionV3″)
predictions_df = predictor.transform(df)

내장 모델을 사용하는 것 외에도 사용자는 Keras 모델과 TensorFlow 그래프를 Spark 예측 파이프라인에 연결할 수 있습니다 . 이렇게하면 단일 노드 도구의 모든 단일 노드 모델이 분산된 방식으로 많은 양의 데이터에 적용될 수 있는 모델로 바뀝니다.

Databricks의 Unified Analytics Platform에서 GPU 기반 클러스터를 선택하면 계산 집약적인 부분이 GPU에서 자동으로 실행되어 효율성이 극대화 됩니다.

Transfer learning

사전 훈련된 모델은 당면 과제에 적합할 때 매우 유용하지만 사용자가 다루는 특정 데이터세트에 최적화되지 않은 경우가 많습니다. 예를 들어, InceptionV3는 1000가지 카테고리의 광범위한 세트에서 이미지 분류를 위해 최적화된 모델이지만 도메인은 개 품종에 대한 분류일 수 있습니다. 딥러닝에서 일반적으로 사용되는 기술로 유사한 작업을 위해 훈련된 모델을 현재 작업에 적응시키는 Transfer Learning이 있습니다. 기초부터 새로운 모델을 훈련하는 것과 비교해 볼 때, Transfer Learning은 데이터와 자원을 상당히 적게 필요로 합니다. 이런 이유로 Transfer Learning은 암 진단과 같이 실제 사례에서 많이 사용됩니다.

 

 

Deep Learning Pipeline은 Featurizer의 개념으로 빠른 Transfer Learning을 가능하게 합니다. 다음 예제는 Spark의 InceptionV3 모델과 Logistic 회귀를 결합하여 InceptionV3을 특정 도메인에 적용합니다.

DeepImageFeaturizer는 사전 훈련된 신경망의 마지막 레이어를 자동으로 벗겨내고 이전 모든 레이어의 출력을 로지스틱 회귀 알고리즘의 기능으로 사용합니다. 로지스틱 회귀는 간단하고 빠른 알고리즘이므로 이 transfer learning 훈련은 기초 학습 모델을 학습하는 데 필요한 것보다 훨씬 적은 이미지를 사용하여 신속하게 수렴 할 수 있습니다.

from sparkdl import DeepImageFeaturizer
from pyspark.ml.classification import LogisticRegression

featurizer = DeepImageFeaturizer(modelName=”InceptionV3″)
lr = LogisticRegression()
p = Pipeline(stages=[featurizer, lr])

# train_images_df = … # load a dataset of images and labels
model = p.fit(train_images_df)

분산된 하이퍼파라미터 튜닝

딥러닝에서 최상의 결과를 얻으려면 학습 파라미터에 대해 다른 값을 실험해야 합니다.이 단계는 hyperparameter tuning이라고하는 중요한 단계입니다. Deep Learning Pipeline은 Spark의 머신러닝 파이프라인의 한 단계로서 딥러닝 학습을 가능하게 하므로 사용자는 이미 Spark에 내장된 하이퍼파라미터 튜닝 인프라에 의존 할 수 있습니다.

 

 

다음 코드는 Keras Estimator를 연결하고 상호 유효성 검사를 사용하여 그리드 검색을 사용하여 하이퍼파라미터 튜닝을 수행합니다.

myEstimator = KerasImageFileEstimator(inputCol=’input’,
outputCol=’output’,
modelFile=’/my_models/model.h5′,
imageLoader=_loadProcessKeras)

kerasParams1 = {‘batch_size’:10, epochs:10}
kerasParams2 = {‘batch_size’:5, epochs:20}

myParamMaps =
ParamGridBuilder() \
.addGrid(myEstimator.kerasParams, [kerasParams1, kerasParams2]) \
.build()

cv = CrossValidator(myEstimator, myEvaluator, myParamMaps)
cvModel = cv.fit()
kerasTransformer = cvModel.bestModel  # of type KerasTransformer

SQL에 모델 배포

일단 데이터 과학자가 원하는 모델을 구축하면 Deep Learning Pipeline을 SQL에서 함수로 쉽게 노출할 수 있으므로 데이터 엔지니어, 데이터 과학자, 비즈니스 분석가 등 자신의 조직에 있는 누구나 이를 사용할 수 있습니다.

sparkdl.registerKerasUDF(“img_classify”, “/mymodels/dogmodel.h5”)

아래의 조작으로 조직의 모든 사용자가 SQL에서 예측을 적용 할 수 있습니다.

SELECT image, img_classify(image) label FROM images

WHERE contains(label, “Chihuahua”)

유사하게 지원되는 모든 언어(Python, Scala, Java, R)에서 DataFrame 프로그래밍 API을 통해 이 기능을 사용할 수 있습니다. 확장 가능한 예측과 마찬가지로 이 기능은 일괄 처리 및 구조화된 스트리밍에서 모두 작동합니다 .

결론

이 포스트에서는 Deep Learning Pipeline라는 새로운 라이브러리를 소개했습니다. 이 라이브러리는 딥러닝을보다 쉽게 ​​사용하고 확장 할 수 있게 해줍니다.

라이브러리에 대한 자세한 내용은 Databrick Notebook과 github 저장소를 확인하십시오.

원문

https://databricks.com/blog/2017/06/06/databricks-vision-simplify-large-scale-deep-learning.html

Tags:

spark

딥러닝

머신러닝

딥러닝파이프라인

databricks

스파크

하둡 머신러닝

하둡 딥러닝

InceptionV3

CNN