チュートリアル: クラウド ワークステーションでのモデル開発

Azure Machine Learning のクラウド ワークステーションでノートブックを使用してトレーニング スクリプトを開発する方法について説明します。 このチュートリアルでは、次のことを開始するために必要な基本について説明します。

  • クラウド ワークステーションを設定して構成する。 クラウド ワークステーションには Azure Machine Learning コンピューティング インスタンスが備わっており、さまざまなモデル開発ニーズをサポートするための環境が事前に構成されています。
  • クラウドベースの開発環境を使用する。
  • MLflow を使用して、ノートブック内からすべてのモデル メトリックを追跡する。

前提条件

Azure Machine Learning を使用するには、まずワークスペースが必要です。 まだない場合は、作業を開始するために必要なリソースの作成を完了し、ワークスペースを作成してその使用方法の詳細を確認してください。

ノートブックを開始する

Azure Machine Learning とその機能について学習するには、ワークスペースの [ノートブック] セクションから始めることをお勧めします。 ここでは、コンピューティング リソースに接続し、ターミナルを操作し、Jupyter Notebook とスクリプトを編集して実行することができます。

  1. Azure Machine Learning Studio にサインインします。

  2. まだ開いていない場合は、ワークスペースを選びます。

  3. 左側のナビゲーションで [ノートブック] を選択します。

  4. コンピューティング インスタンスがない場合は、画面の中央に [コンピューティングの作成] が表示されます。 [コンピューティングの作成] を選択し、フォームに入力します。 すべての既定値を使用できます。 (コンピューティング インスタンスが既にある場合は、代わりにその場所にターミナルが表示されます。ターミナルは、このチュートリアルの後半で使用します)。

    Screenshot shows how to create a compute instance.

プロトタイプ作成用の新しい環境を設定する (省略可能)

スクリプトを実行するには、コードで想定される依存関係とライブラリを使用して構成された環境で作業する必要があります。 このセクションは、使用するコードに合わせた環境を作成するのに役立ちます。 ノートブックが接続する新しい Jupyter カーネルを作成するには、依存関係を定義する YAML ファイルを使用します。

  • ファイルをアップロードします。

    アップロードしたファイルは Azure ファイル共有に保存されます。これらのファイルは各コンピューティング インスタンスにマウントされ、ワークスペース内で共有されます。

    1. 右上にある [Download raw file] (生ファイルのダウンロード) ボタンを使って、この conda 環境ファイル workstation_env.yml をお使いのコンピューターにダウンロードします。
    1. [ファイルの追加] を選択し、[ファイルのアップロード] を選択してそれをワークスペースにアップロードします。

      Screenshot shows how to upload files to your workspace.

    2. [クリックしてファイルを参照して選択します] を選択します。

    3. ダウンロードした workstation_env.yml ファイルを選択します。

    4. [アップロード] を選択します。

    [ファイル] タブのユーザー名フォルダーの下に、workstation_env.yml ファイルが表示されます。このファイルを選択してプレビューし、指定されている依存関係を確認します。 次のような内容が表示されます。

    name: workstation_env
    # This file serves as an example - you can update packages or versions to fit your use case
    dependencies:
      - python=3.8
      - pip=21.2.4
      - scikit-learn=0.24.2
      - scipy=1.7.1
      - pandas>=1.1,<1.2
      - pip:
        - mlflow-skinny 
        - azureml-mlflow
        - psutil>=5.8,<5.9
        - ipykernel~=6.0
        - matplotlib
    
  • カーネルを作成します。

    次に、Azure Machine Learning ターミナルを使用して、workstation_env.yml ファイルに基づいて新しい Jupyter カーネルを作成します。

    1. [ターミナル] を選択してターミナル ウィンドウを開きます。 左側のコマンド バーからターミナルを開くこともできます。

      Screenshot shows open terminal tool in notebook toolbar.

    2. コンピューティング インスタンスが停止している場合は、[コンピューティングの開始] を選択して、実行されるまで待ちます。

      Screenshot shows how to start compute if it's stopped.

    3. コンピューティングが実行されると、ターミナルにウェルカム メッセージが表示され、コマンドの入力を開始できます。

    4. 現在の conda 環境を表示します。 アクティブな環境は * でマークされます。

      conda env list
      
    5. このチュートリアル用のサブフォルダーを作成した場合は、ここで、そのフォルダーに cd を使用して移動します。

    6. 提供された conda ファイルに基づいて環境を作成します。 この環境を構築するには数分かかります。

      conda env create -f workstation_env.yml
      
      
    7. 新しい環境をアクティブにします。

       conda activate workstation_env
      
    8. 正しい環境がアクティブであることを検証し、* でマークされた環境をもう一度探します。

      conda env list
      
    9. アクティブな環境に基づいて新しい Jupyter カーネルを作成します。

      python -m ipykernel install --user --name workstation_env --display-name "Tutorial Workstation Env" 
      
    10. ターミナル ウィンドウを閉じます。

これで新しいカーネルが作成されました。 次に、ノートブックを開き、このカーネルを使用します。

ノートブックを作成する

  1. [ファイルの追加] を選択し、[新しいファイルの作成] を選択します。

    Screenshot: Create new file.

  2. 新しいノートブックに develop-tutorial.ipynb という名前を付けます (または、任意の名前を入力します)。

  3. コンピューティング インスタンスが停止している場合は、[コンピューティングの開始] を選択して、実行されるまで待ちます。

    Screenshot shows how to start compute if it's stopped.

  4. ノートブックが既定のカーネルに接続されていることが右上でわかります。 カーネルを作成した場合は、Tutorial Workstation Env カーネルを使うように切り替えます。

トレーニング スクリプトを開発する

このセクションでは、UCI データセットから準備されたテストとトレーニングの各データセットを使用して、クレジットカードの既定の支払いを予測する Python トレーニング スクリプトを開発します。

このコードでは、トレーニングには sklearn を使用して、メトリックのログ記録には MLflow を使用します。

  1. まず、トレーニング スクリプトで使用するパッケージとライブラリをインポートするコードから始めます。

    import os
    import argparse
    import pandas as pd
    import mlflow
    import mlflow.sklearn
    from sklearn.ensemble import GradientBoostingClassifier
    from sklearn.metrics import classification_report
    from sklearn.model_selection import train_test_split
  2. 次に、この実験用のデータを読み込んで処理します。 このチュートリアルでは、インターネット上のファイルからデータを読み取ります。

    # load the data
    credit_df = pd.read_csv(
        "https://azuremlexamples.blob.core.windows.net/datasets/credit_card/default_of_credit_card_clients.csv",
        header=1,
        index_col=0,
    )
    
    train_df, test_df = train_test_split(
        credit_df,
        test_size=0.25,
    )
  3. トレーニング用のデータを準備します。

    # Extracting the label column
    y_train = train_df.pop("default payment next month")
    
    # convert the dataframe values to array
    X_train = train_df.values
    
    # Extracting the label column
    y_test = test_df.pop("default payment next month")
    
    # convert the dataframe values to array
    X_test = test_df.values
  4. MLflow に自動ログ記録を開始するコードを追加して、メトリックと結果を追跡できるようにします。 モデル開発の反復的な性質により、MLflow は、モデルのパラメーターと結果をログに記録するのに役立ちます。 これらの実行を参照して、モデルのパフォーマンスを比較して理解します。 ログには、Azure Machine Learning 内のワークフローの開発フェーズからトレーニング フェーズに移行する準備ができた場合のコンテキストも提供されます。

    # set name for logging
    mlflow.set_experiment("Develop on cloud tutorial")
    # enable autologging with MLflow
    mlflow.sklearn.autolog()
  5. モデルをトレーニングします。

    # Train Gradient Boosting Classifier
    print(f"Training with data of shape {X_train.shape}")
    
    mlflow.start_run()
    clf = GradientBoostingClassifier(n_estimators=100, learning_rate=0.1)
    clf.fit(X_train, y_train)
    
    y_pred = clf.predict(X_test)
    
    print(classification_report(y_test, y_pred))
    # Stop logging for this model
    mlflow.end_run()

    Note

    mlflow の警告は無視できます。 追跡する必要があるすべての結果は引き続き受け取ります。

繰り返す

これで、モデルの結果が得られました。何かを変更して、もう一度試してみることをお勧めします。 たとえば、別の分類子の手法を試してみてください。

# Train  AdaBoost Classifier
from sklearn.ensemble import AdaBoostClassifier

print(f"Training with data of shape {X_train.shape}")

mlflow.start_run()
ada = AdaBoostClassifier()

ada.fit(X_train, y_train)

y_pred = ada.predict(X_test)

print(classification_report(y_test, y_pred))
# Stop logging for this model
mlflow.end_run()

Note

mlflow の警告は無視できます。 追跡する必要があるすべての結果は引き続き受け取ります。

結果を検証する

2 つの異なるモデルを試したので、MLFfow で追跡した結果を使用して、どちらのモデルが優れているかを判断します。 正確性などのメトリックや、シナリオの最も重要なその他のインジケーターを参照できます。 MLflow によって作成されたジョブを確認することで、これらの結果をさらに詳しく調べることができます。

  1. 左側のナビゲーションで、[ジョブ] を選択します。

    Screenshot shows how to select Jobs in the navigation.

  2. [Develop on cloud tutorial] (クラウドでの開発チュートリアル) のリンクを選択します。

  3. 2 つの異なるジョブが表示されます。試した各モデルごとに 1 つです。 これらの名前は自動生成されます。 名前を変更する場合は、名前の上にマウス ポインターを置き、名前の横にある鉛筆ツールを使用します。

  4. 最初のジョブのリンクを選択します。 名前が上部に表示されます。 鉛筆ツールを使用してここで名前を変更することもできます。

  5. ページには、プロパティ、出力、タグ、パラメーターなど、ジョブの詳細が表示されます。 [タグ] の下に、モデルの種類を説明する estimator_name が表示されます。

  6. [メトリック] タブを選択して、MLflow によってログに記録されたメトリックを表示します (異なるトレーニング セットを使用するため、結果が異なることを想定してください)。

    Screenshot shows metrics for a job.

  7. [イメージ] タブを選択して、MLflow によって生成されたイメージを表示します。

    Screenshot shows images for a job.

  8. 他のモデルのメトリックとイメージを戻って確認します。

Python スクリプトを作成する

次に、モデル トレーニング用にノートブックから Python スクリプトを作成します。

  1. ノートブック ツール バー上で、メニューを選択します。

  2. [Export as] (名前をつけてエクスポート) > [Python] を選択します。

    Screenshot shows exporting a Python file from the notebook.

  3. ファイルに train.py という名前を付けます。

  4. このファイルを確認し、トレーニング スクリプトに不要なコードを削除します。 たとえば、使用するモデルのコードを保持し、不要なモデルのコードを削除します。

    • 自動ログを開始するコードは保持するようにします (mlflow.sklearn.autolog())。
    • 自動生成されたコメントを削除し、独自のコメントをさらに追加することができます。
    • Python スクリプトを対話形式で (ターミナルまたはノートブックで) 実行する場合は、実験名を定義する行を保持します (mlflow.set_experiment("Develop on cloud tutorial"))。 または、別の名前を付けて、[ジョブ] セクションの別のエントリとして表示することもできます。 ただし、トレーニング ジョブのスクリプトを準備する場合、その行は機能しないため、省略する必要があります。ジョブ定義には実験名が含まれます。
    • 1 つのモデルをトレーニングする場合、実行開始と終了の各行 (mlflow.start_run()mlflow.end_run()) も必要ありません (効果はありません)。ただし、必要に応じて残すことができます。
  5. 編集が完了したら、ファイルを保存します。

これで、希望するモデルのトレーニングに使用する Python スクリプトが作成されました。

Python スクリプトを実行する

ここでは、Azure Machine Learning 開発環境であるコンピューティング インスタンスでこのコードを実行しています。 チュートリアル: モデルのトレーニングでは、より強力なコンピューティング リソースに対して、よりスケーラブルな方法でトレーニング スクリプトを実行する方法について説明します。

  1. 左側の [ターミナルを開く] を選択して、ターミナル ウィンドウを開きます。

    Screenshot shows how to open a terminal window.

  2. 現在の conda 環境を表示します。 アクティブな環境は * でマークされます。

    conda env list
    
  3. 新しいカーネルを作成した場合は、ここでアクティブにします。

    conda activate workstation_env
    
  4. このチュートリアル用のサブフォルダーを作成した場合は、ここで、そのフォルダーに cd を使用して移動します。

  5. トレーニング スクリプトを実行します。

    python train.py
    

Note

mlflow の警告は無視できます。 自動ログからのすべてのメトリックと画像は引き続き受け取ります。

スクリプトの結果を確認する

[ジョブ] に戻り、トレーニング スクリプトの結果を確認します。 トレーニング データは分割ごとに変化するため、実行間でも結果が異なることに注意してください。

リソースをクリーンアップする

引き続き他のチュートリアルに取り組む場合は、「次のステップ」に進んでください。

コンピューティング インスタンスを停止する

コンピューティング インスタンスをすぐに使用しない場合は、停止してください。

  1. スタジオの左側のナビゲーション領域で、[コンピューティング] を選択します。
  2. 上部のタブで、 [コンピューティング インスタンス] を選択します
  3. 一覧からコンピューティング インスタンスを選択します。
  4. 上部のツールバーで、 [停止] を選択します。

すべてのリソースの削除

重要

作成したリソースは、Azure Machine Learning に関連したその他のチュートリアルおよびハウツー記事の前提条件として使用できます。

作成したどのリソースも今後使用する予定がない場合は、課金が発生しないように削除します。

  1. Azure Portal で、左端にある [リソース グループ] を選択します。

  2. 一覧から、作成したリソース グループを選択します。

  3. [リソース グループの削除] を選択します。

    Screenshot of the selections to delete a resource group in the Azure portal.

  4. リソース グループ名を入力します。 次に、 [削除] を選択します。

次のステップ

各項目の詳細情報

このチュートリアルでは、コードが存在するのと同じコンピューターでプロトタイプを作成して、モデルを作成する初期の手順について説明しました。 運用トレーニングでは、より強力なリモート コンピューティング リソースでそのトレーニング スクリプトを使用する方法について説明します。