Bagikan melalui


Peluncuran progresif model MLflow ke Titik Akhir Online

Dalam artikel ini, Anda mempelajari bagaimana Anda dapat memperbarui dan menyebarkan model MLflow secara progresif ke Titik Akhir Online tanpa menyebabkan gangguan layanan. Anda menggunakan penyebaran biru-hijau, juga dikenal sebagai strategi peluncuran yang aman, untuk memperkenalkan versi baru layanan web ke produksi. Strategi ini akan memungkinkan Anda meluncurkan versi baru layanan web Anda ke subset kecil pengguna atau permintaan sebelum meluncurkannya sepenuhnya.

Tentang contoh ini

Titik Akhir Online memiliki konsep Titik Akhir dan Penyebaran. Titik akhir mewakili API yang digunakan pelanggan untuk menggunakan model, sementara penyebaran menunjukkan implementasi spesifik DARI API tersebut. Perbedaan ini memungkinkan pengguna untuk memisahkan API dari implementasi dan mengubah implementasi yang mendasar tanpa memengaruhi konsumen. Contoh ini akan menggunakan konsep tersebut untuk memperbarui model yang disebarkan di titik akhir tanpa memperkenalkan gangguan layanan.

Model yang akan kami sebarkan didasarkan pada Himpunan Data Penyakit Jantung UCI. Database berisi 76 atribut, tetapi kami menggunakan subset 14 di antaranya. Model ini mencoba memprediksi adanya penyakit jantung pada pasien. Bilangan bulat bernilai dari 0 (tanpa kehadiran) hingga 1 (kehadiran). Ini telah dilatih menggunakan pengklasifikasi XGBBoost dan semua pra-pemrosesan yang diperlukan telah dipaketkan sebagai scikit-learn alur, menjadikan model ini alur end-to-end yang beralih dari data mentah ke prediksi.

Informasi dalam artikel ini didasarkan pada sampel kode yang terkandung dalam repositori azureml-examples. Untuk menjalankan perintah secara lokal tanpa harus menyalin/menempelkan file, kloning repositori, lalu ubah direktori menjadi sdk/using-mlflow/deploy.

Ikuti di Jupyter Notebooks

Anda bisa mengikuti sampel ini di buku catatan berikut. Di repositori kloning, buka notebook: mlflow_sdk_online_endpoints_progresive.ipynb.

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.
  • 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 yang memungkinkan Microsoft.Machine Pembelajaran Services/workspaces/onlineEndpoints/*. Untuk informasi selengkapnya, lihat Mengelola akses ke ruang kerja Azure Machine Learning.

Selain itu, Anda harus:

Menyambungkan ke ruang kerja Anda

Pertama, mari kita sambungkan ke ruang kerja Azure Pembelajaran Mesin tempat kita akan bekerja.

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

Mendaftarkan model di registri

Pastikan model Anda terdaftar di registri Azure Machine Learning. Penyebaran model yang tidak terdaftar tidak didukung di Azure Machine Learning. Anda dapat mendaftarkan model baru menggunakan MLflow SDK:

MODEL_NAME='heart-classifier'
az ml model create --name $MODEL_NAME --type "mlflow_model" --path "model"

Membuat titik akhir online

Titik akhir online adalah titik akhir yang digunakan untuk inferensi online (real-time). Titik akhir online berisi penyebaran yang siap menerima data dari klien dan dapat mengirim respons kembali secara real time.

Kita akan mengeksploitasi fungsionalitas ini dengan menyebarkan beberapa versi model yang sama di bawah titik akhir yang sama. Namun, penyebaran baru akan menerima 0% dari lalu lintas saat mengemis. Setelah kami yakin tentang model baru agar berfungsi dengan benar, kami akan secara progresif memindahkan lalu lintas dari satu penyebaran ke penyebaran lainnya.

  1. Titik akhir memerlukan nama, yang harus unik di wilayah yang sama. Mari kita pastikan untuk membuat yang tidak ada:

    ENDPOINT_SUFIX=$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w ${1:-5} | head -n 1)
    ENDPOINT_NAME="heart-classifier-$ENDPOINT_SUFIX"
    
  2. Mengonfigurasi titik akhir

    endpoint.yml

    $schema: https://azuremlschemas.azureedge.net/latest/managedOnlineEndpoint.schema.json
    name: heart-classifier-edp
    auth_mode: key
    
  3. Buat titik akhir:

    az ml online-endpoint create -n $ENDPOINT_NAME -f endpoint.yml
    
  4. Mendapatkan rahasia autentikasi untuk titik akhir.

    ENDPOINT_SECRET_KEY=$(az ml online-endpoint get-credentials -n $ENDPOINT_NAME | jq -r ".accessToken")
    

Membuat penyebaran biru

Sejauh ini, titik akhir kosong. Tidak ada penyebaran di atasnya. Mari kita buat yang pertama dengan menyebarkan model yang sama dengan yang kita kerjakan sebelumnya. Kami akan menyebut penyebaran ini "default", mewakili "penyebaran biru" kami.

  1. Konfigurasikan penyebaran

    blue-deployment.yml

    $schema: https://azuremlschemas.azureedge.net/latest/managedOnlineDeployment.schema.json
    name: default
    endpoint_name: heart-classifier-edp
    model: azureml:heart-classifier@latest
    instance_type: Standard_DS2_v2
    instance_count: 1
    
  2. Membuat penyebaran

    az ml online-deployment create --endpoint-name $ENDPOINT_NAME -f blue-deployment.yml --all-traffic
    

    Jika titik akhir Anda tidak memiliki konektivitas keluar, gunakan kemasan model (pratinjau) dengan menyertakan bendera --with-package:

    az ml online-deployment create --with-package --endpoint-name $ENDPOINT_NAME -f blue-deployment.yml --all-traffic
    

    Tip

    Kami mengatur bendera --all-traffic dalam perintah buat, yang akan menetapkan semua lalu lintas ke penyebaran baru.

  3. Menetapkan semua lalu lintas ke penyebaran

    Sejauh ini, titik akhir memiliki satu penyebaran, tetapi tidak ada lalu lintas yang ditetapkan untuk itu. Mari kita tetapkan.

    Langkah ini tidak diperlukan di Azure CLI karena kami menggunakan --all-traffic selama pembuatan.

  4. Perbarui konfigurasi titik akhir:

    Langkah ini tidak diperlukan di Azure CLI karena kami menggunakan --all-traffic selama pembuatan.

  5. Membuat input sampel untuk menguji penyebaran

    sample.yml

    {
        "input_data": {
            "columns": [
                "age",
                "sex",
                "cp",
                "trestbps",
                "chol",
                "fbs",
                "restecg",
                "thalach",
                "exang",
                "oldpeak",
                "slope",
                "ca",
                "thal"
            ],
            "data": [
                [ 48, 0, 3, 130, 275, 0, 0, 139, 0, 0.2, 1, 0, "normal" ]
            ]
        }
    }
    
  6. Menguji penyebarannya

    az ml online-endpoint invoke --name $ENDPOINT_NAME --request-file sample.json
    

Membuat penyebaran hijau di bawah titik akhir

Mari kita bayangkan bahwa ada versi baru dari model yang dibuat oleh tim pengembangan dan siap untuk berada dalam produksi. Pertama-tama kita dapat mencoba menerbangkan model ini dan setelah yakin, kita dapat memperbarui titik akhir untuk merutekan lalu lintas ke dalamnya.

  1. Mendaftarkan versi model baru

    MODEL_NAME='heart-classifier'
    az ml model create --name $MODEL_NAME --type "mlflow_model" --path "model"
    

    Mari kita dapatkan nomor versi model baru:

    VERSION=$(az ml model show -n heart-classifier --label latest | jq -r ".version")
    
  2. Mengonfigurasi penyebaran baru

    green-deployment.yml

    $schema: https://azuremlschemas.azureedge.net/latest/managedOnlineDeployment.schema.json
    name: xgboost-model
    endpoint_name: heart-classifier-edp
    model: azureml:heart-classifier@latest
    instance_type: Standard_DS2_v2
    instance_count: 1
    

    Kami akan menamai penyebaran sebagai berikut:

    GREEN_DEPLOYMENT_NAME="xgboost-model-$VERSION"
    
  3. Membuat penyebaran baru

    az ml online-deployment create -n $GREEN_DEPLOYMENT_NAME --endpoint-name $ENDPOINT_NAME -f green-deployment.yml
    

    Jika titik akhir Anda tidak memiliki konektivitas keluar, gunakan kemasan model (pratinjau) dengan menyertakan bendera --with-package:

    az ml online-deployment create --with-package -n $GREEN_DEPLOYMENT_NAME --endpoint-name $ENDPOINT_NAME -f green-deployment.yml
    
  4. Menguji penyebaran tanpa mengubah lalu lintas

    az ml online-endpoint invoke --name $ENDPOINT_NAME --deployment-name $GREEN_DEPLOYMENT_NAME --request-file sample.json
    

    Tip

    Perhatikan bagaimana sekarang kami menunjukkan nama penyebaran yang ingin kami panggil.

Memperbarui lalu lintas secara progresif

Salah satu kami yakin dengan penyebaran baru, kami dapat memperbarui lalu lintas untuk merutekan beberapa darinya ke penyebaran baru. Lalu lintas dikonfigurasi pada tingkat titik akhir:

  1. Konfigurasikan lalu lintas:

    Langkah ini tidak diperlukan di Azure CLI

  2. Memperbarui titik akhir

    az ml online-endpoint update --name $ENDPOINT_NAME --traffic "default=90 $GREEN_DEPLOYMENT_NAME=10"
    
  3. Jika Anda memutuskan untuk mengalihkan seluruh lalu lintas ke penyebaran baru, perbarui semua lalu lintas:

    Langkah ini tidak diperlukan di Azure CLI

  4. Memperbarui titik akhir

    az ml online-endpoint update --name $ENDPOINT_NAME --traffic "default=0 $GREEN_DEPLOYMENT_NAME=100"
    
  5. Karena penyebaran lama tidak menerima lalu lintas apa pun, Anda dapat menghapusnya dengan aman:

    az ml online-deployment delete --endpoint-name $ENDPOINT_NAME --name default
    

    Tip

    Perhatikan bahwa pada titik ini, "penyebaran biru" sebelumnya telah dihapus dan "penyebaran hijau" baru telah menggantikan "penyebaran biru".

Membersihkan sumber daya

az ml online-endpoint delete --name $ENDPOINT_NAME --yes

Penting

Perhatikan bahwa menghapus titik akhir juga menghapus semua penyebaran di bawahnya.

Langkah berikutnya