Modeli çevrimiçi uç noktaya dağıtmak için özel kapsayıcı kullanma
ŞUNLAR IÇIN GEÇERLIDIR: Azure CLI ml uzantısı v2 (geçerli)Python SDK azure-ai-ml v2 (geçerli)
Azure Machine Learning'de bir modeli çevrimiçi uç noktaya dağıtmak için özel kapsayıcı kullanmayı öğrenin.
Özel kapsayıcı dağıtımları, Azure Machine Learning tarafından kullanılan varsayılan Python Flask sunucusu dışındaki web sunucularını kullanabilir. Bu dağıtımların kullanıcıları Azure Machine Learning'in yerleşik izleme, ölçeklendirme, uyarı ve kimlik doğrulamasından yararlanmaya devam edebilir.
Aşağıdaki tabloda TensorFlow Hizmeti, TorchServe, Triton Çıkarım Sunucusu, Plumber R paketi ve Azure Machine Learning Çıkarımı Minimum görüntüsü gibi özel kapsayıcıları kullanan çeşitli dağıtım örnekleri listelenmiştir.
Örnek | Betik (CLI) | Açıklama |
---|---|---|
minimal/çok modelli | deploy-custom-container-minimal-multimodel | Azure Machine Learning Çıkarımı Minimum görüntüsünü genişleterek tek bir dağıtıma birden çok model dağıtın. |
minimal/tek model | deploy-custom-container-minimal-single-model | Azure Machine Learning Çıkarımı Minimum görüntüsünü genişleterek tek bir model dağıtın. |
mlflow/multideployment-scikit | deploy-custom-container-mlflow-multideployment-scikit | Azure Machine Learning Çıkarımı Minimum Görüntüsü'nü kullanarak tek bir uç noktanın arkasındaki iki ayrı dağıtıma farklı Python gereksinimleri olan iki MLFlow modeli dağıtın. |
r/multimodel-plumber | deploy-custom-container-r-multimodel-plumber | Plumber R paketini kullanarak bir uç noktaya üç regresyon modeli dağıtma |
tfserving/half-plus-two | deploy-custom-container-tfserving-half-plus-two | Standart model kayıt işlemini kullanarak Bir TensorFlow Sunan özel kapsayıcı kullanarak Yarım Artı İki modeli dağıtın. |
tfserving/half-plus-two-integrated | deploy-custom-container-tfserving-half-plus-two-integrated | Bir TensorFlow Hizmeti özel kapsayıcısını kullanarak, görüntüyle tümleştirilmiş modelle half plus two modeli dağıtın. |
torchserve/densenet | deploy-custom-container-torchserve-densenet | TorchServe özel kapsayıcısı kullanarak tek bir model dağıtın. |
triton/tek model | deploy-custom-container-triton-single-model | Özel kapsayıcı kullanarak Triton modeli dağıtma |
Bu makale, TensorFlow (TF) Sunumlu bir TensorFlow modeli sunma konusuna odaklanmaktadır.
Uyarı
Microsoft, özel görüntüden kaynaklanan sorunları gidermeye yardımcı olmayabilir. Sorunlarla karşılaşırsanız, sorunun görüntünüze özgü olup olmadığını görmek için varsayılan görüntüyü veya Microsoft'un sağladığı görüntülerden birini kullanmanız istenebilir.
Önkoşullar
Bu makaledeki adımları takip etmeden önce aşağıdaki önkoşullara sahip olduğunuzdan emin olun:
Azure Machine Learning çalışma alanı. Yoksa, oluşturmak için Hızlı Başlangıç: Çalışma alanı kaynakları oluşturma makalesindeki adımları kullanın.
Azure CLI ve
ml
uzantısı veya Azure Machine Learning Python SDK v2:Azure CLI ve uzantısını yüklemek için bkz . CLI'yı (v2) yükleme, ayarlama ve kullanma.
Önemli
Bu makaledeki CLI örneklerinde Bash (veya uyumlu) kabuğu kullandığınız varsayılır. Örneğin, bir Linux sisteminden veya Linux için Windows Alt Sistemi.
Python SDK v2'yi yüklemek için aşağıdaki komutu kullanın:
pip install azure-ai-ml azure-identity
SDK'nın mevcut yüklemesini en son sürüme güncelleştirmek için aşağıdaki komutu kullanın:
pip install --upgrade azure-ai-ml azure-identity
Daha fazla bilgi için bkz . Azure Machine Learning için Python SDK v2'yi yükleme.
Sizin veya kullandığınız hizmet sorumlusunun, çalışma alanınızı içeren Azure kaynak grubuna Katkıda Bulunan erişimine sahip olması gerekir. Hızlı başlangıç makalesini kullanarak çalışma alanınızı yapılandırdıysanız böyle bir kaynak grubunuz vardır.
Yerel olarak dağıtmak için Docker altyapısının yerel olarak çalıştırılması gerekir. Bu adım kesinlikle önerilir. Sorunlarda hata ayıklamanıza yardımcı olur.
Kaynak kodu indirme
Bu öğreticiyi takip etmek için GitHub'dan kaynak kodu kopyalayın.
git clone https://github.com/Azure/azureml-examples --depth 1
cd azureml-examples/cli
Ortam değişkenlerini başlatma
Ortam değişkenlerini tanımlama:
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
TensorFlow modelini indirme
Bir girişi ikiye bölen ve sonucta 2 ekleyen bir modeli indirin ve sıkıştırmasını açın:
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
TF Sunum görüntüsünü yerel olarak çalıştırarak çalışıp çalışmadığını test edin
Test için görüntünüzü yerel olarak çalıştırmak için docker kullanın:
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
Görüntüye canlılık ve puanlama istekleri gönderebildiğinizi denetleyin
İlk olarak, kapsayıcının etkin olup olmadığını denetleyin, yani kapsayıcının içindeki işlemin hala çalıştığını doğrulayın. 200 (Tamam) yanıtı almanız gerekir.
curl -v http://localhost:8501/v1/models/$MODEL_NAME
Ardından etiketlenmemiş veriler hakkında tahminler alıp alabildiğinizi denetleyin:
curl --header "Content-Type: application/json" \
--request POST \
--data @$BASE_PATH/sample_request.json \
http://localhost:8501/v1/models/$MODEL_NAME:predict
Resmi durdurma
Artık yerel olarak test ettiğinize göre görüntüyü durdurun:
docker stop tfserving-test
Çevrimiçi uç noktanızı Azure'a dağıtma
Ardından çevrimiçi uç noktanızı Azure'a dağıtın.
Uç noktanız ve dağıtımınız için bir YAML dosyası oluşturma
BULUT dağıtımınızı YAML kullanarak yapılandırabilirsiniz. Bu örnek için örnek YAML'ye göz atın:
tfserving-endpoint.yml
$schema: https://azuremlsdk2.blob.core.windows.net/latest/managedOnlineEndpoint.schema.json
name: tfserving-endpoint
auth_mode: aml_token
tfserving-deployment.yml
$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
Bu YAML/Python parametresinde dikkat edilmesi gereken birkaç önemli kavram vardır:
Temel görüntü
Temel görüntü ortamda parametre olarak belirtilir ve docker.io/tensorflow/serving:latest
bu örnekte kullanılır. Kapsayıcıyı incelediğinizde, bu sunucunun ve MODEL_NAME
gibi MODEL_BASE_PATH
ortam değişkenlerini alan ve gibi 8501
bağlantı noktalarını kullanıma sunan bir giriş noktası betiği başlatmak için kullandığını ENTRYPOINT
bulabilirsiniz. Bu ayrıntılar, bu seçilen sunucuya özgü bilgilerdir. Dağıtımın nasıl tanımlanacağına karar vermek için bu sunucu anlayışını kullanabilirsiniz. Örneğin, dağıtım tanımında ve MODEL_NAME
için MODEL_BASE_PATH
ortam değişkenlerini ayarlarsanız, sunucu (bu örnekte TF Sunma) sunucuyu başlatmak için değerleri alır. Benzer şekilde, dağıtım tanımında olacak 8501
yolların bağlantı noktasını ayarlarsanız, bu tür yollara yönelik kullanıcı isteği TF Sunum sunucusuna doğru şekilde yönlendirilir.
Bu özel örneğin TF Sunma servis talebine dayandığını ancak canlılık, hazırlık ve puanlama yollarına gelen isteklere yanıt verecek tüm kapsayıcıları kullanabileceğinizi unutmayın. Kapsayıcıları oluşturmak için diğer örneklere başvurabilir ve dockerfile'ın ENTRYPOINT
nasıl oluşturulduğunu (örneğin, yerine kullanarakCMD
) görebilirsiniz.
Çıkarım yapılandırması
Çıkarım yapılandırması ortamdaki bir parametredir ve 3 yol türü için bağlantı noktasını ve yolu belirtir: canlılık, hazırlık ve puanlama yolu. Yönetilen çevrimiçi uç nokta ile kendi kapsayıcınızı çalıştırmak istiyorsanız çıkarım yapılandırması gereklidir.
Hazırlık rotası ile canlılık yolu karşılaştırması
Seçtiğiniz API sunucusu, sunucunun durumunu denetlemenin bir yolunu sağlayabilir. Belirtebileceğiniz iki yol türü vardır: canlılık ve hazır olma. Sunucunun çalışıp çalışmadığını denetlemek için canlılık yolu kullanılır. Sunucunun çalışmaya hazır olup olmadığını denetlemek için hazır olma yolu kullanılır. Makine öğrenmesi çıkarım bağlamında, bir sunucu model yüklemeden önce canlılık isteğine 200 Tamam yanıt verebilir ve sunucu yalnızca model belleğe yüklendikten sonra hazır olma isteğine 200 Tamam yanıt verebilir.
Genel olarak canlılık ve hazırlık yoklamaları hakkında daha fazla bilgi için Kubernetes belgelerine bakın.
Canlılık ve hazır olma yolları, kapsayıcıyı önceki adımda yerel olarak test ederken tanımlayacağınız gibi seçtiğiniz API sunucusu tarafından belirlenir. Bu makaledeki örnek dağıtımın hem canlılık hem de hazırlık için aynı yolu kullandığını unutmayın, çünkü TF Hizmeti yalnızca canlılık yolunu tanımlar. Yolları tanımlamak için farklı desenler için diğer örneklere bakın.
Puanlama yolu
Seçtiğiniz API sunucusu, üzerinde çalışabileceğiniz yükü almak için bir yol sağlar. Makine öğrenmesi çıkarım bağlamında, bir sunucu giriş verilerini belirli bir yol üzerinden alır. Önceki adımda kapsayıcıyı yerel olarak test ederken API sunucunuz için bu yolu belirleyin ve oluşturulacak dağıtımı tanımlarken belirtin.
Dağıtımın başarıyla oluşturulmasının uç noktanın scoring_uri parametresini de güncelleştireceğini ve bunu ile az ml online-endpoint show -n <name> --query scoring_uri
doğrulayabileceğinizi unutmayın.
Bağlı modeli bulma
Bir modeli çevrimiçi uç nokta olarak dağıttığınızda Azure Machine Learning modelinizi uç noktanıza bağlar . Model bağlama, yeni bir Docker görüntüsü oluşturmak zorunda kalmadan modelin yeni sürümlerini dağıtmanızı sağlar. Varsayılan olarak, foo adı ve sürüm 1 ile kaydedilen bir model dağıtılan kapsayıcınızın içindeki şu yolda bulunur: /var/azureml-app/azureml-models/foo/1
Örneğin, yerel makinenizde /azureml-examples/cli/endpoints/online/custom-container dizin yapınız varsa modelin adı half_plus_two:
ve tfserving-deployment.yml içerir:
model:
name: tfserving-mounted
version: 1
path: ./half_plus_two
Ardından modeliniz dağıtımınızda /var/azureml-app/azureml-models/tfserving-deployment/1 altında yer alır:
İsteğe bağlı olarak yapılandırabilirsiniz model_mount_path
. Modelin bağlandığı yolu değiştirmenize olanak tanır.
Önemli
, model_mount_path
Linux'ta geçerli bir mutlak yol olmalıdır (kapsayıcı görüntüsünün işletim sistemi).
Örneğin, tfserving-deployment.yml parametreniz olabilirmodel_mount_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
.....
Ardından modeliniz dağıtımınızda /var/tfserving-model-mount/tfserving-deployment/1 konumunda bulunur. Artık azureml-app/azureml-models altında değil, belirttiğiniz bağlama yolunun altında olduğunu unutmayın:
Uç noktanızı ve dağıtımınızı oluşturma
YAML'nin nasıl oluşturulduğunı anladığınıza göre uç noktanızı oluşturun.
az ml online-endpoint create --name tfserving-endpoint -f endpoints/online/custom-container/tfserving-endpoint.yml
Dağıtım oluşturmak birkaç dakika sürebilir.
az ml online-deployment create --name tfserving-deployment -f endpoints/online/custom-container/tfserving-deployment.yml --all-traffic
Uç noktayı çağırma
Dağıtımınız tamamlandıktan sonra, dağıtılan uç noktaya puanlama isteğinde bulunıp bulunamadığını görün.
RESPONSE=$(az ml online-endpoint invoke -n $ENDPOINT_NAME --request-file $BASE_PATH/sample_request.json)
Uç noktayı silme
Artık uç noktanızla başarılı bir şekilde puanladığınıza göre, bunu silebilirsiniz:
az ml online-endpoint delete --name tfserving-endpoint