Поделиться через


Настройка AutoML для обучения модели прогнозирования временных рядов с помощью пакета SDK и CLI

ОБЛАСТЬ ПРИМЕНЕНИЯ:Расширение машинного обучения Azure CLI версии 2 (current)Python SDK azure-ai-ml версии 2 (current)

Автоматизированное машинное обучение (AutoML) в Машинном обучении Azure использует стандартные модели машинного обучения вместе с известными моделями временных рядов для создания прогнозов. Этот подход включает исторические сведения о целевой переменной с функциями, предоставляемыми пользователем, в входных данных и автоматически спроектированных функциях. Алгоритмы поиска моделей помогают определить модели с оптимальной точностью прогнозирования. Дополнительные сведения см. в статье о методологии прогнозирования и выборе моделей.

В этой статье описывается, как настроить AutoML для прогнозирования временных рядов с помощью машинного обучения с помощью пакета SDK для Python машинного обучения Azure и Azure CLI. Процесс включает подготовку данных для обучения и настройку параметров временных рядов в задании прогнозирования (ссылка на класс). Затем вы обучаете, выводите и вычисляете модели с помощью компонентов и конвейеров.

Сведения о низком коде см. в руководстве по прогнозированию спроса с помощью автоматизированного машинного обучения. В этой статье представлен пример прогнозирования временных рядов, использующий AutoML в студии машинного обучения Azure.

Необходимые компоненты

Подготовка данных обучения и проверки

Входные данные для прогнозирования AutoML должны содержать допустимые временные ряды в табличном формате. Каждая переменная должна иметь собственный столбец в таблице данных. AutoML требует по крайней мере два столбца: столбец времени для представления оси времени и целевого столбца для прогнозируемого количества. Другие столбцы могут служить прогнозаторами. Дополнительные сведения см. в статье о том, как autoML использует данные.

Внимание

При обучении модели прогнозирования будущих значений убедитесь, что все функции, используемые в обучении, также можно использовать при выполнении прогнозов для предполагаемого горизонта.

Рассмотрим функцию для текущей цены акций, которая может повысить точность обучения. Если вы прогнозируете с длинным горизонтом, вы не сможете точно прогнозировать будущие фондовые значения, соответствующие будущим точкам временных рядов. Такой подход может снизить точность модели.

Для заданий MLTable прогнозирования AutoML требуется, чтобы данные обучения представляли собой объект. Объект MLTable указывает источник данных и шаги по загрузке данных. Дополнительные сведения и варианты использования см. в статье "Работа с таблицами".

В следующем примере предположим, что данные обучения содержатся в CSV-файле в локальном каталоге: ./train_data/timeseries_train.csv.

Объект можно создать MLTable с помощью компонента Python SDK mltable:

import mltable

paths = [
    {'file': './train_data/timeseries_train.csv'}
]

train_table = mltable.from_delimited_files(paths)
train_table.save('./train_data')

Этот код создает новый файл . /train_data/MLTable, содержащий формат файла и инструкции по загрузке.

Чтобы запустить задание обучения, определите входной объект данных с помощью пакета SDK для Python:

from azure.ai.ml.constants import AssetTypes
from azure.ai.ml import Input

# Training MLTable defined locally, with local data to be uploaded.
my_training_data_input = Input(
    type=AssetTypes.MLTABLE, path="./train_data"
)

Данные проверки указываются аналогичным образом. MLTable Создайте объект и укажите входные данные проверки. Кроме того, если вы не предоставляете данные проверки, AutoML автоматически создает перекрестную проверку от обучающих данных, используемых для выбора модели. Дополнительные сведения см. на следующих ресурсах:

Создание вычислений для запуска эксперимента

AutoML использует вычислительные ресурсы Машинного обучения Azure, которые являются полностью управляемым вычислительным ресурсом для выполнения задания обучения.

В следующем примере создается вычислительный кластер с именем cpu-cluster.

from azure.ai.ml.entities import AmlCompute

# specify aml compute name.
cpu_compute_target = "cpu-cluster"

try:
    ml_client.compute.get(cpu_compute_target)
except Exception:
    print("Creating a new cpu compute target...")
    compute = AmlCompute(
        name=cpu_compute_target, size="STANDARD_D2_V2", min_instances=0, max_instances=4
    )
    ml_client.compute.begin_create_or_update(compute).result()

Настройка эксперимента

В следующем примере показано, как настроить эксперимент.

Функции фабрики AutoML используются для настройки заданий прогнозирования в пакете SDK для Python. В следующем примере показано, как создать задание прогнозирования, задав основную метрику и установив ограничения для выполнения обучения:

from azure.ai.ml import automl

# Set forecasting variables.
# As needed, modify the variable values to run the snippet successfully.
forecasting_job = automl.forecasting(
    compute="cpu-compute",
    experiment_name="sdk-v2-automl-forecasting-job",
    training_data=my_training_data_input,
    target_column_name=target_column_name,
    primary_metric="normalized_root_mean_squared_error",
    n_cross_validations="auto",
)

# Set optional limits.
forecasting_job.set_limits(
    timeout_minutes=120,
    trial_timeout_minutes=30,
    max_concurrent_trials=4,
)

Параметры задания прогнозирования

Задачи прогнозирования имеют множество параметров, относящихся к прогнозированию. Наиболее основными из этих параметров являются имя столбца времени в данных обучения и горизонте прогнозирования.

Используйте методы ForecastingJob для настройки следующих параметров:

# Forecasting-specific configuration.
forecasting_job.set_forecast_settings(
    time_column_name=time_column_name,
    forecast_horizon=24
)

Имя столбца времени является обязательным параметром. Обычно следует задать горизонт прогнозирования в соответствии с вашим прогнозным сценарием. Если данные содержат несколько временных рядов, можно указать имена столбцов идентификаторов временных рядов. Если эти столбцы сгруппированы, они определяют отдельные ряды. Например, предположим, что у вас есть данные, состоящие из почасовых продаж из разных магазинов и брендов. В следующем примере показано, как задать столбцы идентификатора временных рядов, предполагая, что данные содержат столбцы с именем store и brand:

# Forecasting-specific configuration.
# Add time series IDs for store and brand.
forecasting_job.set_forecast_settings(
    ...,  # Other settings.
    time_series_id_column_names=['store', 'brand']
)

AutoML пытается автоматически обнаруживать столбцы идентификаторов временных рядов в данных, если он не указан.

Другие параметры являются необязательными и описаны в следующем разделе.

Необязательные параметры задания прогнозирования

Необязательные конфигурации доступны для задач прогнозирования, таких как включение глубокого обучения и указание агрегирования целевого скользящего окна. Полный список параметров доступен в справочной документации.

Параметры поиска модели

Существует два необязательных параметра, которые управляют пространством модели, где AutoML ищет лучшую модель: allowed_training_algorithms и blocked_training_algorithms. Чтобы ограничить пространство поиска заданным набором классов моделей, используйте allowed_training_algorithms параметр, как показано ниже:

# Only search ExponentialSmoothing and ElasticNet models.
forecasting_job.set_training(
    allowed_training_algorithms=["ExponentialSmoothing", "ElasticNet"]
)

В этом сценарии задание прогнозирования выполняет поиск только по классам модели Exponential Smoothing и Elastic Net. Чтобы удалить заданный набор классов моделей из пространства поиска, используйте blocked_training_algorithmsприведенный ниже пример:

# Search over all model classes except Prophet.
forecasting_job.set_training(
    blocked_training_algorithms=["Prophet"]
)

Задание выполняет поиск по всем классам моделей , кроме Пророка. Список имен моделей прогнозирования, принятых в allowed_training_algorithms и blocked_training_algorithms, см. в свойствах обучения. Вы можете применить либо, но не allowed_training_algorithmsblocked_training_algorithms и к учебному запуску.

Включение обучения для глубоких нейронных сетей

AutoML поставляется с пользовательской моделью TCNForecasterглубокой нейронной сети (DNN). Эта модель представляет собой временную сверточную сеть (TCN), которая применяет распространенные методы задачи визуализации к моделированию временных рядов. Одномерные сверточные свертки образуют магистраль сети и позволяют модели изучать сложные шаблоны в течение длительной длительности в истории обучения. Дополнительные сведения см. в разделе "Введение в TCNForecaster".

Схема, демонстрирующая основные компоненты модели AutoML TCNForecaster.

TCNForecaster часто достигает более высокой точности, чем стандартные модели временных рядов, если в истории обучения есть тысячи или более наблюдений. Тем не менее, это также занимает больше времени для обучения и исследования моделей TCNForecaster из-за их более высокой мощности.

Вы можете включить TCNForecaster в AutoML, задав enable_dnn_training флаг в конфигурации обучения следующим образом:

# Include TCNForecaster models in the model search.
forecasting_job.set_training(
    enable_dnn_training=True
)

По умолчанию обучение TCNForecaster ограничено одним вычислительным узлом и одним GPU, если он доступен для каждой пробной версии модели. Для сценариев больших данных рекомендуется распределить каждую пробную версию TCNForecaster по нескольким ядрам/ GPU и узлам. Дополнительные сведения и примеры кода см . в распределенной подготовке.

Чтобы включить DNN для эксперимента AutoML, созданного в студии машинного обучения Azure, ознакомьтесь с параметрами типа задачи в статье пользовательского интерфейса студии.

Примечание.

  • При включении глубокой нейронной сети для экспериментов, созданных с помощью пакета SDK, лучшие объяснения моделей отключены.
  • Поддержка DNN для прогнозирования в автоматизированном машинном обучении не поддерживается для запусков, инициированных в Azure Databricks.
  • Рекомендуемый подход — использовать типы вычислений GPU при включении обучения DNN.

Функции задержки и скользящего окна

Последние значения целевого объекта часто влияют на функции в модели прогнозирования. Соответственно, AutoML может создавать признаки агрегирования с временными задержками и скользящими окнами, чтобы повысить точность модели.

Рассмотрим сценарий прогнозирования спроса на энергию, в котором доступны данные о погоде и исторический спрос. В таблице показана результирующая инженерия признаков, возникающая при применении агрегирования окна за последние три часа. Столбцы для минимального, максимального и суммного значения создаются в скользящем окне в течение трех часов на основе определенных параметров. Например, для наблюдения, допустимого 8 сентября 2017 г., 4:00, максимальное, минимальное и суммное значения вычисляются с помощью значений спроса на 8 сентября 2017 г., 1:00 – 3:00. Это окно трех часов перемещается вместе, чтобы заполнить данные для оставшихся строк. Дополнительные сведения и примеры см . в функциях задержки для прогнозирования временных рядов в AutoML.

Таблица с данными, отображающими целевое скользящее окно. Значения в столбце

Вы можете включить функции запаздывания и агрегирования с использованием скользящего окна для цели, установив размер скользящего окна и порядки запаздывания, которые вы хотите создать. Размер окна составляет три в предыдущем примере. Вы также можете включить задержки для функций с помощью feature_lags параметра. В следующем примере для всех этих параметров задано auto указание AutoML автоматически определять параметры путем анализа структуры корреляции данных:

forecasting_job.set_forecast_settings(
    ...,  # Other settings.
    target_lags='auto', 
    target_rolling_window_size='auto',
    feature_lags='auto'
)

Обработка коротких рядов

AutoML считает временный ряд коротким рядом, если недостаточно точек данных для проведения этапов обучения и проверки модели. Дополнительные сведения см. в разделе "Требования к длине данных для обучения".

AutoML имеет несколько действий, которые могут потребоваться для коротких рядов. Эти действия можно настроить с помощью short_series_handling_config параметра. Значение по умолчанию — auto. Параметры рассматриваются в таблице ниже:

Параметр Описание Основание
auto Значение по умолчанию для обработки коротких рядов. — Если все ряды коротки, закладывая данные.
- Если не все серии короткие, удалите короткий ряд.
pad short_series_handling_config = pad Если используется параметр, AutoML добавляет случайные значения к каждой найденной короткой серии. AutoML заполняет целевой столбец белым шумом. С указанным заполнением можно использовать следующие типы столбцов:
— столбцы объектов, панель с NaNs.
— числовые столбцы, панель с 0 (ноль).
— Логические столбцы дополните False.
drop short_series_handling_config = drop Если используется параметр, AutoML удаляет короткий ряд и не используется для обучения или прогнозирования. Прогнозы для этих рядов возвращаются NaN.
None Никаких рядов не заполняется или удаляется.

Следующий пример задает обработку коротких последовательностей, чтобы все короткие последовательности были дополнены до минимальной длины.

forecasting_job.set_forecast_settings(
    ...,  # Other settings.
    short_series_handling_config='pad'
)

Внимание

Заполнение может повлиять на точность результирующей модели, так как она вводит искусственные данные, чтобы избежать сбоев обучения. Если многие из ряда коротки, вы также можете увидеть некоторые последствия в результатах объяснимости.

Частота и агрегирование целевых данных

Используйте параметры частоты и агрегирования данных, чтобы избежать сбоев, вызванных нерегулярными данными. Ваши данные нерегулярно, если они не соответствуют заданному времени, например почасовой или ежедневной. Данные о точках продаж являются хорошим примером нерегулярных данных. В этих сценариях AutoML может объединять данные в нужную частоту, а затем создавать модель прогнозирования из статистических выражений.

Необходимо задать frequency параметры для target_aggregate_function обработки нерегулярных данных. Параметр частоты принимает строки Pandas DateOffset в качестве входных данных. В следующей таблице показаны поддерживаемые значения для функции агрегирования:

Функция Описание
sum  Сумма целевых значений
mean  Среднее или среднее значение целевых значений
min Минимальное целевое значение
max Максимальное значение целевого объекта

AutoML применяет агрегирование для следующих столбцов:

колонна Метод агрегирования
Числовые прогнозаторы AutoML использует sumфункции , meanminи max функции. Он создает новые столбцы. Каждое имя столбца содержит суффикс, определяющий имя функции агрегирования, примененной к значениям столбца.
Категориальные прогнозаторы AutoML использует значение forecast_mode параметра для агрегирования данных. Это самая видная категория в окне. Дополнительные сведения см. в описаниях параметра в разделах конвейере "Многие модели" и конвейере "HTS".
Прогнозаторы данных AutoML использует минимальное целевое значение (min), максимальное целевое значение (max) и forecast_mode параметры параметров для агрегирования данных.
Назначение AutoML объединяет значения в соответствии с указанной операцией. Как правило, sum функция подходит для большинства сценариев.

В следующем примере почасовая частота устанавливается, а функция агрегирования — суммирование:

# Aggregate the data to hourly frequency.
forecasting_job.set_forecast_settings(
    ...,  # Other settings.
    frequency='H',
    target_aggregate_function='sum'
)

Пользовательские параметры перекрестной проверки

Существует два настраиваемых параметра, которые управляют перекрестной проверкой для заданий прогнозирования. Настройте количество сверток с помощью параметра n_cross_validations и настройте параметр cv_step_size для определения смещения времени между свертками. Дополнительные сведения см. в разделе "Выбор модели прогнозирования".

По умолчанию AutoML настраивает оба параметра автоматически на основе характеристик данных. Расширенные пользователи могут вручную задать их. Например, предположим, что у вас есть ежедневные данные о продажах, и вы хотите, чтобы настройка проверки состояла из пяти сверток с семидневным смещением между смежными свертками. В следующем примере кода показано, как задать следующие значения:

from azure.ai.ml import automl

# Create a job with five CV folds.
forecasting_job = automl.forecasting(
    ...,  # Other training parameters.
    n_cross_validations=5,
)

# Set the step size between folds to seven days.
forecasting_job.set_forecast_settings(
    ...,  # Other settings.
    cv_step_size=7
)

Пользовательские признаки

По умолчанию AutoML расширяет обучающие данные с помощью встроенных функций, чтобы повысить точность моделей. Дополнительные сведения см. в статье "Автоматизированное проектирование компонентов". Некоторые шаги предварительной обработки можно настроить с помощью конфигурации фичеризации задания прогнозирования.

В следующей таблице перечислены поддерживаемые настройки для прогнозирования:

Пользовательская настройка Описание Параметры
Изменение назначения столбца Переопределение автоматически определенного типа признака для указанного столбца. categorical, , dateTimenumeric
Изменение параметра преобразователя Обновите параметры для указанного вменителя. {"strategy": "constant", "fill_value": <value>}, , {"strategy": "median"}{"strategy": "ffill"}

Например, предположим, что у вас есть сценарий розничного спроса, в котором данные включают цены, on sale флаг и тип продукта. В следующем примере показано, как настроить настраиваемые типы и импютеры для этих функций:

from azure.ai.ml.automl import ColumnTransformer

# Customize imputation methods for price and is_on_sale features.
# Median value imputation for price, constant value of zero for is_on_sale.
transformer_params = {
    "imputer": [
        ColumnTransformer(fields=["price"], parameters={"strategy": "median"}),
        ColumnTransformer(fields=["is_on_sale"], parameters={"strategy": "constant", "fill_value": 0}),
    ],
}

# Set the featurization.
# Ensure product_type feature is interpreted as categorical.
forecasting_job.set_featurization(
    mode="custom",
    transformer_params=transformer_params,
    column_name_and_types={"product_type": "Categorical"},
)

Если вы используете Студия машинного обучения Azure для эксперимента, см. раздел "Настройка параметров признаков" в студии.

Отправка задания прогнозирования

После настройки всех параметров вы будете готовы к выполнению задания прогнозирования. В следующем примере показан этот процесс.

# Submit the AutoML job.
returned_job = ml_client.jobs.create_or_update(
    forecasting_job
)

print(f"Created job: {returned_job}")

# Get a URL for the job in the studio UI.
returned_job.services["Studio"].endpoint

После отправки задания AutoML подготавливает вычислительные ресурсы, применяет признаки и другие шаги подготовки к входным данным и начинает перебор моделей прогнозирования. Дополнительные сведения см. в разделе "Методология прогнозирования в AutoML" и разделе "Выбор моделей для прогнозирования в AutoML".

Оркестрация обучения, вывода и оценки с помощью компонентов и конвейеров

Рабочий процесс машинного обучения, вероятно, требует больше, чем просто обучения. Вывод или получение прогнозов модели на более новых данных и оценка точности модели в тестовом наборе с известными целевыми значениями являются другими распространенными задачами, которые можно оркестрировать в Машинное обучение Azure вместе с заданиями обучения. Для поддержки задач вывода и оценки Машинное обучение Azure предоставляет компоненты, которые являются автономными фрагментами кода, которые выполняют один шаг в конвейере Машинное обучение Azure.

В следующем примере извлекается код компонента из клиентского реестра:

from azure.ai.ml import MLClient
from azure.identity import DefaultAzureCredential, InteractiveBrowserCredential

# Get credential to access azureml registry.
try:
    credential = DefaultAzureCredential()
    # Check if token can be obtained successfully.
    credential.get_token("https://management.azure.com/.default")
except Exception as ex:
    # Fall back to InteractiveBrowserCredential in case DefaultAzureCredential fails.
    credential = InteractiveBrowserCredential()

# Create client to access assets in azureml-preview registry.
ml_client_registry = MLClient(
    credential=credential,
    registry_name="azureml-preview"
)

# Create client to access assets in azureml registry.
ml_client_metrics_registry = MLClient(
    credential=credential,
    registry_name="azureml"
)

# Get inference component from registry.
inference_component = ml_client_registry.components.get(
    name="automl_forecasting_inference",
    label="latest"
)

# Get component to compute evaluation metrics from registry.
compute_metrics_component = ml_client_metrics_registry.components.get(
    name="compute_metrics",
    label="latest"
)

Затем определите фабричную функцию, которая создает конвейеры для оркестрации обучения, вывода и вычисления метрик. Дополнительные сведения см. в разделе "Настройка эксперимента".

from azure.ai.ml import automl
from azure.ai.ml.constants import AssetTypes
from azure.ai.ml.dsl import pipeline

@pipeline(description="AutoML Forecasting Pipeline")
def forecasting_train_and_evaluate_factory(
    train_data_input,
    test_data_input,
    target_column_name,
    time_column_name,
    forecast_horizon,
    primary_metric='normalized_root_mean_squared_error',
    cv_folds='auto'
):
    # Configure training node of pipeline.
    training_node = automl.forecasting(
        training_data=train_data_input,
        target_column_name=target_column_name,
        primary_metric=primary_metric,
        n_cross_validations=cv_folds,
        outputs={"best_model": Output(type=AssetTypes.MLFLOW_MODEL)},
    )

    training_node.set_forecasting_settings(
        time_column_name=time_column_name,
        forecast_horizon=max_horizon,
        frequency=frequency,
        # Other settings.
        ... 
    )
    
    training_node.set_training(
        # Training parameters.
        ...
    )
    
    training_node.set_limits(
        # Limit settings.
        ...
    )

    # Configure inference node to make rolling forecasts on test set.
    inference_node = inference_component(
        test_data=test_data_input,
        model_path=training_node.outputs.best_model,
        target_column_name=target_column_name,
        forecast_mode='rolling',
        step=1
    )

    # Configure metrics calculation node.
    compute_metrics_node = compute_metrics_component(
        task="tabular-forecasting",
        ground_truth=inference_node.outputs.inference_output_file,
        prediction=inference_node.outputs.inference_output_file,
        evaluation_config=inference_node.outputs.evaluation_config_output_file
    )

    # Return dictionary with evaluation metrics and raw test set forecasts.
    return {
        "metrics_result": compute_metrics_node.outputs.evaluation_result,
        "rolling_fcst_result": inference_node.outputs.inference_output_file
    }

Определите входные данные обучения и тестирования, содержащиеся в локальных папках ./train_data и ./test_data.

my_train_data_input = Input(
    type=AssetTypes.MLTABLE,
    path="./train_data"
)

my_test_data_input = Input(
    type=AssetTypes.URI_FOLDER,
    path='./test_data',
)

Наконец, создайте конвейер, задайте его вычисления по умолчанию и отправьте задание:

pipeline_job = forecasting_train_and_evaluate_factory(
    my_train_data_input,
    my_test_data_input,
    target_column_name,
    time_column_name,
    forecast_horizon
)

# Set pipeline-level compute.
pipeline_job.settings.default_compute = compute_name

# Submit pipeline job.
returned_pipeline_job = ml_client.jobs.create_or_update(
    pipeline_job,
    experiment_name=experiment_name
)
returned_pipeline_job

После отправки запроса на выполнение конвейер запускает обучение AutoML, вывод по скользящей оценке и вычисление метрик в последовательности. Вы можете отслеживать и проверять выполнение в пользовательском интерфейсе студии. По завершении выполнения можно скачать скользящие прогнозы и метрики оценки в локальный рабочий каталог:

# Download metrics JSON.
ml_client.jobs.download(returned_pipeline_job.name, download_path=".", output_name='metrics_result')

# Download rolling forecasts.
ml_client.jobs.download(returned_pipeline_job.name, download_path=".", output_name='rolling_fcst_result')

Выходные данные можно просмотреть в следующих расположениях:

  • Метрики: ./named-outputs/metrics_results/evaluationResult/metrics.json
  • Прогнозы: ./named-outputs/rolling_fcst_result/inference_output_file (формат строк JSON)

Дополнительные сведения о последовательной оценке см. в разделе "Вывод и оценка моделей прогнозирования".

Прогнозирование в масштабе: многие модели

Компоненты многих моделей в AutoML позволяют параллельно обучать миллионы моделей и управлять ими. Дополнительные сведения см. в разделе "Многие модели".

Настройка обучения для многих моделей

Компонент обучения с использованием нескольких моделей принимает файл конфигурации в формате YAML настроек обучения AutoML. Компонент применяет эти параметры к каждому запущенного экземпляру AutoML. Файл YAML имеет ту же спецификацию, что и задание команды прогнозирования, а также включает параметры partition_column_names и allow_multi_partitions.

Параметр Описание
partition_column_names Имена столбцов в данных, которые при группировке определяют секции данных. Компонент обучения с использованием множества моделей запускает независимое задание обучения для каждого раздела.
allow_multi_partitions Необязательный флаг, позволяющий обучать одну модель на секцию, если каждая секция содержит несколько уникальных временных рядов. Значение по умолчанию — false.

Ниже приведен пример конфигурации YAML:

$schema: https://azuremlsdk2.blob.core.windows.net/preview/0.0.1/autoMLJob.schema.json
type: automl

description: A time-series forecasting job config
compute: azureml:<cluster-name>
task: forecasting
primary_metric: normalized_root_mean_squared_error
target_column_name: sales
n_cross_validations: 3

forecasting:
  time_column_name: date
  time_series_id_column_names: ["state", "store"]
  forecast_horizon: 28

training:
  blocked_training_algorithms: ["ExtremeRandomTrees"]

limits:
  timeout_minutes: 15
  max_trials: 10
  max_concurrent_trials: 4
  max_cores_per_trial: -1
  trial_timeout_minutes: 15
  enable_early_termination: true
  
partition_column_names: ["state", "store"]
allow_multi_partitions: false

В последующих примерах конфигурация хранится в пути ./automl_settings_mm.yml.

Конвейер "Многие модели"

Затем вы определите функцию фабрики, которая создает конвейеры для оркестрации многих моделей обучения, вывода и вычисления метрик. В следующей таблице описаны параметры для этой функции фабрики:

Параметр Описание
max_nodes Количество вычислительных узлов, используемых в задании обучения.
max_concurrency_per_node Число процессов AutoML, выполняемых на каждом узле. Общая параллелизм задания "многие модели" — это max_nodes * max_concurrency_per_node.
parallel_step_timeout_in_seconds Время ожидания компонента многих моделей, указанное в количестве секунд.
retrain_failed_models Флаг для включения повторного обучения для неудачных моделей. Это значение полезно, если вы ранее запускали многомодельные запуски, которые привели к сбою заданий AutoML в некоторых разделах данных. Если этот флаг включен, многие модели выполняют задания обучения только для ранее неудачных разделов.
forecast_mode Режим вывода для оценки модели. Допустимые значения recursive (по умолчанию) и rolling. Дополнительные сведения см. в разделе "Вывод и оценка моделей прогнозирования" и справочник по классу ManyModelsInferenceParameters.
step Размер шага для скользящего прогноза. Значение по умолчанию — 1. Дополнительные сведения см. в разделе "Вывод и оценка моделей прогнозирования" и справочник по классу ManyModelsInferenceParameters.

В следующем примере показан метод фабрики для создания конвейеров обучения и оценки моделей многих моделей:

from azure.ai.ml import MLClient
from azure.identity import DefaultAzureCredential, InteractiveBrowserCredential

# Get credential to access azureml registry.
try:
    credential = DefaultAzureCredential()
    # Check whether token can be obtained.
    credential.get_token("https://management.azure.com/.default")
except Exception as ex:
    # Fall back to InteractiveBrowserCredential if DefaultAzureCredential fails.
    credential = InteractiveBrowserCredential()

# Get many-models training component.
mm_train_component = ml_client_registry.components.get(
    name='automl_many_models_training',
    version='latest'
)

# Get many-models inference component.
mm_inference_component = ml_client_registry.components.get(
    name='automl_many_models_inference',
    version='latest'
)

# Get component to compute evaluation metrics.
compute_metrics_component = ml_client_metrics_registry.components.get(
    name="compute_metrics",
    label="latest"
)

@pipeline(description="AutoML Many Models Forecasting Pipeline")
def many_models_train_evaluate_factory(
    train_data_input,
    test_data_input,
    automl_config_input,
    compute_name,
    max_concurrency_per_node=4,
    parallel_step_timeout_in_seconds=3700,
    max_nodes=4,
    retrain_failed_model=False,
    forecast_mode="rolling",
    forecast_step=1
):
    mm_train_node = mm_train_component(
        raw_data=train_data_input,
        automl_config=automl_config_input,
        max_nodes=max_nodes,
        max_concurrency_per_node=max_concurrency_per_node,
        parallel_step_timeout_in_seconds=parallel_step_timeout_in_seconds,
        retrain_failed_model=retrain_failed_model,
        compute_name=compute_name
    )

    mm_inference_node = mm_inference_component(
        raw_data=test_data_input,
        max_nodes=max_nodes,
        max_concurrency_per_node=max_concurrency_per_node,
        parallel_step_timeout_in_seconds=parallel_step_timeout_in_seconds,
        optional_train_metadata=mm_train_node.outputs.run_output,
        forecast_mode=forecast_mode,
        step=forecast_step,
        compute_name=compute_name
    )

    compute_metrics_node = compute_metrics_component(
        task="tabular-forecasting",
        prediction=mm_inference_node.outputs.evaluation_data,
        ground_truth=mm_inference_node.outputs.evaluation_data,
        evaluation_config=mm_inference_node.outputs.evaluation_configs
    )

    # Return metrics results from rolling evaluation.
    return {
        "metrics_result": compute_metrics_node.outputs.evaluation_result
    }

Создайте конвейер с помощью функции фабрики. Данные обучения и тестирования находятся в локальных папках ./data/train и ./data/test. Наконец, задайте вычисления по умолчанию и отправьте задание, как показано в следующем примере:

pipeline_job = many_models_train_evaluate_factory(
    train_data_input=Input(
        type="uri_folder",
        path="./data/train"
    ),
    test_data_input=Input(
        type="uri_folder",
        path="./data/test"
    ),
    automl_config=Input(
        type="uri_file",
        path="./automl_settings_mm.yml"
    ),
    compute_name="<cluster name>"
)
pipeline_job.settings.default_compute = "<cluster name>"

returned_pipeline_job = ml_client.jobs.create_or_update(
    pipeline_job,
    experiment_name=experiment_name,
)
ml_client.jobs.stream(returned_pipeline_job.name)

После завершения задания можно скачать метрики оценки локально с помощью процедуры в одном конвейере выполнения обучения.

Более подробный пример см. в записной книжке "Прогнозирование спроса с помощью множества моделей".

Рекомендации по обучению моделей для запуска нескольких моделей

  • Компоненты обучения и вывода многих моделей условно разделяют данные в соответствии с параметром partition_column_names . Этот процесс приводит к тому, что каждая секция будет в собственном файле. Процесс может быть медленным или неудачным, если у вас много данных. Мы рекомендуем вручную разделить ваши данные перед запуском обучения или выполнения вывода с использованием множества моделей.

  • Во время обучения с использованием множества моделей, модели автоматически регистрируются в рабочей среде, поэтому регистрация моделей вручную не требуется. Модели именуются на основе раздела, на базе которого они были обучены, и эти имена нельзя настроить. Теги также не настраиваются. Эти свойства используются для автоматического обнаружения моделей во время вывода.

  • Развертывание отдельных моделей не является масштабируемым, но вы можете использовать PipelineComponentBatchDeployment для упрощения процесса развертывания. Пример см. в ноутбуке "Прогнозирование спроса с помощью многих моделей".

  • Во время вывода соответствующие модели (последняя версия) автоматически выбираются на основе секции, отправляемой в данных вывода. По умолчанию при использовании training_experiment_nameиспользуется последняя модель, но вы можете переопределить это поведение, чтобы выбрать модели из определенного обучающего запуска, также предоставив train_run_id.

Примечание.

Ограничение по умолчанию на параллелизм для запуска множества моделей в подписке составляет 320. Если для рабочей нагрузки требуется более высокий предел, обратитесь в службу поддержки Майкрософт.

Прогноз в масштабе: иерархические временные ряды

Компоненты иерархических временных рядов (HTS) в AutoML позволяют обучать большое количество моделей на основе данных, входящих в иерархическую структуру. Дополнительные сведения см. в разделе "Прогнозирование иерархических временных рядов".

Конфигурация обучения HTS

Компонент обучения HTS принимает файл конфигурации формата YAML параметров обучения AutoML. Компонент применяет эти параметры к каждому запущенного экземпляру AutoML. Этот ФАЙЛ YAML имеет ту же спецификацию, что и задание команды прогнозирования, но включает другие параметры, связанные с сведениями иерархии:

Параметр Описание
hierarchy_column_names Список имен столбцов в данных, определяющих иерархическую структуру данных. Порядок столбцов в этом списке определяет уровни иерархии. Степень агрегирования уменьшается с индексом списка. То есть последний столбец в списке определяет конечный или наиболее разделенный уровень иерархии.
hierarchy_training_level Уровень иерархии, используемый для обучения модели прогнозирования.

Ниже приведен пример конфигурации YAML:

$schema: https://azuremlsdk2.blob.core.windows.net/preview/0.0.1/autoMLJob.schema.json
type: automl

description: A time-series forecasting job config
compute: azureml:cluster-name
task: forecasting
primary_metric: normalized_root_mean_squared_error
log_verbosity: info
target_column_name: sales
n_cross_validations: 3

forecasting:
  time_column_name: "date"
  time_series_id_column_names: ["state", "store", "SKU"]
  forecast_horizon: 28

training:
  blocked_training_algorithms: ["ExtremeRandomTrees"]

limits:
  timeout_minutes: 15
  max_trials: 10
  max_concurrent_trials: 4
  max_cores_per_trial: -1
  trial_timeout_minutes: 15
  enable_early_termination: true
  
hierarchy_column_names: ["state", "store", "SKU"]
hierarchy_training_level: "store"

В последующих примерах конфигурация хранится в пути ./automl_settings_hts.yml.

Конвейер HTS

Затем определите фабричную функцию, которая создает конвейеры для оркестрации обучения HTS, инференса и вычисления метрик. В следующей таблице описаны параметры для этой функции фабрики:

Параметр Описание
forecast_level Уровень иерархии, для которой требуется получить прогнозы.
allocation_method Метод распределения, используемый при разбивке прогнозов. Допустимые значения — proportions_of_historical_average и average_historical_proportions.
max_nodes Количество вычислительных узлов, используемых в задании обучения.
max_concurrency_per_node Количество процессов AutoML, выполняемых на каждом узле. Общая параллельность задания HTS составляет max_nodes * max_concurrency_per_node.
parallel_step_timeout_in_seconds Время ожидания компонента, работающего с несколькими моделями, указанное в секундах.
forecast_mode Режим вывода для оценки модели. Допустимые значения — recursive и rolling. Дополнительные сведения см. в разделе "Вывод и оценка моделей прогнозирования" и справочник по классу HTSInferenceParameters.
step Размер шага для скользящего прогноза. Значение по умолчанию — 1. Дополнительные сведения см. в разделе "Вывод и оценка моделей прогнозирования" и справочник по классу HTSInferenceParameters.
from azure.ai.ml import MLClient
from azure.identity import DefaultAzureCredential, InteractiveBrowserCredential

# Get credential to access azureml registry.
try:
    credential = DefaultAzureCredential()
    # Check whether token can be obtained.
    credential.get_token("https://management.azure.com/.default")
except Exception as ex:
    # Fall back to InteractiveBrowserCredential if DefaultAzureCredential fails.
    credential = InteractiveBrowserCredential()

# Get HTS training component.
hts_train_component = ml_client_registry.components.get(
    name='automl_hts_training',
    version='latest'
)

# Get HTS inference component.
hts_inference_component = ml_client_registry.components.get(
    name='automl_hts_inference',
    version='latest'
)

# Get component to compute evaluation metrics.
compute_metrics_component = ml_client_metrics_registry.components.get(
    name="compute_metrics",
    label="latest"
)

@pipeline(description="AutoML HTS Forecasting Pipeline")
def hts_train_evaluate_factory(
    train_data_input,
    test_data_input,
    automl_config_input,
    max_concurrency_per_node=4,
    parallel_step_timeout_in_seconds=3700,
    max_nodes=4,
    forecast_mode="rolling",
    forecast_step=1,
    forecast_level="SKU",
    allocation_method='proportions_of_historical_average'
):
    hts_train = hts_train_component(
        raw_data=train_data_input,
        automl_config=automl_config_input,
        max_concurrency_per_node=max_concurrency_per_node,
        parallel_step_timeout_in_seconds=parallel_step_timeout_in_seconds,
        max_nodes=max_nodes
    )
    hts_inference = hts_inference_component(
        raw_data=test_data_input,
        max_nodes=max_nodes,
        max_concurrency_per_node=max_concurrency_per_node,
        parallel_step_timeout_in_seconds=parallel_step_timeout_in_seconds,
        optional_train_metadata=hts_train.outputs.run_output,
        forecast_level=forecast_level,
        allocation_method=allocation_method,
        forecast_mode=forecast_mode,
        step=forecast_step
    )
    compute_metrics_node = compute_metrics_component(
        task="tabular-forecasting",
        prediction=hts_inference.outputs.evaluation_data,
        ground_truth=hts_inference.outputs.evaluation_data,
        evaluation_config=hts_inference.outputs.evaluation_configs
    )

    # Return metrics results from rolling evaluation.
    return {
        "metrics_result": compute_metrics_node.outputs.evaluation_result
    }

Создайте конвейер с помощью функции фабрики. Данные обучения и тестирования находятся в локальных папках ./data/train и ./data/test. Наконец, задайте вычисления по умолчанию и отправьте задание, как показано в следующем примере:

pipeline_job = hts_train_evaluate_factory(
    train_data_input=Input(
        type="uri_folder",
        path="./data/train"
    ),
    test_data_input=Input(
        type="uri_folder",
        path="./data/test"
    ),
    automl_config=Input(
        type="uri_file",
        path="./automl_settings_hts.yml"
    )
)
pipeline_job.settings.default_compute = "cluster-name"

returned_pipeline_job = ml_client.jobs.create_or_update(
    pipeline_job,
    experiment_name=experiment_name,
)
ml_client.jobs.stream(returned_pipeline_job.name)

После завершения задания можно скачать метрики оценки локально с помощью процедуры в одном конвейере выполнения обучения.

Для более подробного примера см. записную книжку по прогнозированию спроса с использованием HTS.

Рекомендации по обучению для запуска HTS

Компоненты обучения и вывода HTS условно разделяют данные в соответствии с параметром hierarchy_column_names , чтобы каждая секция была в собственном файле. Этот процесс может быть медленным или неудачным, если у вас много данных. Рекомендуется вручную секционировать данные перед запуском обучения или вывода HTS.

Примечание.

Ограничение параллелизма по умолчанию для запуска HTS в подписке равно 320. Если для рабочей нагрузки требуется более высокий предел, обратитесь в службу поддержки Майкрософт.

Прогнозирование в масштабе: обучение распределенной DNN

Как описано ранее в этой статье, вы можете включить обучение для глубоких нейронных сетей (DNN). Сведения о том, как работает распределенное обучение для задач прогнозирования DNN, см. в разделе "Распределенное обучение глубокой нейронной сети" (предварительная версия).

Для сценариев, требующих больших объемов данных, распределенное обучение с помощью AutoML доступно для ограниченного набора моделей. Дополнительные сведения и примеры кода можно найти в AutoML в масштабе: распределенное обучение.

Изучение примеров записных книжек

Подробные примеры кода, демонстрирующие расширенные конфигурации прогнозирования, доступны в репозитории GitHub для прогнозирования AutoML. Ниже приведены некоторые примеры записных книжек: