Python 用MLFlow跟踪SageMaker估计器
我正在为一个ML项目开发一个版本跟踪系统,并希望使用MLflow来实现这一点。我的项目使用AWS Sagemaker的DeepAR进行预测 我想做的很简单。我尝试用MLFlow记录Sagemaker DeepAR模型(Sagemaker估计器)。由于它的“mlflow.sagemaker”模块中没有“log_model”函数,所以我尝试使用“mlflow.pyfunc”模块进行日志记录。不幸的是,它没有起作用。如何记录Sagemaker模型并获取MLFlow生成的cloudpickle和yaml文件 我现在的代码: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
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项目的容器感兴趣:谢谢您的帮助!