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. Pelajari juga tentang berbagai alat yang dapat Anda gunakan untuk mengelola penyebaran.

Penyebaran model MLflow vs. model kustom

Tidak seperti penyebaran model kustom di Azure Pembelajaran Mesin, saat Anda menyebarkan model MLflow ke Azure Pembelajaran Mesin, Anda tidak perlu menyediakan skrip penilaian atau lingkungan untuk penyebaran. Sebagai gantinya, 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 Python

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 Anda.

File conda.yaml berikut menunjukkan contoh dependensi conda yang ditentukan dalam model MLflow.

conda.yaml

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

Peringatan

MLflow secara otomatis mendeteksi paket saat mencatat model dan menyematkan versi paket dalam dependensi conda model. Namun, deteksi paket otomatis ini mungkin tidak selalu mencerminkan niat atau persyaratan Anda. Dalam kasus seperti itu, pertimbangkan untuk mencatat model dengan definisi dependensi conda kustom.

Implikasi penggunaan 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 memberlakukan bahwa jumlah dan jenis input data mematuhi tanda tangan. Jika data input tidak dapat diurai seperti yang diharapkan, pemanggilan model akan gagal.

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

File berikut menunjukkan file MLmodel yang terkait dengan model MLflow.

MLmodel

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 bersifat opsional tetapi sangat disarankan, karena memberikan cara mudah untuk mendeteksi masalah kompatibilitas data lebih awal. Untuk informasi selengkapnya tentang cara mencatat model dengan tanda tangan, lihat Model pengelogan dengan tanda tangan, lingkungan, atau sampel kustom.

Model yang disebarkan di Azure Pembelajaran Mesin vs. model yang disebarkan di server bawaan MLflow

MLflow mencakup alat penyebaran bawaan yang dapat digunakan pengembang model untuk menguji model secara lokal. Misalnya, Anda dapat menjalankan instans lokal model yang terdaftar di registri server MLflow, menggunakan mlflow models serve -m my_model atau menggunakan MLflow CLI mlflow models predict.

Inferensi dengan titik akhir batch vs. online

Azure Pembelajaran Mesin 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 mirip dengan server bawaan MLflow karena menyediakan cara yang dapat diskalakan, sinkron, dan ringan untuk menjalankan model untuk inferensi.

Di sisi lain, titik akhir batch mampu menjalankan inferensi asinkron melalui proses inferensi yang berjalan lama yang dapat menskalakan ke sejumlah besar data. Server MLflow saat ini tidak memiliki kemampuan ini, meskipun kemampuan serupa dapat dicapai dengan menggunakan pekerjaan Spark. Untuk mempelajari selengkapnya tentang titik akhir batch dan model MLflow, lihat Menggunakan model MLflow dalam penyebaran batch.

Bagian yang mengikuti lebih fokus pada model MLflow yang disebarkan ke Titik akhir online Azure Pembelajaran Mesin.

Format input

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 batch1
Format input tensor sebagai daftar berseri JSON (tensor) dan kamus daftar (tensor bernama)
Input tensor diformat seperti dalam API TF Serving

1 Pertimbangkan untuk menggunakan inferensi batch untuk memproses file. Untuk informasi selengkapnya, lihat Menyebarkan model MLflow ke titik akhir batch.

Struktur input

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

Penting

Saran MLflow 2.0: Perhatikan bahwa struktur payload berubah di MLflow 2.0.

Bagian ini memperlihatkan contoh payload yang berbeda dan perbedaan untuk model yang disebarkan di server bawaan MLflow versus server inferensi Azure Pembelajaran Mesin.

Contoh payload untuk 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]
        ]
    }
}

Contoh payload untuk 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]
    ]
}

Contoh payload untuk 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]
        ]
    }
}

Untuk informasi selengkapnya tentang alat penyebaran bawaan MLflow, lihat Alat penyebaran bawaan dalam dokumentasi MLflow.

Menyesuaikan inferensi saat menyebarkan model MLflow

Anda mungkin terbiasa menulis skrip penilaian untuk menyesuaikan bagaimana inferensi dijalankan untuk model kustom Anda. Namun, saat menyebarkan model MLflow ke Azure Pembelajaran Mesin, keputusan tentang bagaimana inferensi harus dijalankan oleh pembuat model (orang yang membangun model), daripada oleh teknisi DevOps (orang yang mencoba menyebarkannya). Setiap kerangka kerja model mungkin secara otomatis menerapkan rutinitas inferensi tertentu.

Pada titik mana pun, jika Anda perlu mengubah bagaimana inferensi model MLflow dijalankan, Anda dapat melakukan salah satu dari dua hal:

  • 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, menggunakan mlflow.autolog atau mlflow.<flavor>.log_model, rasa yang digunakan untuk model memutuskan bagaimana inferensi harus dijalankan dan hasil apa yang dikembalikan model. MLflow tidak memberlakukan perilaku tertentu tentang bagaimana predict() fungsi menghasilkan hasil.

Namun, dalam beberapa kasus, Anda mungkin ingin melakukan beberapa praproses atau pasca-pemrosesan sebelum dan sesudah model Anda dijalankan. Di lain waktu, Anda mungkin ingin mengubah apa yang dikembalikan (misalnya, probabilitas versus 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 untuk pertimbangan performa. Alternatif lain adalah menyesuaikan bagaimana model Anda melakukan inferensi, dengan menggunakan rasa model kustom.

Menyesuaikan inferensi dengan skrip penilaian

Meskipun model MLflow tidak memerlukan skrip penilaian, Anda masih dapat menyediakannya, jika diperlukan. Anda dapat menggunakan skrip penilaian untuk menyesuaikan bagaimana inferensi dijalankan untuk model MLflow. Untuk informasi selengkapnya tentang cara menyesuaikan inferensi, lihat Menyesuaikan penyebaran model MLflow (titik akhir online) dan Menyesuaikan penyebaran model MLflow (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 banyak cara untuk menyebarkan model MLflow ke titik akhir online dan batch. Anda dapat menyebarkan model, menggunakan alat berikut:

  • MLflow SDK
  • Azure Machine Learning CLI
  • SDK Azure Machine Learning untuk Python
  • Studio Azure Machine Learning

Setiap alur kerja memiliki kemampuan yang berbeda, terutama di sekitar jenis komputasi mana yang dapat mereka targetkan. Tabel berikut ini memperlihatkan kemampuan yang berbeda.

Skenario MLflow SDK Azure Pembelajaran Mesin CLI/SDK Studio Azure Machine Learning
Menyebarkan ke titik akhir online terkelola Lihat contoh1 Lihat contoh1 Lihat contoh1
Menyebarkan ke titik akhir online terkelola (dengan skrip penilaian) Tidak didukung3 Lihat contoh Lihat contoh
Menyebarkan ke titik akhir batch Tidak didukung3 Lihat contoh Lihat contoh
Menyebarkan ke titik akhir batch (dengan skrip penilaian) Tidak didukung3 Lihat contoh Lihat contoh
Menyebarkan ke layanan web (ACI/AKS) Dukunganwarisan 2 Tidak didukung2 Tidak didukung2
Menyebarkan ke layanan web (ACI/AKS - dengan skrip penilaian) Tidak didukung3 Dukunganwarisan 2 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 Sebaiknya alihkan ke titik akhir online terkelola sebagai gantinya.

3 MLflow (OSS) tidak memiliki konsep skrip penilaian dan saat ini tidak mendukung eksekusi batch.

Alat penyebaran mana yang akan digunakan?

  • Gunakan MLflow SDK jika kedua kondisi ini berlaku:

    • Anda terbiasa dengan MLflow, atau Anda menggunakan platform yang mendukung MLflow secara asli (seperti Azure Databricks).
    • Anda ingin terus menggunakan serangkaian metode yang sama dari MLflow.
  • Gunakan Azure Pembelajaran Mesin CLI v2 jika salah satu kondisi ini berlaku:

    • Anda lebih terbiasa dengan Azure Pembelajaran Mesin CLI v2.
    • Anda ingin mengotomatiskan penyebaran, menggunakan alur otomatisasi.
    • Anda ingin menyimpan konfigurasi penyebaran di repositori git.
  • Gunakan penyebaran antarmuka pengguna studio Azure Pembelajaran Mesin jika Anda ingin dengan cepat menyebarkan dan menguji model yang dilatih dengan MLflow.