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. |
torchserve/huggingface-textgen | deploy-custom-container-torchserve-huggingface-textgen | Hugging Face modellerini çevrimiçi bir uç noktaya dağıtın ve Hugging Face Transformers TorchServe örneğini izleyin. |
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:
Hazırlık rotası ile canlılık yolu karşılaştırması
HTTP sunucusu hem canlılık hem de hazır olmaiçin yolları tanımlar. 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ında, bir sunucu bir modeli yüklemeden önce canlılık isteğine 200 Tamam yanıt verebilir. Sunucu, yalnızca model belleğe yüklendikten sonra hazır olma isteğine 200 Tamam yanıt verebilir.
Canlılık ve hazırlık yoklamaları hakkında daha fazla bilgi için Kubernetes belgelerine bakın.
Bu dağıtımın hem canlılık hem de hazırlık için aynı yolu kullandığına dikkat edin, çünkü TF Hizmeti yalnızca bir canlılık yolu tanımlar.
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