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:
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.
- Toplu iş uç noktalarını ve dağıtımlarını oluşturma veya yönetme: İzin veren
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:
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.
Ortamı oluşturun:
İş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-cluster
bir 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örtransformations
: (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
veyaonehot
).
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ı 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
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.
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
Uç noktayı oluşturun:
Uç nokta URI'sini sorgula:
İş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.
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
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.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:
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.
Varsayılan dağıtımı aşağıdaki gibi çağırabilirsiniz:
Gösterinin ilerleme durumunu izleyebilir ve günlüklerin akışını şu şekilde yapabilirsiniz:
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 istransformations_output
train job
: çıkışlarmodel
veevaluation_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 onehot
değerlerine ordinal
sahip olabilecek adlı categorical_encoding
bir 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ı olann
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.
İş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}}
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
Dağıtımı oluşturun:
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:
Dağıtımı aşağıdaki gibi çağırın ve belirli
uci-classifier-train-onehot
bir dağıtımı tetikleyen dağıtım parametresini belirtin:Gösterinin ilerleme durumunu izleyebilir ve günlüklerin akışını şu şekilde yapabilirsiniz:
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.