用MLFlow跟踪SageMaker估计器

2024-04-26 14:28:52 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

我现在的代码:

mlflow.pyfunc.log_model(model)

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

mlflow.exceptions.MlflowException: Either `loader_module` or `python_model` must be specified. A `loader_module` should be a python module. A `python_model` should be a subclass of PythonModel

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


Tags: 模块项目模型awslogmodel记录be
1条回答
网友
1楼 · 发布于 2024-04-26 14:28:52

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

您应该指定一个loader_模块,如下面的示例所示,或者您必须编写实现PythonModel接口的包装器,并提供逻辑来从先前存储的工件反序列化您的模型,如下所述 https://www.mlflow.org/docs/latest/models.html#example-saving-an-xgboost-model-in-mlflow-format

加载程序示例:

    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项目的容器感兴趣:https://github.com/odahu/sagemaker-mlflow-container

相关问题 更多 >