Bagikan melalui


Panduan untuk menyebarkan model MLflow

BERLAKU UNTUK: Ekstensi ml Azure CLI v2 (saat ini)

Dalam artikel ini, pelajari tentang penyebaran model MLflow ke Azure Pembelajaran Mesin untuk inferensi real time dan batch, dan tentang berbagai alat yang dapat Anda gunakan untuk mengelola penyebaran.

Penyebaran tanpa kode

Saat Anda menyebarkan model MLflow ke Azure Pembelajaran Mesin, tidak seperti penyebaran model kustom, Anda tidak perlu menyediakan skrip penilaian atau lingkungan. Azure Pembelajaran Mesin secara otomatis menghasilkan skrip penilaian dan lingkungan untuk Anda. Fungsionalitas ini disebut penyebaran tanpa kode.

Untuk penyebaran tanpa kode, Azure Pembelajaran Mesin:

  • Memastikan bahwa semua dependensi paket yang ditunjukkan dalam model MLflow terpenuhi.
  • Menyediakan gambar dasar MLflow atau lingkungan yang dikumpulkan yang berisi item berikut:
    • Paket yang diperlukan agar Azure Pembelajaran Mesin melakukan inferensi, termasuk mlflow-skinny.
    • Skrip penilaian untuk melakukan inferensi.

Tip

Ruang kerja tanpa akses jaringan publik: Sebelum Anda dapat menyebarkan model MLflow ke titik akhir online tanpa konektivitas keluar, Anda harus mengemas model (pratinjau). Dengan menggunakan kemasan model, Anda dapat menghindari kebutuhan akan koneksi internet, yang diwajibkan azure Pembelajaran Mesin untuk menginstal paket Python yang diperlukan secara dinamis untuk model MLflow.

Paket dan dependensi

Azure Pembelajaran Mesin secara otomatis menghasilkan lingkungan untuk menjalankan inferensi pada model MLflow. Untuk membangun lingkungan, Azure Pembelajaran Mesin membaca dependensi conda yang ditentukan dalam model MLflow dan menambahkan paket apa pun yang diperlukan untuk menjalankan server inferensi. Paket tambahan ini bervariasi tergantung pada jenis penyebaran.

Contoh file conda.yaml berikut menunjukkan dependensi conda yang ditentukan dalam model MLflow.

channels:
- conda-forge
dependencies:
- python=3.10.11
- pip<=23.1.2
- pip:
  - mlflow==2.7.1
  - cloudpickle==1.6.0
  - dataclasses==0.6
  - lz4==4.0.0
  - numpy==1.23.5
  - packaging==23.0
  - psutil==5.9.0
  - pyyaml==6.0
  - scikit-learn==1.1.2
  - scipy==1.10.1
  - uuid==1.30
name: mlflow-env

Penting

MLflow secara otomatis mendeteksi paket saat mencatat model, dan menyematkan versi paket dalam dependensi conda model. Deteksi paket otomatis ini mungkin tidak mencerminkan niat atau persyaratan Anda. Anda dapat mencatat model dengan tanda tangan, lingkungan, atau sampel kustom.

Model dengan tanda tangan

Model MLflow dapat menyertakan tanda tangan yang menunjukkan input dan jenis yang diharapkan. Ketika model tersebut disebarkan ke titik akhir online atau batch, Azure Pembelajaran Mesin memastikan bahwa jumlah dan jenis input data mematuhi tanda tangan. Jika data input tidak dapat diurai seperti yang diharapkan, pemanggilan model gagal.

Anda dapat memeriksa tanda tangan model MLflow dengan membuka file MLmodel. Untuk informasi selengkapnya tentang cara kerja tanda tangan di MLflow, lihat Tanda Tangan di MLflow.

Contoh file MLmodel berikut menyoroti signature.

artifact_path: model
flavors:
  python_function:
    env:
      conda: conda.yaml
      virtualenv: python_env.yaml
    loader_module: mlflow.sklearn
    model_path: model.pkl
    predict_fn: predict
    python_version: 3.10.11
  sklearn:
    code: null
    pickled_model: model.pkl
    serialization_format: cloudpickle
    sklearn_version: 1.1.2
mlflow_version: 2.7.1
model_uuid: 3f725f3264314c02808dd99d5e5b2781
run_id: 70f15bab-cf98-48f1-a2ea-9ad2108c28cd
signature:
  inputs: '[{"name": "age", "type": "double"}, {"name": "sex", "type": "double"},
    {"name": "bmi", "type": "double"}, {"name": "bp", "type": "double"}, {"name":
    "s1", "type": "double"}, {"name": "s2", "type": "double"}, {"name": "s3", "type":
    "double"}, {"name": "s4", "type": "double"}, {"name": "s5", "type": "double"},
    {"name": "s6", "type": "double"}]'
  outputs: '[{"type": "double"}]'

Tip

Tanda tangan dalam model MLflow direkomendasikan karena menyediakan cara mudah untuk mendeteksi masalah kompatibilitas data. Untuk informasi selengkapnya tentang cara mencatat model dengan tanda tangan, lihat Model pengelogan dengan tanda tangan, lingkungan, atau sampel kustom.

Penyebaran di server bawaan MLflow vs. penyebaran di Azure Pembelajaran Mesin server inferensi

Pengembang model dapat menggunakan alat penyebaran bawaan MLflow untuk menguji model secara lokal. Misalnya, Anda dapat menjalankan instans lokal model yang terdaftar di registri server MLflow dengan menggunakan mlflow models serve atau MLflow CLI mlflow models predict. Untuk informasi selengkapnya tentang alat penyebaran bawaan MLflow, lihat Alat penyebaran bawaan dalam dokumentasi MLflow.

Azure Pembelajaran Mesin juga mendukung penyebaran model ke titik akhir online dan batch. Titik akhir ini menjalankan berbagai teknologi inferensi yang dapat memiliki fitur yang berbeda.

  • Titik akhir online Azure Pembelajaran Mesin, mirip dengan server bawaan MLflow, menyediakan cara yang dapat diskalakan, sinkron, dan ringan untuk menjalankan model untuk inferensi.

  • Titik akhir azure Pembelajaran Mesin batch dapat menjalankan inferensi asinkron melalui proses inferensi yang berjalan lama yang dapat menskalakan ke sejumlah besar data. Server MLflow tidak memiliki kemampuan ini, meskipun Anda dapat mencapai kemampuan serupa dengan menggunakan pekerjaan Spark. Untuk mempelajari selengkapnya tentang titik akhir batch dan model MLflow, lihat Menggunakan model MLflow dalam penyebaran batch.

Format input

Tabel berikut ini memperlihatkan jenis input yang didukung oleh server bawaan MLflow versus Titik akhir online Azure Pembelajaran Mesin.

Jenis input Server bawaan MLflow Titik akhir online Azure Pembelajaran Mesin
DataFrame pandas berseri JSON dalam orientasi terpisah
DataFrame pandas berseri JSON dalam orientasi rekaman Tidak digunakan lagi
DataFrame pandas berseri CSV Gunakan inferensi batch. Untuk informasi selengkapnya, lihat Menyebarkan model MLflow ke titik akhir batch.
Input TensorFlow sebagai daftar serial JSON (tensor) dan kamus daftar (tensor bernama)
Input TensorFlow menggunakan TensorFlow Serving API

Bagian berikut berfokus pada model MLflow yang disebarkan ke Titik akhir online Azure Pembelajaran Mesin.

Struktur input

Terlepas dari jenis input, Azure Pembelajaran Mesin mengharuskan Anda untuk memberikan input dalam payload JSON di kunci input_datakamus . Kunci ini tidak diperlukan saat Anda menggunakan perintah mlflow models serve untuk melayani model, sehingga payload tidak dapat digunakan secara bergantian untuk titik akhir online Azure Pembelajaran Mesin dan server bawaan MLflow.

Penting

Struktur payload berubah dalam MLflow 2.0.

Contoh payload berikut menunjukkan perbedaan antara model yang disebarkan di server bawaan MLflow versus server inferensi Azure Pembelajaran Mesin.

DataFrame pandas berseri JSON dalam orientasi terpisah

{
    "input_data": {
        "columns": [
            "age", "sex", "trestbps", "chol", "fbs", "restecg", "thalach", "exang", "oldpeak", "slope", "ca", "thal"
        ],
        "index": [1],
        "data": [
            [1, 1, 145, 233, 1, 2, 150, 0, 2.3, 3, 0, 2]
        ]
    }
}

Input tensor

{
    "input_data": [
          [1, 1, 0, 233, 1, 2, 150, 0, 2.3, 3, 0, 2],
          [1, 1, 0, 233, 1, 2, 150, 0, 2.3, 3, 0, 2]
          [1, 1, 0, 233, 1, 2, 150, 0, 2.3, 3, 0, 2],
          [1, 1, 145, 233, 1, 2, 150, 0, 2.3, 3, 0, 2]
    ]
}

Input tensor bernama

{
    "input_data": {
        "tokens": [
          [0, 655, 85, 5, 23, 84, 23, 52, 856, 5, 23, 1]
        ],
        "mask": [
          [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0]
        ]
    }
}

Kustomisasi inferensi untuk model MLflow

Skrip penilaian menyesuaikan cara menjalankan inferensi untuk model kustom. Tetapi untuk penyebaran model MLflow, keputusan tentang cara menjalankan inferensi dibuat oleh pembuat model daripada oleh teknisi penyebaran. Setiap kerangka kerja model dapat secara otomatis menerapkan rutinitas inferensi tertentu.

Jika Anda perlu mengubah bagaimana inferensi dijalankan untuk model MLflow, Anda dapat melakukan salah satu hal berikut:

  • Ubah bagaimana model Anda dicatat dalam rutinitas pelatihan.
  • Kustomisasi inferensi dengan skrip penilaian pada waktu penyebaran.

Mengubah cara model Anda dicatat selama pelatihan

Saat Anda mencatat model dengan menggunakan mlflow.autolog atau mlflow.<flavor>.log_model, ragam yang digunakan untuk model menentukan cara menjalankan inferensi dan hasil apa yang akan dikembalikan. MLflow tidak memberlakukan perilaku tertentu tentang bagaimana predict() fungsi menghasilkan hasil.

Dalam beberapa kasus, Anda mungkin ingin melakukan beberapa pra-pemrosesan atau pascaproscesing sebelum dan sesudah model Anda dijalankan. Atau, Anda mungkin ingin mengubah apa yang dikembalikan; misalnya, probabilitas alih-alih kelas. Salah satu solusinya adalah menerapkan alur pembelajaran mesin yang berpindah dari input ke output secara langsung.

Misalnya, sklearn.pipeline.Pipeline atau pyspark.ml.Pipeline merupakan cara populer untuk menerapkan alur, dan terkadang direkomendasikan karena alasan performa. Anda juga dapat menyesuaikan bagaimana model Anda melakukan inferensi dengan mencatat model kustom.

Menyesuaikan inferensi dengan skrip penilaian

Meskipun model MLflow tidak memerlukan skrip penilaian, Anda masih dapat menyediakannya untuk menyesuaikan eksekusi inferensi untuk model MLflow jika diperlukan. Untuk informasi selengkapnya tentang cara menyesuaikan inferensi, lihat Menyesuaikan penyebaran model MLflow untuk titik akhir online atau Menyesuaikan penyebaran model dengan skrip penilaian untuk titik akhir batch.

Penting

Jika Anda memilih untuk menentukan skrip penilaian untuk penyebaran model MLflow, Anda juga perlu menyediakan lingkungan untuk penyebaran.

Alat penyebaran

Azure Pembelajaran Mesin menawarkan alat berikut untuk menyebarkan model MLflow ke titik akhir online dan batch:

Setiap alat memiliki kemampuan yang berbeda, terutama untuk jenis komputasi mana yang dapat ditargetkannya. Tabel berikut ini memperlihatkan dukungan untuk skenario penyebaran MLflow yang berbeda.

Skenario MLflow SDK Azure Pembelajaran Mesin CLI/SDK atau studio
Menyebarkan ke titik akhir online terkelola1 Didukung. Lihat Peluncuran progresif model MLflow ke titik akhir online Didukung. Lihat Menyebarkan model MLflow ke titik akhir online
Menyebarkan ke titik akhir online terkelola dengan skrip penilaian Tidak didukung3 Didukung. Lihat Mengkustomisasi penyebaran model MLflow
Menyebarkan ke titik akhir batch Tidak didukung3 Didukung. Lihat Menggunakan model MLflow dalam penyebaran batch
Menyebarkan ke titik akhir batch dengan skrip penilaian Tidak didukung3 Didukung. Lihat Menyesuaikan penyebaran model dengan skrip penilaian
Menyebarkan ke layanan web seperti Azure Container Instances atau Azure Kubernetes Service (AKS) Dukunganwarisan 2 Tidak didukung2
Menyebarkan ke layanan web seperti Container Instances atau AKS dengan skrip penilaian Tidak didukung3 Dukunganwarisan 2

1 Penyebaran ke titik akhir online yang berada di ruang kerja dengan tautan privat diaktifkan mengharuskan Anda mengemas model sebelum penyebaran (pratinjau).

2 Beralih ke titik akhir online terkelola jika memungkinkan.

3 MLflow sumber terbuka tidak memiliki konsep skrip penilaian dan tidak mendukung eksekusi batch.

Pilih alat penyebaran

Gunakan MLflow SDK jika:

  • Anda terbiasa dengan MLflow dan ingin terus menggunakan metode yang sama, dan
  • Anda menggunakan platform seperti Azure Databricks yang mendukung MLflow secara asli.

Gunakan Azure Pembelajaran Mesin CLI v2 atau SDK untuk Python jika:

  • Anda terbiasa dengan mereka, atau
  • Anda ingin mengotomatiskan penyebaran dengan alur, atau
  • Anda ingin menyimpan konfigurasi penyebaran di repositori Git.

Gunakan antarmuka pengguna studio Azure Pembelajaran Mesin jika Anda ingin dengan cepat menyebarkan dan menguji model yang dilatih dengan MLflow.