Bagikan melalui


Mencatat, memuat, mendaftarkan, dan menyebarkan model MLflow

Model MLflow adalah format standar untuk model pembelajaran mesin pengemasan yang dapat digunakan dalam berbagai alat hilir—misalnya, inferensi batch pada Apache Spark atau penayangan real-time melalui REST API. Format ini mendefinisikan konvensi yang memungkinkan Anda menyimpan model dalam berbagai rasa (fungsi python, pytorch, sklearn, dan sebagainya), yang dapat dipahami oleh platform penyajian dan inferensi model yang berbeda.

Model log dan muat

Saat Anda mencatat model, MLflow secara otomatis mencatat requirements.txt dan conda.yaml file. Anda dapat menggunakan file-file ini untuk membuat ulang lingkungan pengembangan model dan menginstal ulang dependensi menggunakan virtualenv (disarankan) atau conda.

Penting

Anaconda Inc. memperbarui ketentuan layanan untuk alur anaconda.org. Berdasarkan persyaratan layanan baru, Anda mungkin memerlukan lisensi komersial jika Anda mengandalkan pengemasan dan distribusi Anaconda. Lihat FAQ Anaconda Commercial Edition untuk informasi lebih lanjut. Penggunaan Anda atas setiap saluran Anaconda diatur oleh persyaratan layanan mereka.

Model MLflow yang dicatat sebelum v1.18 (Databricks Runtime 8.3 ML atau lebih lama) secara default dicatat dengan saluran conda defaults (https://repo.anaconda.com/pkgs/) sebagai dependensi. Karena perubahan lisensi ini, Databricks telah menghentikan penggunaan saluran defaults untuk model yang dicatat menggunakan MLflow v1.18 dan di atasnya. Saluran default yang dicatat sekarang adalah conda-forge, yang menunjuk pada komunitas yang dikelola https://conda-forge.org/.

Jika Anda mencatat model sebelum MLflow v1.18 tanpa mengecualikan saluran defaults dari lingkungan conda untuk model tersebut, model tersebut mungkin memiliki dependensi pada saluran defaults yang mungkin tidak Anda maksudkan. Untuk mengonfirmasi secara manual apakah model memiliki dependensi ini, Anda dapat memeriksa nilai channel dalam file conda.yaml yang dikemas dengan model yang dicatat. Misalnya, conda.yaml model dengan defaults dependensi saluran mungkin terlihat seperti ini:

channels:
- defaults
dependencies:
- python=3.8.8
- pip
- pip:
    - mlflow
    - scikit-learn==0.23.2
    - cloudpickle==1.6.0
      name: mlflow-env

Karena Databricks tidak dapat menentukan apakah penggunaan Anda atas repositori Anaconda untuk berinteraksi dengan model Anda diizinkan berdasarkan hubungan Anda dengan Anaconda, Databricks tidak memaksa pelanggannya untuk membuat perubahan apa pun. Jika penggunaan repositori Anaconda.com Anda melalui penggunaan Databricks diizinkan berdasarkan ketentuan Anaconda, Anda tidak perlu mengambil tindakan apa pun.

Jika Anda ingin mengubah saluran yang digunakan di lingkungan model, Anda dapat mendaftarkan ulang model ke registri model dengan baru conda.yaml. Anda dapat melakukannya dengan menentukan saluran di parameter conda_env dari log_model().

Untuk informasi selengkapnya tentang log_model() API, lihat dokumentasi MLflow untuk ragam model yang sedang Anda kerjakan, misalnya, log_model untuk scikit-learn.

Untuk informasi selengkapnya tentang conda.yaml file, lihat dokumentasi MLflow.

Perintah API

Untuk mencatat model ke server pelacakan MLflow, gunakan mlflow.<model-type>.log_model(model, ...).

Untuk memuat model yang sebelumnya dicatat untuk inferensi atau pengembangan lebih lanjut, gunakan mlflow.<model-type>.load_model(modelpath), di mana modelpath salah satu dari berikut ini:

  • jalur jalankan-relatif (seperti runs:/{run_id}/{model-path})
  • jalur DBFS
  • jalur model terdaftar (seperti models:/{model_name}/{model_stage}).

Untuk daftar lengkap opsi untuk memuat model MLflow, lihat Referensi Artefak dalam dokumentasi MLflow.

Untuk model Python MLflow, opsi tambahan adalah menggunakan mlflow.pyfunc.load_model() untuk memuat model sebagai fungsi Python generik. Anda dapat menggunakan cuplikan kode berikut untuk memuat model dan mencetak poin data.

model = mlflow.pyfunc.load_model(model_path)
model.predict(model_input)

Sebagai alternatif, Anda dapat mengekspor model sebagai Apache Spark UDF untuk digunakan untuk mencetak gol pada kluster Spark, baik sebagai pekerjaan batch atau sebagai pekerjaan Spark Streaming real-time.

# load input data table as a Spark DataFrame
input_data = spark.table(input_table_name)
model_udf = mlflow.pyfunc.spark_udf(spark, model_path)
df = input_data.withColumn("prediction", model_udf())

Dependensi model log

Untuk memuat model secara akurat, Anda sebaiknya memastikan dependensi model dimuat dengan versi yang benar ke lingkungan notebook. Dalam Databricks Runtime 10.5 ML ke atas, MLflow memperingatkan Anda jika ketidakcocokan terdeteksi antara lingkungan saat ini dan dependensi model.

Fungsionalitas tambahan untuk menyederhanakan pemulihan dependensi model disertakan dalam Databricks Runtime 11.0 ML dan yang lebih baru. Di Databricks Runtime 11.0 ML dan yang lebih baru, untuk model ragam pyfunc, Anda dapat memanggil mlflow.pyfunc.get_model_dependencies untuk mengambil dan mengunduh dependensi model. Fungsi ini mengembalikan jalur ke file dependensi yang kemudian dapat Anda pasang dengan menggunakan %pip install <file-path>. Saat Anda memuat model sebagai UDF PySpark, tentukan env_manager="virtualenv" dalam panggilan mlflow.pyfunc.spark_udf. Ini akan memulihkan dependensi model dalam konteks UDF PySpark dan tidak memengaruhi lingkungan luar.

Anda juga dapat menggunakan fungsi ini di Databricks Runtime 10.5 atau versi d bawahnya dengan memasang MLflow versi 1.25.0 atau versi yang lebih baru secara manual:

%pip install "mlflow>=1.25.0"

Untuk informasi tambahan tentang cara mencatat dependensi model (Python dan non-Python) dan artefak, lihat Dependensi model log.

Pelajari cara mencatat dependensi model dan artefak kustom untuk penyajian model:

Cuplikan kode yang dihasilkan secara otomatis di UI MLflow

Saat Anda mencatat model di buku catatan Azure Databricks, Azure Databricks secara otomatis menghasilkan cuplikan kode yang dapat Anda salin dan gunakan untuk memuat dan menjalankan model. Untuk melihat cuplikan kode ini:

  1. Navigasikan ke layar Berjalan untuk jalankan yang menghasilkan model. (Lihat Melihat eksperimen buku catatan untuk cara menampilkan layar Berjalan.)
  2. Gulir ke bagian Artefak.
  3. Klik nama model yang dicatat. Panel terbuka ke kanan menampilkan kode yang dapat Anda gunakan untuk memuat model yang dicatat dan membuat prediksi pada Spark atau pandas DataFrames.

Cuplikan kode panel artefak

Contoh

Untuk contoh model pencatatan, lihat contoh di Lacak pelatihan pembelajaran mesin menjalankan contoh. Untuk contoh memuat model yang dicatat untuk inferensi, lihat contoh inferensi Model.

Mendaftarkan model di Registri Model

Anda dapat mendaftarkan model di Registri Model MLflow, toko model terpusat yang menyediakan UI dan set API untuk mengelola siklus hidup penuh Model MLflow. Untuk petunjuk tentang cara menggunakan Registri Model untuk mengelola model di Databricks Unity Catalog, lihat Mengelola siklus hidup model di Unity Catalog. Untuk menggunakan Registri Model Ruang Kerja, lihat Mengelola siklus hidup model menggunakan Registri Model Ruang Kerja (warisan).

Untuk mendaftarkan model menggunakan API, gunakan mlflow.register_model("runs:/{run_id}/{model-path}", "{registered-model-name}").

Menyimpan model ke DBFS

Untuk menyimpan model secara lokal, gunakan mlflow.<model-type>.save_model(model, modelpath). modelpath harus jalur DBFS. Misalnya, jika Anda menggunakan lokasi DBFS dbfs:/my_project_models untuk menyimpan pekerjaan proyek Anda, Anda harus menggunakan jalur model /dbfs/my_project_models:

modelpath = "/dbfs/my_project_models/model-%f-%f" % (alpha, l1_ratio)
mlflow.sklearn.save_model(lr, modelpath)

Untuk model MLlib, gunakan Alur ML.

Unduh artefak model

Anda dapat mengunduh artefak model yang dicatat (seperti file model, plot, dan metrik) untuk model terdaftar dengan berbagai API.

Contoh API Python:

from mlflow.store.artifact.models_artifact_repo import ModelsArtifactRepository

model_uri = MlflowClient.get_model_version_download_uri(model_name, model_version)
ModelsArtifactRepository(model_uri).download_artifacts(artifact_path="")

Contoh API Java:

MlflowClient mlflowClient = new MlflowClient();
// Get the model URI for a registered model version.
String modelURI = mlflowClient.getModelVersionDownloadUri(modelName, modelVersion);

// Or download the model artifacts directly.
File modelFile = mlflowClient.downloadModelVersion(modelName, modelVersion);

Contoh perintah CLI:

mlflow artifacts download --artifact-uri models:/<name>/<version|stage>

Menyebarkan model untuk penyajian online

Anda dapat menggunakan Model Melayani untuk menghosting model pembelajaran mesin dari Registri Model sebagai titik akhir REST. Titik akhir ini diperbarui secara otomatis berdasarkan ketersediaan versi model dan tahapannya.

Anda juga dapat menyebarkan model ke kerangka kerja penyajian pihak ketiga menggunakan alat penyebaran bawaan MLflow. Lihat contoh berikut.