Aracılığıyla paylaş


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_NAMEgibi MODEL_BASE_PATH ortam değişkenlerini alan ve gibi 8501bağ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 ENTRYPOINTnası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_uridoğ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:

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