設定 AutoML 以使用 SDK 和 CLI 定型時間序列預測模型
適用於:Azure CLI ml 延伸模組 v2 (目前)Python SDK azure-ai-ml v2 (目前)
Azure 中的自動化機器學習 (AutoML) 機器學習 會使用標準機器學習模型以及已知的時間序列模型來建立預測。 此方法包含目標變數的歷程記錄資訊,以及輸入數據中使用者提供的功能,以及自動設計的功能。 模型搜尋演算法有助於識別具有最佳預測精確度的模型。 如需詳細資訊,請參閱預測方法和模型掃掠和選取。
本文說明如何使用 Azure 機器學習 Python SDK](/python/api/overview/azure/ai-ml-readme)設定 AutoML,以使用 機器學習 進行時間序列預測。 此程式包括在預測作業中準備定型和設定時間序列參數的數據(類別參考)。 接著,您可以使用元件和管線來定型、推斷和評估模型。
如需低程式代碼體驗,請參閱 教學課程:使用自動化機器學習預測需求。 此資源是一個在 Azure Machine Learning 工作室 中使用 AutoML 的時間序列預測範例。
必要條件
- Azure Machine Learning 工作區。 若要建立工作區,請參閱建立工作區資源。
- 能夠啟動 AutoML 定型作業。 如需詳細資訊,請參閱使用 Azure 機器學習 CLI 和 Python SDK 設定表格式數據的 AutoML 定型。
準備定型和驗證數據
AutoML 預測的輸入資料必須包含表格式格式的有效時間序列。 每個變數都必須在資料表中有自己的對應資料行。 AutoML 至少需要兩個數據行:一個 時間 數據行,代表要預測數量的時間軸和 目標 數據行。 其他資料行可以做為預測值。 如需詳細資訊,請參閱 AutoML 如何使用您的數據。
重要
當您將模型定型以預測未來值時,請確定在針對預定的地平線執行預測時,也可以使用定型中使用的所有功能。
請考慮目前股價的功能,這可以大幅提高訓練精確度。 如果您使用長線預測,則可能無法準確預測對應至未來時間序列點的未來股票值。 這種方法可以降低模型精確度。
AutoML 預測作業會要求您的定型數據以 MLTable
物件表示。 MLTable
物件會指定數據源和載入數據的步驟。 如需詳細資訊和使用案例,請參閱 [使用數據表(how-to-mltable.md)。
在下列範例中,假設您的定型數據包含在本機目錄 ./train_data/timeseries_train.csv的 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,其中包含檔案格式和載入指示。
若要啟動定型作業,請使用 Python SDK 來定義輸入資料物件,如下所示:
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 Machine Learning Compute,其為完全受控的計算資源,可用來執行定型作業。 下列範例會建立名為 的 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 Factory 函式 在 Python SDK 中設定預測作業。 下列範例示範如何藉由設定定型回合的主要計量和設定限制,以建立預測作業:
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"]
)
在此案例中,預測作業只會搜尋指數 Smoothing 和 Elastic Net 模型類別。 若要從搜尋空間中移除一組指定的模型類別,請使用 blocked_training_algorithms
,如下列範例所示:
# Search over all model classes except Prophet
forecasting_job.set_training(
blocked_training_algorithms=["Prophet"]
)
工作會搜尋除了 Prophet 以外的所有模型類別。 如需 allowed_training_algorithms
和 blocked_training_algorithms
中接受的預測模型名稱清單,請參閱定型屬性。 您可以將 allowed_training_algorithms
和 blocked_training_algorithms
之一套用至定型執行。
啟用深度學習神經網路的學習
AutoML 隨附名為 的自定義深度神經網路 (DNN) 模型 TCNForecaster
。 此模型是 時態卷積網路 (TCN),可將常見的映射工作方法套用至時間序列模型化。 一維的「原因」卷積形成網路的骨幹,讓模型在定型記錄中長期學習複雜的模式。 如需詳細資訊,請參閱 TCNForecaster 簡介。
TCNForecaster 通常會在定型記錄中有數千個以上的觀察時,達到比標準時間序列模型更高的精確度。 不過,由於其容量較高,因此定型和掃掠 TCNForecaster 模型也需要更長的時間。
您可以在 AutoML 中啟用 TCNForecaster,方法是在定型設定中設定 enable_dnn_training
旗標,如下所示:
# Include TCNForecaster models in the model search
forecasting_job.set_training(
enable_dnn_training=True
)
根據預設,TCNForecaster 定型僅限於每個模型試用版單一計算節點和單一 GPU (如果有的話)。 針對大型數據案例,建議將每個 TCNForecaster 試用版散發至多個核心/GPU 和節點。 如需詳細資訊和程式碼範例,請參閱分散式定型。
若要為在 Azure Machine Learning 工作室 中建立的 AutoML 實驗啟用 DNN,請參閱 Studio UI 操作說明中的工作類型設定。
注意
- 當您針對以 SDK 建立的實驗啟用 DNN 時,系統會停用最佳模型說明。
- Azure Databricks 中起始的執行不支援在自動化 機器學習 中預測的 DNN 支援。
- 建議的方法是在啟用 DNN 定型時使用 GPU 計算類型。
延隔和滾動時段功能
目標最近的值通常是預測模型中有影響力的特徵。 因此,AutoML 可以建立時間延隔和滾動時段彙總功能,因此可能改善模型精確度。
請考慮能源需求的預測案例,當中有天氣資料和歷史需求可用。 此資料表顯示最近三小時套用時段彙總時所發生的特徵工程。 根據定義設定中的三小時滾動時段,系統產生最小值、最大值和總和資料行。 例如,針對 2017 年 9 月 8 日上午 4:00 的觀察有效,會使用 2017 年 9 月 8 日 1:00 - 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
。 下表描述了這些設定:
設定 | 描述 | 附註 |
---|---|---|
auto |
短序列處理的預設值。 | - 如果所有數列都很短,請填補數據。 - 如果不是所有數列都很短,請卸除簡短的數列。 |
pad |
如果使用設定 short_series_handling_config = pad ,AutoML 會將隨機值新增至找到的每個簡短數列。 AutoML 會以白雜訊填補目標數據行。 |
您可以使用下列資料行類型搭配指定的填補: - 對象數據行,填補與 NaN s - 數值資料行,填補 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 、 mean min 和 max 函式。 它會產生新的數據行,其中每個數據行名稱都包含後置詞,識別套用至數據行值的聚合函數名稱。 |
類別預測值 | AutoML 會使用 參數的值 forecast_mode 來匯總數據。 這是該時段中最突出的類別。 如需詳細資訊,請參閱許多模型管線和 HTS 管線一節中的 參數描述。 |
數據預測器 | AutoML 會使用最小目標值 (min )、最大目標值 (max ) 和 forecast_mode 參數設定來匯總數據。 |
Target | 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 、 、 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 Machine Learning 工作室 來進行實驗,請參閱在 Studio 中設定特徵化設定。
提交預測工作
設定所有設定之後,您就可以開始執行預測工作。 下列範例示範此程式。
# 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 Machine Learning 中協調的其他常見工作,以及定型工作。 為了支援推斷和評估工作,Azure Machine Learning 提供了元件,其為在 Azure Machine Learning 管線中執行一個步驟的獨立式程式碼片段。
在下列範例中,從用戶端登錄擷取元件程式碼:
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"
)
接下來,定義 Factory 函式,以建立管線來協調定型、推斷和計量計算。 如需詳細資訊,請參閱設定實驗。
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 定型、滾動評估推斷和計量計算。 您可以在 Studio UI 中監視並檢查執行。 執行完成時,您可以將滾動預測和評估計量下載到本機工作目錄:
# 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 中的許多模型元件可讓您平行定型及管理數百萬個模型。 如需許多模型概念的詳細資訊,請參閱許多模型。
許多模型定型設定
許多模型定型元件接受 AutoML 定型設定的 YAML 格式設定檔。 元件會將這些設定套用至其啟動的每個 AutoML 執行個體。 YAML 檔案的規格與 Forecasting 命令作業 和 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`。
許多模型管線
接下來,定義 Factory 函式,以建立管線來協調許多模型定型、推斷和計量計算。 下表描述此 Factory 函式的參數:
參數 | 描述 |
---|---|
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 類別 參考。 |
下列範例示範建構許多模型定型和模型評估管線的 Factory 方法:
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
}
使用 Factory 函式建構管線。 定型和測試數據分別位於本機資料夾中 ./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。 如果您的工作負載需要較高的限制,您可以連絡Microsoft支援。
大規模預測:階層式時間序列
AutoML 中的階層式時間序列 (HTS) 元件可讓您在階層式結構的資料上定型大量模型。 如需詳細資訊,請參閱 階層式時間序列預測。
HTS 定型設定
HTS 定型元件接受 AutoML 定型設定的 YAML 格式設定檔。 元件會將這些設定套用至其啟動的每個 AutoML 執行個體。 此 YAML 檔案的規格與 Forecasting 命令作業 相同,以及與階層資訊相關的其他參數:
參數 | 描述 |
---|---|
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 管線
接下來,定義 Factory 函式,以建立管線來協調 HTS 定型、推斷和計量計算。 下表描述此 Factory 函式的參數:
參數 | 描述 |
---|---|
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
}
使用 Factory 函式建構管線。 定型和測試數據分別位於本機資料夾中 ./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。 如果您的工作負載需要較高的限制,您可以連絡Microsoft支援。
大規模預測:分散式 DNN 定型
如本文稍早所述,您可以 啟用深度學習神經網路 (DNN) 的學習。 若要了解分散式定型如何針對 DNN 預測工作運作,請參閱分散式深度神經網路定型(預覽版)。
針對具有大型數據需求的案例,使用 AutoML 的分散式定型適用於一組有限的模型。 您可以在 AutoML 中 大規模找到詳細資訊和程式代碼範例:分散式定型。
探索筆記本範例
示範進階預測組態的詳細程式碼範例可在 AutoML 預測範例筆記本 GitHub 存放庫中取得。 以下是一些範例筆記本:
- 建立需求預測管線 (HTS 和許多模型)
- 在 GitHub 數據集上定型 TCNForecaster (DNN) 模型
- 使用假日偵測和特徵化的預測 (自行車共享資料集)
- 手動設定延隔時間與輪流窗口匯總