Saya sedang mengerjakan sistem pelacakan versi untuk proyek ML dan ingin menggunakan MLflow untuk melakukannya. Proyek saya menggunakan DeepAR AWS Sagemaker untuk perkiraan.

Apa yang ingin saya lakukan sangat sederhana. Saya mencoba mencatat model Sagemaker DeepAR (Sagemaker Estimator) dengan MLFlow. Karena tidak memiliki fungsi "log_model" di modul "mlflow.sagemaker", saya mencoba menggunakan modul "mlflow.pyfunc" untuk melakukan log. Sayangnya itu tidak berhasil. Bagaimana saya bisa mencatat model Sagemaker dan mendapatkan file cloudpickle dan yaml yang dihasilkan oleh MLFlow?

Kode saya untuk saat ini:

mlflow.pyfunc.log_model(model)

Di mana model adalah objek sagemaker.estimator.Estimator dan kesalahan yang saya dapatkan dari kode adalah

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

Saya tahu AWS Sagemaker mencatat model saya, tetapi sangat penting bagi proyek saya untuk melakukan log dengan MLFlow juga.

0
Tiago Bachiega de Almeida 23 April 2020, 04:06

1 menjawab

Jawaban Terbaik

Anda tidak dapat menggunakan pyfunc untuk menyimpan objek jenis apa pun.

Anda harus menentukan salah satu dari loader_module seperti yang ditunjukkan pada contoh di bawah ini atau Anda harus menulis pembungkus yang mengimplementasikan antarmuka PythonModel dan menyediakan logika untuk deserialize model Anda dari artefak yang disimpan sebelumnya seperti yang dijelaskan di sini https:// www.mlflow.org/docs/latest/models.html#example-saving-an-xgboost-model-in-mlflow-format

Contoh dengan pemuat:

    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'
    )

Saya pikir PythonModel adalah cara yang lebih baik untuk Anda karena mlflow tidak memiliki pemuat bawaan untuk model SageMaker DeepAR.

Meskipun demikian, Anda harus memiliki pengetahuan cara mengembalikan model SageMaker dari artefak, karena saya tidak yakin itu mungkin sama sekali, karena beberapa algoritma SageMaker bawaan adalah kotak hitam.

Anda juga mungkin tertarik dengan wadah yang memungkinkan Anda menjalankan proyek MLFlow apa pun di dalam Sagemaker: https:// /github.com/odahu/sagemaker-mlflow-container

1
Vlad Tokarev 24 April 2020, 09:24