Udostępnij za pośrednictwem


Planowanie zadań potoku uczenia maszynowego

DOTYCZY: Rozszerzenie interfejsu wiersza polecenia platformy Azure w wersji 2 (current)Zestaw PYTHON SDK azure-ai-ml v2 (bieżąca)

Z tego artykułu dowiesz się, jak zaplanować uruchamianie potoków uczenia maszynowego na platformie Azure. Możesz zaplanować rutynowe zadania, takie jak ponowne trenowanie modeli lub regularne aktualizowanie przewidywań wsadowych na podstawie upływu czasu.

W tym artykule pokazano, jak tworzyć, pobierać, aktualizować i dezaktywować harmonogramy przy użyciu interfejsu wiersza polecenia usługi Azure Machine Learning, zestawu AZURE Machine Learning SDK w wersji 2 dla języka Python lub interfejsu użytkownika usługi Azure Machine Learning Studio.

Napiwek

Aby zaplanować zadania przy użyciu zewnętrznego koordynatora, takiego jak Azure Data Factory lub Microsoft Fabric, rozważ wdrożenie zadań potoku w punkcie końcowym wsadowym. Aby uzyskać więcej informacji, zobacz Wdrażanie istniejących zadań potoku w punktach końcowych wsadowych i Uruchamianie modeli usługi Azure Machine Learning z sieci szkieletowej przy użyciu punktów końcowych wsadowych (wersja zapoznawcza).

Wymagania wstępne

  • Subskrypcja platformy Azure. Jeśli nie masz subskrypcji, przed rozpoczęciem utwórz bezpłatne konto.
  • Obszar roboczy usługi Azure Machine Learning. Aby utworzyć obszar roboczy, zobacz Tworzenie zasobów obszaru roboczego.
  • Znajomość potoków usługi Azure Machine Learning. Aby uzyskać informacje, zobacz Co to są potoki uczenia maszynowego.

Ograniczenia

  • Harmonogramy usługi Azure Machine Learning w wersji 2 nie obsługują wyzwalaczy opartych na zdarzeniach.
  • Harmonogramy interfejsu wiersza polecenia i zestawu SDK w wersji 2 obsługują określanie złożonych wzorców cyklu zawierających wiele sygnatur czasowych wyzwalacza. Interfejs użytkownika programu Studio wyświetla złożone wzorce, ale nie obsługuje ich edytowania.
  • Interfejs użytkownika programu Studio obsługuje tylko harmonogramy w wersji 2 i nie może wyświetlać ani uzyskiwać dostępu do harmonogramów w wersji 1 opartych na opublikowanych potokach lub punktach końcowych potoku. Możesz utworzyć harmonogram dla nieopublikowanego potoku.
  • Jeśli cykl jest ustawiony jako 31 lub 30 dzień każdego miesiąca, harmonogram nie wyzwala zadań w miesiącach, które mają mniej dni.
  • DAYS wartości i MONTHS nie są obsługiwane w wyrażeniach harmonogramu cron. Wartości przekazane dla tych parametrów są ignorowane i traktowane jako *.

Tworzenie harmonogramu

Jeśli masz zadanie potoku z satysfakcjonującą wydajnością i danymi wyjściowymi, możesz skonfigurować harmonogram automatycznego wyzwalania zadania w regularnych odstępach czasu. W tym celu należy utworzyć harmonogram, który kojarzy zadanie z wyzwalaczem. Wyzwalacz może być wzorcem lub wyrażeniem recurrence cron określającym interwał i częstotliwość uruchamiania zadania.

W obu przypadkach należy najpierw zdefiniować zadanie potoku , wbudowane lub przez określenie istniejącego zadania potoku. Potoki w języku YAML można definiować i uruchamiać z poziomu interfejsu wiersza polecenia, tworzyć potoki wbudowane w języku Python lub tworzyć potoki w usłudze Azure Machine Learning Studio. Zadania potoku można tworzyć lokalnie lub z istniejących zadań w obszarze roboczym.

Harmonogramy w wersji 2 dla zadań potoku w wersji 2 lub 1 można tworzyć przy użyciu interfejsu użytkownika programu Studio, zestawu SDK w wersji 2 lub interfejsu wiersza polecenia w wersji 2. Nie musisz najpierw publikować istniejących potoków, aby skonfigurować harmonogramy zadań potoku.

Przykłady kodu w tym artykule pochodzą z artykułu Praca z harmonogramem w interfejsie wiersza polecenia usługi Azure Machine Learning w wersji 2.0.

Definiowanie harmonogramu opartego na czasie z wzorcem cyklu

Poniższy kod YAML definiuje cykliczny harmonogram zadania potoku. Wymagany type parametr określa, że trigger typ to 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

Musisz lub możesz podać następujące parametry harmonogramu:

Parametry

  • frequency(wymagane) to jednostka czasowa, na podstawie której zaplanowano pożary. Może to być minutes, hours, days, weekslub months.
  • interval(wymagane) to liczba jednostek czasu między cyklami harmonogramu.
  • schedule (opcjonalnie) definiuje wzorzec cyklu, który może zawierać hours, minutesi weekdays. Jeśli pominięto, zadania są wyzwalane zgodnie z logiką start_time, frequencyi interval.
    • Gdy frequency parametr ma daywartość , wzorzec może określać hours wartości i minutes.
    • Jeśli frequency element ma week wartość lub month, wzorzec może określać hourswartości , minutesi weekdays.
      • hours jest liczbą całkowitą lub listą z zakresu od 0 do 23.
      • minutes jest liczbą całkowitą lub listą z zakresu od 0 do 59.
      • weekdays jest ciągiem lub listą z monday do sunday.
  • start_time (opcjonalnie) to data i godzina rozpoczęcia ze strefą czasową. W przypadku pominięcia wartość domyślna jest równa harmonogramowi czasu tworzenia. Jeśli godzina rozpoczęcia jest w przeszłości, pierwsze zadanie jest uruchamiane w następnym obliczonym czasie wykonywania.
  • end_time (opcjonalnie) to data i godzina zakończenia ze strefą czasową. W przypadku pominięcia harmonogram pozostaje aktywny do momentu ręcznego wyłączenia.
  • time_zone (opcjonalnie) określa strefę czasową harmonogramu cyklu. W przypadku pominięcia wartość domyślna to Uniwersalny czas koordynowany (UTC). Aby uzyskać więcej informacji na temat wartości strefy czasowej, zobacz dodatek dotyczący wartości strefy czasowej.

Po utworzeniu harmonogramu YAML użyj następującego polecenia, aby utworzyć harmonogram za pomocą interfejsu wiersza polecenia:

# 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

Definiowanie harmonogramu opartego na czasie za pomocą wyrażenia cron

Wyrażenie cron może określać elastyczny i dostosowany wzorzec cyklu dla harmonogramu. Standardowe wyrażenie crontab składa się z pól MINUTES HOURS DAYS MONTHS DAYS-OF-WEEKrozdzielanych spacjami. Symbol wieloznaczny * oznacza wszystkie wartości pola.

W wyrażeniu cron harmonogramu usługi Azure Machine Language:

  • MINUTES jest liczbą całkowitą lub listą z zakresu od 0 do 59.
  • HOURS jest liczbą całkowitą lub listą z zakresu od 0 do 23.
  • DAYS wartości nie są obsługiwane i są zawsze traktowane jako *. Wartość * oznacza DAYS wszystkie dni w miesiącu, które różnią się w zależności od miesiąca i roku.
  • MONTHS wartości nie są obsługiwane i są zawsze traktowane jako *.
  • DAYS-OF-WEEK jest liczbą całkowitą lub listą z zakresu od 0 do 6, gdzie 0 = niedziela. Nazwy dni są również akceptowane.

Na przykład wyrażenie 15 16 * * 1 oznacza 16:15 CZASU UTC co poniedziałek. Aby uzyskać więcej informacji na temat wyrażeń crontab, zobacz witrynę typu wiki Crontab Expression w witrynie GitHub.

Poniższy kod YAML definiuje cykliczny harmonogram zadania potoku. Wymagany type parametr określa, że trigger typ to 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

Musisz lub możesz podać następujące parametry harmonogramu:

Parametry

  • expression(wymagane) to standardowe wyrażenie crontab, które wyraża harmonogram cykliczny.
  • start_time (opcjonalnie) to data i godzina rozpoczęcia harmonogramu ze strefą czasową. Na przykład oznacza, start_time: "2022-05-10T10:15:00-04:00" że harmonogram rozpoczyna się od 10:15:00 w dniu 10 maja 2022 r. w strefie czasowej UTC-4. W przypadku pominięcia wartość domyślna jest równa harmonogramowi czasu tworzenia. Jeśli godzina rozpoczęcia jest w przeszłości, pierwsze zadanie jest uruchamiane w następnym obliczonym czasie wykonywania.
  • end_time (opcjonalnie) to data i godzina zakończenia ze strefą czasową. W przypadku pominięcia harmonogram pozostaje aktywny do momentu ręcznego wyłączenia.
  • time_zone (opcjonalnie) określa strefę czasową harmonogramu cyklu. W przypadku pominięcia wartość domyślna to UTC.

Po utworzeniu harmonogramu YAML użyj następującego polecenia, aby utworzyć harmonogram za pomocą interfejsu wiersza polecenia:

# 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

Zmienianie ustawień zadania podczas definiowania harmonogramów

Czasami można chcieć, aby zadania wyzwalane przez harmonogramy miały różne konfiguracje od zadań testowych. Podczas definiowania harmonogramu przy użyciu istniejącego zadania można zmienić ustawienia zadania. Takie podejście umożliwia zdefiniowanie wielu harmonogramów, które używają tego samego zadania z różnymi danymi wejściowymi.

Podczas definiowania harmonogramu można zmienić settingselement , inputslub outputs użyć go podczas uruchamiania zadania potoku. Można również zmienić experiment_name wyzwalane zadanie.

Poniższa definicja harmonogramu zmienia ustawienia istniejącego zadania.

$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

Używanie obsługiwanych wyrażeń w harmonogramach

Podczas definiowania harmonogramu można użyć następujących wyrażeń makr, aby zdefiniować dynamiczne wartości parametrów, które są rozpoznawane na rzeczywiste wartości w czasie wykonywania zadania.

Expression opis Obsługiwane właściwości
${{name}} Nazwa zadania outputs ścieżka zadania potoku
${{creation_context.trigger_time}} Czas wyzwalania zadania Typ inputs ciągu zadania potoku

Zarządzanie harmonogramem

Możesz wyświetlać, wyświetlać szczegóły, aktualizować, wyłączać, włączać i usuwać harmonogramy w obszarze roboczym.

Wyświetlanie listy harmonogramów

az ml schedule list

Wyświetlanie szczegółów harmonogramu

az ml schedule show -n simple_cron_job_schedule

Aktualizowanie harmonogramu

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

Uwaga

Aby zaktualizować więcej niż tylko tagi i opis, rozważ użycie polecenia az ml schedule create --file update_schedule.yml.

Wyłączanie harmonogramu

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

Włączanie harmonogramu

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

Usuwanie harmonogramu

Ważne

Najpierw należy wyłączyć harmonogram, aby go usunąć. Usunięcie jest trwałe i nieodwracalne.

az ml schedule delete -n simple_cron_job_schedule

Wykonywanie zapytań wyzwolonych zadań z harmonogramu

Zadania wyzwalane według określonego harmonogramu mają nazwę <schedule_name>-YYYYMMDDThhmmssZwyświetlaną . Jeśli na przykład harmonogram o nazwie jest uruchamiany named-schedule co 12 godzin, począwszy od 6:00 w dniu 1 stycznia 2021 r., nazwy wyświetlane utworzonych zadań są następujące:

  • named-schedule-20210101T060000Z
  • nazwa-schedule-20210101T180000Z
  • named-schedule-20210102T060000Z
  • named-schedule-20210102T180000Z itd.

Zrzut ekranu przedstawiający kartę zadań w usłudze Azure Machine Learning Studio filtrowania według nazwy wyświetlanej zadania.

Możesz również zastosować zapytanie JMESPath interfejsu wiersza polecenia platformy Azure, aby wykonać zapytanie dotyczące zadań wyzwalanych przez nazwę harmonogramu.

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

Napiwek

Karta Historia zadań na stronie szczegółów harmonogramu w programie Studio zapewnia prosty sposób znajdowania wszystkich zadań wyzwalanych zgodnie z harmonogramem.


Obsługa kontroli dostępu opartej na rolach (RBAC)

Ponieważ harmonogramy są używane do produkcji, ważne jest, aby zmniejszyć prawdopodobieństwo i wpływ niewłaściwej operacji. Administratorzy obszaru roboczego mogą ograniczyć dostęp do planowania tworzenia i zarządzania w obszarze roboczym.

Administratorzy mogą skonfigurować następujące reguły akcji związane z harmonogramami w witrynie Azure Portal. Aby uzyskać więcej informacji, zobacz Zarządzanie dostępem do obszarów roboczych usługi Azure Machine Learning.

Akcja opis Reguła
Przeczytaj Pobieranie i wyświetlanie listy harmonogramów Microsoft.MachineLearningServices/workspaces/schedules/read
Write Tworzenie, aktualizowanie, wyłączanie i włączanie harmonogramów Microsoft.MachineLearningServices/workspaces/schedules/write
Delete Usuwanie harmonogramów Microsoft.MachineLearningServices/workspaces/schedules/delete

Kwestie związane z kosztami

Harmonogramy są rozliczane na podstawie liczby harmonogramów. Każdy harmonogram tworzy aplikację logiki hostowaną przez usługę Azure Machine Learning w imieniu użytkownika (HOBO).

Aplikacja logiki pobiera opłaty z powrotem do subskrypcji platformy Azure użytkownika. Koszty zasobów HOBO są rozliczane przy użyciu tego samego miernika emitowanego przez oryginalnego dostawcę zasobów. Opłaty są wyświetlane w ramach zasobu hosta, który jest obszarem roboczym usługi Azure Machine Learning.