mlflow.pmdarima
The mlflow.pmdarima 模块提供了一个 API,用于记录和加载 pmdarima 模型。此模块以以下格式导出单变量 pmdarima 模型
- Pmdarima 格式
使用 pickle 序列化的
pmdarima模型实例。mlflow.pyfunc为通用的基于 pyfunc 的部署工具和历史预测的批处理审计而生成。
import pandas as pd import mlflow import mlflow.pyfunc import pmdarima from pmdarima import auto_arima # Define a custom model class class PmdarimaWrapper(mlflow.pyfunc.PythonModel): def load_context(self, context): self.model = context.artifacts["model"] def predict(self, context, model_input): return self.model.predict(n_periods=model_input.shape[0]) # Specify locations of source data and the model artifact SOURCE_DATA = "https://raw.githubusercontent.com/facebook/prophet/master/examples/example_retail_sales.csv" ARTIFACT_PATH = "model" # Read data and recode columns sales_data = pd.read_csv(SOURCE_DATA) sales_data.rename(columns={"y": "sales", "ds": "date"}, inplace=True) # Split the data into train/test train_size = int(0.8 * len(sales_data)) train, _ = sales_data[:train_size], sales_data[train_size:] # Create the model model = pmdarima.auto_arima(train["sales"], seasonal=True, m=12) # Log the model with mlflow.start_run(): wrapper = PmdarimaWrapper() mlflow.pyfunc.log_model( name="model", python_model=wrapper, artifacts={"model": mlflow.pyfunc.model_to_dict(model)}, )
- mlflow.pmdarima.get_default_conda_env()[source]
- 返回
对调用
save_model()和log_model()生成的 MLflow 模型的默认 Conda 环境。
- mlflow.pmdarima.get_default_pip_requirements()[source]
- 返回
由该 flavor 生成的 MLflow 模型的默认 pip 依赖项列表。调用
save_model()和log_model()将生成一个至少包含这些依赖项的 pip 环境。
- mlflow.pmdarima.load_model(model_uri, dst_path=None)[source]
从本地文件或运行中加载
pmdarimaARIMA模型或Pipeline对象。- 参数
model_uri –
MLflow 模型在 URI 格式中的位置。例如:
/Users/me/path/to/local/modelrelative/path/to/local/models3://my_bucket/path/to/modelruns:/<mlflow_run_id>/run-relative/path/to/modelmlflow-artifacts:/path/to/model
有关支持的 URI 方案的更多信息,请参阅 引用 Artifacts。
dst_path – The local filesystem path to which to download the model artifact. This directory must already exist. If unspecified, a local output path will be created.
- 返回
一个
pmdarima模型实例
import pandas as pd import mlflow from mlflow.models import infer_signature import pmdarima from pmdarima.metrics import smape # Specify locations of source data and the model artifact SOURCE_DATA = "https://raw.githubusercontent.com/facebook/prophet/master/examples/example_retail_sales.csv" ARTIFACT_PATH = "model" # Read data and recode columns sales_data = pd.read_csv(SOURCE_DATA) sales_data.rename(columns={"y": "sales", "ds": "date"}, inplace=True) # Split the data into train/test train_size = int(0.8 * len(sales_data)) train = sales_data[:train_size] test = sales_data[train_size:] with mlflow.start_run(): # Create the model model = pmdarima.auto_arima(train["sales"], seasonal=True, m=12) # Calculate metrics prediction = model.predict(n_periods=len(test)) metrics = {"smape": smape(test["sales"], prediction)} # Infer signature input_sample = pd.DataFrame(train["sales"]) output_sample = pd.DataFrame(model.predict(n_periods=5)) signature = infer_signature(input_sample, output_sample) # Log model input_example = input_sample.head() model_info = mlflow.pmdarima.log_model( model, name=ARTIFACT_PATH, signature=signature, input_example=input_example ) # Load the model loaded_model = mlflow.pmdarima.load_model(model_info.model_uri) # Forecast for the next 60 days forecast = loaded_model.predict(n_periods=60) print(f"forecast: {forecast}")
- mlflow.pmdarima.log_model(pmdarima_model, artifact_path: str | None = None, conda_env=None, code_paths=None, registered_model_name=None, signature: mlflow.models.signature.ModelSignature = None, input_example: Union[pandas.core.frame.DataFrame, numpy.ndarray, dict, list, csr_matrix, csc_matrix, str, bytes, tuple] = None, await_registration_for=300, pip_requirements=None, extra_pip_requirements=None, metadata=None, name: str | None = None, params: dict[str, typing.Any] | None = None, tags: dict[str, typing.Any] | None = None, model_type: str | None = None, step: int = 0, model_id: str | None = None, **kwargs)[source]
将
pmdarimaARIMA或Pipeline对象记录为当前运行的 MLflow artifact。- 参数
pmdarima_model – 在时间序列上被
fit过的 pmdarimaARIMA或Pipeline模型。artifact_path – Deprecated. Use name instead.
conda_env –
Conda 环境的字典表示形式或指向 conda 环境 yaml 文件的路径。如果提供,它描述了该模型应运行的环境。它至少应指定 get_default_conda_env() 中包含的依赖项。如果为
None,则添加到模型中的 pip 依赖项将通过mlflow.models.infer_pip_requirements()从当前软件环境中推断。如果依赖项推断失败,它将回退到使用 get_default_pip_requirements。conda_env中的 pip 依赖项将被写入 piprequirements.txt文件,完整的 conda 环境将被写入conda.yaml。以下是 conda 环境的示例字典表示形式{ "name": "mlflow-env", "channels": ["conda-forge"], "dependencies": [ "python=3.8.15", { "pip": [ "pmdarima==x.y.z" ], }, ], }
code_paths –
A list of local filesystem paths to Python file dependencies (or directories containing file dependencies). These files are prepended to the system path when the model is loaded. Files declared as dependencies for a given model should have relative imports declared from a common root path if multiple files are defined with import dependencies between them to avoid import errors when loading the model.
For a detailed explanation of
code_pathsfunctionality, recommended usage patterns and limitations, see the code_paths usage guide.registered_model_name – 如果提供,则在
registered_model_name下创建一个模型版本,如果给定名称的注册模型不存在,也会创建该注册模型。signature –
一个
ModelSignature类的实例,描述了模型的输入和输出。如果未指定但提供了input_example,则将根据提供的输入示例和模型自动推断签名。要禁用在提供输入示例时自动推断签名,请将signature设置为False。要手动推断模型签名,请对具有有效模型输入的(例如,省略目标列的训练数据集)和有效模型输出(例如,在训练数据集上进行的模型预测)的数据集调用infer_signature(),例如from mlflow.models import infer_signature model = pmdarima.auto_arima(data) predictions = model.predict(n_periods=30, return_conf_int=False) signature = infer_signature(data, predictions)
警告
如果在
pmdarima模型的predict方法中利用置信区间生成(return_conf_int=True),则由于使用原生的ARIMA.predict()API 时复杂的元组返回类型,签名将不会被推断。如果使用模型的pyfuncflavor,infer_schema将正常工作。input_example – 一个或多个有效的模型输入实例。输入示例用作要馈送给模型的数据的提示。它将被转换为 Pandas DataFrame,然后使用 Pandas 的面向拆分(split-oriented)格式序列化为 json,或者转换为 numpy 数组,其中示例将通过转换为列表来序列化为 json。字节将进行 base64 编码。当
signature参数为None时,输入示例用于推断模型签名。await_registration_for – 等待模型版本完成创建并处于
READY状态的秒数。默认情况下,函数等待五分钟。指定 0 或 None 可跳过等待。pip_requirements – 要么是 pip 依赖项字符串的可迭代对象(例如
["pmdarima", "-r requirements.txt", "-c constraints.txt"]),要么是本地文件系统上 pip 依赖项文件的字符串路径(例如"requirements.txt")。如果提供,这描述了该模型应运行的环境。如果为None,则从当前软件环境中推断默认的依赖项列表,方法是调用mlflow.models.infer_pip_requirements()。如果依赖项推断失败,它将回退到使用 get_default_pip_requirements。依赖项和约束项都会被自动解析并分别写入requirements.txt和constraints.txt文件,并作为模型的一部分存储。依赖项也会被写入模型 conda 环境(conda.yaml)文件的pip部分。extra_pip_requirements –
要么是 pip 依赖项字符串的可迭代对象(例如
["pandas", "-r requirements.txt", "-c constraints.txt"]),要么是本地文件系统上 pip 依赖项文件的字符串路径(例如"requirements.txt")。如果提供,这描述了附加到根据用户当前软件环境自动生成的默认 pip 依赖项集的附加 pip 依赖项。依赖项和约束项都会被自动解析并分别写入requirements.txt和constraints.txt文件,并作为模型的一部分存储。依赖项也会被写入模型 conda 环境(conda.yaml)文件的pip部分。警告
以下参数不能同时指定
conda_envpip_requirementsextra_pip_requirements
此示例演示了如何使用
pip_requirements和extra_pip_requirements指定 pip requirements。metadata – 传递给模型并存储在 MLmodel 文件中的自定义元数据字典。
name – 模型名称。
params – 要与模型一起记录的参数字典。
tags – 要与模型一起记录的标签字典。
model_type – 模型的类型。
step – 记录模型输出和指标的步骤
model_id – 模型的 ID。
kwargs –
mlflow.models.model.Model的其他参数
- 返回
一个
ModelInfo实例,其中包含已记录模型的元数据。
import pandas as pd import mlflow from mlflow.models import infer_signature import pmdarima from pmdarima.metrics import smape # Specify locations of source data and the model artifact SOURCE_DATA = "https://raw.githubusercontent.com/facebook/prophet/master/examples/example_retail_sales.csv" ARTIFACT_PATH = "model" # Read data and recode columns sales_data = pd.read_csv(SOURCE_DATA) sales_data.rename(columns={"y": "sales", "ds": "date"}, inplace=True) # Split the data into train/test train_size = int(0.8 * len(sales_data)) train = sales_data[:train_size] test = sales_data[train_size:] with mlflow.start_run(): # Create the model model = pmdarima.auto_arima(train["sales"], seasonal=True, m=12) # Calculate metrics prediction = model.predict(n_periods=len(test)) metrics = {"smape": smape(test["sales"], prediction)} # Infer signature input_sample = pd.DataFrame(train["sales"]) output_sample = pd.DataFrame(model.predict(n_periods=5)) signature = infer_signature(input_sample, output_sample) # Log model mlflow.pmdarima.log_model(model, name=ARTIFACT_PATH, signature=signature)
- mlflow.pmdarima.save_model(pmdarima_model, path, conda_env=None, code_paths=None, mlflow_model=None, signature: mlflow.models.signature.ModelSignature = None, input_example: Union[pandas.core.frame.DataFrame, numpy.ndarray, dict, list, csr_matrix, csc_matrix, str, bytes, tuple] = None, pip_requirements=None, extra_pip_requirements=None, metadata=None)[source]
将 pmdarima
ARIMA模型或Pipeline对象保存到本地文件系统的路径。- 参数
pmdarima_model – 在时间序列上被
fit过的 pmdarimaARIMA或Pipeline模型。path – 要保存序列化模型(以 pickle 格式)的本地路径目标。
conda_env –
Conda 环境的字典表示形式或指向 conda 环境 yaml 文件的路径。如果提供,它描述了该模型应运行的环境。它至少应指定 get_default_conda_env() 中包含的依赖项。如果为
None,则添加到模型中的 pip 依赖项将通过mlflow.models.infer_pip_requirements()从当前软件环境中推断。如果依赖项推断失败,它将回退到使用 get_default_pip_requirements。conda_env中的 pip 依赖项将被写入 piprequirements.txt文件,完整的 conda 环境将被写入conda.yaml。以下是 conda 环境的示例字典表示形式{ "name": "mlflow-env", "channels": ["conda-forge"], "dependencies": [ "python=3.8.15", { "pip": [ "pmdarima==x.y.z" ], }, ], }
code_paths –
A list of local filesystem paths to Python file dependencies (or directories containing file dependencies). These files are prepended to the system path when the model is loaded. Files declared as dependencies for a given model should have relative imports declared from a common root path if multiple files are defined with import dependencies between them to avoid import errors when loading the model.
For a detailed explanation of
code_pathsfunctionality, recommended usage patterns and limitations, see the code_paths usage guide.mlflow_model – 要添加此 flavor 的
mlflow.models.Model。signature –
一个
ModelSignature类的实例,描述了模型的输入和输出。如果未指定但提供了input_example,则将根据提供的输入示例和模型自动推断签名。要禁用在提供输入示例时自动推断签名,请将signature设置为False。要手动推断模型签名,请对具有有效模型输入的(例如,省略目标列的训练数据集)和有效模型输出(例如,在训练数据集上进行的模型预测)的数据集调用infer_signature(),例如from mlflow.models import infer_signature model = pmdarima.auto_arima(data) predictions = model.predict(n_periods=30, return_conf_int=False) signature = infer_signature(data, predictions)
警告
如果在
pmdarima模型的predict方法中利用置信区间生成(return_conf_int=True),则由于使用原生的ARIMA.predict()API 时复杂的元组返回类型,签名将不会被推断。如果使用模型的pyfuncflavor,infer_schema将正常工作。input_example – 一个或多个有效的模型输入实例。输入示例用作要馈送给模型的数据的提示。它将被转换为 Pandas DataFrame,然后使用 Pandas 的面向拆分(split-oriented)格式序列化为 json,或者转换为 numpy 数组,其中示例将通过转换为列表来序列化为 json。字节将进行 base64 编码。当
signature参数为None时,输入示例用于推断模型签名。pip_requirements – 要么是 pip 依赖项字符串的可迭代对象(例如
["pmdarima", "-r requirements.txt", "-c constraints.txt"]),要么是本地文件系统上 pip 依赖项文件的字符串路径(例如"requirements.txt")。如果提供,这描述了该模型应运行的环境。如果为None,则从当前软件环境中推断默认的依赖项列表,方法是调用mlflow.models.infer_pip_requirements()。如果依赖项推断失败,它将回退到使用 get_default_pip_requirements。依赖项和约束项都会被自动解析并分别写入requirements.txt和constraints.txt文件,并作为模型的一部分存储。依赖项也会被写入模型 conda 环境(conda.yaml)文件的pip部分。extra_pip_requirements –
要么是 pip 依赖项字符串的可迭代对象(例如
["pandas", "-r requirements.txt", "-c constraints.txt"]),要么是本地文件系统上 pip 依赖项文件的字符串路径(例如"requirements.txt")。如果提供,这描述了附加到根据用户当前软件环境自动生成的默认 pip 依赖项集的附加 pip 依赖项。依赖项和约束项都会被自动解析并分别写入requirements.txt和constraints.txt文件,并作为模型的一部分存储。依赖项也会被写入模型 conda 环境(conda.yaml)文件的pip部分。警告
以下参数不能同时指定
conda_envpip_requirementsextra_pip_requirements
此示例演示了如何使用
pip_requirements和extra_pip_requirements指定 pip requirements。metadata – 传递给模型并存储在 MLmodel 文件中的自定义元数据字典。
import pandas as pd import mlflow import pmdarima # Specify locations of source data and the model artifact SOURCE_DATA = "https://raw.githubusercontent.com/facebook/prophet/master/examples/example_retail_sales.csv" ARTIFACT_PATH = "model" # Read data and recode columns sales_data = pd.read_csv(SOURCE_DATA) sales_data.rename(columns={"y": "sales", "ds": "date"}, inplace=True) # Split the data into train/test train_size = int(0.8 * len(sales_data)) train = sales_data[:train_size] test = sales_data[train_size:] with mlflow.start_run(): # Create the model model = pmdarima.auto_arima(train["sales"], seasonal=True, m=12) # Save the model to the specified path mlflow.pmdarima.save_model(model, "model")