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

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

この記事では、Azure で実行するパイプラインをプログラムでスケジュールする方法と、スケジュール UI を使用して同じことを行う方法について説明します。 スケジュールは、経過時間に基づいて作成することができます。 時間ベースのスケジュールは、モデルを再トレーニングしたり、バッチ予測を定期的に行って最新の状態に保つなどといった日常的なタスクを処理するために使用することができます。 スケジュールを作成する方法を説明した後、CLI、SDK、スタジオ UI からそれらを取得、更新、非アクティブ化する方法を説明します。

ヒント

Azure Data Factory や Microsoft Fabric などの外部オーケストレーターを使用してジョブをスケジュールする必要がある場合は、バッチ エンドポイントにパイプライン ジョブをデプロイすることを検討してください。 詳細については、バッチ エンドポイントにジョブをデプロイする方法に関するページ、および Microsoft Fabric からバッチ エンドポイントを使用する方法に関するページを参照してください。

前提条件

  • Azure Machine Learning を使用するには、Azure サブスクリプションが必要です。 Azure サブスクリプションをお持ちでない場合は、開始する前に無料アカウントを作成してください。 無料版または有料版の Azure Machine Learning を今すぐお試しください。

パイプライン ジョブのスケジュールを設定する

パイプライン ジョブを定期的に実行するには、スケジュールを作成する必要があります。 ジョブとトリガーを関連付けるには、Schedule を使用します。 トリガーには、cron 式で実行間隔を指定する cron、またはジョブを実行する頻度を指定する recurrence を使用することができます。 いずれの場合も、まず最初にパイプライン ジョブを定義する必要があります。これは、既存のパイプライン ジョブでも、インラインで定義するパイプライン ジョブでもかまいません。詳細については、CLI でパイプライン ジョブを作成する方法、および SDK でパイプライン ジョブを作成する方法に関するページを参照してください。

パイプライン ジョブ yaml は、ローカルまたはワークスペース内の既存のパイプライン ジョブでスケジュールできます。

スケジュールを作成する

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

適用対象: Azure CLI ml 拡張機能 v2 (現行)

$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

trigger には次のプロパティが含まれます。

  • (必須)type は、スケジュールの種類が recurrence であることを指定します。 これは、cron にすることもできます。詳細については、次のセクションを参照してください。

リストは以下に続きます。

Note

指定する必要がある次のプロパティは、CLI と SDK に適用されます。

  • (必須)frequency は、スケジュールの起動間隔を表す時間の単位を指定します。 これには、minutehourdayweekmonth を指定できます。

  • (必須)interval は、頻度に基づいてスケジュールの起動間隔を指定します。頻度は、スケジュールが再び起動するまで待機する時間の単位数です。

  • (Optional) schedule は、hoursminutes、および weekdays を含む繰り返しパターンを定義します。

    • frequencyday の場合、パターンには hoursminutes を指定できます。
    • frequencyweek および month の場合、パターンには hoursminutes、および weekdays を指定できます。
    • hours は、0 から 23 までの整数またはリストである必要があります。
    • minutes は、0 から 59 までの整数またはリストである必要があります。
    • weekdays には、monday から sunday までの文字列またはリストを使用できます。
    • schedule を省略した場合、ジョブは start_timefrequency、および interval のロジックに従ってトリガーされます。
  • (省略可能) start_time は、タイムゾーンと共に開始日時を記述します。 start_time を省略すると、start_time はジョブの作成時刻と同じになります。 開始時刻が過去の場合、最初のジョブは、計算された次の実行時に実行されます。

  • (省略可能) end_time は、タイムゾーンと共に終了日時を記述します。 end_time を省略した場合、スケジュールを手動で無効にするまでジョブがトリガーされ続けます。

  • (省略可能) time_zone は、繰り返しのタイム ゾーンを指定します。 省略した場合、既定値は UTC になります。 タイムゾーン値の詳細については、タイムゾーン値の付録を参照してください。

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

適用対象: Azure CLI ml 拡張機能 v2 (現行)

$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

trigger セクションはスケジュールの詳細を定義するもので、以下のプロパティが含まれています。

  • (必須)type は、スケジュールの種類が cron であることを指定します。

リストは以下に続きます。

  • (必須)expression は、標準の crontab 式を使用して定期的なスケジュールを表します。 1 つの式は、スペースで区切られた 5 つのフィールドで構成されます:

    MINUTES HOURS DAYS MONTHS DAYS-OF-WEEK

    • そのフィールドのすべての値をカバーする単一のワイルドカード (*)。 つまり、DAY に * を指定した場合、これはその月のすべての日を意味します (この数は月と年によって異なります)。

    • 上記のサンプルにある expression: "15 16 * * 1" は、毎週月曜日の午後 16 時 15 分を意味します。

    • 次の表に、各フィールドの有効な値の一覧を示します。

      フィールド Range コメント
      MINUTES 0-59 -
      HOURS 0-23 -
      DAYS - サポートされていません。 値は無視され、* として扱われます。
      MONTHS - サポートされていません。 値は無視され、* として扱われます。
      DAYS-OF-WEEK 0 ~ 6 ゼロ (0) は日曜日を意味します。 曜日の名前も使用できます。
    • crontab 式の使用方法の詳細については、GitHub の Crontab 式に関する wiki を参照してください。

    重要

    DAYS および MONTH はサポートされていません。 値を渡すと無視され、* として扱われます。

  • (省略可能) start_time は、スケジュールの開始日時とタイムゾーンを指定します。 start_time: "2022-05-10T10:15:00-04:00" は、スケジュールが UTC-4 タイムゾーンの 2022 年 5 月 10 日の午前 10:15:00 から開始されることを意味しています。 start_time を省略した場合、start_time はスケジュールの作成時刻と等しくなります。 開始時刻が過去の場合、最初のジョブは、計算された次の実行時に実行されます。

  • (省略可能) end_time は、タイムゾーンと共に終了日時を記述します。 end_time を省略した場合、スケジュールを手動で無効にするまでジョブがトリガーされ続けます。

  • (省略可能) time_zone は、式のタイム ゾーンを指定します。 省略した場合、既定値は UTC になります。 タイムゾーン値の付録を参照してください。

制限事項:

  • 現在、Azure Machine Learning v2 のスケジュールでは、イベントベースのトリガーはサポートされていません。
  • Azure Machine Learning SDK または CLI v2 を使用すると、複数のトリガー タイムスタンプを含む複雑な繰り返しパターンを指定できます。一方、UI では、複雑なパターンは表示されるだけであり、編集はサポートされていません。
  • 繰り返しを毎月 31 日に設定した場合、31 日より少ない月には、ジョブはスケジュールでトリガーされません。

スケジュールを定義するときにランタイム設定を変更する

既存のジョブを使用してスケジュールを定義する場合は、ジョブのランタイム設定を変更できます。 この方法を使用すると、異なる入力を持つ同じジョブを使用して複数のスケジュールを定義できます。

適用対象: Azure CLI ml 拡張機能 v2 (現行)

$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

スケジュールを定義するときに、次のプロパティを変更できます。

プロパティ 説明
settings パイプライン ジョブの実行時に使用する設定のディクショナリ。
inputs パイプライン ジョブの実行時に使用する入力のディクショナリ。
outputs パイプライン ジョブの実行時に使用する入力のディクショナリ。
experiment_name トリガーされたジョブの実験名。

Note

Studio UI のユーザーは、スケジュールの作成時にのみ、入力、出力、ランタイムの設定を変更できます。 experiment_name は、CLI または SDK を使用してのみ変更できます。

スケジュールでサポートされる式

スケジュールを定義する際は、ジョブの実行時に実数値に変換される以下の式を使用することができます。

説明 サポートされるプロパティ
${{creation_context.trigger_time}} スケジュールがトリガーされる時刻。 パイプライン ジョブの文字列型の入力
${{name}} ジョブの名前。 パイプライン ジョブの outputs.path

スケジュールの管理

スケジュールを作成する

適用対象: Azure CLI ml 拡張機能 v2 (現行)

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

# This action will create related resources for a schedule. It will take dozens of seconds to complete.
az ml schedule create --file cron-schedule.yml --no-wait

ワークスペース内のスケジュールを一覧表示する

適用対象: Azure CLI ml 拡張機能 v2 (現行)

az ml schedule list

スケジュールの詳細を確認する

適用対象: Azure CLI ml 拡張機能 v2 (現行)

az ml schedule show -n simple_cron_job_schedule

スケジュールを更新する

適用対象: Azure CLI ML 拡張機能 v2 (現行)

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

Note

タグや説明以外を更新する場合は、az ml schedule create --file update_schedule.yml を使用することをお勧めします

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

適用対象: Azure CLI ML 拡張機能 v2 (現行)

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

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

適用対象: Azure CLI ml 拡張機能 v2 (現行)

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

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

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

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

Screenshot of the jobs tab in the Azure Machine Learning studio filtering by job display name.

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')]"

Note

スケジュールによってトリガーされたすべてのジョブを簡単に検索する方法としては、スタジオ UI を使用して、"スケジュールの詳細ページ" の [ジョブ履歴] を参照してください。


スケジュールの削除

重要

スケジュールを削除するには、まず無効にする必要があります。 削除は回復不能なアクションです。 スケジュールは、削除した後にアクセスまたは復旧することはできません。

適用対象: Azure CLI ml 拡張機能 v2 (現行)

az ml schedule delete -n simple_cron_job_schedule

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

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

現在、スケジュールに関連するアクション ルールが 3 つあり、Azure portal で構成できます。 Azure Machine Learning ワークスペースへのアクセスを管理する方法の詳細については、こちらを参照してください。

アクション 説明 ルール
Read Machine Learning ワークスペースでのスケジュールの取得と一覧表示 Microsoft.MachineLearningServices/workspaces/schedules/read
Write Machine Learning ワークスペースでスケジュールを作成、更新、無効化、有効化する Microsoft.MachineLearningServices/workspaces/schedules/write
削除 Machine Learning ワークスペースでスケジュールを削除する Microsoft.MachineLearningServices/workspaces/schedules/delete

よく寄せられる質問

  • SDK で作成したスケジュールが UI に表示されないのはなぜですか?

    スケジュールの UI は v2 スケジュール用です。 そのため、UI で v1 スケジュールの一覧表示またはアクセスはできません。

    ただし、v2 スケジュールでは v1 パイプライン ジョブもサポートされます。 最初にパイプラインを発行する必要はありません。パイプライン ジョブのスケジュールを直接設定できます。

  • 以前に設定した時刻にジョブがスケジュールでトリガーされないのはなぜですか?

    • 既定では、スケジュールのトリガー時刻は UTC タイムゾーンを使用して計算されます。 作成ウィザードでタイムゾーンを指定できます。または、スケジュールの詳細ページでタイムゾーンを更新できます。
    • 繰り返しを毎月 31 日に設定した場合、31 日より少ない月には、ジョブはスケジュールでトリガーされません。
    • cron 式を使用している場合、MONTH はサポートされていません。 値を渡すと無視され、* として扱われます。 これは、既知の制限です。
  • イベントベースのスケジュールはサポートされていますか?

    • いいえ。V2 スケジュールでは、イベントベースのスケジュールはサポートされていません。

次の手順