次の方法で共有


機械学習パイプライン ジョブをスケジュールする

適用対象:Azure CLI ml extension v2 (現行)Python SDK azure-ai-ml v2 (現行)

この記事では、Azure で機械学習パイプラインの実行をスケジュールする方法について説明します。 モデルの再トレーニングや、経過時間に基づくバッチ予測の定期的な更新などのルーチン タスクをスケジュールできます。

この記事では、Azure Machine Learning CLI、Azure Machine Learning SDK v2 for Python、または Azure Machine Learning スタジオ UI を使用して、スケジュールを作成、取得、更新、非アクティブ化する方法について説明します。

ヒント

Azure Data Factory や Microsoft Fabric などの外部オーケストレーターを使用してジョブをスケジュールするには、バッチ エンドポイントにパイプライン ジョブをデプロイすることを検討してください。 詳細については、「既存のパイプライン ジョブをバッチ エンドポイントにデプロイする」と、「バッチ エンドポイント (プレビュー) を使用して Fabric から Azure Machine Learning モデルを実行する」を参照してください。

前提条件

  • Azure サブスクリプション。 お持ちでない場合は、開始する前に無料アカウントを作成してください。
  • Azure Machine Learning ワークスペース。 ワークスペースを作成するには、「ワークスペースを作成する」を参照してください。
  • Azure Machine Learning パイプラインについての理解。 詳細については、機械学習パイプラインに関するページを参照してください。

制限事項

  • Azure Machine Learning v2 のスケジュールでは、イベントベースのトリガーはサポートされていません。
  • CLI および SDK v2 のスケジュールでは、複数のトリガー タイムスタンプを含む複雑な繰り返しパターンを指定できます。 スタジオ UI では、複雑なパターンを表示できますが、編集はできません。
  • スタジオ UI では v2 スケジュールのみがサポートされ、発行されたパイプラインまたはパイプライン エンドポイントに基づく v1 スケジュールの一覧表示やアクセスはサポートされません。 発行されていないパイプラインのスケジュールを作成できます。
  • 繰り返しが毎月 31 日または 30 日に設定されている場合、それより日数が少ない月のジョブは、スケジュールによってトリガーされません。
  • cron スケジュール式では、DAYSMONTHS 値はサポートされていません。 これらのパラメーターに渡される値は無視され、* として扱われます。

スケジュールを作成する

満足のいくパフォーマンスと出力を備えたパイプライン ジョブがある場合は、このジョブを定期的に自動でトリガーするスケジュールを設定できます。 そのためには、ジョブをトリガーに関連付けるスケジュールを作成する必要があります。 トリガーには、ジョブを実行する間隔と頻度を指定する recurrence パターンまたは cron 式を指定できます。

どちらの場合も、インラインまたは既存のパイプライン ジョブを指定して、最初にパイプライン ジョブを定義する必要があります。 YAML でパイプラインを定義して CLI から実行したり、Python でパイプラインをインラインで作成したり、Azure Machine Learning スタジオでパイプラインを作成したりできます。 パイプライン ジョブは、ローカルに作成することも、ワークスペース内の既存のジョブから作成することもできます。

スタジオ UI、SDK v2、または CLI v2 を使用して、v2 または v1 パイプライン ジョブの v2 スケジュールを作成できます。 パイプライン ジョブのスケジュールを設定するために、最初に既存のパイプラインを発行する必要はありません。

この記事のコード例は、Azure Machine Learning CLI 2.0 でのスケジュールの操作に関するページにあります。

繰り返しパターンを使用した時間ベースのスケジュールを定義する

次の YAML コードは、パイプライン ジョブの定期的なスケジュールを定義します。 必須の type パラメーターは、trigger タイプが recurrence であることを指定します。

$schema: https://azuremlschemas.azureedge.net/latest/schedule.schema.json
name: simple_recurrence_job_schedule
display_name: Simple recurrence job schedule
description: a simple hourly recurrence job schedule

trigger:
  type: recurrence
  frequency: day #can be minute, hour, day, week, month
  interval: 1 #every day
  schedule:
    hours: [4,5,10,11,12]
    minutes: [0,30]
  start_time: "2022-07-10T10:00:00" # optional - default will be schedule creation time
  time_zone: "Pacific Standard Time" # optional - default will be UTC

create_job: ./simple-pipeline-job.yml
# create_job: azureml:simple-pipeline-job

次のスケジュール パラメーターを必須または任意で指定します。

パラメーター

  • frequency (必須) は、スケジュールが発生する時間単位です。 minuteshoursdaysweeks、または months を指定できます。
  • interval (必須) は、定期的なスケジュールの間隔を表す時間の数値です。
  • schedule (任意) は、繰り返しパターンを定義します。hoursminutesweekdays を指定できます。 省略した場合、ジョブは start_timefrequencyinterval のロジックに従ってトリガーされます。
    • frequencyday の場合、パターンには hoursminutes を指定できます。
    • frequencyweek または month の場合、パターンには hoursminutesweekdays を指定できます。
      • hours には、0 から 23 までの整数またはリストを指定します。
      • minutes には、0 から 59 までの整数またはリストを指定します。
      • weekdays には、monday から sunday までの文字列またはリストを指定します。
  • start_time (任意) は、タイムゾーンと共に開始日時を指定します。 省略した場合、既定値はスケジュールの作成時刻と等しくなります。 開始時刻が過去の場合、最初のジョブは、計算された次の実行時に実行されます。
  • end_time (任意) は、タイムゾーンと共に終了日時を指定します。 省略した場合、スケジュールは手動で無効にするまでアクティブになります。
  • time_zone (任意) は、繰り返しスケジュールのタイム ゾーンを指定します。 省略した場合、既定値は協定世界時 (UTC) です。 タイムゾーンの値について詳しくは、タイムゾーン値の付録をご覧ください。

スケジュール YAML を作成したら、次のコマンドを使用して CLI からスケジュールを作成できます。

# This action creates related resources for a schedule. It takes dozens of seconds to complete.
az ml schedule create --file simple-pipeline-job.yml --no-wait

cron 式を使用して時間ベースのスケジュールを作成する

cron 式では、柔軟でカスタマイズ可能な繰り返しパターンをスケジュールに指定できます。 標準的な crontab 式は、スペースで区切られたフィールド MINUTES HOURS DAYS MONTHS DAYS-OF-WEEK で構成されます。 ワイルドカード * は、1 つのフィールドのすべての値を意味します。

Azure Machine Language のスケジュールでは、cron 式は次のようになります。

  • MINUTES には、0 から 59 までの整数またはリストを指定します。
  • HOURS には、0 から 23 までの整数またはリストを指定します。
  • DAYS 値はサポートされておらず、常に * として扱われます。 DAYS* を指定した場合、これはその月のすべての日を意味します (日数は月と年によって異なります)。
  • MONTHS 値はサポートされておらず、常に * として扱われます。
  • DAYS-OF-WEEK には、0 から 6 までの整数またはリストを指定します (0 = 日曜日)。 曜日の名前も使用できます。

たとえば、式 15 16 * * 1 は、毎週月曜日の午後 4 時 15 分 (UTC) を意味します。 crontab 式の詳細については、GitHub の Crontab 式に関する wiki を参照してください。

次の YAML コードは、パイプライン ジョブの定期的なスケジュールを定義します。 必須の type パラメーターは、trigger タイプが cron であることを指定します。

$schema: https://azuremlschemas.azureedge.net/latest/schedule.schema.json
name: simple_cron_job_schedule
display_name: Simple cron job schedule
description: a simple hourly cron job schedule

trigger:
  type: cron
  expression: "0 * * * *"
  start_time: "2022-07-10T10:00:00" # optional - default will be schedule creation time
  time_zone: "Pacific Standard Time" # optional - default will be UTC

# create_job: azureml:simple-pipeline-job
create_job: ./simple-pipeline-job.yml

次のスケジュール パラメーターを必須または任意で指定します。

パラメーター

  • expression (必須) は、標準の crontab 式で、繰り返しのスケジュールを表します。
  • start_time (任意) は、タイムゾーンと共にスケジュールの開始日時を指定します。 たとえば、start_time: "2022-05-10T10:15:00-04:00" はスケジュールが UTC-4 タイムゾーンの 2022 年 5 月 10 日の午前 10:15:00 から開始されることを意味しています。 省略した場合、既定値はスケジュールの作成時刻と等しくなります。 開始時刻が過去の場合、最初のジョブは、計算された次の実行時に実行されます。
  • end_time (任意) は、タイムゾーンと共に終了日時を指定します。 省略した場合、スケジュールは手動で無効にするまでアクティブになります。
  • time_zone (任意) は、繰り返しスケジュールのタイム ゾーンを指定します。 省略した場合、既定値は UTC になります。

スケジュール YAML を作成したら、次のコマンドを使用して CLI からスケジュールを作成できます。

# This action creates related resources for a schedule. It takes dozens of seconds to complete.
az ml schedule create --file simple-pipeline-job.yml --no-wait

スケジュールを定義するときにジョブ設定を変更する

スケジュールによってトリガーされるジョブの構成をテスト ジョブとは違うものにしたい場合があります。 既存のジョブを使用してスケジュールを定義する場合は、ジョブ設定を変更できます。 この方法では、異なる入力を持つ同じジョブを使用して複数のスケジュールを定義できます。

スケジュールを定義するときに、パイプライン ジョブの実行時に使用する settingsinputs、または outputs を変更できます。 トリガーされるジョブの experiment_name を変更することもできます。

次のスケジュール定義では、既存のジョブの設定が変更されます。

$schema: https://azuremlschemas.azureedge.net/latest/schedule.schema.json
name: cron_with_settings_job_schedule
display_name: Simple cron job schedule
description: a simple hourly cron job schedule

trigger:
  type: cron
  expression: "0 * * * *"
  start_time: "2022-07-10T10:00:00" # optional - default will be schedule creation time
  time_zone: "Pacific Standard Time" # optional - default will be UTC

create_job: 
  type: pipeline
  job: ./simple-pipeline-job.yml
  # job: azureml:simple-pipeline-job
  # runtime settings
  settings:
    #default_compute: azureml:cpu-cluster
    continue_on_step_failure: true
  inputs:
    hello_string_top_level_input: ${{name}} 
  tags: 
    schedule: cron_with_settings_schedule

スケジュールでサポートされる式を使用する

スケジュールを定義するときは、次のマクロ式を使用して、ジョブ実行時に実際の値に解決される動的パラメーター値を定義できます。

Expression 説明 サポートされるプロパティ
${{name}} ジョブの名前 パイプライン ジョブの outputs パス
${{creation_context.trigger_time}} ジョブのトリガー時刻 パイプライン ジョブの文字列の種類 inputs

スケジュールの管理

ワークスペース内のスケジュールの一覧表示、詳細表示、更新、無効化、有効化、削除を行うことができます。

スケジュールを一覧表示する

az ml schedule list

スケジュールの詳細を表示する

az ml schedule show -n simple_cron_job_schedule

スケジュールを更新する

az ml schedule update -n simple_cron_job_schedule  --set description="new description" --no-wait

Note

タグや説明以外を更新する場合は、az ml schedule create --file update_schedule.yml を使うことを検討してください。

スケジュールを無効にする

az ml schedule disable -n simple_cron_job_schedule --no-wait

スケジュールを有効にする

az ml schedule enable -n simple_cron_job_schedule --no-wait

スケジュールの削除

重要

削除するには、まずスケジュールを無効にする必要があります。 削除は永続的であり、元に戻すことはできません。

az ml schedule delete -n simple_cron_job_schedule

スケジュールからトリガーされたジョブに対してクエリを実行する

特定のスケジュールによってトリガーされるジョブはすべて、表示名が <schedule_name>-YYYYMMDDThhmmssZ になります。 たとえば、named-schedule という名前のスケジュールが 2021 年 1 月 1 日の午前 6 時から 12 時間ごとに実行される場合、作成されるジョブの表示名は次のようになります。

  • named-schedule-20210101T060000Z
  • named-schedule-20210101T180000Z
  • named-schedule-20210102T060000Z
  • named-schedule-20210102T180000Z など

Azure Machine Learning スタジオの [ジョブ] タブでのスクリーンショット。ジョブの表示名でフィルター処理されています。

Azure CLI JMESPath クエリを適用して、スケジュール名によってトリガーされたジョブに対してクエリを実行することもできます。

# query triggered jobs from schedule, please replace the simple_cron_job_schedule to your schedule name
az ml job list --query "[?contains(display_name,'simple_cron_schedule')]"

ヒント

スタジオのスケジュール詳細ページの [ジョブ履歴] タブでは、スケジュールによってトリガーされたすべてのジョブを簡単に検索できます。


ロールベースのアクセス制御 (RBAC) のサポート

スケジュールは運用環境で使用されるため、誤操作の可能性と影響を減らすことが重要です。 ワークスペース管理者は、ワークスペースでの作成と管理のスケジュールへのアクセスを制限できます。

管理者は、Azure portal でスケジュールに関連する次のアクション ルールを構成できます。 詳細については、「Azure Machine Learning ワークスペースへのアクセスの管理」を参照してください。

アクション 説明 ルール
読み込み スケジュールの取得と一覧表示 Microsoft.MachineLearningServices/workspaces/schedules/read
書き込み スケジュールの作成、更新、無効化、有効化 Microsoft.MachineLearningServices/workspaces/schedules/write
削除 スケジュールを削除する Microsoft.MachineLearningServices/workspaces/schedules/delete

コストに関する考慮事項

スケジュールは、スケジュールの数に基づいて課金されます。 各スケジュールでは、Azure Machine Learning がユーザーに代わってホスト (HOBO) するロジック アプリが作成されます。

ロジック アプリは、ユーザーの Azure サブスクリプションに課金されます。 HOBO リソース コストは、元のリソース プロバイダーによって出力されたのと同じメーターを使用して課金されます。 料金は、ホスト リソース (Azure Machine Learning ワークスペース) の下に表示されます。