Aracılığıyla paylaş


Modeli çevrimiçi uç noktaya dağıtmak için özel kapsayıcı kullanma

APPLIES TO:Azure CLI ml extension v2 (current)Python SDK azure-ai-ml v2 (current)

Azure Machine Learning'de, modeli çevrimiçi uç noktaya dağıtmak için özel bir kapsayıcı kullanabilirsiniz. Özel kapsayıcı dağıtımları, Azure Machine Learning'in kullandığı varsayılan Python Flask sunucusu dışındaki web sunucularını kullanabilir.

Özel dağıtım kullandığınızda şunları yapabilirsiniz:

  • TensorFlow Serving (TF Serving), TorchServe, Triton Çıkarım Sunucusu, Plumber R paketi ve Azure Machine Learning çıkarım minimal görüntüsü gibi çeşitli araçlar ve teknolojileri kullanın.
  • Azure Machine Learning'in sunduğu yerleşik izleme, ölçeklendirme, uyarı ve kimlik doğrulamasından yararlanmaya devam edin.

Bu makalede, TensorFlow modeli sunmak için TF Sunum görüntüsünün nasıl kullanılacağı gösterilmektedir.

Prerequisites

  • Çalışma alanınızı içeren ve sizin veya hizmet sorumlunuzun Katkıda Bulunan erişimine sahip olduğu bir Azure kaynak grubu. Çalışma alanınızı yapılandırmak için Çalışma alanını oluşturma adımlarını kullanırsanız, bu gereksinimi karşılarsınız.

  • Docker Engine, installed and running locally. This prerequisite is highly recommended. Modeli yerel olarak dağıtmak için buna ihtiyacınız vardır ve hata ayıklama için yararlıdır.

Deployment examples

The following table lists deployment examples that use custom containers and take advantage of various tools and technologies.

Example Azure CLI betiği Description
minimal/multimodel deploy-custom-container-minimal-multimodel Azure Machine Learning çıkarım minimum görüntüsünü genişleterek birden fazla modeli tek bir dağıtımda dağıtır.
minimal/single-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ır.
mlflow/multideployment-scikit deploy-custom-container-mlflow-multideployment-scikit Tek bir uç noktanın arkasındaki iki ayrı dağıtıma farklı Python gereksinimleri olan iki MLFlow modeli dağıtır. Azure Machine Learning çıkarım minimal görüntüsünü kullanır.
r/multimodel-plumber deploy-custom-container-r-multimodel-plumber Bir uç noktaya üç regresyon modeli dağıtır. Plumber R paketini kullanır.
tfserving/half-plus-two deploy-custom-container-tfserving-half-plus-two TF Serving özel bir kapsayıcı kullanarak Yarım Artı İki modelini dağıtır. Standart model kayıt işlemini kullanır.
tfserving/half-plus-two-integrated deploy-custom-container-tfserving-half-plus-two-integrated TF Servisi özel konteyneri kullanarak resme entegre edilmiş model ile Yarım Artı İki modelini dağıtır.
torchserve/densenet deploy-custom-container-torchserve-densenet TorchServe özel kapsayıcısı kullanarak tek bir model dağıtır.
triton/single-model deploy-custom-container-triton-single-model Özel bir kapsayıcı kullanarak Triton modeli dağıtımı gerçekleştirilir.

Bu makalede, tfserving/half-plus-two örneğinin nasıl kullanılacağı gösterilmektedir.

Warning

Microsoft destek ekipleri ö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.

Kaynak kodu indirme

The steps in this article use code samples from the azureml-examples repository. Depoyu kopyalamak için aşağıdaki komutları kullanın:

git clone https://github.com/Azure/azureml-examples --depth 1
cd azureml-examples/cli

Ortam değişkenlerini başlatma

TensorFlow modeli kullanmak için birkaç ortam değişkenine ihtiyacınız vardır. Bu değişkenleri tanımlamak için aşağıdaki komutları çalıştırın:

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

Giriş değerini ikiye bölen ve sonucta iki tane 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 test etme

Görüntünüzü test etmek üzere 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önderme

Kapsayıcı içindeki işlemin çalışıp çalışmadığını denetlemek için bir canlılık isteği gönderin. 200 Tamam yanıt durum kodunu almanız gerekir.

curl -v http://localhost:8501/v1/models/$MODEL_NAME

Etiketlenmemiş veriler hakkında tahminler alıp alabildiğinizi denetlemek için bir puanlama isteği gönderin:

curl --header "Content-Type: application/json" \
  --request POST \
  --data @$BASE_PATH/sample_request.json \
  http://localhost:8501/v1/models/$MODEL_NAME:predict

Resmi durdurma

Test işlemini yerel olarak tamamladığınızda görüntüyü durdurun:

docker stop tfserving-test

Çevrimiçi uç noktanızı Azure'a dağıtma

Çevrimiçi uç noktanızı Azure'a dağıtmak için aşağıdaki bölümlerde yer alan adımları izleyin.

Uç noktanız ve dağıtımınız için YAML dosyaları oluşturma

BULUT dağıtımınızı YAML kullanarak yapılandırabilirsiniz. Örneğin, uç noktanızı yapılandırmak için aşağıdaki satırları içeren tfserving-endpoint.yml adlı bir YAML dosyası oluşturabilirsiniz:

$schema: https://azuremlsdk2.blob.core.windows.net/latest/managedOnlineEndpoint.schema.json
name: tfserving-endpoint
auth_mode: aml_token

Dağıtımınızı yapılandırmak için aşağıdaki satırları içeren tfserving-deployment.yml adlı bir YAML dosyası oluşturabilirsiniz:

$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

Aşağıdaki bölümlerde YAML ve Python parametreleriyle ilgili önemli kavramlar ele alınmaktadır.

Base image

environment YAML'deki bölümde veya Environment Python'daki oluşturucuda, temel görüntüyü parametre olarak belirtirsiniz. Bu örnek, docker.io/tensorflow/serving:latest'yi image değeri olarak kullanır.

Kapsayıcınızı incelerseniz, bu sunucunun bir giriş noktası betiği başlatmak için komutları kullandığını ENTRYPOINT görebilirsiniz. Bu betik, MODEL_BASE_PATH ve MODEL_NAME gibi ortam değişkenlerini alır ve 8501 gibi bağlantı noktalarını kullanıma sunar. Bu ayrıntıların tümü bu sunucuyla ilgilidir ve dağıtımınızı nasıl tanımlayabileceğinizi belirlemek için bu bilgileri kullanabilirsiniz. Örneğin, MODEL_BASE_PATH ve MODEL_NAME ortam değişkenlerini dağıtım tanımınızda ayarlarsanız, TF Serving sunucuyu başlatmak için bu değerleri kullanır. Benzer şekilde, dağıtım tanımında her yol 8501 için bağlantı noktasını ayarlarsanız, bu yollara yönelik kullanıcı istekleri TF Sunum sunucusuna doğru şekilde yönlendirilir.

Bu örnek TF Serving vakasına dayanmaktadır. Ancak çalışır durumda kalan ve canlılık, hazır olma ve puanlama yollarına giden isteklere yanıt veren herhangi bir kapsayıcıyı kullanabilirsiniz. Kapsayıcı oluşturmak için Dockerfile'ın nasıl oluşturulacağını görmek için diğer örneklere bakabilirsiniz. Bazı sunucular CMD yönergeleri yerine ENTRYPOINT yönergeleri kullanır.

inference_config parametresi

environment bölümünde veya Environment sınıfında inference_config bir parametredir. Üç yol türü için bağlantı noktasını ve yolu belirtir: canlılık durumu, hazır olma ve puanlama yolları. Eğer inference_config parametresini yönetilen bir çevrimiçi uç nokta ile kendi kapsayıcınızı çalıştırmak istiyorsanız kullanmanız gereklidir.

Hazır olma yolları ile canlılık yolları karşılaştırması

Bazı API sunucuları, sunucunun durumunu denetlemenin bir yolunu sağlar. Durumu denetlemek için belirtebileceğiniz iki yol türü vardır:

  • Liveness routes: To check whether a server is running, you use a liveness route.
  • Readiness routes: To check whether a server is ready to do work, you use a readiness route.

Makine öğrenmesi çıkarım bağlamında, bir sunucu model yüklemeden önce canlılık isteğine 200 Tamam durum koduyla yanıt verebilir. Sunucu, yalnızca modeli belleğe yükledikten sonra hazır olma isteğine 200 Tamam durum koduyla yanıt verebilir.

Canlılık ve hazır olma yoklamaları hakkında daha fazla bilgi için bkz. Canlılık, Hazırlık ve Başlangıç Yoklamalarını Yapılandırma.

Canlılık ve hazırlık yollarını seçtiğiniz API sunucusu belirler. Kapsayıcıyı yerel olarak test ederken bu sunucuyu önceki bir adımda tanımlarsınız. Bu makalede, örnek dağıtım, canlılık ve hazır olma yolları için aynı yolu kullanır çünkü TF Serving yalnızca canlılık yolunu tanımlar. Yolları tanımlamanın diğer yolları için diğer örneklere bakın.

Scoring routes

Kullandığınız 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 bir adımda kapsayıcıyı yerel olarak test ettiğinizde API sunucunuz için bu yolu belirleyin. Oluşturulacak dağıtımı tanımlarken bu yolu puanlama yolu olarak belirtin.

Dağıtımın başarıyla oluşturulması, uç noktanın scoring_uri parametresini de güncelleştirir. Aşağıdaki komutu çalıştırarak bu gerçeği doğrulayabilirsiniz: az ml online-endpoint show -n <endpoint-name> --query scoring_uri.

Montajlı modeli bul

When you deploy a model as an online endpoint, Azure Machine Learning mounts your model to your endpoint. Model bağlandığında, yeni bir Docker görüntüsü oluşturmak zorunda kalmadan modelin yeni sürümlerini dağıtabilirsiniz. By default, a model registered with the name my-model and version 1 is located on the following path inside your deployed container: /var/azureml-app/azureml-models/my-model/1.

Örneğin, aşağıdaki kurulumu göz önünde bulundurun:

  • /azureml-examples/cli/endpoints/online/custom-container yerel makinenizde bir dizin yapısı
  • Model adı: half_plus_two

Yerel dizin yapısının ağaç görünümünü gösteren ekran görüntüsü. /azureml-examples/cli/endpoints/online/custom-container yolu görünür.

tfserving-deployment.yml dosyanızın bölümünde aşağıdaki satırları içerdiğini model varsayalım. Azure Machine Learning'de modeli kaydetmek için kullandığınız isme name değeri bu bölümde atıfta bulunur.

model:
    name: tfserving-mounted
    version: 1
    path: ./half_plus_two

Bu durumda, bir dağıtım oluşturduğunuzda modeliniz şu klasörün altında bulunur: /var/azureml-app/azureml-models/tfserving-mounted/1.

Dağıtım dizini yapısının ağaç görünümünü gösteren ekran görüntüsü. var/azureml-app/azureml-models/tfserving-mounted/1 yolu görünür.

model_mount_path değerini isteğe bağlı olarak yapılandırabilirsiniz. Bu ayarı ayarlayarak modelin bağlandığı yolu değiştirebilirsiniz.

Important

Değerin model_mount_path Linux'ta geçerli bir mutlak yol olması gerekir (kapsayıcı görüntüsünün konuk işletim sisteminde).

Important

model_mount_path yalnızca BYOC (Kendi kapsayıcınızı getirin) senaryosunda kullanılabilir. KCG senaryosunda, çevrimiçi dağıtımın kullandığı ortamın parametresi yapılandırılmış olmalıdırinference_config. Ortamı oluştururken parametre belirtmek inference_config için Azure ML CLI veya Python SDK'sını kullanabilirsiniz. Studio kullanıcı arabirimi şu anda bu parametrenin belirtilmesine destek vermemektedir.

değerini model_mount_pathdeğiştirdiğinizde ortam değişkenini MODEL_BASE_PATH de güncelleştirmeniz gerekir. Temel yolun bulunamadığını gösteren bir hata nedeniyle başarısız bir dağıtımı önlemek için MODEL_BASE_PATH ve model_mount_path aynı değere ayarlayın.

Örneğin, parametresini model_mount_path tfserving-deployment.yml dosyanıza ekleyebilirsiniz. Bu dosyadaki MODEL_BASE_PATH değeri de güncelleştirebilirsiniz:

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
...

Dağıtımınızda modeliniz /var/tfserving-model-mount/tfserving-mounted/1 konumunda bulunur. Artık azureml-app/azureml-models altında değil, belirttiğiniz bağlama yolunun altındadır:

Dağıtım dizini yapısının ağaç görünümünü gösteren ekran görüntüsü. /var/tfserving-model-mount/tfserving-mount/tfserving-mount/1 yolu görünür.

Uç noktanızı ve dağıtımınızı oluşturma

YAML dosyanızı oluşturduktan sonra, uç noktanızı oluşturmak için aşağıdaki komutu kullanın:

az ml online-endpoint create --name tfserving-endpoint -f endpoints/online/custom-container/tfserving/half-plus-two/tfserving-endpoint.yml

Dağıtımınızı oluşturmak için aşağıdaki komutu kullanın. Bu adım birkaç dakika sürebilir.

az ml online-deployment create --name tfserving-deployment -f endpoints/online/custom-container/tfserving/half-plus-two/tfserving-deployment.yml --all-traffic

Uç noktayı çağırma

Dağıtımınız tamamlandığında, dağıtılan uç noktaya puanlama isteğinde bulunun.

RESPONSE=$(az ml online-endpoint invoke -n $ENDPOINT_NAME --request-file $BASE_PATH/sample_request.json)

Uç noktayı silme

Uç noktanıza artık ihtiyacınız yoksa, silmek için aşağıdaki komutu çalıştırın:

az ml online-endpoint delete --name tfserving-endpoint