Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
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
mlatau 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
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.
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:
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