Modeli çevrimiçi uç nokta olarak dağıtma

ŞUNLAR IÇIN GEÇERLIDIR: Python SDK'sı azure-ai-ml v2 (geçerli)

Azure Machine Learning Python SDK v2 kullanarak bir modeli çevrimiçi uç noktaya dağıtmayı öğrenin.

Bu öğreticide, kredi kartı ödemesinde müşterinin varsayılan olarak ödeme olasılığını tahmin eden bir model dağıtıp kullanacaksınız.

Gerçekleştirdiğiniz adımlar şunlardır:

  • Modelinizi kaydetme
  • Uç nokta ve ilk dağıtım oluşturma
  • Deneme çalıştırması dağıtma
  • Test verilerini dağıtıma el ile gönderme
  • Dağıtımın ayrıntılarını alma
  • İkinci dağıtım oluşturma
  • İkinci dağıtımı el ile ölçeklendirme
  • Her iki dağıtım arasında üretim trafiğinin ayrılması güncelleştirildi
  • İkinci dağıtımın ayrıntılarını alma
  • Yeni dağıtımı kullanıma sunma ve ilk dağıtımı silme

Bu videoda, öğreticideki adımları izleyebilmek için Azure Machine Learning stüdyosu kullanmaya nasıl başlayabileceğiniz gösterilmektedir. Videoda not defteri oluşturma, işlem örneği oluşturma ve not defterini kopyalama gösterilmektedir. Adımlar aşağıdaki bölümlerde de açıklanmıştır.

Önkoşullar

  1. Azure Machine Learning'i kullanmak için öncelikle bir çalışma alanı gerekir. Bir çalışma alanınız yoksa, çalışma alanı oluşturmaya başlamak ve bu çalışma alanını kullanma hakkında daha fazla bilgi edinmek için ihtiyacınız olan kaynakları oluşturma'yı tamamlayın.

  2. Stüdyoda oturum açın ve henüz açık değilse çalışma alanınızı seçin.

  3. Çalışma alanınızda bir not defteri açın veya oluşturun:

    • Hücrelere kod kopyalamak/yapıştırmak istiyorsanız yeni bir not defteri oluşturun.
    • İsterseniz, studionun Örnekler bölümünde tutorials/get-started-notebooks/deploy-model.ipynb dosyasını da açabilirsiniz. Ardından Kopyala'yı seçerek not defterini Dosyalarınıza ekleyin. (Bkz. Örneklerin bulunacağı yer.)
  4. VM kotanızı görüntüleyin ve çevrimiçi dağıtımlar oluşturmak için yeterli kotaya sahip olduğunuzdan emin olun. Bu öğreticide, en az 8 çekirdeğine STANDARD_DS3_v2 ve 12 çekirdeğine STANDARD_F4s_v2ihtiyacınız vardır. VM kota kullanımınızı ve istek kotası artışlarını görüntülemek için bkz . Kaynak kotalarını yönetme.

Çekirdeğinizi ayarlama

  1. Açık not defterinizin üst çubuğunda, henüz yoksa bir işlem örneği oluşturun.

    Screenshot shows how to create a compute instance.

  2. İşlem örneği durdurulduysa İşlemi başlat'ı seçin ve çalışana kadar bekleyin.

    Screenshot shows how to start compute if it is stopped.

  3. Sağ üst kısımda bulunan çekirdeğin olduğundan Python 3.10 - SDK v2emin olun. Aksi takdirde, bu çekirdeği seçmek için açılan listeyi kullanın.

    Screenshot shows how to set the kernel.

  4. Kimliğinizin doğrulanması gerektiğini belirten bir başlık görürseniz Kimliği Doğrula'yı seçin.

Önemli

Bu öğreticinin geri kalanı, öğretici not defterinin hücrelerini içerir. Bunları kopyalayıp yeni not defterinize yapıştırın veya kopyaladıysanız şimdi not defterine geçin.

Not

  • Sunucusuz Spark İşlem varsayılan olarak yüklü değildir Python 3.10 - SDK v2 . Kullanıcıların öğreticiye devam etmeden önce bir işlem örneği oluşturmasını ve bunu seçmesini öneririz.

Çalışma alanına tanıtıcı oluşturma

Kodu incelemeden önce çalışma alanınıza başvurmak için bir yönteme ihtiyacınız vardır. Çalışma alanının tanıtıcısı için oluşturun ml_client ve kaynak ve işleri yönetmek için öğesini ml_client kullanın.

Sonraki hücreye Abonelik Kimliğinizi, Kaynak Grubu adınızı ve Çalışma Alanı adınızı girin. Bu değerleri bulmak için:

  1. Sağ üst Azure Machine Learning stüdyosu araç çubuğunda çalışma alanı adınızı seçin.
  2. Çalışma alanı, kaynak grubu ve abonelik kimliğinin değerini koda kopyalayın.
  3. Bir değeri kopyalamanız, alanı kapatıp yapıştırmanız ve ardından bir sonraki değer için geri dönmeniz gerekir.
from azure.ai.ml import MLClient
from azure.identity import DefaultAzureCredential

# authenticate
credential = DefaultAzureCredential()

# Get a handle to the workspace
ml_client = MLClient(
    credential=credential,
    subscription_id="<SUBSCRIPTION_ID>",
    resource_group_name="<RESOURCE_GROUP>",
    workspace_name="<AML_WORKSPACE_NAME>",
)

Not

Oluşturma MLClient çalışma alanına bağlanmaz. İstemci başlatma yavaştır ve ilk kez çağrı yapmasını bekler (bu bir sonraki kod hücresinde gerçekleşir).

Modeli kaydedin

Önceki eğitim öğreticisi olan Modeli eğitma öğreticisini zaten tamamladıysanız, eğitim betiğinin bir parçası olarak bir MLflow modeli kaydettiniz ve sonraki bölüme atlayabilirsiniz.

Eğitim öğreticisini tamamlamadıysanız modeli kaydetmeniz gerekir. Modelinizi dağıtımdan önce kaydetmek önerilen en iyi yöntemdir.

Aşağıdaki kod, satır içi path (dosyaların karşıya yüklendiği yer) belirtir. Öğreticiler klasörünü kopyaladıysanız aşağıdaki kodu olduğu gibi çalıştırın. Aksi takdirde, dosyaları dağıtmak ve sıkıştırmak için modelin dosyalarını ve meta verilerini indirin. Yolu, yerel bilgisayarınızda sıkıştırması açılmış dosyaların konumuna güncelleştirin.

SDK dosyaları otomatik olarak karşıya yükler ve modeli kaydeder.

Modelinizi varlık olarak kaydetme hakkında daha fazla bilgi için bkz . SDK'yı kullanarak modelinizi Machine Learning'de varlık olarak kaydetme.

# Import the necessary libraries
from azure.ai.ml.entities import Model
from azure.ai.ml.constants import AssetTypes

# Provide the model details, including the
# path to the model files, if you've stored them locally.
mlflow_model = Model(
    path="./deploy/credit_defaults_model/",
    type=AssetTypes.MLFLOW_MODEL,
    name="credit_defaults_model",
    description="MLflow Model created from local files.",
)

# Register the model
ml_client.models.create_or_update(mlflow_model)

Modelin kayıtlı olduğunu onaylayın

Kayıtlı modelin en son sürümünü belirlemek için Azure Machine Learning stüdyosu'dakiModeller sayfasını de kontrol edebilirsiniz.

Screenshot shows the registered model in studio.

Alternatif olarak, aşağıdaki kod kullanmanız için en son sürüm numarasını alır.

registered_model_name = "credit_defaults_model"

# Let's pick the latest version of the model
latest_model_version = max(
    [int(m.version) for m in ml_client.models.list(name=registered_model_name)]
)

print(latest_model_version)

Artık kayıtlı bir modeliniz olduğuna göre bir uç nokta ve dağıtım oluşturabilirsiniz. Sonraki bölümde bu konularla ilgili bazı önemli ayrıntılar kısaca ele alınır.

Uç noktalar ve dağıtımlar

Bir makine öğrenmesi modelini eğitdikten sonra, başkalarının çıkarım için kullanabilmesi için dağıtmanız gerekir. Bu amaçla, Azure Machine Learning uç noktalar oluşturmanıza ve bunlara dağıtımlar eklemenize olanak tanır.

Bu bağlamda uç nokta, istemcilerin eğitilmiş bir modele istek (giriş verileri) göndermesi ve modelden çıkarım (puanlama) sonuçlarını alması için bir arabirim sağlayan bir HTTPS yoludur. Uç nokta şu bilgileri sağlar:

  • "Anahtar veya belirteç" tabanlı kimlik doğrulaması
  • TLS(SSL) sonlandırma
  • Kararlı puanlama URI'si (endpoint-name.region.inference.ml.azure.com)

Dağıtım, gerçek çıkarım yapan modeli barındırmak için gereken bir kaynak kümesidir.

Tek bir uç nokta birden çok dağıtım içerebilir. Uç noktalar ve dağıtımlar, Azure portalında görünen bağımsız Azure Resource Manager kaynaklarıdır.

Azure Machine Learning, istemci verileri üzerinde gerçek zamanlı çıkarım için çevrimiçi uç noktaları ve belirli bir süre boyunca büyük hacimli verileri çıkarım için toplu uç noktaları uygulamanıza olanak tanır.

Bu öğreticide, yönetilen bir çevrimiçi uç nokta uygulama adımlarını ilerletebilirsiniz. Yönetilen çevrimiçi uç noktalar Azure'daki güçlü CPU ve GPU makineleriyle, temel dağıtım altyapısını ayarlama ve yönetme ek yükünden sizi kurtaran ölçeklenebilir, tam olarak yönetilen bir şekilde çalışır.

Çevrimiçi uç nokta oluşturma

Artık kayıtlı bir modeliniz olduğuna göre çevrimiçi uç noktanızı oluşturmanın zamanı geldi. Uç nokta adının Azure bölgesinin tamamında benzersiz olması gerekir. Bu öğreticide, evrensel olarak benzersiz bir tanımlayıcı UUIDkullanarak benzersiz bir ad oluşturursunuz. Uç nokta adlandırma kuralları hakkında daha fazla bilgi için bkz . uç nokta sınırları.

import uuid

# Create a unique name for the endpoint
online_endpoint_name = "credit-endpoint-" + str(uuid.uuid4())[:8]

İlk olarak, sınıfını kullanarak ManagedOnlineEndpoint uç noktayı tanımlayın.

İpucu

  • auth_mode : Anahtar tabanlı kimlik doğrulaması için kullanın key . Azure Machine Learning belirteç tabanlı kimlik doğrulaması için kullanın aml_token . A'nın key süresi dolmaz, ancak aml_token süresi dolar. Kimlik doğrulaması hakkında daha fazla bilgi için bkz . Çevrimiçi uç noktalar için istemcilerin kimliğini doğrulama.

  • İsteğe bağlı olarak, uç noktanıza bir açıklama ve etiketler ekleyebilirsiniz.

from azure.ai.ml.entities import ManagedOnlineEndpoint

# define an online endpoint
endpoint = ManagedOnlineEndpoint(
    name=online_endpoint_name,
    description="this is an online endpoint",
    auth_mode="key",
    tags={
        "training_dataset": "credit_defaults",
    },
)

Daha önce oluşturulan öğesini MLClient kullanarak çalışma alanında uç noktayı oluşturun. Bu komut uç nokta oluşturmayı başlatır ve uç nokta oluşturma işlemi devam ederken bir onay yanıtı döndürür.

Not

Uç nokta oluşturma işleminin yaklaşık 2 dakika sürmesini bekleyebilirsiniz.

# create the online endpoint
# expect the endpoint to take approximately 2 minutes.

endpoint = ml_client.online_endpoints.begin_create_or_update(endpoint).result()

Uç noktayı oluşturduktan sonra aşağıdaki gibi alabilirsiniz:

endpoint = ml_client.online_endpoints.get(name=online_endpoint_name)

print(
    f'Endpoint "{endpoint.name}" with provisioning state "{endpoint.provisioning_state}" is retrieved'
)

Çevrimiçi dağıtımları anlama

Dağıtımın temel yönleri şunlardır:

  • name - Dağıtımın adı.
  • endpoint_name - Dağıtımı içerecek uç noktanın adı.
  • model - Dağıtım için kullanılacak model. Bu değer, çalışma alanında var olan bir sürüme sahip modelin başvurusu veya satır içi model belirtimi olabilir.
  • environment - Dağıtım için kullanılacak ortam (veya modeli çalıştırmak için). Bu değer, çalışma alanında var olan bir sürüme sahip ortama başvuru veya satır içi ortam belirtimi olabilir. Ortam, Conda bağımlılıklarına sahip bir Docker görüntüsü veya Dockerfile olabilir.
  • code_configuration - kaynak kodun ve puanlama betiğinin yapılandırması.
    • path- Modeli puanlama için kaynak kod dizinine giden yol.
    • scoring_script - Kaynak kod dizinindeki puanlama dosyasının göreli yolu. Bu betik modeli belirli bir giriş isteğinde yürütür. Puanlama betiği örneği için "Çevrimiçi uç nokta ile ML modeli dağıtma" makalesindeki puanlama betiğini anlama makalesine bakın.
  • instance_type - Dağıtım için kullanılacak VM boyutu. Desteklenen boyutların listesi için bkz . Yönetilen çevrimiçi uç noktalar SKU listesi.
  • instance_count - Dağıtım için kullanılacak örnek sayısı.

MLflow modeli kullanarak dağıtım

Azure Machine Learning, MLflow ile oluşturulan ve günlüğe kaydedilen bir modelin kod içermeyen dağıtımını destekler. Bu, bir MLflow modeli eğitilirken puanlama betiği ve ortamı otomatik olarak oluşturulduğundan, model dağıtımı sırasında bir puanlama betiği veya ortam sağlamanız gerekmeyecek anlamına gelir. Ancak özel bir model kullanıyorsanız dağıtım sırasında ortamı ve puanlama betiğini belirtmeniz gerekirdi.

Önemli

Genellikle puanlama betiklerini ve özel ortamları kullanarak modelleri dağıtıyorsanız ve MLflow modellerini kullanarak aynı işlevselliği elde etmek istiyorsanız, MLflow modellerini dağıtma yönergelerini okumanızı öneririz.

Modeli uç noktaya dağıtma

Gelen trafiğin %100'ünün işlendiğini tek bir dağıtım oluşturarak başlayın. Dağıtım için rastgele bir renk adı (mavi) seçin. Uç nokta için dağıtımı oluşturmak için sınıfını ManagedOnlineDeployment kullanın.

Not

Dağıtılacak model bir MLflow modeli olduğundan bir ortam veya puanlama betiği belirtmeniz gerekmez.

from azure.ai.ml.entities import ManagedOnlineDeployment

# Choose the latest version of the registered model for deployment
model = ml_client.models.get(name=registered_model_name, version=latest_model_version)

# define an online deployment
# if you run into an out of quota error, change the instance_type to a comparable VM that is available.\
# Learn more on https://azure.microsoft.com/en-us/pricing/details/machine-learning/.
blue_deployment = ManagedOnlineDeployment(
    name="blue",
    endpoint_name=online_endpoint_name,
    model=model,
    instance_type="Standard_DS3_v2",
    instance_count=1,
)

Daha önce oluşturulan öğesini MLClient kullanarak şimdi dağıtımı çalışma alanında oluşturun. Bu komut dağıtım oluşturmayı başlatır ve dağıtım oluşturma işlemi devam ederken bir onay yanıtı döndürür.

# create the online deployment
blue_deployment = ml_client.online_deployments.begin_create_or_update(
    blue_deployment
).result()

# blue deployment takes 100% traffic
# expect the deployment to take approximately 8 to 10 minutes.
endpoint.traffic = {"blue": 100}
ml_client.online_endpoints.begin_create_or_update(endpoint).result()

Uç noktanın durumunu denetleme

Modelin hatasız dağıtılıp dağıtılmadığını görmek için uç noktanın durumunu kontrol edebilirsiniz:

# return an object that contains metadata for the endpoint
endpoint = ml_client.online_endpoints.get(name=online_endpoint_name)

# print a selection of the endpoint's metadata
print(
    f"Name: {endpoint.name}\nStatus: {endpoint.provisioning_state}\nDescription: {endpoint.description}"
)
# existing traffic details
print(endpoint.traffic)

# Get the scoring URI
print(endpoint.scoring_uri)

Uç noktayı örnek verilerle test edin

Artık model uç noktaya dağıtıldığından çıkarımını onunla çalıştırabilirsiniz. Puanlama betiğinde bulunan çalıştırma yönteminde beklenen tasarımı izleyen bir örnek istek dosyası oluşturarak başlayın.

import os

# Create a directory to store the sample request file.
deploy_dir = "./deploy"
os.makedirs(deploy_dir, exist_ok=True)

Şimdi, dosyayı dağıtım dizininde oluşturun. Aşağıdaki kod hücresi, dosyayı yeni oluşturduğunuz dizine yazmak için IPython magic kullanır.

%%writefile {deploy_dir}/sample-request.json
{
  "input_data": {
    "columns": [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22],
    "index": [0, 1],
    "data": [
            [20000,2,2,1,24,2,2,-1,-1,-2,-2,3913,3102,689,0,0,0,0,689,0,0,0,0],
            [10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 10, 9, 8]
            ]
                }
}

Daha önce oluşturulan öğesini MLClient kullanarak uç noktaya bir tanıtıcı alın. Aşağıdaki parametrelerle komutunu kullanarak invoke uç noktayı çağırabilirsiniz:

  • endpoint_name - Uç noktanın adı
  • request_file - İstek verilerini içeren dosya
  • deployment_name - Bir uç noktada test etmek için belirli dağıtımın adı

Mavi dağıtımı örnek verilerle test edin.

# test the blue deployment with the sample data
ml_client.online_endpoints.invoke(
    endpoint_name=online_endpoint_name,
    deployment_name="blue",
    request_file="./deploy/sample-request.json",
)

Dağıtımın günlüklerini alma

Uç noktanın/dağıtımın başarıyla çağrılıp çağrılmadığını görmek için günlükleri denetleyin. Hatalarla karşılaşırsanız bkz . Çevrimiçi uç nokta dağıtımı sorunlarını giderme.

logs = ml_client.online_deployments.get_logs(
    name="blue", endpoint_name=online_endpoint_name, lines=50
)
print(logs)

İkinci dağıtım oluşturma

Modeli adlı greenikinci bir dağıtım olarak dağıtın. Uygulamada, çeşitli dağıtımlar oluşturabilir ve bunların performansını karşılaştırabilirsiniz. Bu dağıtımlar aynı modelin farklı bir sürümünü, farklı bir modeli veya daha güçlü bir işlem örneğini kullanabilir.

Bu örnekte, performansı geliştirebilecek daha güçlü bir işlem örneği kullanarak aynı model sürümünü dağıtacaksınız.

# pick the model to deploy. Here you use the latest version of the registered model
model = ml_client.models.get(name=registered_model_name, version=latest_model_version)

# define an online deployment using a more powerful instance type
# if you run into an out of quota error, change the instance_type to a comparable VM that is available.\
# Learn more on https://azure.microsoft.com/en-us/pricing/details/machine-learning/.
green_deployment = ManagedOnlineDeployment(
    name="green",
    endpoint_name=online_endpoint_name,
    model=model,
    instance_type="Standard_F4s_v2",
    instance_count=1,
)

# create the online deployment
# expect the deployment to take approximately 8 to 10 minutes
green_deployment = ml_client.online_deployments.begin_create_or_update(
    green_deployment
).result()

Daha fazla trafiği işlemek için dağıtımı ölçeklendirme

Daha önce oluşturulan öğesini MLClient kullanarak dağıtım için green bir tanıtıcı alabilirsiniz. Daha sonra öğesini artırarak veya azaltarak instance_countölçeklendirin.

Aşağıdaki kodda VM örneğini el ile artıracaksınız. Ancak, çevrimiçi uç noktaları otomatik olarak ölçeklendirmek de mümkündür. Otomatik ölçeklendirme uygulamanızdaki yükü işlemek için tam olarak doğru miktarda kaynak çalıştırır. Yönetilen çevrimiçi uç noktalar, Azure İzleyici otomatik ölçeklendirme özelliğiyle tümleştirme aracılığıyla otomatik ölçeklendirmeyi destekler. Otomatik ölçeklendirmeyi yapılandırmak için bkz . Çevrimiçi uç noktaları otomatik ölçeklendirme.

# update definition of the deployment
green_deployment.instance_count = 2

# update the deployment
# expect the deployment to take approximately 8 to 10 minutes
ml_client.online_deployments.begin_create_or_update(green_deployment).result()

Dağıtımlar için trafik ayırmayı güncelleştirme

Üretim trafiğini dağıtımlar arasında bölebilirsiniz. Dağıtım için blue yaptığınız gibi ilk olarak örnek verilerle dağıtımı test green etmek isteyebilirsiniz. Yeşil dağıtımınızı test ettikten sonra, buna trafiğin küçük bir yüzdesini ayırın.

endpoint.traffic = {"blue": 80, "green": 20}
ml_client.online_endpoints.begin_create_or_update(endpoint).result()

Uç noktayı birkaç kez çağırarak trafik ayırmayı test edin:

# You can invoke the endpoint several times
for i in range(30):
    ml_client.online_endpoints.invoke(
        endpoint_name=online_endpoint_name,
        request_file="./deploy/sample-request.json",
    )

Gelen istekler olup olmadığını ve modelin green başarıyla puanlandığını denetlemek için dağıtımdaki günlükleri gösterin.

logs = ml_client.online_deployments.get_logs(
    name="green", endpoint_name=online_endpoint_name, lines=50
)
print(logs)

Azure İzleyici'yi kullanarak ölçümleri görüntüleme

Çevrimiçi uç nokta ve dağıtımları için çeşitli ölçümleri (istek numaraları, istek gecikme süresi, ağ baytları, CPU/GPU/Disk/Bellek kullanımı ve daha fazlası) stüdyodaki uç noktanın Ayrıntılar sayfasından bağlantıları izleyerek görüntüleyebilirsiniz. Bu bağlantılardan herhangi birini takip etmek sizi uç nokta veya dağıtım için Azure portalındaki tam ölçümler sayfasına götürür.

Screenshot showing links on the endpoint details page to view online endpoint and deployment metrics.

Çevrimiçi uç noktanın ölçümlerini açarsanız, aşağıdaki şekilde gösterildiği gibi ortalama istek gecikme süresi gibi ölçümleri görmek için sayfayı ayarlayabilirsiniz.

Screenshot showing online endpoint metrics in the Azure portal.

Çevrimiçi uç nokta ölçümlerini görüntüleme hakkında daha fazla bilgi için bkz . Çevrimiçi uç noktaları izleme.

Tüm trafiği yeni dağıtıma gönderme

Dağıtımınızdan green tam olarak memnun olduktan sonra tüm trafiği buna geçin.

endpoint.traffic = {"blue": 0, "green": 100}
ml_client.begin_create_or_update(endpoint).result()

Eski dağıtımı silme

Eski (mavi) dağıtımı kaldırın:

ml_client.online_deployments.begin_delete(
    name="blue", endpoint_name=online_endpoint_name
).result()

Kaynakları temizleme

Bu öğreticiyi tamamladıktan sonra uç noktayı ve dağıtımı kullanmayacaksanız, bunları silmeniz gerekir.

Not

Tam silme işleminin yaklaşık 20 dakika sürmesini bekleyin.

ml_client.online_endpoints.begin_delete(name=online_endpoint_name).result()

Her şeyi sil

Azure Machine Learning çalışma alanınızı ve tüm işlem kaynaklarını silmek için bu adımları kullanın.

Önemli

Oluşturduğunuz kaynaklar, diğer Azure Machine Learning öğreticileri ve nasıl yapılır makaleleri için önkoşul olarak kullanılabilir.

Oluşturduğunuz kaynaklardan hiçbirini kullanmayı planlamıyorsanız, ücret ödememek için bunları silin:

  1. Azure portalının en sol tarafındaki Kaynak gruplarını seçin.

  2. Listeden, oluşturduğunuz kaynak grubunu seçin.

  3. Kaynak grubunu sil'i seçin.

    Screenshot of the selections to delete a resource group in the Azure portal.

  4. Kaynak grubu adını girin. Ardından Sil'i seçin.

Sonraki adım