はじめに
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月現在では一部の関数のみが実装されているのみですが、大量の画像に対してシンプルな前処理を並列かつ高速に行いたい場合には選択肢に入ってきそうです。
そしてこのパッケージ、Microsoft Azure 以外のプラットフォームでも使えます。
インストール方法
Databricks のワークスペースで、
Databricks のワークスペースで、
ClustersからLibrariesに飛び、Install Newをクリック
Library Source に Mavenを選択し、Repository に以下を入力、Installをクリック
com.microsoft.ml.spark:mmlspark_2.11:1.0.0-rc1
しばらくするとこちらの画面に遷移します。
Status が InstalledになっていればOK。これで完了です。
参考スクリプト
以下のような感じで、Collaborative Notebook 上でモジュールが使えるようになります。
1triazines = park.read.format("libsvm")\2 .load("wasbs://publicwasb@mmlspark.blob.core.windows.net/triazines.scale.svmlight")34# print some basic info56print("records read: "+ str(>triazines.count()))7print("Schema: ")result
1triazines.printSchema()2triazines.limit(10).toPandas()34train, test = triazines.randomSplit([0.85, 0.15], seed=1)56from mmlspark.lightgbm import LightGBMRegressor7model = LightGBMRegressor(objective='quantile',8 alpha=0.2,9 learningRate=0.3,10 numLeaves=31).fit(train)1112from mmlspark.lightgbm import LightGBMRegressionModel13model.saveNativeModel("mymodel")14model = LightGBMRegressionModel.loadNativeModelFromFile("mymodel")1516print(model.getFeatureImportances())result
1scoredData = model.transform(test)2scoredData.limit(10).toPandas()result
1from mmlspark.train import ComputeModelStatistics2metrics = ComputeModelStatistics(evaluationMetric='regression',3 labelCol='label',4 scoresCol='prediction') \5 .transform(scoredData)6metrics.toPandas()result
おわりに
モジュールのインストール方法にもいろいろあるんですね。
依存関係が出やすいので pip 乱発はやめたいところです(自戒)