Menggunakan kontainer kustom untuk menyebarkan model ke titik akhir online

BERLAKU UNTUK:Azure CLI ekstensi ml v2 (saat ini)Python SDK azure-ai-ml v2 (saat ini)

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 Azure Machine Learning gunakan.

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 Azure Machine Learning tawarkan.

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 v2:

    Untuk menginstal ekstensi Azure CLI dan ml, lihat Install dan siapkan 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 Subsistem Windows untuk Linux.

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

  • Docker Engine, diinstal dan berjalan secara lokal. Prasyarat ini sangat disarankan. Anda memerlukannya untuk mengimplementasikan model secara lokal, dan sangat membantu untuk debugging.

Contoh penyebaran

Tabel berikut mencantumkan contoh deployment yang menggunakan kontainer kustom dan memanfaatkan berbagai alat dan teknologi.

Example Skrip Azure CLI Description
minimal/multimodel deploy-custom-container-minimal-multimodel Menggunakan beberapa model dalam satu penerapan dengan memperluas basis gambar minimum inferensi dari Azure Machine Learning.
minimal/model tunggal menyebarkan-kontainer-kustom-minimal-model-tunggal Menyebarkan satu model dengan memperluas gambar minimal inferensi Azure Machine Learning.
mlflow/multideployment-scikit deploy-custom-container-mlflow-multideployment-scikit Menyebarkan dua model MLFlow dengan persyaratan Python yang berbeda ke dua penyebaran terpisah menggunakan satu titik akhir. Menggunakan image minimal untuk inferensi di 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/model tunggal memasang-kustom-kontainer-triton-model-tunggal Menyebarkan model Triton dengan menggunakan kontainer kustom.

Artikel ini menunjukkan cara menggunakan tfserving/half-plus-two sebagai contoh.

Warning

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

Mengunduh kode sumber

Langkah-langkah dalam artikel ini menggunakan sampel kode dari azureml-examples repositori. 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 untuk 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, buat 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, buat 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.

Gambar dasar

Di bagian environment di YAML, atau konstruktor Environment di Python, tentukan 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, lihat contoh lain. Beberapa server menggunakan CMD instruksi alih-alih ENTRYPOINT instruksi.

Tip

Untuk penyebaran produksi, sematkan ke versi gambar tertentu (misalnya, docker.io/tensorflow/serving:2.18.0) alih-alih menggunakan :latest untuk memastikan penyebaran yang dapat direproduksi.

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:

  • Rute keaktivaan : Untuk memeriksa apakah server berjalan, gunakan rute keaktivaan.
  • Rute kesiapan: Untuk memeriksa apakah server siap untuk melakukan pekerjaan, gunakan rute kesiapan.

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.

Rute penilaian

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

Saat Anda menyebarkan model sebagai titik akhir online, Azure Machine Learning mounts model Anda ke titik akhir Anda. Saat model dipasang, Anda dapat menyebarkan versi baru model tanpa harus membuat gambar Docker baru. Secara default, model yang terdaftar dengan nama my-model dan versi 1 terletak di jalur berikut di dalam kontainer yang Anda sebarkan: /var/azureml-app/azureml-models/my-model/1.

Misalnya, pertimbangkan penyiapan berikut:

  • Struktur direktori pada komputer lokal Anda /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 Anda tfserving-deployment.yml berisi baris-baris berikut pada bagian model. Di bagian ini, nilai name 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, ketika Anda membuat penyebaran, model Anda terletak di bawah folder berikut ini: /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

Anda hanya dapat menggunakan model_mount_path dalam skenario BYOC (bawa kontainer Anda sendiri). Dalam skenario BYOC, lingkungan penyebaran online yang digunakan harus sudah memiliki parameter yang dikonfigurasiinference_config. Gunakan CLI Azure Machine Learning atau SDK Python untuk menentukan parameter inference_config saat membuat lingkungan. 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 model_mount_path ke 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 penyebaran Anda, model Anda terletak di /var/tfserving-model-mount/tfserving-mounted/1. Ini tidak lagi 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