import logging
import os
import warnings
import matplotlib.pyplot as plt
import mlflow
import mlflow.data
import numpy as np
import pandas as pd
from mlflow.client import MlflowClient
from mlflow.data.pandas_dataset import PandasDataset
from utilsforecast.plotting import plot_series
from neuralforecast.core import NeuralForecast
from neuralforecast.models import NBEATSx
from neuralforecast.utils import AirPassengersDF
from neuralforecast.losses.pytorch import MAE
使用 MLflow
将您的 neuralforecast 实验记录到 MLflow
安装依赖项
要安装Neuralforecast,请参阅 https://nixtlaverse.nixtla.io/neuralforecast/examples/installation.html。
要安装mlflow:pip install mlflow
导入库
'NIXTLA_ID_AS_COL'] = '1'
os.environ["mlflow").setLevel(logging.ERROR)
logging.getLogger("pytorch_lightning").setLevel(logging.ERROR)
logging.getLogger("ignore") warnings.filterwarnings(
划分数据
# 拆分数据并声明面板数据集
= AirPassengersDF
Y_df = Y_df[Y_df.ds<='1959-12-31'] # 132次列车
Y_train_df = Y_df[Y_df.ds>'1959-12-31'] # 12项测试
Y_test_df Y_df.tail()
unique_id | ds | y | |
---|---|---|---|
139 | 1.0 | 1960-08-31 | 606.0 |
140 | 1.0 | 1960-09-30 | 508.0 |
141 | 1.0 | 1960-10-31 | 461.0 |
142 | 1.0 | 1960-11-30 | 390.0 |
143 | 1.0 | 1960-12-31 | 432.0 |
MLflow UI
从终端运行以下命令以启动 UI:mlflow ui
。然后您可以访问打印的 URL 以可视化实验。
模型训练
=False)
mlflow.pytorch.autolog(checkpoint
with mlflow.start_run() as run:
# Log the dataset to the MLflow Run. Specify the "training" context to indicate that the
# 数据集用于模型训练
= mlflow.data.from_pandas(Y_df, source="AirPassengersDF")
dataset: PandasDataset ="training")
mlflow.log_input(dataset, context
# 定义并记录参数
= len(Y_test_df)
horizon = dict(
model_params =1 * horizon,
input_size=horizon,
h=300,
max_steps=MAE(),
loss=MAE(),
valid_loss='ReLU',
activation='robust',
scaler_type=42,
random_seed=False,
enable_progress_bar
)
mlflow.log_params(model_params)
# 拟合NBEATSx模型
= [NBEATSx(**model_params)]
models = NeuralForecast(models=models, freq='M')
nf = nf.fit(df=Y_train_df, val_size=horizon)
train
# 保存用于运行模型的conda环境
mlflow.pytorch.get_default_conda_env()
# 保存 pip 需求
mlflow.pytorch.get_default_pip_requirements()
=True)
mlflow.pytorch.autolog(disable
# 保存神经预测模型
='./checkpoints/test_run_1/',
nf.save(path=None,
model_index=True,
overwrite=True) save_dataset
Seed set to 42
预测未来
= nf.predict(futr_df=Y_test_df)
Y_hat_df ='tab20b') plot_series(Y_train_df, Y_hat_df, palette
Give us a ⭐ on Github