Python 用MLFlow跟踪SageMaker估计器

Python 用MLFlow跟踪SageMaker估计器,python,amazon-web-services,amazon-sagemaker,mlflow,Python,Amazon Web Services,Amazon Sagemaker,Mlflow,我正在为一个ML项目开发一个版本跟踪系统,并希望使用MLflow来实现这一点。我的项目使用AWS Sagemaker的DeepAR进行预测 我想做的很简单。我尝试用MLFlow记录Sagemaker DeepAR模型(Sagemaker估计器)。由于它的“mlflow.sagemaker”模块中没有“log_model”函数,所以我尝试使用“mlflow.pyfunc”模块进行日志记录。不幸的是,它没有起作用。如何记录Sagemaker模型并获取MLFlow生成的cloudpickle和yaml

我正在为一个ML项目开发一个版本跟踪系统,并希望使用MLflow来实现这一点。我的项目使用AWS Sagemaker的DeepAR进行预测

我想做的很简单。我尝试用MLFlow记录Sagemaker DeepAR模型(Sagemaker估计器)。由于它的“mlflow.sagemaker”模块中没有“log_model”函数,所以我尝试使用“mlflow.pyfunc”模块进行日志记录。不幸的是,它没有起作用。如何记录Sagemaker模型并获取MLFlow生成的cloudpickle和yaml文件

我现在的代码:

mlflow.pyfunc.log\u模型(模型)

其中model是sagemaker.estimator.estimator对象,我从代码中得到的误差是

mlflow.exceptions.MlflowException:必须指定'loader\u module'或'python\u model'。“loader_module”应该是python模块。“python_模型”应该是PythonModel的子类


我知道AWS Sagemaker会记录我的模型,但对我的项目来说,使用MLFlow记录也非常重要。

您不能使用pyfunc存储任何类型的对象

您应该指定一个loader_模块,如下面的示例所示,或者您必须编写实现PythonModel接口的包装器,并提供逻辑来从先前存储的工件反序列化您的模型,如下所述

加载程序示例:

    model_uri = 'model.pkl'

    with open(model_uri, 'wb') as f:
        pickle.dump(model, f)

    mlflow.log_artifact(model_uri, 'model')

    mlflow.pyfunc.log_model(
        'model', loader_module='mlflow.sklearn', data_path='model.pkl', code_path=['src'], conda_env='environment.yml'
    )
我认为PythonModel更适合您,因为mlflow没有用于SageMaker DeepAR模型的内置加载程序

尽管如此,您必须了解如何从工件恢复SageMaker模型,因为我根本不确定这是否可行,因为一些内置SageMaker算法都是黑盒


您也可能对允许您在Sagemaker内运行任何MLFlow项目的容器感兴趣:

谢谢您的帮助!