Aracılığıyla paylaş


Toplu iş uç noktalarıyla eğitim işlem hattını kullanıma hazır hale getirme

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

Bu makalede, bir eğitim işlem hattını toplu iş uç noktası altında nasıl kullanıma sunacağınızı öğreneceksiniz. İşlem hattı model eğitimi, veri ön işleme ve model değerlendirmesi içeren birden çok bileşen (veya adım) kullanır.

Öğrenecekleriniz:

  • Eğitim işlem hattı oluşturma ve test edin
  • İşlem hattını toplu iş uç noktasına dağıtma
  • İşlem hattını değiştirme ve aynı uç noktada yeni bir dağıtım oluşturma
  • Yeni dağıtımı test edin ve varsayılan dağıtım olarak ayarlayın

Bu örnek hakkında

Bu örnek, giriş eğitim verilerini alan (etiketli) bir eğitim işlem hattı dağıtır ve değerlendirme sonuçları ve ön işleme sırasında uygulanan dönüşümlerle birlikte tahmine dayalı bir model oluşturur. İşlem hattı, XGBoost modelini eğitmek için UCI Kalp Hastalığı Veri Kümesindeki tablosal verileri kullanır. Verileri, modeli sığdırmak ve değerlendirmek üzere eğitim bileşenine gönderilmeden önce önceden işlemek için bir veri ön işleme bileşeni kullanırız.

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

Ön işleme ve eğitim bileşenlerini gösteren işlem hattının ekran görüntüsü.

Bu makaledeki örnek, azureml-examples deposunda yer alan kod örneklerini temel alır. YAML ve diğer dosyaları kopyalamak/yapıştırmak zorunda kalmadan komutları yerel olarak çalıştırmak için önce depoyu kopyalayın ve ardından dizinleri klasöre değiştirin:

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

Bu örnekteki dosyalar şunlardır:

cd endpoints/batch/deploy-pipelines/training-with-components

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'in ücretsiz veya ücretli sürümünü deneyin.

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

  • Machine Learning çalışma alanında aşağıdaki izinlere sahip olduğunuzdan emin olun:

    • Toplu iş uç noktalarını ve dağıtımlarını oluşturma veya yönetme: İzin veren Microsoft.MachineLearningServices/workspaces/batchEndpoints/*bir Sahip, Katkıda Bulunan veya Özel rol kullanın.
    • Çalışma alanı kaynak grubunda Azure Resource Manager dağıtımları oluşturma: Çalışma alanının dağıtıldığı kaynak grubunda izin veren Microsoft.Resources/deployments/write bir Sahip, Katkıda Bulunan veya Özel rol kullanın.
  • Machine Learning ile çalışmak için aşağıdaki yazılımı yükleyin:

    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
    

    Batch 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ı Machine Learning için en üst düzey kaynaktır. 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ğiniz, çalışma alanınız, konumunuz ve kaynak grubunuzun değerlerini girin:

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

Eğitim işlem hattı bileşenini oluşturma

Bu bölümde, eğitim işlem hattımız için gereken tüm varlıkları oluşturacağız. Modeli eğitmek için gerekli kitaplıkları içeren bir ortam oluşturarak başlayacağız. Ardından toplu dağıtımın çalıştırılacağı bir işlem kümesi oluşturacağız ve son olarak giriş verilerini veri varlığı olarak kaydedeceğiz.

Ortamı oluşturma

Bu örnekteki bileşenler ve scikit-learn kitaplıklarıyla bir XGBoost 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
  - pandas==1.4
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

Eğitim verilerini veri varlığı olarak kaydetme

Eğitim verilerimiz CSV dosyalarında gösterilir. Üretim düzeyi daha yüksek bir iş yükünü taklit etmek için eğitim verilerini heart.csv çalışma alanında veri varlığı olarak dosyaya kaydedeceğiz. Bu veri varlığı daha sonra uç noktaya giriş olarak gösterilir.

az ml data create --name heart-classifier-train --type uri_folder --path data/train

İşlem hattını oluşturma

Operasyonel hale getirmek istediğimiz işlem hattı bir giriş, eğitim verileri alır ve üç çıkış üretir: eğitilen model, değerlendirme sonuçları ve ön işlem olarak uygulanan veri dönüştürmeleri. İşlem hattı iki bileşenden oluşur:

  • preprocess_job: Bu adım giriş verilerini okur ve hazırlanan verileri ve uygulanan dönüştürmeleri döndürür. Adım üç giriş alır:
    • data: Dönüştürülecek ve puanlanması gereken giriş verilerini içeren bir klasör
    • transformations: (isteğe bağlı) Varsa uygulanacak dönüşümlerin yolu. Yol sağlanmazsa, dönüştürmeler giriş verilerinden öğrenilir. transformations Giriş isteğe bağlı olduğundan, preprocess_job bileşen eğitim ve puanlama sırasında kullanılabilir.
    • categorical_encoding: kategorik özellikler için kodlama stratejisi (ordinal veya onehot).
  • train_job: Bu adım, hazırlanan verileri temel alan bir XGBoost modelini eğitir ve değerlendirme sonuçlarını ve eğitilen modeli döndürür. Adım üç giriş alır:
    • data: önceden işlenmiş veriler.
    • target_column: tahmin etmek istediğimiz sütun.
    • eval_size: değerlendirme için kullanılan giriş verilerinin oranını gösterir.

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

dağıtım-sıralı/pipeline.yml

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

name: uci-heart-train-pipeline
display_name: uci-heart-train
description: This pipeline demonstrates how to train a machine learning classifier over the UCI heart dataset.

inputs:
  input_data:
    type: uri_folder

outputs: 
  model:
    type: mlflow_model
    mode: upload
  evaluation_results:
    type: uri_folder
    mode: upload
  prepare_transformations:
    type: uri_folder
    mode: upload

jobs:
  preprocess_job:
    type: command
    component: ../components/prepare/prepare.yml
    inputs:
      data: ${{parent.inputs.input_data}}
      categorical_encoding: ordinal
    outputs:
      prepared_data:
      transformations_output: ${{parent.outputs.prepare_transformations}}
  
  train_job:
    type: command
    component: ../components/train_xgb/train_xgb.yml
    inputs:
      data: ${{parent.jobs.preprocess_job.outputs.prepared_data}}
      target_column: target
      register_best_model: false
      eval_size: 0.3
    outputs:
      model: 
        mode: upload
        type: mlflow_model
        path: ${{parent.outputs.model}}
      evaluation_results:
        mode: upload
        type: uri_folder
        path: ${{parent.outputs.evaluation_results}}

Not

pipeline.yml dosyasında transformations girişi eksiktirpreprocess_job; bu nedenle betik, giriş verilerinden dönüştürme parametrelerini öğrenir.

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

İşlem hattının her adımındaki iş girişini, işlem hattı bileşenlerini ve çıkışları gösteren işlem hattının 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:

dağıtım-sıralı/pipeline-job.yml

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

experiment_name: uci-heart-train-pipeline
display_name: uci-heart-train-job
description: This pipeline demonstrates how to train a machine learning classifier over the UCI heart dataset.

compute: batch-cluster
component: pipeline.yml
inputs:
  input_data:
    type: uri_folder
outputs: 
  model:
    type: mlflow_model
    mode: upload
  evaluation_results:
    type: uri_folder
    mode: upload
  prepare_transformations:
    mode: upload

Test işini oluşturun:

az ml job create -f deployment-ordinal/pipeline-job.yml --set inputs.input_data.path=azureml:heart-classifier-train@latest

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-train"
    
  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-train
    description: An endpoint to perform training 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ırın:

    Dosya, deployment-ordinal/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.

    dağıtım sıralı/deployment.yml

    $schema: https://azuremlschemas.azureedge.net/latest/pipelineComponentBatchDeployment.schema.json
    name: uci-classifier-train-xgb
    description: A sample deployment that trains an XGBoost model for the UCI dataset.
    endpoint_name: uci-classifier-train
    type: pipeline
    component: pipeline.yml
    settings:
        continue_on_step_failure: false
        default_compute: batch-cluster
    
  2. Dağıtımı oluşturun:

    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-ordinal/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 tek bir veri 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: azureml:heart-classifier-train@latest
    

    İ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
    

Toplu iş uç noktasında giriş olarak yalnızca işlem hattının girişlerinin yayımlandığını belirtmek gerekir. Örneğin, categorical_encoding işlem hattının bir adımının girişidir, ancak işlem hattındaki bir giriş değildir. İstemcilerinize hangi girişleri göstermek istediğinizi ve hangilerini gizlemek istediğinizi denetlemek için bu gerçeği kullanın.

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

İş tamamlandıktan sonra bazı çıkışlarına erişebiliriz. Bu işlem hattı bileşenleri için aşağıdaki çıkışları üretir:

  • preprocess job: output is transformations_output
  • train job: çıkışlar model ve evaluation_results

İlişkili sonuçları şu şekilde indirebilirsiniz:

az ml job download --name $JOB_NAME --output-name transformations
az ml job download --name $JOB_NAME --output-name model
az ml job download --name $JOB_NAME --output-name evaluation_results

Uç noktada yeni dağıtım oluşturma

Uç noktalar aynı anda birden çok dağıtım barındırabilir ve yalnızca bir dağıtımı varsayılan olarak tutabilir. Bu nedenle, farklı modellerinizi yineleyebilir, farklı modelleri uç noktanıza dağıtabilir ve test edebilir ve son olarak varsayılan dağıtımı sizin için en uygun model dağıtımına geçirebilirsiniz.

Daha iyi performans gösteren bir model alıp almadığımıza bakmak için işlem hattında ön işlemenin nasıl yapıldığını değiştirelim.

İşlem hattının ön işleme bileşenindeki bir parametreyi değiştirme

Ön işleme bileşeni, veya onehotdeğerlerine ordinal sahip olabilecek adlı categorical_encodingbir girişe sahiptir. Bu değerler kategorik özellikleri kodlamanın iki farklı yoluna karşılık gelir.

  • ordinal: Özellik değerlerini, özelliğindeki kategori sayısı olan n sayısal değerlerle (sıralı) [1:n]kodlar. Sıralı kodlama, özellik kategorileri arasında doğal bir sıralama sırası olduğunu gösterir.
  • onehot: Doğal sıralı ilişki anlamına gelmez, ancak kategori sayısı büyükse boyutsallık sorununa neden olur.

Varsayılan olarak, daha önce kullandık ordinal . Şimdi kategorik kodlamayı kullanacak onehot şekilde değiştirelim ve modelin nasıl performans sergilediğini görelim.

İpucu

Alternatif olarak, girişi istemcilere işlem hattı işinin categorial_encoding kendisine giriş olarak göstermiş de olabilirdik. Ancak, dağıtımın içindeki parametreyi gizleyebilmemiz ve denetleyebilmemiz ve aynı uç nokta altında birden çok dağıtıma sahip olabilme fırsatından yararlanabilmemiz için ön işleme adımındaki parametre değerini değiştirmeyi seçtik.

  1. İşlem hattını değiştirin. Aşağıdaki gibi görünür:

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

    deployment-onehot/pipeline.yml

    $schema: https://azuremlschemas.azureedge.net/latest/pipelineComponent.schema.json
    type: pipeline
    
    name: uci-heart-train-pipeline
    display_name: uci-heart-train
    description: This pipeline demonstrates how to train a machine learning classifier over the UCI heart dataset.
    
    inputs:
      input_data:
        type: uri_folder
    
    outputs: 
      model:
        type: mlflow_model
        mode: upload
      evaluation_results:
        type: uri_folder
        mode: upload
      prepare_transformations:
        type: uri_folder
        mode: upload
    
    jobs:
      preprocess_job:
        type: command
        component: ../components/prepare/prepare.yml
        inputs:
          data: ${{parent.inputs.input_data}}
          categorical_encoding: onehot
        outputs:
          prepared_data:
          transformations_output: ${{parent.outputs.prepare_transformations}}
      
      train_job:
        type: command
        component: ../components/train_xgb/train_xgb.yml
        inputs:
          data: ${{parent.jobs.preprocess_job.outputs.prepared_data}}
          target_column: target
          eval_size: 0.3
        outputs:
          model: 
            type: mlflow_model
            path: ${{parent.outputs.model}}
          evaluation_results:
            type: uri_folder
            path: ${{parent.outputs.evaluation_results}}
    
  2. Dağıtımı yapılandırın:

    Dosya, deployment-onehot/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-onehot/deployment.yml

    $schema: https://azuremlschemas.azureedge.net/latest/pipelineComponentBatchDeployment.schema.json
    name: uci-classifier-train-onehot
    description: A sample deployment that trains an XGBoost model for the UCI dataset using onehot encoding for variables.
    endpoint_name: uci-classifier-train
    type: pipeline
    component: pipeline.yml
    settings:
        continue_on_step_failure: false
        default_compute: batch-cluster
    
  3. Dağıtımı oluşturun:

    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-onehot/deployment.yml
    

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

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

Zaman uyumsuz dağıtımı test edin

Dağıtım oluşturulduktan sonra iş almaya hazır olur. Daha önce yaptığımız gibi test edebiliriz, ancak şimdi belirli bir dağıtımı çağıracağız:

  1. Dağıtımı aşağıdaki gibi çağırın ve belirli uci-classifier-train-onehotbir dağıtımı tetikleyen dağıtım parametresini belirtin:

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

    az ml job stream -n $JOB_NAME
    

Yeni dağıtımı varsayılan dağıtım olarak yapılandırma

Yeni dağıtımın performansından memnun olduktan sonra, bu yeni dağıtımı varsayılan olarak ayarlayabiliriz:

az ml batch-endpoint update --name $ENDPOINT_NAME --set defaults.deployment_name=$DEPLOYMENT_NAME

Eski dağıtımı silme

İşiniz bittiğinde, artık ihtiyacınız yoksa eski dağıtımı silebilirsiniz:

az ml batch-deployment delete --name uci-classifier-train-xgb --endpoint-name $ENDPOINT_NAME --yes

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