Azure MLのパイプラインをPythonから実行する方法

はじめに

前回Azure MLのデザイナーで作った こちら のパイプラインをPythonから実行してみます。

開発環境

  • OS Windows 10(NVIDIA GTX 1650Ti,16GB RAM, i5-10300H CPU)
  • Visual Studio Code 1.73.1
  • Python 3.9

Pythonから実行するまで

PythonからAzure MLを使用するには「Azure CLI」をインストールする必要があります。

公式 に載っている方法でインストールをしてください。

Windowsの場合は、 こちら を開き、「Azure CLIの最新のリリース」をクリックしてインストールファイルを実行すればできます。

image.png

コマンドプロンプトからログインをします。

az login

これでWebページに飛ぶので、ログインを完了したら前準備は終わりです。

Azure MLのデザイナーを起動

それでは前回作成したデザイナーを開きます。

(作成方法やジョブの実行方法は前の記事をご覧ください!)

今回はパスを指定することで、

  • 学習させる入力データ
  • 結果データの出力先

を決めていけるようにしていきます。

前回からのブロック変更箇所

  • Import Dataコンポーネント
  • Export Dataコンポーネント

これらのコンポーネントを追加、パス設定を変更します。

コンポーネントの追加

追加したパイプラインがこんな感じです。

image.png

前回は入力データを「TPS-AUG-2022」としていたところを、Import Dataコンポーネントに変更しています。そして、Score Modelの結果をExport Dataで取り出せるようにしました。

パイプラインパラメータの変更

次に追加した2つのコンポーネントの設定を変更します。

まず、Import Dataについては、学習データをどこから持ってくるか設定する必要があります。

学習データが入っている「データソース」、「データストア」を選択後、

image.png

このようにパス設定を求められます。

ここで使用するのが「パイプラインパラメータ」。

これを用いることで実行ごとに学習データセットの選択と出力先を決めることが可能になります。

image.png
右上の「・・・」をクリックし、「+パイプラインパラメータへの追加」を選択。

右上の「・・・」をクリックし、「+パイプラインパラメータへの追加」を選択。

image.png

「パラメーター名」と「値」を入力すれば作成できます。

今回の学習データには前回同様に KaggleのTabular Playground Series – Aug 2022 を使っていきます。

データセットは前回追加したので、trainデータセットの保存先のパス名を「値」に入力します。

また「パラメーター名」は「Importdatapath」としました。

同様に、Export Dataのパイプラインパラメータも設定します。

「パラメーター名」を「Exportscorepath」に、

「値」には出力したい場所のパスと出力時の名前を入力します。

これでパイプラインパラメータの追加は完了です。

パイプラインパラメータの更新・削除

パイプラインパラメータの名前の変更や削除は右上の「設定」から「・・・(三点リーダー)」から可能です。

image.png

ジョブで実行できているか確認

ブロックの変更が完了したので、いったんこのパイプラインを実行できるか確認します。

image.png
問題なく実行できました!

パイプラインエンドポイントの作成

Pythonoから実行できるようにパイプラインを公開していきます。

まずは実行完了したジョブから「公開」ボタンを押して、パイプラインのエンドポイントを作成します。

そして作成後、「パイプラインID」ができるのでこれを使えばPythonからの実行ができます。

IDはどこに書いてあるのかというと、作成したパイプラインエンドポイントを開き

azureml-pipeline.png

概要の下の方にスクロールしたときに現れる「既定の公開されたパイプライン」に書かれてあります。

これがパイプラインIDです。

Pythonから実行

こちらのコードを動かして、パイプラインをPythonから実行していきます。

azureml-test.py
from azureml.core import Workspace
from azureml.core.experiment import Experiment
from azureml.pipeline.core import PublishedPipeline

ws = Workspace.from_config()
experiment = Experiment(workspace=ws, name='XXX')
published_pipeline = PublishedPipeline.get(workspace=ws, id="YYY")
pipeline_run = experiment.submit(
    published_pipeline,
    pipeline_parameters={
        "Import_data_path": "UI/2022-11-18_090809_UTC/train.csv",
        "Export_score_path": "/t-kawano-test-20221125.csv",
        }
    )
#XXX:実験名
#YYY:パイプラインID

実験名は任意で、パイプラインIDは先ほどのものを貼り付けます。

ImportdatapathとExportscorepathにはそれぞれ学習データがあるパスと、出力先のパスを設定します。

しかし、これで実行してみたらazureml-coreとazureml-pipeline-coreがないと言われたので、

pip install azureml-core
pip install azureml-pipeline-core

これでpipインストールします。

インストール後、もう1回実行したら今度は

「The workspace configuration file config.json, could not be found」

というエラーが出てきました。

このエラーの対処としては、ワークスペースに戻り、右上のアカウント名をクリックします。

azureml-config.png

そして「構成ファイルをダウンロードする」をし、config.jsonをプロジェクト直下に置きます。

これでもう1度実行!

Submitted PipelineRun XXX #実行ID
Link to Azure Machine Learning Portal:https://YYY #ジョブへのURL

このような結果が返ってきました。

2行目のURLに飛んでみたら、ちゃんと実行できていました^^

実行が終わったらジョブタグで状態ステータスが「完了」となります。

image.png
結果データファイルがExportされているか確認してみると

結果データファイルがExportされているか確認してみると

image.png
指定した場所にきちんと出力されていました。一応中身も確認。

指定した場所にきちんと出力されていました。

一応中身も確認。

image.png
スコアデータも見れるようになってます!

まとめ

  • Azure MLで作成したパイプラインをPythonから実行してみた。
  • Import DataやExport Dataを追加し、パイプラインパラメータを使えば実行のたびに学習データや出力先を設定できる。

この記事を書いた人

azure-recipe-user