Azure MLのジョブのStatusを確認する方法

# はじめに
今回はAzure MLで作成したデザイナーを実行し、ジョブが完了したかどうかをPythonから確認してみました。

# 開発環境
+ OS Windows 10(NVIDIA GTX 1650Ti,16GB RAM, i5-10300H CPU)
+ Visual Studio Code 1.73.1
+ Python 3.9

## Azure ML上でジョブのStatusの確認
まずは[こちら](https://qiita.com/kkawano_neko/items/e08ea559af2cbf9a2066)の二項分類のパイプラインを実行してみます！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2976188/92769379-b06b-1a00-0c57-b4044e80415f.png)

学習データを後からでも追加できるように、**Import Data**コンポーネントを入力データとしました。
そして、**Export Data**を**Score Model**と**Evaluate Model**の下にそれぞれ追加しました。
これは訓練したModelから得られた予測結果とその評価を取り出すためです。

入力データ、出力データともにパイプラインパラメータでパスの設定を行ったら実行をしてみます。
（パイプラインパラメータの設定方法などは[前回の記事](https://qiita.com/kkawano_neko/items/e08ea559af2cbf9a2066)をご覧ください。）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2976188/35ad6cab-2697-b790-c49a-fae90ce40ea8.png)

実行が終わり、ジョブで確認していくと状態が「完了」になります。

## PythonでStatusを確認
それでは今行ったStatusのチェックを今度はPythonから行ってみましょう！

まずは
```
az login
```
でAzure CLIにログインしたらこちらのコードを実行してみます。

```status-check.py
from azureml.core import Workspace
from azureml.core.experiment import Experiment
from azureml.core.run import Run

ws = Workspace.from_config()
print(Experiment.list(workspace=ws))
experiment = Experiment(workspace=ws, name='<実験の名前>')
run = Run(experiment, "<ジョブID>")
print(run.get_details())

```
`experiment`の`name`のところは

![azureml-job.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2976188/18138ea8-bd2e-71e7-f7a1-16190986c2c9.png)

ジョブを実行するときに入力する、実験の名前を入れます。

そしてジョブIDについては「ジョブの概要」を開いたときに表示される

![azureml-id.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2976188/9d681b7e-3db1-1d00-216f-f06e312b8989.png)

こちらの「ジョブ名（実行ID）」を入れます。

これで実行したら、

print(Experiment.list(workspace=ws))
Experimentクラスのlist関数で、現在のワークスペースにある実験のリストが表示され、
Experimentクラスの詳細は[こちら](https://learn.microsoft.com/ja-jp/python/api/azureml-core/azureml.core.experiment(class)?view=azure-ml-py)を参照ください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2976188/20f3a9cb-ac6b-a052-7a78-76e3235997fe.png)

print(run.get_details())
Runクラスのget_details関数でJSON形式の結果が返ってきます。

Runクラスの詳細は[こちら](https://learn.microsoft.com/ja-jp/python/api/azureml-core/azureml.core.run(class)?view=azure-ml-py)を参照ください。


```details.json
{
    'runId': '<実験ID>', 
    'status': 'Completed', 
    'startTimeUtc': '2022-11-29T08:40:26.563972Z', 
    'endTimeUtc': '2022-11-29T08:47:52.595374Z', 
    'services': {}, 
    'properties': {
                    'azureml.runsource': 'azureml.PipelineRun', 
                    'runSource': 'Designer', 
                    'runType': 'HTTP', 
                    'azureml.parameters': '{
                                            "Export_data_path":"/t-kawano-export-20221129",
                                            "Import_data_path":"UI/2022-11-29_082600_UTC/train.csv",
                                            "Score_data_path":"/t-kawano-score-20221129"
                                            }', 
                    'azureml.continue_on_step_failure': 'True', 
                    'azureml.continue_on_failed_optional_input': 'True', 
                    'azureml.pipelineComponent': 'pipelinerun', 
                    'stages': '{"Initialization":null,
                                "Execution":{
                                            "StartTime":"2022-11-29T08:40:26.99405+00:00",
                                            "EndTime":"2022-11-29T08:47:52.5223544+00:00",
                                            "Status":"Finished"
                                            }
                                }'
                    }, 
    'inputDatasets': [], 
    'outputDatasets': [], 
    'logFiles': {
                 'logs/azureml/executionlogs.txt': 'https://', 
                 'logs/azureml/stderrlogs.txt': 'https://', 
                 'logs/azureml/stdoutlogs.txt': 'https://'
                 }, 
    'submittedBy': 'アカウント名'
}
```
`runID`で取得した実験のIDが表示されています。

そして`status`のところでジョブが完了しているかどうかを確認できます。
今回は「Completed」となっているので、無事にジョブを実行できたようです。

また、`properties`のところでは設定したパイプラインパラメータなどが見られます。

# まとめ
+ PythonからジョブのStatusをチェックしてみた
+ Runクラスの`get_details()`の`status`から完了したかどうかを確認できる