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:

Yerel dizin yapısının ağaç görünümünü gösteren diyagram.

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:

Dağıtım dizini yapısının ağaç görünümünü gösteren diyagram.

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

mount_model_path kullanılırken dağıtım dizini yapısının ağaç görünümünü gösteren diyagram.

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