38

運用MMLSpark 來加速Spark 上機器學習專案

Embed Size (px)

Citation preview

Page 2: 運用MMLSpark 來加速Spark 上機器學習專案

在Apache Spark 架構上使用機器學習的挑戰

•使用者需要寫大量程式碼來準備機器學習演算法所需要的資料欄位•Learning 所需要的資料類型和資料結構

•使用不同Learners 所需要的Conventions

•缺少常見應用場景通用的Library: 例如電腦視覺,文字分析

•模型評估與管理功能有限

Page 3: 運用MMLSpark 來加速Spark 上機器學習專案

Microsoft Machine Learning Library (MML Spark) 介紹

•針對需處理大量資料的機器學習場景設計

•提供Library來簡化在Apache Spark 上創建機器學習應用的難度.

•協助資料科學家在Apache Spark 環境上專注處理機器學習問題, 而不是軟體工程問題

•在Apache Spark上可以更易使用深度學習(Deep Learning)相關演算法, 特別針對電腦視覺, 文字等的應用

•通過在Github 上開源, 通過社區協助可以快速演進

Page 4: 運用MMLSpark 來加速Spark 上機器學習專案

GitHub, MIT License

https://github.com/Azure/mmlspark

Page 5: 運用MMLSpark 來加速Spark 上機器學習專案

https://github.com/Azure/mmlspark

Page 6: 運用MMLSpark 來加速Spark 上機器學習專案

https://github.com/Azure/mmlspark

Page 7: 運用MMLSpark 來加速Spark 上機器學習專案

MMLSpark Requirements

執行環境: Scala 2.11, Spark 2.1+, and

either Python 2.7 or Python 3.5+

環境安裝:DockerSpark ClusterDatabricks Cloud STBHDInsight (Azure)

Page 8: 運用MMLSpark 來加速Spark 上機器學習專案
Page 9: 運用MMLSpark 來加速Spark 上機器學習專案

MMLSpark 安裝 - Docker

docker run -it -p 8888:8888 -e ACCEPT_EULA=yes microsoft/mmlspark

打開 htpp://localhost:8888/notebooks/ 查看JupyterNotebook

Page 10: 運用MMLSpark 來加速Spark 上機器學習專案

MMLSpark 安裝 – Spark Cluster

spark-shell --packages Azure:mmlspark:0.8

pyspark --packages Azure:mmlspark:0.8

spark-submit Azure:mmlspark:0.8 MyApp.jar

Page 11: 運用MMLSpark 來加速Spark 上機器學習專案

MMLSpark 安裝 – Databricks cloud

Create a new library from Maven coordinates in your workspace

For the coordinates use: com.microsoft.ml.spark:mmlspark:0.8under Advanced Options, use https://mmlspark.azureedge.net/maven for the repository

Ensure this library is attached to all clusters you create.

Finally, ensure that your Spark cluster has at least Spark 2.1 and Scala 2.11.

You can use MMLSpark in both your Scala and PySpark notebooks.

Page 12: 運用MMLSpark 來加速Spark 上機器學習專案

MMLSpark 安裝 – STB Build Tool (Scala)

build.sbt:

```scala

resolvers += "MMLSpark Repo" at "https://mmlspark.azureedge.net/maven"

libraryDependencies += "com.microsoft.ml.spark" %% "mmlspark" % "0.8“

```

Page 13: 運用MMLSpark 來加速Spark 上機器學習專案

MMLSpark 安裝 – HDInsight

Go to Script actions → Submit new in the Overview section of your cluster

blade.

In the Bash script URI field, input the script action URLhttps://mmlspark.azureedge.net/buildartifacts/0.8/install-mmlspark.sh

Page 14: 運用MMLSpark 來加速Spark 上機器學習專案

Microsoft Machine Learning Library (MML Spark) 設計原則

•可執行在任何Apache Spark 支援的平臺跟語言

•相容於 SparkML pipeline 模型. MML-Spark 由Spark 評估器(Estimators) 及轉換器 (Transformer) 所組成, 可以將既有 SparkML組件整合到pipelines中.

•使用 SparkML DataFrames. 可以使用已有Spark 功能來讀取資料到機器學習模型中.

•針對不同演算法的不同的資料類型(text, categorical, image)有一致的處理機制 . 不需要做底層的資料處理 (type coercion, encoding or vector assembly.)

Page 15: 運用MMLSpark 來加速Spark 上機器學習專案

DEMOMML Spark 安装

Page 16: 運用MMLSpark 來加速Spark 上機器學習專案

MML Spark 與 PySpark 程式碼比較

Page 17: 運用MMLSpark 來加速Spark 上機器學習專案

預測Amazon 上書籍 Review的內容是正面還是負面

dataFile = "BookReviewsFromAmazon10K.tsv"

Page 18: 運用MMLSpark 來加速Spark 上機器學習專案

預測Amazon 上書籍 Review的內容是正面還是負面

PySpark MMLSpark

Page 19: 運用MMLSpark 來加速Spark 上機器學習專案

預測Amazon 上書籍 Review的內容是正面還是負面

PySpark

MMLSpark

Page 20: 運用MMLSpark 來加速Spark 上機器學習專案

預測Amazon 上書籍 Review的內容是正面還是負面

PySpark

MMLSpark

Page 21: 運用MMLSpark 來加速Spark 上機器學習專案

預測Amazon 上書籍 Review的內容是正面還是負面

PySpark

MMLSpark

Page 22: 運用MMLSpark 來加速Spark 上機器學習專案

預測Amazon 上書籍 Review的內容是正面還是負面

PySpark MMLSpark

Page 23: 運用MMLSpark 來加速Spark 上機器學習專案
Page 24: 運用MMLSpark 來加速Spark 上機器學習專案

Text Analytics

•目標: 提供One-Step文本featurization能力,讓使用者可以把自由格式的文本記錄轉換成ML演算法需要的特徵向量:

• Tokenization, stop-word removal, case normalization

• N-Gram creation, feature hashing, IDF weighing.

•未來: 多語言支援, 更多高級的文本處理和DNN特徵化能力.

Page 25: 運用MMLSpark 來加速Spark 上機器學習專案
Page 26: 運用MMLSpark 來加速Spark 上機器學習專案

Deep Neural Net Featurization

•基本概念:預訓練好的DNN模型的隱層有關於特徵的高階資訊

•使用“headless”預訓練DNN模型能夠抽取圖像的精准特徵,從而訓練更傳統的模型,比如random forests, SVM, logistic regression等等.

•預訓練DNN模型通常是ImageNet, MSCoco或者CIFAR資料集上的模型,比如Resnet (Microsoft), GoogLeNet (Google), Inception (Google), VGG, 等等.

•轉移學習(Transfer learning) 能夠針對資料不足、計算能力不足、或者缺少專業知識的場景訓練有效的模型

•性能隨著executor擴展而變好

High-order features

Predictions

Page 27: 運用MMLSpark 來加速Spark 上機器學習專案

Image Processing Transforms

DNNs 通常對於輸入資料格式和正則化有嚴格要求。

我們提供與OpenCV影像處理操作相關的綁定, 暴露為SparkML PipelineStages:

tr = ImageTransform().setOutputCol("transformed")

.resize(height = 200, width = 200)

.crop(0, 0, height = 180, width = 180)

smallImages = tr.transform(images).select("transformed")

Page 28: 運用MMLSpark 來加速Spark 上機器學習專案

DEMOMML Spark 展示 – Image DNN Featurization & Processing Transforms

Page 29: 運用MMLSpark 來加速Spark 上機器學習專案

Virtual network

結合GPU 與 Spark 進行深度學習訓練

• GPUs 適合用來進行深度學習訓練, 但是整個Spark Cluster 都採用GPU 機器不僅昂貴而且沒有必要

•透過CPU Spark cluster載入大量資料並進行預處理, 然後將處理完資料透過GPU

Node 來訓練. 最後訓練完的模型可以發布到CPU Node 來做Evaluation.

Raw data

Processed data as DataFrame

Trained DNN as PipelineStage

GPU VMSpark Cluster

learner = CNTKLearner(brainScript=brainscriptText, dataTransfer='hdfs-mount', =‘my-gpu-gpuMachinesvm’, workingDir=‘file:/tmp/’).fit(trainData)predictions = learner.setOutputNode(‘z’).transform(testData)

Eg. Azure Environment GPU Setup: http://azuremlbuild.blob.core.windows.net/pysparkapi/azure-setup.html

Page 30: 運用MMLSpark 來加速Spark 上機器學習專案

DNN Featurization using MML-Spark

cntkModel = CNTKModel().setInputCol("images").

setOutputCol("features").setModelLocation(resnetModel).

setOutputNode("z.x")

featurizedImages = cntkModel.transform(imagesWithLabels).

select(['labels','features'])

model = TrainClassifier(model=LogisticRegression(),labelCol="labels").

fit(featurizedImages)

DNN featurization和SparkML pipeline stage協作。評估直接在Scala的JVM上進行,不需要Python UDF!

Page 31: 運用MMLSpark 來加速Spark 上機器學習專案

CNTK Model Gallery

https://www.microsoft.com/en-us/cognitive-toolkit/features/model-gallery/

Page 32: 運用MMLSpark 來加速Spark 上機器學習專案
Page 33: 運用MMLSpark 來加速Spark 上機器學習專案

MML for Spark應用場景

• Image Ingestion, processing and featurization

從HDFS中獲取圖片資料到Spark DataFrame

使用OpenCV的transforms預處理圖片

在使用預訓練的CNTK-DNN上特徵化圖片

•Text Analytics

在SparkML上通過單個transformer便捷地featurize free-form text data

•GPU and CPU environment configuration

使用Azure上的N-Series GPU VMs 訓練基於DNN的圖像分類模型

•Training and evaluation simplification

簡便地訓練分類和回歸模型

計算豐富的評估指標,甚至是per-instance metrics

Page 34: 運用MMLSpark 來加速Spark 上機器學習專案

Docs

http://azuremlbuild.blob.core.windows.net/pysparkapi/intro.html

Page 35: 運用MMLSpark 來加速Spark 上機器學習專案

MMLSpark PySpark Library

• http://mmlspark.azureedge.net/docs/pyspark/

Page 36: 運用MMLSpark 來加速Spark 上機器學習專案

MMLSpark Scala Library

• http://mmlspark.azureedge.net/docs/scala

Page 37: 運用MMLSpark 來加速Spark 上機器學習專案

CNTK Pre-trained Image Models

•AlexNet

• AlexNet for ImageNet 1K

•GoogLeNet

• InceptionV3 for ImageNet 1K

• BN-Inception for ImageNet 1K

•VGG

• VGG16 for ImageNet 1K

• VGG19 for ImageNet 1K

https://github.com/Microsoft/CNTK/blob/master/PretrainedModels/Image.md

• ResNet

• ResNet18 for ImageNet 1K

• ResNet34 for ImageNet 1K

• ResNet50 for ImageNet 1K

• ResNet20 for CIFAR-10

• ResNet110 for CIFAR-10

• ResNet101 for ImageNet 1K

• ResNet152 for ImageNet 1K

Page 38: 運用MMLSpark 來加速Spark 上機器學習專案