Bagikan melalui


Menggunakan kontainer kustom untuk menyebarkan model ke titik akhir online

APPLIES TO:Azure CLI ml extension v2 (current)Python SDK azure-ai-ml v2 (current)

Di Azure Machine Learning, Anda dapat menggunakan kontainer kustom untuk menyebarkan model ke titik akhir online. Penyebaran kontainer kustom dapat menggunakan server web selain server Python Flask default yang digunakan Azure Machine Learning.

Saat menggunakan penyebaran kustom, Anda dapat:

  • Gunakan berbagai alat dan teknologi, seperti TensorFlow Serving (TF Serving), TorchServe, Triton Inference Server, paket Plumber R, dan gambar minimal inferensi Azure Machine Learning.
  • Masih memanfaatkan pemantauan, penskalaan, pemberitahuan, dan autentikasi bawaan yang ditawarkan Azure Machine Learning.

Artikel ini memperlihatkan kepada Anda cara menggunakan gambar TF Serving untuk menyajikan model TensorFlow.

Prerequisites

  • Ruang kerja Azure Machine Learning. Untuk instruksi membuat ruang kerja, lihat Buat ruang kerja.

  • Azure CLI dan ekstensi ml atau Azure Machine Learning Python SDK versi 2

    Untuk menginstal Azure CLI dan ekstensi ml, lihat Instal dan atur CLI (v2).

    Contoh-contoh dalam artikel ini berasumsi bahwa Anda menggunakan shell Bash atau shell yang kompatibel. Misalnya, Anda dapat menggunakan shell pada sistem Linux atau Windows Subsystem for Linux.

  • Grup sumber daya Azure yang berisi ruang kerja Anda dan di mana Anda atau perwakilan layanan Anda memiliki akses sebagai Kontributor. Jika Anda menggunakan langkah-langkah dalam Membuat ruang kerja untuk mengonfigurasi ruang kerja, Anda memenuhi persyaratan ini.

  • Docker Engine, installed and running locally. This prerequisite is highly recommended. Anda memerlukannya untuk mengimplementasikan model secara lokal, dan sangat membantu untuk debugging.

Deployment examples

The following table lists deployment examples that use custom containers and take advantage of various tools and technologies.

Example Skrip Azure CLI Description
minimal/multimodel deploy-custom-container-minimal-multimodel Menyebarkan beberapa model ke satu penyebaran dengan memperluas gambar minimal inferensi Azure Machine Learning.
minimal/single-model deploy-custom-container-minimal-single-model Menyebarkan satu model dengan memperluas gambar minimal inferensi Azure Machine Learning.
mlflow/multideployment-scikit deploy-custom-container-mlflow-multideployment-scikit Menggunakan dua model MLFlow dengan persyaratan Python yang berbeda pada dua lokasi penyebaran terpisah di bawah satu titik akhir. Menggunakan gambar minimal inferensi Azure Machine Learning.
r/multimodel-plumber deploy-custom-container-r-multimodel-plumber Menyebarkan tiga model regresi ke satu titik akhir. Menggunakan paket Plumber R.
tfserving/half-plus-two deploy-custom-container-tfserving-half-plus-two Menyebarkan model Half Plus Two dengan menggunakan kontainer kustom TF Serving. Menggunakan proses pendaftaran model standar.
tfserving/half-plus-two-integrated deploy-custom-container-tfserving-half-plus-two-integrated Menyebarkan model Half Plus Two dengan menggunakan kontainer kustom TF Serving dengan model yang diintegrasikan ke dalam gambar.
torchserve/densenet deploy-custom-container-torchserve-densenet Menyebarkan satu model dengan menggunakan kontainer kustom TorchServe.
triton/single-model deploy-custom-container-triton-single-model Menyebarkan model Triton dengan menggunakan kontainer kustom.

Artikel ini memperlihatkan kepada Anda cara menggunakan contoh tfserving/half-plus-two.

Warning

Tim dukungan Microsoft mungkin tidak dapat membantu memecahkan masalah yang disebabkan oleh gambar kustom. Jika Mengalami masalah, Anda mungkin diminta untuk menggunakan gambar default atau salah satu gambar yang disediakan Microsoft untuk melihat apakah masalah tersebut khusus untuk gambar Anda.

Mengunduh kode sumber

The steps in this article use code samples from the azureml-examples repository. Gunakan perintah berikut untuk mengkloning repositori:

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

Inisialisasi beberapa variabel lingkungan

Untuk menggunakan model TensorFlow, Anda memerlukan beberapa variabel lingkungan. Jalankan perintah berikut untuk menentukan variabel tersebut:

BASE_PATH=endpoints/online/custom-container/tfserving/half-plus-two
AML_MODEL_NAME=tfserving-mounted
MODEL_NAME=half_plus_two
MODEL_BASE_PATH=/var/azureml-app/azureml-models/$AML_MODEL_NAME/1

Unduh model TensorFlow

Unduh dan buka zip model yang membagi nilai input dengan dua dan menambahkan dua ke hasilnya:

wget https://aka.ms/half_plus_two-model -O $BASE_PATH/half_plus_two.tar.gz
tar -xvf $BASE_PATH/half_plus_two.tar.gz -C $BASE_PATH

Menguji gambar TF Serving secara lokal

Gunakan Docker untuk menjalankan gambar Anda secara lokal untuk pengujian:

docker run --rm -d -v $PWD/$BASE_PATH:$MODEL_BASE_PATH -p 8501:8501 \
 -e MODEL_BASE_PATH=$MODEL_BASE_PATH -e MODEL_NAME=$MODEL_NAME \
 --name="tfserving-test" docker.io/tensorflow/serving:latest
sleep 10

Mengirim permintaan keaktivitas dan penilaian ke gambar

Kirim permintaan liveness untuk memeriksa apakah proses di dalam kontainer sedang berjalan. Anda harus mendapatkan respons dengan kode status 200 OK.

curl -v http://localhost:8501/v1/models/$MODEL_NAME

Kirim permintaan penilaian untuk memeriksa apakah Anda bisa mendapatkan prediksi tentang data yang tidak berlabel:

curl --header "Content-Type: application/json" \
  --request POST \
  --data @$BASE_PATH/sample_request.json \
  http://localhost:8501/v1/models/$MODEL_NAME:predict

Hentikan gambar

Saat Anda selesai menguji secara lokal, hentikan gambar:

docker stop tfserving-test

Menyebarkan titik akhir online Anda ke Azure

Untuk menyebarkan titik akhir online Anda ke Azure, lakukan langkah-langkah di bagian berikut.

Membuat file YAML untuk titik akhir dan penyebaran Anda

Anda dapat mengonfigurasi penyebaran cloud dengan menggunakan YAML. Misalnya, untuk mengonfigurasi titik akhir, Anda dapat membuat file YAML bernama tfserving-endpoint.yml yang berisi baris berikut:

$schema: https://azuremlsdk2.blob.core.windows.net/latest/managedOnlineEndpoint.schema.json
name: tfserving-endpoint
auth_mode: aml_token

Untuk mengonfigurasi penyebaran, Anda dapat membuat file YAML bernama tfserving-deployment.yml yang berisi baris berikut:

$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineDeployment.schema.json
name: tfserving-deployment
endpoint_name: tfserving-endpoint
model:
  name: tfserving-mounted
  version: <model-version>
  path: ./half_plus_two
environment_variables:
  MODEL_BASE_PATH: /var/azureml-app/azureml-models/tfserving-mounted/<model-version>
  MODEL_NAME: half_plus_two
environment:
  #name: tfserving
  #version: 1
  image: docker.io/tensorflow/serving:latest
  inference_config:
    liveness_route:
      port: 8501
      path: /v1/models/half_plus_two
    readiness_route:
      port: 8501
      path: /v1/models/half_plus_two
    scoring_route:
      port: 8501
      path: /v1/models/half_plus_two:predict
instance_type: Standard_DS3_v2
instance_count: 1

Bagian berikut membahas konsep penting tentang parameter YAML dan Python.

Base image

Di bagian environment di YAML, atau Environment konstruktor di Python, Anda menentukan gambar dasar sebagai parameter. Contoh ini menggunakan docker.io/tensorflow/serving:latest sebagai image nilai.

Jika Anda memeriksa kontainer, Anda dapat melihat bahwa server ini menggunakan ENTRYPOINT perintah untuk menjalankan skrip titik masuk. Skrip tersebut mengambil variabel lingkungan seperti MODEL_BASE_PATH dan MODEL_NAME, dan mengekspos port seperti 8501. Detail ini semua terkait dengan server ini, dan Anda dapat menggunakan informasi ini untuk menentukan bagaimana mendefinisikan pengembangan Anda. Misalnya, jika Anda mengatur MODEL_BASE_PATH variabel lingkungan dan MODEL_NAME dalam definisi penyebaran Anda, TF Serving menggunakan nilai-nilai tersebut untuk memulai server. Demikian juga, jika Anda mengatur port untuk setiap rute ke 8501 dalam definisi penyebaran, permintaan pengguna ke rute tersebut dirutekan dengan benar ke server TF Serving.

Contoh ini didasarkan pada kasus TF Serving. Tetapi Anda dapat menggunakan kontainer apa pun yang tetap aktif dan merespons permintaan yang sesuai dengan rute keaktifan, kesiapan, dan penilaian. Untuk melihat cara membentuk Dockerfile untuk membuat kontainer, Anda dapat merujuk ke contoh lain. Beberapa server menggunakan CMD instruksi alih-alih ENTRYPOINT instruksi.

Parameter inference_config

Di bagian environment atau Environment kelas , inference_config adalah parameter . Ini menentukan port dan jalur untuk tiga jenis rute: keaktifan, kesiapan, dan rute penilaian. Parameter inference_config diperlukan jika Anda ingin menjalankan kontainer Anda sendiri dengan titik akhir online terkelola.

Rute kesiapan vs. rute keaktifan

Beberapa server API menyediakan cara untuk memeriksa status server. Ada dua jenis rute yang dapat Anda tentukan untuk memeriksa status:

  • Liveness routes: To check whether a server is running, you use a liveness route.
  • Readiness routes: To check whether a server is ready to do work, you use a readiness route.

Dalam konteks inferensi pembelajaran mesin, server mungkin merespons dengan kode status 200 OK ke permintaan liveness sebelum memuat model. Server mungkin merespons dengan kode status 200 OK ke permintaan kesiapan hanya setelah memuat model ke dalam memori.

Untuk informasi selengkapnya tentang pemeriksaan keaktifan dan kesiapan, lihat Mengonfigurasi Pemeriksaan Keaktifan, Kesiapan, dan Startup.

Server API yang Anda pilih menentukan rute keaktifan dan kesiapan. Anda mengidentifikasi server tersebut di langkah sebelumnya saat menguji kontainer secara lokal. Dalam artikel ini, contoh penyebaran menggunakan jalur yang sama untuk rute keaktifan dan kesiapan, karena TF Serving hanya menentukan rute keaktifan. Untuk cara lain menentukan rute, lihat contoh lain.

Scoring routes

Server API yang Anda gunakan menyediakan cara untuk menerima payload untuk diproses. Dalam konteks inferensi pembelajaran mesin, server menerima data input melalui rute tertentu. Identifikasi rute tersebut untuk server API saat Anda menguji kontainer secara lokal di langkah sebelumnya. Tentukan rute tersebut sebagai rute penilaian saat Anda menentukan penyebaran yang akan dibuat.

Pembuatan penyebaran yang berhasil juga memperbarui scoring_uri parameter titik akhir. Anda dapat memverifikasi fakta ini dengan menjalankan perintah berikut: az ml online-endpoint show -n <endpoint-name> --query scoring_uri.

Temukan model yang dipasang

When you deploy a model as an online endpoint, Azure Machine Learning mounts your model to your endpoint. Saat model dipasang, Anda dapat menyebarkan versi baru model tanpa harus membuat gambar Docker baru. By default, a model registered with the name my-model and version 1 is located on the following path inside your deployed container: /var/azureml-app/azureml-models/my-model/1.

Misalnya, pertimbangkan penyiapan berikut:

  • Struktur direktori pada komputer lokal Anda dari /azureml-examples/cli/endpoints/online/custom-container
  • Nama model half_plus_two

Cuplikan layar yang memperlihatkan tampilan pohon struktur direktori lokal. Jalur /azureml-examples/cli/endpoints/online/custom-container terlihat.

Misalkan file tfserving-deployment.yml Anda berisi baris berikut di bagiannya model . Di bagian ini, name nilai mengacu pada nama yang Anda gunakan untuk mendaftarkan model di Azure Machine Learning.

model:
    name: tfserving-mounted
    version: 1
    path: ./half_plus_two

Dalam hal ini, saat Anda membuat penyebaran, model Anda berada di dalam folder berikut: /var/azureml-app/azureml-models/tfserving-mounted/1.

Cuplikan layar yang memperlihatkan tampilan pohon struktur direktori penyebaran. Jalur var/azureml-app/azureml-models/tfserving-mounted/1 terlihat.

Anda dapat secara opsional mengonfigurasi nilai Anda model_mount_path . Dengan menyesuaikan pengaturan ini, Anda dapat mengubah jalur tempat model dipasang.

Important

Nilai model_mount_path harus merupakan jalur absolut yang valid di Linux (dalam OS tamu gambar kontainer).

Important

model_mount_path hanya dapat digunakan dalam skenario BYOC (Bawa kontainer Anda sendiri). Dalam skenario BYOC, lingkungan yang digunakan penyebaran online harus memiliki parameter yang inference_config dikonfigurasi. Anda dapat menggunakan Azure ML CLI atau Python SDK untuk menentukan inference_config parameter saat membuat lingkungan. UI Studio saat ini tidak mendukung menentukan parameter ini.

Saat Anda mengubah nilai model_mount_path, Anda juga perlu memperbarui MODEL_BASE_PATH variabel lingkungan. Atur MODEL_BASE_PATH ke nilai model_mount_path yang sama untuk menghindari penyebaran yang gagal karena kesalahan tentang jalur dasar yang tidak ditemukan.

Misalnya, Anda dapat menambahkan parameter ke model_mount_path file tfserving-deployment.yml Anda. Anda juga dapat memperbarui nilai dalam file tersebut MODEL_BASE_PATH :

name: tfserving-deployment
endpoint_name: tfserving-endpoint
model:
  name: tfserving-mounted
  version: 1
  path: ./half_plus_two
model_mount_path: /var/tfserving-model-mount
environment_variables:
  MODEL_BASE_PATH: /var/tfserving-model-mount
...

Dalam implementasi Anda, model Anda kemudian berada di /var/tfserving-model-mount/tfserving-mounted/1. Ini tidak lagi berada di bawah azureml-app/azureml-models, tetapi di bawah jalur pemasangan yang Anda tentukan:

Cuplikan layar yang memperlihatkan tampilan pohon struktur direktori penyebaran. Jalur /var/tfserving-model-mount/tfserving-mounted/1 terlihat.

Membuat titik akhir dan penyebaran

Setelah Anda membuat file YAML, gunakan perintah berikut untuk membuat titik akhir Anda:

az ml online-endpoint create --name tfserving-endpoint -f endpoints/online/custom-container/tfserving/half-plus-two/tfserving-endpoint.yml

Gunakan perintah berikut untuk buat deployment Anda. Langkah ini mungkin berjalan selama beberapa menit.

az ml online-deployment create --name tfserving-deployment -f endpoints/online/custom-container/tfserving/half-plus-two/tfserving-deployment.yml --all-traffic

Memanggil titik akhir

Saat penyebaran Anda selesai, buat permintaan penilaian ke titik akhir yang telah disebarkan.

RESPONSE=$(az ml online-endpoint invoke -n $ENDPOINT_NAME --request-file $BASE_PATH/sample_request.json)

Menghapus titik akhir

Jika Anda tidak lagi memerlukan titik akhir, jalankan perintah berikut untuk menghapusnya:

az ml online-endpoint delete --name tfserving-endpoint