機械学習パイプライン ジョブをスケジュールする
適用対象: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 パイプラインについての理解。 詳細については、機械学習パイプラインに関するページを参照してください。
- CLI (v2) のインストール、セットアップ、使用に関するページの手順に従ってインストールされる Azure CLI および
ml
拡張機能。 - Azure Machine Learning YAML パイプラインを作成する方法に関する知識。 詳細については、「Azure Machine Learning CLI でコンポーネントを使用して機械学習パイプラインを作成して実行する」を参照してください。
制限事項
- Azure Machine Learning v2 のスケジュールでは、イベントベースのトリガーはサポートされていません。
- CLI および SDK v2 のスケジュールでは、複数のトリガー タイムスタンプを含む複雑な繰り返しパターンを指定できます。 スタジオ UI では、複雑なパターンを表示できますが、編集はできません。
- スタジオ UI では v2 スケジュールのみがサポートされ、発行されたパイプラインまたはパイプライン エンドポイントに基づく v1 スケジュールの一覧表示やアクセスはサポートされません。 発行されていないパイプラインのスケジュールを作成できます。
- 繰り返しが毎月 31 日または 30 日に設定されている場合、それより日数が少ない月のジョブは、スケジュールによってトリガーされません。
- cron スケジュール式では、
DAYS
とMONTHS
値はサポートされていません。 これらのパラメーターに渡される値は無視され、*
として扱われます。
スケジュールを作成する
満足のいくパフォーマンスと出力を備えたパイプライン ジョブがある場合は、このジョブを定期的に自動でトリガーするスケジュールを設定できます。 そのためには、ジョブをトリガーに関連付けるスケジュールを作成する必要があります。 トリガーには、ジョブを実行する間隔と頻度を指定する 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
(必須) は、スケジュールが発生する時間単位です。minutes
、hours
、days
、weeks
、またはmonths
を指定できます。interval
(必須) は、定期的なスケジュールの間隔を表す時間の数値です。schedule
(任意) は、繰り返しパターンを定義します。hours
、minutes
、weekdays
を指定できます。 省略した場合、ジョブはstart_time
、frequency
、interval
のロジックに従ってトリガーされます。frequency
がday
の場合、パターンにはhours
とminutes
を指定できます。frequency
がweek
またはmonth
の場合、パターンにはhours
、minutes
、weekdays
を指定できます。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
スケジュールを定義するときにジョブ設定を変更する
スケジュールによってトリガーされるジョブの構成をテスト ジョブとは違うものにしたい場合があります。 既存のジョブを使用してスケジュールを定義する場合は、ジョブ設定を変更できます。 この方法では、異なる入力を持つ同じジョブを使用して複数のスケジュールを定義できます。
スケジュールを定義するときに、パイプライン ジョブの実行時に使用する settings
、inputs
、または 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 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 ワークスペース) の下に表示されます。