Membuat paket model (pratinjau)

Paket model adalah kemampuan di Azure Pembelajaran Mesin yang memungkinkan Anda mengumpulkan semua dependensi yang diperlukan untuk menyebarkan model pembelajaran mesin ke platform penyajian. Membuat paket sebelum menyebarkan model menyediakan penyebaran yang kuat dan andal dan alur kerja MLOps yang lebih efisien. Paket dapat dipindahkan di seluruh ruang kerja dan bahkan di luar Azure Pembelajaran Mesin.

Penting

Fitur ini masih dalam pratinjau umum. Versi pratinjau ini disediakan tanpa perjanjian tingkat layanan, dan tidak disarankan untuk beban kerja produksi. Fitur tertentu mungkin tidak didukung atau mungkin memiliki kemampuan terbatas.

Untuk mengetahui informasi selengkapnya, lihat Ketentuan Penggunaan Tambahan untuk Pratinjau Microsoft Azure.

Dalam artikel ini, Anda mempelajari cara mengemas model untuk penyebaran.

Prasyarat

Sebelum mengikuti langkah-langkah dalam artikel ini, pastikan Anda memiliki prasyarat berikut:

  • Langganan Azure. Jika Anda tidak memiliki langganan Azure, buat akun gratis sebelum Anda memulai. Coba versi gratis atau berbayar Azure Machine Learning.

  • Ruang kerja Azure Machine Learning. Jika Anda tidak memilikinya, gunakan langkah-langkah dalam artikel Cara mengelola ruangkerja untuk membuatnya.

  • Kontrol akses berbasis peran Azure (Azure RBAC) digunakan untuk memberikan akses ke operasi di Azure Machine Learning. Untuk melakukan langkah-langkah dalam artikel ini, akun pengguna Anda harus diberi peran pemilik atau kontributor untuk ruang kerja Azure Pembelajaran Mesin, atau peran kustom. Untuk informasi selengkapnya, lihat Mengelola akses ke ruang kerja Azure Machine Learning.

Tentang contoh ini

Dalam contoh ini, Anda akan mempelajari cara mengemas model di Azure Pembelajaran Mesin.

Mengklon repositori

Contoh dalam artikel ini didasarkan pada sampel kode yang terkandung dalam repositori azureml-examples . Untuk menjalankan perintah secara lokal tanpa harus menyalin/menempelkan YAML dan file lainnya, pertama-tama kloning repositori lalu ubah direktori ke folder:

git clone https://github.com/Azure/azureml-examples --depth 1
cd azureml-examples/cli

Bagian ini menggunakan contoh di titik akhir folder /online/deploy-packages/custom-model.

Menyambungkan ke ruang kerja Anda

Koneksi ke ruang kerja Azure Pembelajaran Mesin tempat Anda akan melakukan pekerjaan Anda.

az account set --subscription <subscription>
az configure --defaults workspace=<workspace> group=<resource-group> location=<location>

Mengemas model

Anda dapat membuat paket model secara eksplisit untuk memungkinkan Anda mengontrol bagaimana operasi pengemasan dilakukan. Gunakan alur kerja ini ketika:

  • Anda ingin menyesuaikan cara paket model dibuat.
  • Anda ingin menyebarkan paket model di luar Azure Pembelajaran Mesin.
  • Anda ingin menggunakan paket model dalam alur kerja MLOps.

Anda dapat membuat paket model dengan menentukan:

  • Model ke paket: Setiap paket model hanya dapat berisi satu model. Azure Pembelajaran Mesin tidak mendukung pengemasan beberapa model di bawah paket model yang sama.
  • Lingkungan dasar: Lingkungan digunakan untuk menunjukkan gambar dasar, dan dalam paket Python bergantung pada kebutuhan model Anda. Untuk model MLflow, Azure Pembelajaran Mesin secara otomatis menghasilkan lingkungan dasar. Untuk model kustom, Anda perlu menentukannya.
  • Teknologi penyajian: Tumpukan inferensi yang digunakan untuk menjalankan model.

Mendaftarkan model

Paket model mengharuskan model didaftarkan di ruang kerja Anda atau di registri Azure Pembelajaran Mesin. Dalam contoh ini, Anda sudah memiliki salinan lokal model di repositori, jadi Anda hanya perlu menerbitkan model ke registri di ruang kerja. Anda dapat melewati bagian ini jika model yang coba Anda sebarkan sudah terdaftar.

MODEL_NAME='sklearn-regression'
MODEL_PATH='model'
az ml model create --name $MODEL_NAME --path $MODEL_PATH --type custom_model

Membuat lingkungan dasar

Lingkungan dasar digunakan untuk menunjukkan gambar dasar dan dependensi paket Python model. Model kami mengharuskan paket berikut digunakan seperti yang ditunjukkan dalam file conda:

conda.yaml

name: model-env
channels:
  - conda-forge
dependencies:
  - python=3.9
  - numpy=1.23.5
  - pip=23.0.1
  - scikit-learn=1.2.2
  - scipy=1.10.1
  - xgboost==1.3.3

Catatan

Bagaimana lingkungan dasar berbeda dari lingkungan yang Anda gunakan untuk penyebaran model ke titik akhir online dan batch? Saat Anda menyebarkan model ke titik akhir, lingkungan Anda perlu menyertakan dependensi model dan paket Python yang diperlukan agar titik akhir online terkelola berfungsi. Ini membawa proses manual ke dalam penyebaran, di mana Anda harus menggabungkan persyaratan model Anda dengan persyaratan platform penyajian. Di sisi lain, penggunaan paket model menghapus gesekan ini, karena paket yang diperlukan untuk server inferensi akan secara otomatis disuntikkan ke dalam paket model pada waktu pengemasan.

Buat lingkungan sebagai berikut:

Membuat definisi lingkungan:

sklearn-regression-env.yml

$schema: https://azuremlschemas.azureedge.net/latest/environment.schema.json
name: sklearn-regression-env
image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu22.04
conda_file: conda.yaml
description: An environment for models built with XGBoost and Scikit-learn.

Kemudian buat lingkungan:

az ml environment create -f environment/sklearn-regression-env.yml

Membuat spesifikasi paket

Anda dapat membuat paket model di Azure Pembelajaran Mesin, menggunakan Azure CLI atau Azure Pembelajaran Mesin SDK untuk Python. Spesifikasi paket kustom mendukung atribut berikut:

Atribut Tipe Deskripsi Wajib diisi
target_environment str Nama paket yang akan dibuat. Hasil operasi paket adalah lingkungan di Azure Pembelajaran Mesin. Ya
base_environment_source object Gambar dasar yang digunakan untuk membuat paket tempat dependensi untuk model ditentukan. Ya, kecuali modelnya adalah MLflow.
base_environment_source.type str Jenis gambar dasar. Hanya menggunakan lingkungan lain karena gambar dasar didukung (type: environment_asset) didukung.
base_environment_source.resource_id str ID sumber daya lingkungan dasar yang akan digunakan. Gunakan format azureml:<name>:<version> atau id sumber daya yang panjang.
inferencing_server object Server inferensi yang akan digunakan. Ya
inferencing_server.type azureml_online
custom
Gunakan azureml_online untuk server inferensi Azure Pembelajaran Mesin, atau custom untuk server online kustom seperti penyajian TensorFlow atau Torch Serve. Ya
inferencing_server.code_configuration object Konfigurasi kode dengan rutinitas inferensi. Ini harus berisi setidaknya satu file Python dengan metode init dan run. Ya, kecuali modelnya adalah MLflow.
model_configuration object Konfigurasi model. Gunakan atribut ini untuk mengontrol bagaimana model dikemas dalam gambar yang dihasilkan. No
model_configuration.mode download
copy
Tunjukkan bagaimana model akan ditempatkan dalam paket. Nilai yang mungkin adalah download (default) dan copy. Gunakan download saat Anda ingin model diunduh dari registri model pada waktu penyebaran. Opsi ini membuat gambar docker yang lebih kecil karena model tidak disertakan di dalamnya. Gunakan copy saat Anda ingin memutuskan sambungan gambar dari Azure Pembelajaran Mesin. Model akan disalin di dalam gambar docker pada waktu paket. copy tidak didukung pada ruang kerja berkemampuan tautan privat. No
  1. Buat spesifikasi paket sebagai berikut:

    package-moe.yml

    $schema: http://azureml/sdk-2-0/ModelVersionPackage.json
    base_environment_source:
        type: environment_asset
        resource_id: azureml:sklearn-regression-env:1
    target_environment: sklearn-regression-online-pkg
    inferencing_server: 
        type: azureml_online
        code_configuration:
          code: src
          scoring_script: score.py
    
  2. Mulai operasi paket model:

    az ml model package -n $MODEL_NAME -v $MODEL_VERSION --file package-moe.yml
    
  3. Hasil dari operasi paket adalah lingkungan.

Mengemas model yang memiliki dependensi dalam umpan Python privat

Paket model dapat mengatasi dependensi Python yang tersedia di umpan privat. Untuk menggunakan kemampuan ini, Anda perlu membuat koneksi dari ruang kerja Anda ke umpan dan menentukan konfigurasi token PAT. Kode Python berikut menunjukkan bagaimana Anda dapat mengonfigurasi ruang kerja tempat Anda menjalankan operasi paket.

from azure.ai.ml.entities import WorkspaceConnection
from azure.ai.ml.entities import PatTokenConfiguration

# fetching secrets from env var to secure access, these secrets can be set outside or source code
git_pat = os.environ["GIT_PAT"]

credentials = PatTokenConfiguration(pat=git_pat)

ws_connection = WorkspaceConnection(
    name="<workspace_connection_name>",
    target="<git_url>",
    type="git",
    credentials=credentials,
)

ml_client.connections.create_or_update(ws_connection)

Setelah koneksi dibuat, buat paket model seperti yang dijelaskan di bagian untuk Paket model. Dalam contoh berikut, lingkungan dasar paket menggunakan umpan privat untuk dependensi barPython , seperti yang ditentukan dalam file conda berikut:

conda.yml

name: foo
channels:
  - defaults
dependencies:
  - python
  - pip
  - pip:
    - --extra-index-url <python_feed_url>
    - bar

Jika Anda menggunakan model MLflow, dependensi model ditunjukkan di dalam model itu sendiri, dan karenanya lingkungan dasar tidak diperlukan. Sebagai gantinya, tentukan dependensi umpan privat saat mencatat model, seperti yang dijelaskan dalam Model pengelogan dengan tanda tangan, lingkungan, atau sampel kustom.

Mengemas model yang dihosting dalam registri

Paket model menyediakan cara mudah untuk mengumpulkan dependensi sebelum penyebaran. Namun, ketika model dihosting di registri, target penyebaran biasanya merupakan ruang kerja lain. Saat membuat paket dalam penyiapan ini, gunakan target_environment properti untuk menentukan lokasi lengkap tempat Anda ingin paket model dibuat, bukan hanya namanya.

Kode berikut membuat paket t5-base model dari registri:

  1. Koneksi ke registri tempat model berada dan ruang kerja tempat Anda memerlukan paket model untuk dibuat:

    az login
    
  2. Dapatkan referensi ke model yang ingin Anda kemas. Dalam hal ini kita mengemas model t5-base dari azureml registri.

    MODEL_NAME="t5-base"
    MODEL_VERSION=$(az ml model show --name $MODEL_NAME --label latest --registry-name azureml | jq .version -r)
    
  3. Mengonfigurasi spesifikasi paket. Karena model yang ingin kita kemas adalah MLflow, lingkungan dasar dan skrip penilaian bersifat opsional.

    package.yml

    $schema: http://azureml/sdk-2-0/ModelVersionPackage.json
    target_environment: pkg-t5-base-online
    inferencing_server: 
        type: azureml_online
    
  4. Mulai operasi untuk membuat paket model:

    az ml model package --name $MODEL_NAME \
                        --version $MODEL_VERSION \
                        --registry-name azureml \
                        --file package.yml
    
  5. Paket sekarang dibuat di ruang kerja target dan siap untuk disebarkan.

Model paket untuk disebarkan di luar Azure Pembelajaran Mesin

Paket model dapat disebarkan di luar Azure Pembelajaran Mesin jika diperlukan. Untuk menjamin portabilitas, Anda hanya perlu memastikan bahwa konfigurasi model dalam paket Anda memiliki mode yang diatur ke copy sehingga model itu sendiri disalin di dalam gambar docker yang dihasilkan alih-alih direferensikan dari registri model di Azure Pembelajaran Mesin.

Kode berikut menunjukkan cara mengonfigurasi copy dalam paket model:

package-external.yml

$schema: http://azureml/sdk-2-0/ModelVersionPackage.json
base_environment_source:
    type: environment_asset
    resource_id: azureml:sklearn-regression-env:1
target_environment: sklearn-regression-docker-pkg
inferencing_server: 
    type: azureml_online
    code_configuration:
      code: src
      scoring_script: score.py
model_configuration:
  mode: copy

Langkah selanjutnya