Bagikan melalui


Dari artefak hingga model di MLflow

Artikel berikut menjelaskan perbedaan antara artefak MLflow dan model MLflow, dan cara bertransisi dari satu ke yang lain. Ini juga menjelaskan bagaimana Azure Pembelajaran Mesin menggunakan konsep model MLflow untuk mengaktifkan alur kerja penyebaran yang disederhanakan.

Apa perbedaan antara artefak dan model?

Jika Anda tidak terbiasa dengan MLflow, Anda mungkin tidak menyadari perbedaan antara artefak pengelogan atau file vs. pengelogan model MLflow. Ada beberapa perbedaan mendasar antara keduanya:

Artefak

Artefak adalah file apa pun yang dihasilkan (dan diambil) dari eksekusi atau pekerjaan eksperimen. Artefak dapat mewakili model yang diserialisasikan sebagai file acar, bobot model PyTorch atau TensorFlow, atau bahkan file teks yang berisi koefisien regresi linier. Beberapa artefak juga tidak ada hubungannya dengan model itu sendiri; sebaliknya, mereka dapat berisi konfigurasi untuk menjalankan model, atau informasi praproses, atau data sampel, dan sebagainya. Artefak dapat datang dalam berbagai format.

Anda mungkin sudah mencatat artefak:

filename = 'model.pkl'
with open(filename, 'wb') as f:
  pickle.dump(model, f)

mlflow.log_artifact(filename)

Model

Model dalam MLflow juga merupakan artefak. Namun, kami membuat asumsi yang lebih kuat tentang jenis artefak ini. Asumsi semacam itu memungkinkan kita untuk membuat kontrak yang jelas antara file yang disimpan dan apa artinya. Ketika Anda mencatat model Anda sebagai artefak (file sederhana), Anda perlu tahu apa yang dimaksudkan pembuat model untuk setiap file tersebut sehingga mengetahui cara memuat model untuk inferensi. Sebaliknya, model MLflow dapat dimuat menggunakan kontrak yang ditentukan dalam format MLmodel.

Di Azure Machine Learning, model pengelogan memiliki keuntungan berikut:

  • Anda dapat menyebarkannya ke titik akhir real time atau batch tanpa menyediakan skrip penilaian atau lingkungan.
  • Saat Anda menyebarkan model, penyebaran secara otomatis memiliki swagger yang dihasilkan, dan fitur Uji dapat digunakan di studio Azure Pembelajaran Mesin.
  • Anda dapat menggunakan model secara langsung sebagai input alur.
  • Anda dapat menggunakan dasbor AI Bertanggung Jawab dengan model Anda.

Anda dapat mencatat model dengan menggunakan MLflow SDK:

import mlflow
mlflow.sklearn.log_model(sklearn_estimator, "classifier")

Format MLModel

MLflow mengadopsi format MLModel sebagai cara untuk membuat kontrak antara artefak dan apa yang diwakili. Format MLModel menyimpan aset dalam folder. Di antara aset ini, ada file bernama MLmodel. File ini adalah satu-satunya sumber kebenaran tentang bagaimana sebuah model dapat dimuat dan digunakan.

Cuplikan layar berikut menunjukkan sampel folder model MLflow di studio Azure Pembelajaran Mesin. Model ditempatkan dalam folder bernama credit_defaults_model. Tidak ada persyaratan khusus tentang penamaan folder ini. Folder berisi file di MLmodel antara artefak model lainnya.

A screenshot showing assets of a sample MLflow model, including the MLmodel file.

Kode berikut adalah contoh seperti apa file untuk model visi komputer yang MLmodel dilatih:fastai

MLmodel

artifact_path: classifier
flavors:
  fastai:
    data: model.fastai
    fastai_version: 2.4.1
  python_function:
    data: model.fastai
    env: conda.yaml
    loader_module: mlflow.fastai
    python_version: 3.8.12
model_uuid: e694c68eba484299976b06ab9058f636
run_id: e13da8ac-b1e6-45d4-a9b2-6a0a5cfac537
signature:
  inputs: '[{"type": "tensor",
             "tensor-spec": 
                 {"dtype": "uint8", "shape": [-1, 300, 300, 3]}
           }]'
  outputs: '[{"type": "tensor", 
              "tensor-spec": 
                 {"dtype": "float32", "shape": [-1,2]}
            }]'

Ragam model

Mempertimbangkan banyaknya kerangka kerja pembelajaran mesin yang tersedia untuk digunakan, MLflow memperkenalkan konsep rasa sebagai cara untuk menyediakan kontrak unik untuk bekerja di semua kerangka kerja pembelajaran mesin. Rasa menunjukkan apa yang diharapkan untuk model tertentu yang dibuat dengan kerangka kerja tertentu. Misalnya, TensorFlow memiliki rasanya sendiri, yang menentukan bagaimana model TensorFlow harus dipertahankan dan dimuat. Karena setiap ragam model menunjukkan cara mempertahankan dan memuat model untuk kerangka kerja tertentu, format MLmodel tidak memberlakukan mekanisme serialisasi tunggal yang harus didukung semua model. Keputusan ini memungkinkan setiap rasa untuk menggunakan metode yang memberikan performa terbaik atau dukungan terbaik sesuai dengan praktik terbaiknya—tanpa mengorbankan kompatibilitas dengan standar MLmodel.

Kode berikut adalah contoh bagian flavors untuk fastai model.

flavors:
  fastai:
    data: model.fastai
    fastai_version: 2.4.1
  python_function:
    data: model.fastai
    env: conda.yaml
    loader_module: mlflow.fastai
    python_version: 3.8.12

Tanda tangan model

Tanda tangan model di MLflow adalah bagian penting dari spesifikasi model, karena berfungsi sebagai kontrak data antara model dan server yang menjalankan model. Tanda tangan model juga penting untuk mengurai dan memberlakukan jenis input model pada waktu penyebaran. Jika tanda tangan tersedia, MLflow memberlakukan jenis input saat data dikirimkan ke model Anda. Untuk informasi selengkapnya, lihat Penerapan tanda tangan MLflow.

Tanda tangan ditunjukkan ketika model dicatat, dan tetap ada di bagian signature MLmodel file. Fitur Autolog di MLflow secara otomatis menyimpulkan tanda tangan dengan cara upaya terbaik. Namun, Anda mungkin harus mencatat model secara manual jika tanda tangan yang disimpulkan bukan yang Anda butuhkan. Untuk informasi selengkapnya, lihat Cara mencatat model dengan tanda tangan.

Ada dua jenis tanda tangan:

  • Tanda tangan berbasis kolom: Tanda tangan ini beroperasi pada data tabular. Untuk model dengan jenis tanda tangan ini, MLflow menyediakan pandas.DataFrame objek sebagai input.
  • Tanda tangan berbasis tensor: Tanda tangan ini beroperasi dengan array atau tensor n-dimensi. Model dengan tanda tangan ini dapat mengharapkan untuk menerima numpy.ndarray sebagai input (atau kamus numpy.ndarray dalam hal tensor bernama).

Contoh berikut sesuai dengan model visi komputer yang dilatih dengan fastai. Model ini menerima sekumpulan gambar yang direpresentasikan sebagai tensor bentuk (300, 300, 3) dengan representasi RGB darinya (bilangan bulat tidak bertanda). Model menghasilkan batch prediksi (probabilitas) untuk dua kelas.

MLmodel

signature:
  inputs: '[{"type": "tensor",
             "tensor-spec": 
                 {"dtype": "uint8", "shape": [-1, 300, 300, 3]}
           }]'
  outputs: '[{"type": "tensor", 
              "tensor-spec": 
                 {"dtype": "float32", "shape": [-1,2]}
            }]'

Tip

Azure Pembelajaran Mesin menghasilkan file swagger untuk penyebaran model MLflow dengan tanda tangan yang tersedia. Ini memudahkan pengujian penyebaran menggunakan studio Azure Pembelajaran Mesin.

Lingkungan model

Persyaratan untuk menjalankan model ditentukan dalam file conda.yaml. MLflow dapat secara otomatis mendeteksi dependensi atau Anda dapat menunjukkannya secara manual dengan memanggil mlflow.<flavor>.log_model() metode . Yang terakhir dapat berguna jika pustaka yang disertakan dalam lingkungan Anda bukan pustaka yang ingin Anda gunakan.

Kode berikut adalah contoh lingkungan yang digunakan untuk model yang dibuat dengan fastai kerangka kerja:

conda.yaml

channels:
- conda-forge
dependencies:
- python=3.8.5
- pip
- pip:
  - mlflow
  - astunparse==1.6.3
  - cffi==1.15.0
  - configparser==3.7.4
  - defusedxml==0.7.1
  - fastai==2.4.1
  - google-api-core==2.7.1
  - ipython==8.2.0
  - psutil==5.9.0
name: mlflow-env

Catatan

Apa perbedaan antara lingkungan MLflow dan lingkungan Azure Pembelajaran Mesin?

Sementara lingkungan MLflow beroperasi pada tingkat model, lingkungan Azure Pembelajaran Mesin beroperasi di tingkat ruang kerja (untuk lingkungan terdaftar) atau pekerjaan/penyebaran (untuk lingkungan anonim). Saat menyebarkan model MLflow di Azure Machine Learning, lingkungan model dibuat dan digunakan untuk penyebaran. Atau, Anda dapat mengambil alih perilaku ini dengan Azure Pembelajaran Mesin CLI v2 dan menyebarkan model MLflow menggunakan lingkungan Azure Pembelajaran Mesin tertentu.

Memprediksi fungsi

Semua model MLflow berisi fungsi predict. Fungsi ini dipanggil ketika model disebarkan menggunakan pengalaman penyebaran tanpa kode. predict Apa yang dikembalikan fungsi (misalnya, kelas, probabilitas, atau prakiraan) bergantung pada kerangka kerja (yaitu, rasa) yang digunakan untuk pelatihan. Baca dokumentasi setiap rasa untuk mengetahui apa yang dikembalikan.

Dalam kasus yang sama, Anda mungkin perlu menyesuaikan fungsi ini predict untuk mengubah cara inferensi dijalankan. Dalam kasus seperti itu, Anda perlu mencatat model dengan perilaku yang berbeda dalam metode prediksi atau mencatat rasa model kustom.

Alur kerja untuk memuat model MLflow

Anda dapat memuat model yang dibuat sebagai model MLflow dari beberapa lokasi, termasuk:

  • langsung dari eksekusi tempat model dicatat
  • dari sistem file tempat model disimpan
  • dari registri model tempat model didaftarkan.

MLflow menyediakan cara yang konsisten untuk memuat model ini terlepas dari lokasinya.

Ada dua alur kerja untuk memuat model:

  • Muat kembali objek dan jenis yang sama yang dicatat: Anda dapat memuat model menggunakan MLflow SDK dan mendapatkan instans model dengan jenis milik pustaka pelatihan. Misalnya, model ONNX mengembalikan beberapa ModelProto saat model pohon keputusan yang dilatih dengan scikit-learn mengembalikan DecisionTreeClassifier objek. Gunakan mlflow.<flavor>.load_model() untuk memuat kembali objek dan jenis model yang sama yang dicatat.

  • Muat kembali model untuk menjalankan inferensi: Anda dapat memuat model menggunakan MLflow SDK dan mendapatkan pembungkus di mana MLflow menjamin bahwa akan predict ada fungsi. Tidak masalah rasa mana yang Anda gunakan, setiap model MLflow memiliki predict fungsi. Selain itu, MLflow menjamin bahwa fungsi ini dapat dipanggil dengan menggunakan argumen jenis pandas.DataFrame, , numpy.ndarrayatau dict[string, numpyndarray] (tergantung pada tanda tangan model). MLflow menangani konversi jenis ke jenis input yang diharapkan model. Gunakan mlflow.pyfunc.load_model() untuk memuat kembali model untuk menjalankan inferensi.