MMLSpark を Databricks on EC2 のクラスタにインストールする方法

はじめに

MMLSpark を Databricks (on AWS EC2) のクラスタで使用できるようにする手順を示します。

対象者

  • Databricks on EC2(AWS) で分析環境を立ち上げている
  • init_script をいじったけどなんだかうまく行かない
  • pip でもうまくいかない
  • MMLSpark は Azure 以外のプラットフォームで使えないの?
  • 現在使用しているアルゴリズムをSparkによる分散処理に最適化できないか方法を探している

mmlspark とは?

正式名称は、Microsoft Machine Learning for Apache Spark。

Microsoft Azure のマネージド機械学習サービスである Cogninive Services や、機械学習の現場でよく使われる LightGBM などを Spark で効率的に活用できるように最適化したパッケージが揃っているライブラリです。

画像処理ライブラリの雄である OpenCV のパッケージもあります。2020年5月現在では実装されている関数は限定的ですが、大量の画像に対してシンプルな前処理を並列かつ高速に行いたい場合には選択肢に入ってきそうです。

MMLSpark OpenCV Package

そしてこのパッケージ、Microsoft Azure 以外のプラットフォームでも使えます。

インストール方法

Databricks のワークスペースで、

Databricks のワークスペースで、

ClustersからLibrariesに飛び、Install Newをクリック

スクリーンショット 2020-05-15 7.08.01.png

Library Source に Mavenを選択し、Repository に以下を入力、Installをクリック

com.microsoft.ml.spark:mmlspark_2.11:1.0.0-rc1

スクリーンショット 2020-05-15 7.10.58.png

しばらくするとこちらの画面に遷移します。

Status が InstalledになっていればOK。これで完了です。

スクリーンショット 2020-05-15 7.13.14.png

参考スクリプト

以下のような感じで、Collaborative Notebook 上でモジュールが使えるようになります。

1triazines = spark.read.format("libsvm")\
2    .load("wasbs://publicwasb@mmlspark.blob.core.windows.net/triazines.scale.svmlight")
3
4# print some basic info
5print("records read: " + str(triazines.count()))
6print("Schema: ")

result

image.png
triazines.printSchema() triazines.limit(10).toPandas()
1triazines.printSchema()
2triazines.limit(10).toPandas()
3
4train, test = triazines.randomSplit([0.85, 0.15], seed=1)
5
6from mmlspark.lightgbm import LightGBMRegressor
7model = LightGBMRegressor(objective='quantile',
8                          alpha=0.2,
9                          learningRate=0.3,
10                          numLeaves=31).fit(train)
11
12from mmlspark.lightgbm import LightGBMRegressionModel
13model.saveNativeModel("mymodel")
14model = LightGBMRegressionModel.loadNativeModelFromFile("mymodel")
15
16print(model.getFeatureImportances())

result

image.png
scoredData = model.transform(test) scoredData.limit(10).toPandas()result
1scoredData = model.transform(test)
2scoredData.limit(10).toPandas()

result

image.png
1from mmlspark.train import ComputeModelStatistics
2metrics = ComputeModelStatistics(evaluationMetric='regression',
3                                 labelCol='label',
4                                 scoresCol='prediction') \
5            .transform(scoredData)
6metrics.toPandas()

result

image.png

おわりに

モジュールのインストール方法にもいろいろあるんですね。

依存関係が出やすいので pip 乱発はやめたいところです(自戒)

参考資料

公式 MMLSpark 紹介サイト

公式 MMLSpark Github

LightGBM 上記スクリプトソース

この記事を書いた人

azure-recipe-user