Настройка AutoML для обучения модели прогнозирования временных рядов с помощью пакета SDK и CLI
ОБЛАСТЬ ПРИМЕНЕНИЯ:Расширение машинного обучения Azure CLI версии 2 (current)Python SDK azure-ai-ml версии 2 (current)
Автоматизированное машинное обучение (AutoML) в Машинное обучение Azure использует стандартные модели машинного обучения вместе с известными моделями временных рядов для создания прогнозов. Этот подход включает исторические сведения о целевой переменной с функциями, предоставляемыми пользователем, в входных данных и автоматически спроектированных функциях. Алгоритмы поиска моделей помогают определить модели с оптимальной точностью прогнозирования. Дополнительные сведения см. в статье о методологии прогнозирования и выборе моделей.
В этой статье описывается настройка AutoML для прогнозирования временных рядов с помощью Машинное обучение пакета SDK для Python Машинное обучение Azure](/python/api/overview/azure/ai-ml-readme). Процесс включает подготовку данных для обучения и настройки параметров временных рядов в задании прогнозирования (справочник по классам). Затем вы обучаете, выводите и вычисляете модели с помощью компонентов и конвейеров.
Сведения о низком коде см. в руководстве по прогнозированию спроса с помощью автоматизированного машинного обучения. Этот ресурс представляет собой пример прогнозирования временных рядов, использующий AutoML в Студия машинного обучения Azure.
Необходимые компоненты
- Рабочая область Машинного обучения Azure. Сведения о создании рабочей области см. в разделе "Создание ресурсов рабочей области".
- Возможность запуска заданий обучения AutoML. Дополнительные сведения см. в статье Настройка обучения AutoML для табличных данных с помощью интерфейса командной строки Машинное обучение Azure и пакета SDK для Python.
Подготовка данных обучения и проверки
Входные данные для прогнозирования AutoML должны содержать допустимые временные ряды в табличном формате. Каждая переменная должна иметь собственный столбец в таблице данных. AutoML требует по крайней мере два столбца: столбец времени для представления оси времени и целевого столбца для прогнозируемого количества. Другие столбцы могут служить прогнозаторами. Дополнительные сведения см. в статье о том, как autoML использует данные.
Внимание
При обучении модели прогнозирования будущих значений убедитесь, что все функции, используемые в обучении, также можно использовать при выполнении прогнозов для предполагаемого горизонта.
Рассмотрим функцию для текущей цены акций, которая может значительно увеличить точность обучения. Если вы прогнозируете с длинным горизонтом, возможно, вы не сможете точно прогнозировать будущие фондовые значения, соответствующие будущим точкам временных рядов. Такой подход может снизить точность модели.
Для заданий MLTable
прогнозирования AutoML требуется, чтобы данные обучения представляли собой объект. Объект MLTable
указывает источник данных и шаги по загрузке данных. Дополнительные сведения и варианты использования см. в статье [Работа с таблицами (how-to-mltable.md).
В следующем примере предположим, что данные обучения содержатся в CSV-файле в локальном каталоге . /train_data/timeseries_train.csv.
Объект можно создать MLTable
с помощью mltable Python SDK , как показано в следующем примере:
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-compute
.
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_algorithms
blocked_training_algorithms
и к учебному запуску.
Включение обучения для глубоких нейронных сетей
AutoML поставляется с пользовательской моделью TCNForecaster
глубокой нейронной сети (DNN). Эта модель представляет собой временную сверточную сеть (TCN), которая применяет распространенные методы задачи визуализации к моделированию временных рядов. Одномерные сверточные свертки образуют магистраль сети и позволяют модели изучать сложные шаблоны в течение длительной длительности в истории обучения. Дополнительные сведения см. в разделе "Введение в 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:00AM – 3:00AM. Это окно трех часов перемещается вместе, чтобы заполнить данные для оставшихся строк. Дополнительные сведения и примеры см . в функциях задержки для прогнозирования временных рядов в 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
. Параметры рассматриваются в таблице ниже:
Параметр | Description | Основание |
---|---|---|
auto |
Значение по умолчанию для обработки коротких рядов. | — Если все ряды коротки, закладывая данные. - Если не все серии короткие, удалите короткий ряд. |
pad |
short_series_handling_config = pad Если используется параметр, AutoML добавляет случайные значения к каждой найденной короткой серии. AutoML заполняет целевой столбец белым шумом. |
С указанным заполнением можно использовать следующие типы столбцов: - Столбцы объектов, панель с s NaN — числовые столбцы, панель с 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 в качестве входных данных. В следующей таблице показаны поддерживаемые значения для функции агрегирования:
Function | Description |
---|---|
sum |
Сумма целевых значений |
mean |
Среднее или среднее значение целевых значений |
min |
Минимальное целевое значение |
max |
Максимальное значение целевого объекта |
AutoML применяет агрегирование для следующих столбцов:
Column | Метод агрегирования |
---|---|
Числовые прогнозаторы | AutoML использует sum функции , mean min и 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 расширяет обучающие данные с помощью встроенных функций, чтобы повысить точность моделей. Дополнительные сведения см. в статье "Автоматизированное проектирование функций". Некоторые шаги предварительной обработки можно настроить с помощью конфигурации признаков задания прогнозирования.
В следующей таблице перечислены поддерживаемые настройки для прогнозирования:
Пользовательская настройка | Description | Параметры |
---|---|---|
Изменение назначения столбца | Переопределение автоматически определенного типа признака для указанного столбца. | categorical , , dateTime numeric |
Изменение параметра преобразователя | Обновите параметры для указанного вменителя. | {"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 имеет ту же спецификацию, что и задание команды прогнозирования, allow_multi_partitions
а partition_column_names
также параметры.
Параметр | Описание |
---|---|
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 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()
# 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
, чтобы каждая секция была в собственном файле. Этот процесс может быть очень медленным или неудачным, если данные очень большие. Рекомендация заключается в том, чтобы вручную секционировать данные перед выполнением многих моделей обучения или вывода.
Примечание.
Ограничение параллелизма по умолчанию для многих моделей, выполняемых в подписке, имеет значение 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 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()
# 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 условно разделяют данные в соответствии с параметром hierarchy_column_names
, чтобы каждая секция была в собственном файле. Этот процесс может быть очень медленным или неудачным, если данные очень большие. Рекомендуемый подход заключается в том, чтобы вручную секционировать данные перед запуском обучения или вывода HTS.
Примечание.
Ограничение параллелизма по умолчанию для выполнения HTS в подписке имеет значение 320. Если для рабочей нагрузки требуется более высокий предел, обратитесь в службу поддержки Майкрософт.
Прогнозирование в масштабе: обучение распределенной DNN
Как описано ранее в этой статье, вы можете включить обучение для глубоких нейронных сетей (DNN). Сведения о том, как работает распределенное обучение для задач прогнозирования DNN, см. в разделе "Распределенное обучение глубокой нейронной сети" (предварительная версия).
Для сценариев с большими требованиями к данным распределенное обучение с помощью AutoML доступно для ограниченного набора моделей. Дополнительные сведения и примеры кода можно найти в AutoML в масштабе: распределенное обучение.
Изучение примеров записных книжек
Подробные примеры кода, демонстрирующие расширенные конфигурации прогнозирования, доступны в репозитории GitHub для прогнозирования AutoML. Ниже приведены некоторые примеры записных книжек:
- Создание конвейера прогнозирования спроса (HTS и многие модели)
- Обучение модели TCNForecaster (DNN) в наборе данных GitHub
- Прогнозирование с помощью обнаружения праздников и признаков (набор данных для велосипедов)
- Настройка задержек и агрегирования окна в автоматическом режиме