AzureSynapseAnalyticsで機械学習を利用しよう①モデル学習からスコアリングの流れ
はじめに
Azure Synapse Analytics(以下、Synapse)上での機械学習の利用についてAzure Synapse Analytics の Machine Learning 機能 (ワークスペース プレビュー)に記載されているような概要で機能が形になってきました。
分析に関わるワークロードを集約する環境として開発が進みついにGAが発表されたSynapseですが、今回はMLワークロードの中でもDWHデータに対するスコアリングができるチュートリアル:Synapse SQL プール向けの機械学習モデル スコアリング ウィザードで案内されているウィザードを使った結果を記載したいと思います。
※すんなりいかなかった箇所も含めて紹介します。
(2020/12時点の情報)
スコアリング ウィザードについて
GUIでT-SQLのスコアリングスクリプトが生成されます。
特に、モデルへのInput、Outputが定義されている場合、テーブルの列とモデルへのマッピングがGUIでガイドされます。
スコアリング ウィザード利用時に必要な仕様理解
注意しておくべき仕様をまとめました。MLflowの利用については私もさほど詳しくないので、ここでは割愛します。
- 現状、Synapseから認識できるAzureMLのモデルはonnx形式のみです。ONNXモデル以外は選択肢として表示されません。
- 現状 Azure MLの Auto MLではGUIでonnxモデルの作成ができません。
- テーブルの列とモデルへのマッピングを使うためにはモデル登録にML Flowを利用する必要があります。
2については、GUIでもできるようにしてほしいところです。「ONNX モデルの互換性を有効または無効にする」が対応していない状況となっています。
Python SDK Studio Web エクスペリエンス 最適なモデルの登録、デプロイ、説明可能性 ✓ ✓ 投票アンサンブルとスタック アンサンブル モデルを有効にする ✓ ✓ プライマリ メトリック以外に基づいて最適なモデルを表示する ✓ ONNX モデルの互換性を有効または無効にする ✓ モデルのテスト ✓
モデル構築環境について
スコアリングウィザードを利用する際のモデルの訓練から登録について、チュートリアルのモデル学習~登録のNotebookを実行する環境として以下のパターンで試しました。
- Azure ML Compute Instance上でモデル学習~登録(チュートリアル通り)
- Spark Notebook上でモデル学習~登録
2については実際にSynapseを利用する際にはあるパターンかなと思って試しています。データの準備からモデル構築までをシームレスに実行できるようなイメージです。
準備
それぞれ環境を準備して、linked Serviceを作成しておきます。
クイック スタート:Synapse ワークスペースを作成する
クイック スタート:Azure portal を使用して新しい Apache Spark プールを作成する
クイック スタート:Azure portal を使用して Synapse SQL プール (プレビュー) を作成する
チュートリアル:Jupyter Notebook で Azure Machine Learning の作業を開始する
クイック スタート:Synapse で Azure Machine Learning のリンクされたサービスを新規作成する※コンピューティングインスタンスを作成するのみです。
チュートリアル通りにやってみる
Azure ML Compute Instance上でモデル学習~登録(チュートリアル通り)
pip list 上のscikit-learnのversionが指定と違ったので、importしなおして、カーネル再起動をかけて実行します。
ちなみにversion変更をせずに実行するとエラーが出ます。
onnx_model = convert_sklearn(clf, "nyc_taxi_tip_predict", model_inputs)
Spark Notebook上でモデル学習~登録
Synapse上でもやってみました。
もしかしたらSynapse studioでやるほうが推奨なのかも?
ライブラリのバージョンは一旦無視します。
ただし、Spark Poolの作成時期によってはmlflowがビルトインされていないようなので、以下の内容のrequirements.txtを用意してSynapse Sparkのパッケージ追加を行います。
※2020/12 現在はビルトインされています
azureml-mlflow
mlflow
Azure ML にonnxモデルが登録されました。
このinput_exampleや、signatureが用意されていることが非常に重要でした。
これがないと上述のマッピング機能が利用できません。MLFlowでの登録はこの作成をしてくれるようです。
スコアリングウィザード
さて、スコアリングウィザード の確認ですが、この状態であれば、SQL Poolからも利用ができ、マッピングも用意されています。
手順通りテーブルを作成して、右クリックでウィザードを起動します。
モデルを選択します。バージョン情報が出ていて親切です。
スコアリング用のスクリプトはストアドプロシージャとして作成されます。
内容はこんな感じ.
PREDICT関数が利用されています。
実行すると、output labelとして、スコアリング結果が表示されます。
おわり
Synapse Studio上で実行すれば非常に簡単になっていました。
次回は、AutoMLの利用の紹介とともに、Synapseを中心としたモデル学習について紹介してみようと思います
追記
2020/12/07
Compute Instanceでの実行でカーネル再起動忘れをしていたので修正しました。