Aracılığıyla paylaş


Ön işleme ile toplu puanlama gerçekleştirmek için işlem hattı dağıtma

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

Bu makalede, toplu iş uç noktası altında çıkarım (veya puanlama) işlem hattı dağıtmayı öğreneceksiniz. İşlem hattı, kayıtlı bir model üzerinde puanlama gerçekleştirirken, modelin eğitildiği zamandaki bir ön işleme bileşenini de yeniden kullanır. Aynı ön işleme bileşeninin yeniden kullanılabilmesi, puanlama sırasında aynı ön işlemenin uygulanmasını sağlar.

Öğrenecekleriniz:

  • Çalışma alanındaki mevcut bileşenleri yeniden kullanan bir işlem hattı oluşturma
  • İşlem hattını bir uç noktaya dağıtma
  • İşlem hattı tarafından oluşturulan tahminleri kullanma

Bu örnek hakkında

Bu örnekte, modelinizi çıkarım için kullanmadan önce ön işleme kodunun ve ön işleme sırasında öğrenilen parametrelerin nasıl yeniden kullanılacağı gösterilmektedir. Ön işleme kodunu ve öğrenilen parametreleri yeniden kullanarak, eğitim sırasında giriş verilerine uygulanan aynı dönüştürmelerin (normalleştirme ve özellik kodlama gibi) çıkarım sırasında da uygulanmasını sağlayabiliriz. Çıkarım için kullanılan model, UCI Kalp Hastalığı Veri Kümesi'nden alınan tablosal veriler üzerinde tahminler gerçekleştirir.

İşlem hattının görselleştirmesi aşağıdaki gibidir:

Çıkışların yanı sıra puanlama bileşeninden oluşan çıkarım işlem hattının ekran görüntüsü ve bir eğitim işlem hattından bileşen hazırlama.

Bu makaledeki örnek, azureml-examples deposunda yer alan kod örneklerini temel alır. YAML ve diğer dosyaları kopyalamak veya yapıştırmak zorunda kalmadan komutları yerel olarak çalıştırmak için aşağıdaki komutları kullanarak depoyu kopyalayın ve kodlama dilinizin klasörüne gidin:

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

Bu örnekteki dosyalar şunlardır:

cd endpoints/batch/deploy-pipelines/batch-scoring-with-preprocessing

Jupyter not defterlerinde birlikte izleyin

Kopyalanan depoda sdk-deploy-and-test.ipynb not defterini açarak bu örneğin Python SDK sürümünü takip edebilirsiniz.

Önkoşullar

  • Azure aboneliği. Azure aboneliğiniz yoksa başlamadan önce ücretsiz bir hesap oluşturun.

  • Azure Machine Learning çalışma alanı. Çalışma alanı oluşturmak için bkz . Azure Machine Learning çalışma alanlarını yönetme.

  • Azure Machine Learning çalışma alanında aşağıdaki izinler:

    • Toplu iş uç noktalarını ve dağıtımlarını oluşturmak veya yönetmek için: Sahip, Katkıda Bulunan veya izinlere atanmış Microsoft.MachineLearningServices/workspaces/batchEndpoints/* özel bir rol kullanın.
    • Çalışma alanı kaynak grubunda Azure Resource Manager dağıtımları oluşturmak için: Çalışma alanının dağıtıldığı kaynak grubunda izin atanmış Microsoft.Resources/deployments/write bir Sahip, Katkıda Bulunan veya özel rol kullanın.
  • Azure Machine Learning CLI veya Python için Azure Machine Learning SDK'sı:

    Azure CLI'yi ve Azure Machine Learning uzantısını ml yüklemek için aşağıdaki komutu çalıştırın:

    az extension add -n ml
    

    Toplu uç noktalar için işlem hattı bileşeni dağıtımları, Azure CLI uzantısının ml 2.7 sürümünde kullanıma sunulmuştur. az extension update --name ml En son sürümü almak için komutunu kullanın.


Çalışma alanınıza bağlanma

Çalışma alanı, Azure Machine Learning için en üst düzey kaynaktır. Azure Machine Learning'i kullanırken oluşturduğunuz tüm yapıtlarla çalışmak için merkezi bir yer sağlar. Bu bölümde, dağıtım görevlerinizi gerçekleştirdiğiniz çalışma alanına bağlanacaksınız.

Aşağıdaki komutta abonelik kimliğinizi, çalışma alanı adınızı, kaynak grubu adınızı ve konumunuzu girin:

az account set --subscription <subscription>
az configure --defaults workspace=<workspace> group=<resource-group> location=<location>

Çıkarım işlem hattını oluşturma

Bu bölümde çıkarım işlem hattımız için gereken tüm varlıkları oluşturacağız. öncelikle işlem hattının bileşenleri için gerekli kitaplıkları içeren bir ortam oluşturacağız. Ardından, toplu dağıtımın çalıştırılacağı bir işlem kümesi oluşturacağız. Daha sonra çıkarım işlem hattımızı oluşturmak için ihtiyacımız olan bileşenleri, modelleri ve dönüşümleri kaydedeceğiz. Son olarak işlem hattını oluşturup test edeceğiz.

Ortamı oluşturma

Bu örnekteki bileşenler ve XGBoost kitaplıklarıyla bir scikit-learn ortam kullanır. Dosya environment/conda.yml , ortamın yapılandırmasını içerir:

ortam/conda.yml

channels:
- conda-forge
dependencies:
- python=3.8.5
- pip
- pip:
  - mlflow
  - azureml-mlflow
  - datasets
  - jobtools
  - cloudpickle==1.6.0
  - dask==2023.2.0
  - scikit-learn==1.1.2
  - xgboost==1.3.3
name: mlflow-env

Ortamı aşağıdaki gibi oluşturun:

  1. Ortamı tanımlayın:

    ortam/xgboost-sklearn-py38.yml

    $schema: https://azuremlschemas.azureedge.net/latest/environment.schema.json
    name: xgboost-sklearn-py38
    image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest
    conda_file: conda.yml
    description: An environment for models built with XGBoost and Scikit-learn.
    
  2. Ortamı oluşturun:

    az ml environment create -f environment/xgboost-sklearn-py38.yml
    

İşlem kümesi oluşturma

Batch uç noktaları ve dağıtımları işlem kümelerinde çalışır. Çalışma alanında zaten var olan herhangi bir Azure Machine Learning işlem kümesinde çalıştırılabilir. Bu nedenle, birden çok toplu dağıtım aynı işlem altyapısını paylaşabilir. Bu örnekte adlı batch-clusterbir Azure Machine Learning işlem kümesi üzerinde çalışacağız. İşlemin çalışma alanında mevcut olduğunu doğrulayalım veya başka bir şekilde oluşturalım.

az ml compute create -n batch-cluster --type amlcompute --min-instances 0 --max-instances 5

Bileşenleri ve modelleri kaydetme

Çıkarım işlem hattımızı oluşturmak için ihtiyacımız olan bileşenleri, modelleri ve dönüşümleri kaydedeceğiz. Bu varlıkların bazılarını eğitim rutinleri için yeniden kullanabiliriz.

İpucu

Bu öğreticide modeli ve önceki bir eğitim işlem hattındaki ön işleme bileşenini yeniden kullanacağız. Toplu iş uç noktalarıyla eğitim işlem hattını dağıtma örneğini izleyerek bunların nasıl oluşturulduğunu görebilirsiniz.

  1. Tahmin için kullanılacak modeli kaydedin:

    az ml model create --name heart-classifier --type mlflow_model --path model
    
  2. Kayıtlı model doğrudan giriş verileri üzerinde eğitildi. Bunun yerine, giriş verileri eğitimden önce hazırlama bileşeni kullanılarak önceden işlendi (veya dönüştürüldü). Bu bileşeni de kaydetmemiz gerekir. Hazırlama bileşenini kaydedin:

    az ml component create -f components/prepare/prepare.yml
    

    İpucu

    Hazırlama bileşenini kaydettikten sonra artık çalışma alanından bu bileşene başvurabilirsiniz. Örneğin, azureml:uci_heart_prepare@latest hazırlama bileşeninin son sürümünü alır.

  3. Hazırlama bileşenindeki veri dönüştürmelerinin bir parçası olarak, giriş verileri tahmincileri ortalamak ve değerlerini [-1, 1] aralığında sınırlandırmak için normalleştirildi. Dönüştürme parametreleri, daha sonra yeni verilerimiz olduğunda uygulamak üzere kaydedebileceğimiz bir scikit-learn dönüşümünde yakalandı. Dönüştürmeyi aşağıdaki gibi kaydedin:

    az ml model create --name heart-classifier-transforms --type custom_model --path transformations
    
  4. Belirli bir model için tahminleri hesaplayan adlı score başka bir bileşeni kullanarak kayıtlı model için çıkarım yapacağız. Bileşene doğrudan tanımından başvuracağız.

    İpucu

    En iyi yöntem, bileşeni kaydetmek ve işlem hattından başvurmaktır. Ancak bu örnekte, eğitim işlem hattından hangi bileşenlerin yeniden kullanıldığını ve hangilerinin yeni olduğunu görmenize yardımcı olmak için bileşene doğrudan tanımından başvuracağız.

İşlem hattını oluşturma

Şimdi tüm öğeleri birbirine bağlamanın zamanı geldi. Dağıtacağımız çıkarım işlem hattının iki bileşeni vardır (adımlar):

  • preprocess_job: Bu adım giriş verilerini okur ve hazırlanan verileri ve uygulanan dönüştürmeleri döndürür. Adım iki giriş alır:
    • data: Puanlama için giriş verilerini içeren bir klasör
    • transformations: (isteğe bağlı) Varsa uygulanacak dönüşümlerin yolu. Sağlandığında, dönüştürmeler yolda belirtilen modelden okunur. Ancak, yol sağlanmazsa, dönüştürmeler giriş verilerinden öğrenilir. Ancak çıkarım için, eğitim sırasında öğrenilen parametre değerlerini kullanmanız gerektiğinden giriş verilerinden dönüştürme parametrelerini (bu örnekte normalleştirme katsayıları) öğrenemezsiniz. Bu giriş isteğe bağlı olduğundan, preprocess_job bileşen eğitim ve puanlama sırasında kullanılabilir.
  • score_job: Bu adım, giriş modelini kullanarak dönüştürülen veriler üzerinde çıkarım gerçekleştirir. Bileşenin çıkarım yapmak için bir MLflow modeli kullandığına dikkat edin. Son olarak, puanlar okundukları biçimde geri yazılır.

İşlem hattı yapılandırması dosyasında tanımlanır pipeline.yml :

pipeline.yml

$schema: https://azuremlschemas.azureedge.net/latest/pipelineComponent.schema.json
type: pipeline

name: batch_scoring_uci_heart
display_name: Batch Scoring for UCI heart
description: This pipeline demonstrates how to make batch inference using a model from the Heart Disease Data Set problem, where pre and post processing is required as steps. The pre and post processing steps can be components reusable from the training pipeline.

inputs:
  input_data:
    type: uri_folder
  score_mode:
    type: string
    default: append

outputs: 
  scores:
    type: uri_folder
    mode: upload

jobs:
  preprocess_job:
    type: command
    component: azureml:uci_heart_prepare@latest
    inputs:
      data: ${{parent.inputs.input_data}}
      transformations: 
        path: azureml:heart-classifier-transforms@latest
        type: custom_model
    outputs:
      prepared_data:
  
  score_job:
    type: command
    component: components/score/score.yml
    inputs:
      data: ${{parent.jobs.preprocess_job.outputs.prepared_data}}
      model:
        path: azureml:heart-classifier@latest
        type: mlflow_model
      score_mode: ${{parent.inputs.score_mode}}
    outputs:
      scores: 
        mode: upload
        path: ${{parent.outputs.scores}}

İşlem hattının görselleştirmesi aşağıdaki gibidir:

Ön işleme ile toplu puanlama gösteren çıkarım işlem hattının ekran görüntüsü.

İşlem hattını test edin

Şimdi işlem hattını bazı örnek verilerle test edelim. Bunu yapmak için işlem hattını ve batch-cluster daha önce oluşturulan işlem kümesini kullanarak bir iş oluşturacağız.

Aşağıdaki pipeline-job.yml dosya işlem hattı işinin yapılandırmasını içerir:

pipeline-job.yml

$schema: https://azuremlschemas.azureedge.net/latest/pipelineJob.schema.json
type: pipeline

display_name: uci-classifier-score-job
description: |-
  This pipeline demonstrate how to make batch inference using a model from the Heart \
  Disease Data Set problem, where pre and post processing is required as steps. The \
  pre and post processing steps can be components reused from the training pipeline.

compute: batch-cluster
component: pipeline.yml
inputs:
  input_data:
    type: uri_folder
  score_mode: append
outputs: 
  scores:
    mode: upload

Test işini oluşturun:

az ml job create -f pipeline-job.yml --set inputs.input_data.path=data/unlabeled

Toplu iş uç noktası oluşturma

  1. Uç nokta için bir ad belirtin. Çağrı URI'sini oluşturmak için ad kullanıldığından, bir toplu iş uç noktasının adının her bölgede benzersiz olması gerekir. Benzersizliği sağlamak için, aşağıdaki kodda belirtilen ada sondaki karakterleri ekleyin.

    ENDPOINT_NAME="uci-classifier-score"
    
  2. Uç noktayı yapılandırın:

    Dosya uç endpoint.yml noktanın yapılandırmasını içerir.

    endpoint.yml

    $schema: https://azuremlschemas.azureedge.net/latest/batchEndpoint.schema.json
    name: uci-classifier-score
    description: Batch scoring endpoint of the Heart Disease Data Set prediction task.
    auth_mode: aad_token
    
  3. Uç noktayı oluşturun:

    az ml batch-endpoint create --name $ENDPOINT_NAME -f endpoint.yml
    
  4. Uç nokta URI'sini sorgula:

    az ml batch-endpoint show --name $ENDPOINT_NAME
    

İşlem hattı bileşenini dağıtma

İşlem hattı bileşenini dağıtmak için bir toplu dağıtım oluşturmamız gerekir. Dağıtım, fiili işi yapan varlığı barındırmak için gereken bir kaynak kümesidir.

  1. Dağıtımı yapılandırma

    Dosya, deployment.yml dağıtımın yapılandırmasını içerir. Ek özellikler için tam toplu iş uç noktası YAML şemasını denetleyebilirsiniz.

    deployment.yml

    $schema: https://azuremlschemas.azureedge.net/latest/pipelineComponentBatchDeployment.schema.json
    name: uci-classifier-prepros-xgb
    endpoint_name: uci-classifier-batch
    type: pipeline
    component: pipeline.yml
    settings:
        continue_on_step_failure: false
        default_compute: batch-cluster
    
  2. Dağıtımı oluşturma

    Toplu iş uç noktası altında bir toplu dağıtım oluşturmak ve bunu varsayılan dağıtım olarak ayarlamak için aşağıdaki kodu çalıştırın.

    az ml batch-deployment create --endpoint $ENDPOINT_NAME -f deployment.yml --set-default
    

    İpucu

    Bu yeni dağıtımın --set-default artık varsayılan olduğunu belirtmek için bayrağının kullanıldığına dikkat edin.

  3. Dağıtımınız kullanıma hazır.

Dağıtımı test etme

Dağıtım oluşturulduktan sonra iş almaya hazır olur. Test etmek için şu adımları izleyin:

  1. Dağıtımımız için bir veri girişi ve bir değişmez değer girişi belirtmemiz gerekir.

    Dosya, inputs.yml giriş veri varlığının tanımını içerir:

    inputs.yml

    inputs:
      input_data:
        type: uri_folder
        path: data/unlabeled
      score_mode:
        type: string
        default: append
    outputs:
      scores:
        type: uri_folder
        mode: upload
    

    İpucu

    Girişleri belirtme hakkında daha fazla bilgi edinmek için bkz . Toplu iş uç noktaları için iş ve giriş verileri oluşturma.

  2. Varsayılan dağıtımı aşağıdaki gibi çağırabilirsiniz:

    JOB_NAME=$(az ml batch-endpoint invoke -n $ENDPOINT_NAME --f inputs.yml --query name -o tsv)
    
  3. Gösterinin ilerleme durumunu izleyebilir ve günlüklerin akışını şu şekilde yapabilirsiniz:

    az ml job stream -n $JOB_NAME
    

İş çıkışına erişme

İş tamamlandıktan sonra çıkışına erişebiliriz. Bu iş adlı scoresyalnızca bir çıkış içerir:

İlişkili sonuçları kullanarak az ml job downloadindirebilirsiniz.

az ml job download --name $JOB_NAME --output-name scores

Puanlanan verileri okuyun:

import pandas as pd
import glob

output_files = glob.glob("named-outputs/scores/*.csv")
score = pd.concat((pd.read_csv(f) for f in output_files))
score

Çıkış aşağıdaki gibi görünür:

yaş seks ... thal tahmin
0.9338 1 ... 2 0
1.3782 1 ... 3 1
1.3782 1 ... 4 0
-1.954 1 ... 3 0

Çıkış, tahminlerin yanı sıra önceden işlenmiş puan bileşenine sağlanan verileri içerir. Örneğin, sütun age normalleştirilmiştir ve sütun thal özgün kodlama değerlerini içerir. Pratikte, muhtemelen yalnızca tahminin çıktısını almak ve ardından bunu özgün değerlerle birleştirmeyi istersiniz. Bu çalışma okuyucuya bırakılmıştır.

Kaynakları temizleme

İşiniz bittiğinde, ilişkili kaynakları çalışma alanından silin:

Toplu iş uç noktasını ve temel dağıtımını silmek için aşağıdaki kodu çalıştırın. --yes silme işlemini onaylamak için kullanılır.

az ml batch-endpoint delete -n $ENDPOINT_NAME --yes

(İsteğe bağlı) İşlem kümenizi daha sonraki dağıtımlarla yeniden kullanmak istemiyorsanız işlemi silin.

az ml compute delete -n batch-cluster

Sonraki adımlar