使用 MLFlow 跟踪 SageMaker Estimator
Tracking SageMaker Estimator with MLFlow
我正在为 ML 项目开发版本跟踪系统,并希望使用 MLflow 来完成这项工作。我的项目使用 AWS Sagemaker 的 DeepAR 进行预测。
我想做的很简单。我正在尝试使用 MLFlow 记录 Sagemaker DeepAR 模型(Sagemaker Estimator)。因为它的 "mlflow.sagemaker" 模块中没有 "log_model" 函数,所以我尝试使用 "mlflow.pyfunc" 模块来做日志。不幸的是它没有用。如何登录 Sagemaker 模型并获取 MLFlow 生成的 cloudpickle 和 yaml 文件?
我现在的代码:
mlflow.pyfunc.log_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 记录日志也非常重要。
您不能使用 pyfunc 来存储任何类型的对象。
您应该指定 loader_module 之一,如下例所示,或者您必须编写实现 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
我正在为 ML 项目开发版本跟踪系统,并希望使用 MLflow 来完成这项工作。我的项目使用 AWS Sagemaker 的 DeepAR 进行预测。
我想做的很简单。我正在尝试使用 MLFlow 记录 Sagemaker DeepAR 模型(Sagemaker Estimator)。因为它的 "mlflow.sagemaker" 模块中没有 "log_model" 函数,所以我尝试使用 "mlflow.pyfunc" 模块来做日志。不幸的是它没有用。如何登录 Sagemaker 模型并获取 MLFlow 生成的 cloudpickle 和 yaml 文件?
我现在的代码:
mlflow.pyfunc.log_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 记录日志也非常重要。
您不能使用 pyfunc 来存储任何类型的对象。
您应该指定 loader_module 之一,如下例所示,或者您必须编写实现 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