Azure Machine Learning パイプライン

完了

データ サイエンティストとして、主に Azure Machine Learning と連携してモデルをトレーニングおよび管理します。 実験の後は、作業を運用環境の Python コードに変換することで、Azure (DevOps) Pipelines または GitHub Actions を使用して自動化できるようにする必要があります。

Azure Machine Learning での実験

Azure Machine Learning には、作業を整理するのに役立つ一連の機能が用意されています。 たとえば、Azure Machine Learning を使用すると、次のことができます。

  • データセットを登録すると、データ レイクに格納されているデータを簡単に再利用できます。
  • 要件に応じて、リモート コンピューティング インスタンスまたはクラスター上でモデルをトレーニングします。
  • 実行したすべてのスクリプトを実験で追跡することで、作業を容易に比較することができます。
  • トレーニング済みのモデルを登録し、バッチまたはリアルタイムで使用するためにモデルをデプロイします。

データ サイエンティストとしての作業のほとんどは、次の実験から成ります: さまざまな構成をテストしてモデルをトレーニングする。パフォーマンス メトリックを確認して運用環境にデプロイすべきモデルを決定する。

Jupyter ノートブック (.ipynb ファイル) で実験すると仮定すると、次の方法で実験を実稼働 Python コードに変換します。

  • 不要なコードをすべて削除する。
  • コードを関数にリファクタリングする。
  • Python スクリプト (.py ファイル) で関連する関数を組み合わせる。
  • Python スクリプトごとに単体テストを作成する。
  • 自動化できるワークフローにスクリプトをグループ化するパイプラインを作成します。

コードを運用する準備ができたら、Azure Machine Learning パイプラインを使用してスクリプトの実行を自動化できます。

Azure Machine Learning パイプラインを作成する

パイプラインの概念は、さまざまなツールで採用されていて、多くの場合、特定の順序でタスクをグループ化する方法として使用されています。 パイプラインの主な利点は、それをスケジュールできること、またはその実行をトリガーできることです。

Azure Machine Learning パイプラインは、Azure Machine Learning ワークスペース内に作成されます。 パイプラインを作成するには、Python スクリプトを使用してステップを定義できます。

必要に応じて、Azure Machine Learning コンポーネントを使用してパイプラインを作成できます。 コンポーネントを作成すると、スクリプトは、Azure Machine Learning ワークスペースに必要な環境などのメタデータと共に格納されます。 コンポーネントは、同じワークスペース内のすべてのユーザーが共有して使用できるため、あなたの作業に基づいて他のユーザーが新しいパイプラインをすばやく簡単に作成することができます。

自動化に使用できるパイプラインを作成するには、CLI (v2) コマンドを使用してトリガーできるパイプライン ジョブを YAML で定義することをお勧めします。

パイプラインを定義する YAML ファイルでは、次の情報を指定する必要があります。

  • 実行する内容: Python スクリプトまたはコンポーネントとして定義されているステップ。
  • 実行方法: ステップで求められる入力または出力。
  • 実行する場所: コードを実行するために必要なコンピューティング (一般的に Azure Machine Learning コンピューティング クラスター)。

たとえば、生データを入力として受け取り、変換し、モデルをトレーニングするパイプラインは、pipeline-job.yml ファイル内で定義できます。

$schema: https://azuremlschemas.azureedge.net/latest/pipelineJob.schema.json
type: pipeline
display_name: nyc-taxi-pipeline-example
experiment_name: nyc-taxi-pipeline-example
jobs:

  transform-job:
    type: command
      raw_data: 
          type: uri_folder 
          path: ./data
    outputs:
      transformed_data:
        mode: rw_mount
    code: src/transform
    environment: azureml:AzureML-sklearn-0.24-ubuntu18.04-py37-cpu@latest
    compute: azureml:cpu-cluster
    command: >-
      python transform.py 
      --raw_data ${{inputs.raw_data}} 
      --transformed_data ${{outputs.transformed_data}}
  
  train-job:
    type: command
    inputs:
      training_data: ${{parent.jobs.transform-job.outputs.transformed_data}}
    outputs:
      model_output: 
        mode: rw_mount
      test_data: 
        mode: rw_mount
    code: src/train
    environment: azureml:AzureML-sklearn-0.24-ubuntu18.04-py37-cpu@latest
    compute: azureml:cpu-cluster
    command: >-
      python train.py 
      --training_data ${{inputs.training_data}} 
      --test_data ${{outputs.test_data}} 
      --model_output ${{outputs.model_output}}

Azure Machine Learning 内でパイプラインを実行するには、次の CLI コマンドを使用します。

az ml job create --file pipeline-job.yml

パイプラインの実行が完了したら、Azure Machine Learning ワークスペースでパイプラインとその実行されたステップを確認できます。

機械学習ワークロードを Python スクリプトに変換し、パイプライン内のタスクをグループ化すると、モデルは運用の準備が整います。 YAML ファイルでパイプラインを定義すると、CLI (v2) を使用してパイプラインの実行をトリガーすることで、トレーニングと再トレーニングを自動化できます。 Azure (DevOps) Pipelines または GitHub Actions から、パイプライン YAML ファイルを参照することで、CLI コマンドを実行できます。