Peluncuran yang aman untuk titik akhir online terkelola menggunakan Python SDK v2 (pratinjau)

BERLAKU UNTUK: Python SDK azure-ai-ml v2 (pratinjau)

Penting

SDK v2 saat ini dalam pratinjau publik. Versi pratinjau 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 menyebarkan versi baru model tanpa menyebabkan gangguan apa pun. Dengan penyebaran biru-hijau atau peluncuran yang aman, sebuah pendekatan di mana versi baru layanan web diperkenalkan ke produksi dengan meluncurkan perubahan pada sebagian kecil pengguna/permintaan sebelum meluncurkannya sepenuhnya. Artikel ini mengasumsikan Anda menggunakan titik akhir online; untuk informasi selengkapnya, lihat titik akhir Azure Machine Learning.

Dalam artikel ini, Anda akan mempelajari cara:

  • Menyebarkan titik akhir online yang disebut "biru" yang melayani model versi 1.
  • Menskalakan penyebaran ini sehingga dapat menangani lebih banyak permintaan.
  • Menyebarkan model versi 2 ke titik akhir yang disebut “hijau” yang tidak menerima lalu lintas langsung.
  • Menguji penyebaran hijau dalam isolasi.
  • Mengirim 10% lalu lintas langsung ke penyebaran hijau.
  • Sepenuhnya memotong semua lalu lintas langsung ke penyebaran hijau.
  • Menghapus penyebaran biru v1 yang sekarang tidak digunakan.

Prasyarat

  • Jika Anda tidak memiliki langganan Azure, buat akun gratis sebelum Anda memulai. Coba versi gratis atau berbayar Azure Machine Learning sekarang.
  • SDK Azure Machine Learning v2 untuk Python.
  • Anda harus memiliki grup sumber daya Azure dan Anda (atau perwakilan layanan yang Anda gunakan) harus memiliki akses Kontributor ke grup sumber daya tersebut.
  • Anda harus memiliki ruang kerja Azure Machine Learning.
  • Untuk menyebarkan secara lokal, Anda harus menginstal Docker Engine di komputer lokal Anda. Kami sangat merekomendasikan opsi ini, jadi lebih mudah untuk menghapus masalah.

Klon contoh repositori

Untuk menjalankan contoh pelatihan, pertama-tama kloning repositori contoh dan ubah ke direktori sdk:

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

Tip

Gunakan --depth 1 untuk mengkloning hanya penerapan terbaru ke repositori, yang mengurangi waktu untuk menyelesaikan operasi.

Sambungkan ke ruang kerja Azure Machine Learning

Ruang kerja adalah sumber daya tingkat teratas untuk Azure Machine Learning, menyediakan tempat terpusat untuk bekerja dengan semua artefak yang Anda buat saat Anda menggunakan Azure Machine Learning. Di bagian ini, kita akan menyambungkan ke ruang kerja tempat Anda akan melakukan tugas penyebaran.

  1. Impor pustaka yang diperlukan:

    # import required libraries
    from azure.ai.ml import MLClient
    from azure.ai.ml.entities import (
        ManagedOnlineEndpoint,
        ManagedOnlineDeployment,
        Model,
        Environment,
        CodeConfiguration,
    )
    from azure.identity import DefaultAzureCredential
    
  2. Konfigurasikan detail ruang kerja dan dapatkan handel ke ruang kerja:

    Untuk terhubung ke ruang kerja, Anda memerlukan parameter pengidentifikasi - langganan, grup sumber daya, dan nama ruang kerja. Anda akan menggunakan detail ini di MLClient dari azure.ai.ml untuk menangani ruang kerja Azure Machine Learning yang diperlukan. Contoh ini menggunakan autentikasi Azure default.

    # enter details of your AzureML workspace
    subscription_id = "<SUBSCRIPTION_ID>"
    resource_group = "<RESOURCE_GROUP>"
    workspace = "<AZUREML_WORKSPACE_NAME>"
    
    # get a handle to the workspace
    ml_client = MLClient(
        DefaultAzureCredential(), subscription_id, resource_group, workspace
    )
    

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

Untuk membuat titik akhir online, kita akan menggunakan ManagedOnlineEndpoint. Kelas ini memungkinkan pengguna untuk mengonfigurasi aspek-aspek utama berikut:

  • name - Nama titik akhir. Harus unik di tingkat wilayah Azure
  • auth_mode - Metode autentikasi untuk titik akhir. Autentikasi berbasis kunci dan autentikasi berbasis token Azure ML didukung. Autentikasi berbasis kunci tidak kedaluwarsa, tetapi autentikasi berbasis token Azure ML kedaluwarsa. Nilai yang mungkin adalah key atau aml_token.
  • identity- Konfigurasi identitas terkelola untuk mengakses sumber daya Azure untuk penyediaan titik akhir dan inferensi.
    • type- Jenis identitas terkelola. Azure Machine Learning mendukung identitas system_assigned atau user_assigned.
    • user_assigned_identities - Daftar (larik) ID sumber daya yang berkualifikasi penuh dari identitas yang ditetapkan pengguna. Properti ini diperlukan jika identity.type adalah user_assigned.
  • description- Deskripsi titik akhir.
  1. Konfigurasikan titik akhir:

    # Creating a unique endpoint name with current datetime to avoid conflicts
    import datetime
    
    online_endpoint_name = "endpoint-" + datetime.datetime.now().strftime("%m%d%H%M%f")
    
    # create an online endpoint
    endpoint = ManagedOnlineEndpoint(
        name=online_endpoint_name,
        description="this is a sample online endpoint",
        auth_mode="key",
        tags={"foo": "bar"},
    )
    
  2. Membuat titik akhir:

    Dengan menggunakan MLClient yang dibuat sebelumnya, kita sekarang akan membuat Titik Akhir di ruang kerja. Perintah ini akan memulai pembuatan titik akhir dan mengembalikan respons konfirmasi saat pembuatan titik akhir berlanjut.

    ml_client.begin_create_or_update(endpoint)
    

Membuat penyebaran 'biru'

Penyebaran adalah kumpulan sumber daya yang diperlukan untuk menghosting model yang melakukan inferensi aktual. Kita akan membuat penyebaran untuk titik akhir kita menggunakan kelas ManagedOnlineDeployment. Kelas ini memungkinkan pengguna untuk mengonfigurasi aspek-aspek utama berikut.

Aspek utama penyebaran

  • name - Nama penyebaran.
  • endpoint_name - Nama titik akhir untuk membuat penyebaran di bawah ini.
  • model - Model yang digunakan untuk penyebaran. Nilai ini dapat berupa referensi ke model berversi yang ada di ruang kerja atau spesifikasi model sebaris.
  • environment - Lingkungan yang digunakan untuk penyebaran. Nilai ini dapat berupa referensi ke lingkungan versi yang ada di ruang kerja atau spesifikasi lingkungan inline.
  • code_configuration - konfigurasi untuk kode sumber dan skrip penilaian
    • path- Jalur lokal ke direktori kode sumber untuk menilai model
    • scoring_script - Jalur relatif ke file penilaian di direktori kode sumber
  • instance_type - Ukuran VM untuk digunakan untuk penyebaran. Untuk daftar ukuran yang didukung, lihat Daftar SKU titik akhir online terkelola.
  • instance_count - Jumlah instans yang digunakan untuk penyebaran
  1. Mengonfigurasi penyebaran biru:

    # create blue deployment
    model = Model(path="../model-1/model/sklearn_regression_model.pkl")
    env = Environment(
        conda_file="../model-1/environment/conda.yml",
        image="mcr.microsoft.com/azureml/openmpi3.1.2-ubuntu18.04:20210727.v1",
    )
    
    blue_deployment = ManagedOnlineDeployment(
        name="blue",
        endpoint_name=online_endpoint_name,
        model=model,
        environment=env,
        code_configuration=CodeConfiguration(
            code="../model-1/onlinescoring", scoring_script="score.py"
        ),
        instance_type="Standard_F2s_v2",
        instance_count=1,
    )
    
  2. Membuat penyebaran:

    Dengan menggunakan MLClient yang dibuat sebelumnya, kita sekarang akan membuat penyebaran di ruang kerja. Perintah ini akan memulai pembuatan penyebaran dan mengembalikan respons konfirmasi saat pembuatan penyebaran berlanjut.

    ml_client.begin_create_or_update(blue_deployment)
    
    # blue deployment takes 100 traffic
    endpoint.traffic = {"blue": 100}
    ml_client.begin_create_or_update(endpoint)
    

Menguji titik akhir dengan data sampel

Dengan menggunakan MLClient yang dibuat sebelumnya, kita akan mendapatkan handel ke titik akhir. Titik akhir dapat dipanggil menggunakan perintah invoke dengan parameter berikut:

  • endpoint_name - Nama titik akhir
  • request_file - File dengan data permintaan
  • deployment_name - Nama penyebaran khusus untuk diuji di titik akhir

Kami akan mengirimkan permintaan sampel menggunakan file json.

# test the blue deployment with some sample data
ml_client.online_endpoints.invoke(
    endpoint_name=online_endpoint_name,
    deployment_name="blue",
    request_file="../model-1/sample-request.json",
)

Menskalakan penyebaran

Dengan menggunakan MLClient yang dibuat sebelumnya, kita akan mendapatkan handel ke penyebaran. Penyebaran dapat diskalakan dengan meningkatkan atau mengurangi instance_count.

# scale the deployment
blue_deployment = ml_client.online_deployments.get(
    name="blue", endpoint_name=online_endpoint_name
)
blue_deployment.instance_count = 2
ml_client.online_deployments.begin_create_or_update(blue_deployment)

Mendapatkan detail titik akhir

# Get the details for online endpoint
endpoint = ml_client.online_endpoints.get(name=online_endpoint_name)

# existing traffic details
print(endpoint.traffic)

# Get the scoring URI
print(endpoint.scoring_uri)

Menyebarkan model baru, tetapi belum mengirimkan lalu lintas

Buat penyebaran baru bernama hijau:

# create green deployment
model2 = Model(path="../model-2/model/sklearn_regression_model.pkl")
env2 = Environment(
    conda_file="../model-2/environment/conda.yml",
    image="mcr.microsoft.com/azureml/openmpi3.1.2-ubuntu18.04:20210727.v1",
)

green_deployment = ManagedOnlineDeployment(
    name="green",
    endpoint_name=online_endpoint_name,
    model=model2,
    environment=env2,
    code_configuration=CodeConfiguration(
        code="../model-2/onlinescoring", scoring_script="score.py"
    ),
    instance_type="Standard_F2s_v2",
    instance_count=1,
)
# use MLClient to create green deployment
ml_client.begin_create_or_update(green_deployment)

Menguji penyebaran 'hijau'

Meskipun hijau memiliki 0% lalu lintas yang dialokasikan, Anda masih dapat memanggil titik akhir dan penyebaran dengan file json.

ml_client.online_endpoints.invoke(
    endpoint_name=online_endpoint_name,
    deployment_name="green",
    request_file="../model-2/sample-request.json",
)
  1. Menguji penyebaran baru dengan persentase kecil lalu lintas langsung:

    Setelah Anda menguji penyebaran hijau, alokasikan sebagian kecil lalu lintas ke penyebaran:

    endpoint.traffic = {"blue": 90, "green": 10}
    ml_client.begin_create_or_update(endpoint)
    

    Sekarang, penyebaran hijau Anda akan menerima 10% permintaan.

  2. Mengirim semua lalu lintas ke penyebaran baru:

    Setelah Anda yakin bahwa penyebaran hijau sepenuhnya memuaskan, alihkan semua lalu lintas ke sana.

    endpoint.traffic = {"blue": 0, "green": 100}
    ml_client.begin_create_or_update(endpoint)
    
  3. Menghapus penyebaran lama:

    ml_client.online_deployments.delete(name="blue", endpoint_name=online_endpoint_name)
    

Menghapus titik akhir

ml_client.online_endpoints.begin_delete(name=online_endpoint_name)

Langkah berikutnya