Отслеживание SageMaker Estimator с MLFlow - PullRequest
0 голосов
/ 23 апреля 2020

Я работаю над системой отслеживания версий для проекта ML и хочу использовать MLflow для этого. Мой проект использует AWS DeepAR от Sagemaker для прогноза.

То, что я хочу сделать, очень просто. Я пытаюсь записать модель Sagemaker DeepAR (Sagemaker Estimator) в MLFlow. Поскольку в модуле mlflow.sagemaker нет функции log_model, я попытался использовать модуль mlflow.pyfun c для ведения журнала. К сожалению, это не сработало. Как я могу войти в модель Sagemaker и получить файлы cloudpickle и yaml, сгенерированные MLFlow?

Мой код на данный момент:

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 тоже.

1 Ответ

1 голос
/ 24 апреля 2020

Вы не можете использовать pyfun c для хранения объектов любого типа.

Вы должны либо указать один из loader_module, как показано в примере ниже, либо вы должны написать оболочку, которая реализует интерфейс PythonModel и предоставляет logi c чтобы десериализовать вашу модель из ранее сохраненных артефактов, как описано здесь 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 являются черными ящиками.

Вас также может заинтересовать контейнер, который позволяет запускать любые проекты MLFlow внутри Sagemaker: https://github.com/odahu/sagemaker-mlflow-container

...