Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Ş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:
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.
- Toplu iş uç noktalarını ve dağıtımlarını oluşturmak veya yönetmek için: Sahip, Katkıda Bulunan veya izinlere atanmış
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:
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
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.
Tahmin için kullanılacak modeli kaydedin:
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:
İ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.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:
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:
İş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:
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:
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ı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
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.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 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.
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:
İş çıkışına erişme
İş tamamlandıktan sonra çıkışına erişebiliriz. Bu iş adlı scores
yalnızca bir çıkış içerir:
İlişkili sonuçları kullanarak az ml job download
indirebilirsiniz.
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.