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)
Batch uç noktaları, büyük hacimli veriler üzerinde çıkarım çalıştıran modeller dağıtmanıza olanak tanır. Bu uç noktalar toplu puanlama için barındırma modellerini basitleştirerek altyapı yerine makine öğrenmesine odaklanabilmenizi sağlar.
Aşağıdaki durumlarda modelleri dağıtmak için toplu iş uç noktalarını kullanın:
- Çıkarım çalıştırması daha uzun süren pahalı modeller kullanırsınız.
- Birden çok dosyaya dağıtılmış büyük miktarda veriden çıkarım yaparsınız.
- Düşük gecikme süresine ihtiyacınız yoktur.
- Paralelleştirmeden yararlanırsınız.
Bu makalede, klasik MNIST (Değiştirilmiş Ulusal Standartlar ve Teknoloji Enstitüsü) sayısal tanıma sorununu çözen bir makine öğrenmesi modelini dağıtmak için bir toplu uç noktasının nasıl kullanılacağı gösterilmektedir. Dağıtılan model, görüntü dosyaları gibi büyük miktarda veri üzerinde toplu çıkarım gerçekleştirir. İşlem, Torch kullanılarak oluşturulan bir modelin toplu dağıtımını oluşturmayla başlar. Bu dağıtım, uç noktada varsayılan değer haline gelir. Daha sonra, TensorFlow (Keras) ile oluşturulmuş bir modelin ikinci dağıtımını oluşturun , ikinci dağıtımı test edin ve uç noktanın varsayılan dağıtımı olarak ayarlayın.
Önkoşullar
Bu makaledeki adımları izlemeden önce aşağıdaki önkoşullara sahip olduğunuzdan emin olun:
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ı. Yoksa, oluşturmak için Çalışma alanlarını yönetme makalesindeki adımları kullanın.
Aşağıdaki görevleri gerçekleştirmek için çalışma alanında bu izinlere sahip olduğunuzdan emin olun:
Toplu iş uç noktalarını ve dağıtımlarını oluşturmak/yönetmek için: Sahip rolünü, katkıda bulunan rolünü veya izin veren
Microsoft.MachineLearningServices/workspaces/batchEndpoints/*özel bir rolü kullanın.Çalışma alanı kaynak grubunda ARM dağıtımları oluşturmak için: Çalışma alanının dağıtıldığı kaynak grubunda izin veren
Microsoft.Resources/deployments/writesahip rolü, katkıda bulunan rolü veya özel bir rol kullanın.
Azure Machine Learning ile çalışmak için aşağıdaki yazılımı yüklemeniz gerekir:
ŞUNLAR IÇIN GEÇERLIDIR:
Azure CLI ml uzantısı v2 (geçerli)Azure CLI ve
mlAzure Machine Learning uzantısı.az extension add -n ml
Örnek deposunu kopyalama
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/endpoints/batch/deploy-models/mnist-classifier
Sisteminizi hazırlama
Çalışma alanınıza bağlanma
İlk olarak, çalıştığınız Azure Machine Learning çalışma alanına bağlanın.
Azure CLI için varsayılan ayarları henüz ayarlamadıysanız varsayılan ayarlarınızı kaydedin. Aboneliğinizin, çalışma alanınızın, kaynak grubunuzun ve konumunuzun değerlerini birden çok kez girmekten kaçınmak için şu kodu çalıştırın:
az account set --subscription <subscription>
az configure --defaults workspace=<workspace> group=<resource-group> location=<location>
İşlem oluşturma
Batch uç noktaları işlem kümelerinde çalışır ve hem Azure Machine Learning işlem kümelerini (AmlCompute) hem de Kubernetes kümelerini destekler. Kümeler paylaşılan bir kaynaktır, bu nedenle bir küme bir veya birden çok toplu dağıtım barındırabilir (isterseniz diğer iş yükleriyle birlikte).
Aşağıdaki kodda gösterildiği gibi adlı batch-clusterbir işlem oluşturun. Gerektiği gibi ayarlayın ve bilgisayarınıza başvurarak azureml:<your-compute-name> kullanın.
az ml compute create -n batch-cluster --type amlcompute --min-instances 0 --max-instances 5
Not
Bir toplu uç noktası çağrılana ve toplu puanlama işi gönderilene kadar küme 0 düğümde kaldığından bu aşamada hesaplama için ücret alınmaz. İşlem maliyetleri hakkında daha fazla bilgi için bkz . AmlCompute maliyetini yönetme ve iyileştirme.
Toplu iş uç noktası oluşturma
Toplu iş uç noktası, istemcilerin toplu puanlama işini tetiklemek için çağırdığı bir HTTPS uç noktasıdır. Toplu puanlama işi birden çok girişi puanlar. Toplu dağıtım, toplu puanlama (veya toplu çıkarım) gerçekleştiren modeli barındıran bir dizi işlem kaynağıdır. Bir toplu iş uç noktasının birden çok toplu dağıtımları olabilir. Toplu iş uç noktaları hakkında daha fazla bilgi için bkz. Toplu iş uç noktaları nedir?.
İpucu
Toplu dağıtımlardan biri, uç nokta için varsayılan dağıtım görevi görür. Uç nokta çağrıldığında, varsayılan dağıtım toplu puanlama gerçekleştirir. Toplu iş uç noktaları ve dağıtımları hakkında daha fazla bilgi için bkz. toplu iş uç noktaları ve toplu dağıtım.
Uç noktayı adlandırın. Uç noktanın adı, adı uç noktanın URI'sine dahil edildiği için Azure bölgesinde benzersiz olmalıdır. Örneğin, içinde
mybatchendpointadıwestus2olan tek bir toplu iş uç noktası olabilir.Toplu iş uç noktasını yapılandırma
Aşağıdaki YAML dosyası bir toplu iş uç noktasını tanımlar. Bu dosyayı toplu iş uç noktası oluşturmak için CLI komutuyla kullanın.
endpoint.yml
$schema: https://azuremlschemas.azureedge.net/latest/batchEndpoint.schema.json name: mnist-batch description: A batch endpoint for scoring images from the MNIST dataset. tags: type: deep-learningAşağıdaki tabloda uç noktanın temel özellikleri açıklanmaktadır. Tam toplu uç noktası YAML şeması için bkz. CLI (v2) toplu uç noktası YAML şeması.
Tuş Açıklama nameToplu iş uç noktasının adı. Azure bölge düzeyinde benzersiz olması gerekir. descriptionToplu iş uç noktasının açıklaması. Bu özellik isteğe bağlıdır. tagsUç noktaya eklenecek etiketler. Bu özellik isteğe bağlıdır. Uç noktayı oluşturun:
Toplu dağıtım oluşturma
Model dağıtımı, gerçek çıkarım yapan modeli barındırmak için gereken bir kaynak kümesidir. Toplu iş modeli dağıtımı oluşturmak için aşağıdaki öğelere ihtiyacınız vardır:
- Çalışma alanında kayıtlı bir model
- Modeli puanlayanın kodu
- Modelin bağımlılıklarının yüklü olduğu bir ortam
- Önceden oluşturulmuş işlem ve kaynak ayarları
Dağıtılacak modeli kaydederek başlayın. Popüler rakam tanıma sorunu (MNIST) için bir Torch modeli. Batch Dağıtımları yalnızca çalışma alanına kayıtlı modelleri dağıtabilir. Dağıtmak istediğiniz model zaten kayıtlıysa bu adımı atlayabilirsiniz.
İpucu
Modeller, uç nokta yerine dağıtımla ilişkilendirilir. Bu, farklı modeller (veya model sürümleri) farklı dağıtımlarda dağıtıldığında tek bir uç noktanın aynı uç nokta altında farklı modellere (veya model sürümlerine) hizmet olabileceği anlamına gelir.
Şimdi bir puanlama betiği oluşturmanın zamanı geldi. Toplu dağıtımlar, belirli bir modelin nasıl yürütülmesi gerektiğini ve giriş verilerinin nasıl işlenmesi gerektiğini gösteren bir puanlama betiği gerektirir. Batch uç noktaları Python'da oluşturulan betikleri destekler. Bu durumda, basamakları temsil eden görüntü dosyalarını okuyan ve karşılık gelen rakamı veren bir model dağıtırsınız. Puanlama betiği aşağıdaki gibidir:
Not
MLflow modellerinde Azure Machine Learning puanlama betiğini otomatik olarak oluşturur, bu nedenle bir betik sağlamanız gerekmez. Modeliniz bir MLflow modeliyse bu adımı atlayabilirsiniz. Toplu iş uç noktalarının MLflow modelleriyle nasıl çalıştığı hakkında daha fazla bilgi için Toplu dağıtımlarda MLflow modellerini kullanma makalesine bakın.
Uyarı
Toplu iş uç noktası altında Otomatik makine öğrenmesi (AutoML) modeli dağıtıyorsanız, AutoML'nin sağladığı puanlama betiğinin yalnızca çevrimiçi uç noktalar için çalıştığını ve toplu yürütme için tasarlanmadığını unutmayın. Toplu dağıtımınız için puanlama betiği oluşturma hakkında bilgi için bkz . Toplu dağıtımlar için puanlama betikleri yazma.
deployment-torch/code/batch_driver.py
import os import pandas as pd import torch import torchvision import glob from os.path import basename from mnist_classifier import MnistClassifier from typing import List def init(): global model global device # AZUREML_MODEL_DIR is an environment variable created during deployment # It is the path to the model folder model_path = os.environ["AZUREML_MODEL_DIR"] model_file = glob.glob(f"{model_path}/*/*.pt")[-1] model = MnistClassifier() model.load_state_dict(torch.load(model_file)) model.eval() device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu") def run(mini_batch: List[str]) -> pd.DataFrame: print(f"Executing run method over batch of {len(mini_batch)} files.") results = [] with torch.no_grad(): for image_path in mini_batch: image_data = torchvision.io.read_image(image_path).float() batch_data = image_data.expand(1, -1, -1, -1) input = batch_data.to(device) # perform inference predict_logits = model(input) # Compute probabilities, classes and labels predictions = torch.nn.Softmax(dim=-1)(predict_logits) predicted_prob, predicted_class = torch.max(predictions, axis=-1) results.append( { "file": basename(image_path), "class": predicted_class.numpy()[0], "probability": predicted_prob.numpy()[0], } ) return pd.DataFrame(results)Toplu dağıtımınızın çalıştığı bir ortam oluşturun. Ortamın toplu iş uç noktaları için gerekli olan paketleri
azureml-coreveazureml-dataset-runtime[fuse]değerlerinin yanı sıra kodunuzun çalıştırılması için gereken tüm bağımlılıkları içermesi gerekir. Bu durumda bağımlılıklar birconda.yamldosyada yakalanmıştır:deployment-torch/environment/conda.yaml
name: mnist-env channels: - conda-forge dependencies: - python=3.8.5 - pip<22.0 - pip: - torch==1.13.0 - torchvision==0.14.0 - pytorch-lightning - pandas - azureml-core - azureml-dataset-runtime[fuse]Önemli
ve
azureml-corepaketleriazureml-dataset-runtime[fuse]toplu dağıtımlar için gereklidir ve ortam bağımlılıklarına dahil edilmelidir.Ortamı aşağıdaki gibi belirtin:
Yan menüde Ortamlar sekmesine gidin.
Özel ortamlar>Oluştur'u seçin.
Bu örnekte
torch-batch-envortamın adını girin.Ortam kaynağını seçin için Mevcut docker görüntüsünü isteğe bağlı conda dosyasıyla kullan'ı seçin.
Kapsayıcı kayıt defteri görüntü yolu için girin
mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04.İleri'yi seçerek "Özelleştir" bölümüne gidin.
GitHub deposundan deployment-torch/environment/conda.yaml dosyasının içeriğini portala kopyalayın.
"Gözden Geçir sayfası" seçeneğine ulaşana kadar İleri'yi seçin.
Oluştur'u seçin ve ortamın hazır olmasını bekleyin.
Uyarı
Toplu dağıtımlarda seçilmiş ortamlar desteklenmez. Kendi ortamınızı belirtmeniz gerekir. süreci basitleştirmek için her zaman sizin seçtiğiniz ortamın temel görüntüsünü kullanabilirsiniz.
Dağıtım tanımı oluşturma
deployment-torch/deployment.yml
$schema: https://azuremlschemas.azureedge.net/latest/modelBatchDeployment.schema.json name: mnist-torch-dpl description: A deployment using Torch to solve the MNIST classification dataset. endpoint_name: mnist-batch type: model model: name: mnist-classifier-torch path: model code_configuration: code: code scoring_script: batch_driver.py environment: name: batch-torch-py38 image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu22.04:latest conda_file: environment/conda.yaml compute: azureml:batch-cluster resources: instance_count: 1 settings: max_concurrency_per_instance: 2 mini_batch_size: 10 output_action: append_row output_file_name: predictions.csv retry_settings: max_retries: 3 timeout: 30 error_threshold: -1 logging_level: infoAşağıdaki tabloda toplu dağıtımın temel özellikleri açıklanmaktadır. Tam toplu dağıtım YAML şeması için bkz . CLI (v2) toplu dağıtım YAML şeması.
Tuş Açıklama nameDağıtımın adı. endpoint_nameAltında dağıtımın oluşturulacağı uç noktanın adı. modelToplu puanlama için kullanılacak model. Örnek, kullanarak pathbir modeli satır içi olarak tanımlar. Bu tanım, model dosyalarının otomatik olarak karşıya yüklenmesini ve otomatik olarak oluşturulan bir ad ve sürümle kaydedilmesini sağlar. Daha fazla seçenek için Bkz. Model şeması. Üretim senaryoları için en iyi uygulama olarak modeli ayrı ayrı oluşturup burada başvurmanız gerekir. Var olan bir modele başvurmak için söz diziminiazureml:<model-name>:<model-version>kullanın.code_configuration.codeModeli puanlayan tüm Python kaynak kodunu içeren yerel dizin. code_configuration.scoring_scriptDizindeki code_configuration.codePython dosyası. Bu dosyanın birinit()işlevi ve birrun()işlevi olmalıdır.init()Yüksek maliyetli veya yaygın hazırlıklar için işlevini kullanın (örneğin, modeli belleğe yüklemek için).init(), işlemin başlangıcında yalnızca bir kez çağrılır. Her girdiyi puanlarken kullanınrun(mini_batch); değerimini_batchdosya yollarının listesidir. İşlev birrun()pandas DataFrame veya dizi döndürmelidir. Döndürülen her öğe, içindeki giriş öğesinin başarılı bir çalıştırmasınımini_batchgösterir. Puanlama betiği yazma hakkında daha fazla bilgi için bkz . Puanlama betiğini anlama.environmentModelin puanını almak için ortam. Örnek, ve conda_filekullanarak bir ortamı satır içi olarakimagetanımlar.conda_fileBağımlılıklar öğesininimageüzerine yüklenir. Ortam otomatik olarak oluşturulan bir ad ve sürümle kaydedilir. Daha fazla seçenek için Ortam şemasına bakın. Üretim senaryoları için en iyi uygulama olarak, ortamı ayrı ayrı oluşturup buraya başvurmanız gerekir. Var olan bir ortama başvurmak için söz diziminiazureml:<environment-name>:<environment-version>kullanın.computeToplu puanlama çalıştırılacak işlem. Örnek, başlangıçta oluşturulan öğesini batch-clusterkullanır ve söz diziminiazureml:<compute-name>kullanarak buna başvurur.resources.instance_countHer toplu puanlama işi için kullanılacak örnek sayısı. settings.max_concurrency_per_instanceÖrnek başına en fazla paralel scoring_scriptçalıştırma sayısı.settings.mini_batch_sizeBir çağrıda scoring_scriptişleyebileceği dosyarun()sayısı.settings.output_actionÇıkışın çıkış dosyasında nasıl düzenlenmesi gerektiği. append_rowdöndürülen tümrun()çıkış sonuçlarını adlıoutput_file_nametek bir dosyada birleştirir.summary_onlyçıkış sonuçlarını birleştirmez ve yalnızca öğesini hesaplarerror_threshold.settings.output_file_nameiçin append_rowoutput_actiontoplu puanlama çıkış dosyasının adı.settings.retry_settings.max_retriesBaşarısız scoring_scriptrun()olan için en fazla deneme sayısı.settings.retry_settings.timeoutMini toplu iş puanlama için scoring_scriptrun()saniye cinsinden zaman aşımı.settings.error_thresholdYoksayılması gereken giriş dosyası puanlama hatalarının sayısı. Girişin tamamı için hata sayısı bu değerin üzerine çıkarsa toplu puanlama işi sonlandırılır. Örnek, -1toplu puanlama işini sonlandırmadan herhangi bir sayıda hataya izin verildiğini gösteren kullanır.settings.logging_levelGünlük ayrıntı düzeyi. Ayrıntı düzeyini artırma değerleri şunlardır: UYARI, BİlGİ ve HATA AYıKLAMA. settings.environment_variablesHer toplu puanlama işi için ayarlanacağı ortam değişkeni ad-değer çiftlerinin sözlüğü. Yan menüde Uç Noktalar sekmesine gidin.
Batch uç noktalarıseçin.
Bu örnekte
mnist-batchuç noktaya bir ad verin. Kalan alanları yapılandırabilir veya boş bırakabilirsiniz."Model" bölümüne gitmek için İleri'yi seçin.
mnist-classifier-torch modelini seçin.
"Dağıtım" sayfasına gitmek için İleri'yi seçin.
Dağıtıma bir ad verin.
Çıktı eylemi için Satır ekle'nin seçili olduğundan emin olun.
Çıktı dosyası adı için, toplu puanlama çıkış dosyasının ihtiyacınız olan dosya olduğundan emin olun. Varsayılan
predictions.csvdeğeridir.Mini toplu iş boyutu için, her mini toplu işleme eklenecek dosyaların boyutunu ayarlayın. Bu boyut, puanlama betiğinizin toplu iş başına aldığı veri miktarını denetler.
Puanlama zaman aşımı (saniye) için dağıtımınızın belirli bir dosya toplu işlemini puanlaması için yeterli zaman verdiğinizden emin olun. Dosya sayısını artırırsanız, genellikle zaman aşımı değerini de artırmanız gerekir. Daha pahalı modeller (derin öğrenme tabanlı modeller gibi) bu alanda yüksek değerler gerektirebilir.
Örnek başına en fazla eşzamanlılık için, dağıtımda elde ettiğiniz her işlem örneği için sahip olmak istediğiniz yürütücü sayısını yapılandırın. Burada daha yüksek bir sayı daha yüksek bir paralelleştirme derecesini garanti eder, ancak işlem örneğindeki bellek baskısını da artırır. Mini toplu iş boyutu ile bu değeri tamamen ayarlayın.
İşiniz bittiğinde İleri'yi seçerek "Kod + ortam" sayfasına gidin.
"Çıkarım için puanlama betiği seçin" için deployment-torch/code/batch_driver.py puanlama betiği dosyasını bulup seçin.
"Ortamı seçin" bölümünde, daha önce oluşturduğunuz torch-batch-env ortamını seçin.
"İşlem" sayfasına gitmek için İleri'yi seçin.
Önceki adımda oluşturduğunuz işlem kümesini seçin.
Uyarı
Azure Kubernetes kümeleri toplu dağıtımlarda desteklenir, ancak yalnızca Azure Machine Learning CLI veya Python SDK kullanılarak oluşturulduğunda desteklenir.
Örnek sayısı için dağıtım için istediğiniz işlem örneği sayısını girin. Bu durumda 2 kullanın.
İleri'yi seçin.
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 --file deployment-torch/deployment.yml --endpoint-name $ENDPOINT_NAME --set-defaultİpucu
parametresi,
--set-defaultyeni oluşturulan dağıtımı uç noktanın varsayılan dağıtımı olarak ayarlar. Bu, özellikle ilk dağıtım oluşturma işleminde uç noktanın yeni bir varsayılan dağıtımını oluşturmanın kullanışlı bir yoludur. Üretim senaryoları için en iyi yöntem olarak, varsayılan olarak ayarlamadan yeni bir dağıtım oluşturmak isteyebilirsiniz. Dağıtımın beklediğiniz gibi çalıştığını doğrulayın ve ardından varsayılan dağıtımı daha sonra güncelleştirin. Bu işlemi uygulama hakkında daha fazla bilgi için Yeni model dağıtma bölümüne bakın.Toplu iş uç noktasını ve dağıtım ayrıntılarını denetleyin.
Batch uç noktaları sekmesini seçin.
Görüntülemek istediğiniz toplu iş uç noktasını seçin.
Uç noktanın Ayrıntılar sayfasında uç noktanın ayrıntıları ve uç noktada kullanılabilen tüm dağıtımlar gösterilir.
Toplu iş uç noktalarını çalıştırma ve sonuçlara erişme
Veri akışını anlama
Toplu iş uç noktanızı çalıştırmadan önce verilerin sistem üzerinden nasıl aktığını anlayın:
Girişler: İşlenen veriler (puan). Buna aşağıdakiler dahildir:
- Azure Depolama'da depolanan dosyalar (blob depolama, data lake)
- Birden çok dosya içeren klasörler
- Azure Machine Learning'de kayıtlı veri kümeleri
İşleme: Dağıtılan model giriş verilerini toplu olarak işler (mini toplu işler) ve tahminler oluşturur.
Çıkışlar: Azure Depolama'da dosya olarak depolanan modelin sonuçları. Varsayılan olarak, çıkışlar çalışma alanının varsayılan blob depolama alanına kaydedilir, ancak farklı bir konum belirtebilirsiniz.
Toplu iş uç noktasını çağırma
Toplu iş uç noktasını çağırmak, toplu puanlama işini tetikler. İş name , çağırma yanıtında döndürülür ve toplu puanlama ilerlemesini izler. Uç noktaların puanlandırılacak verileri bulabilmesi için giriş veri yolunu belirtin. Aşağıdaki örnekte, Azure Depolama Hesabında depolanan MNIST veri kümesinin örnek verileri üzerinden yeni bir iş başlatma işlemi gösterilmektedir.
Azure CLI, Azure Machine Learning SDK'sı veya REST uç noktalarını kullanarak toplu iş uç noktasını çalıştırabilir ve çağırabilirsiniz. Bu seçenekler hakkında daha fazla bilgi için bkz. Toplu iş uç noktaları için iş ve giriş verileri oluşturma.
Not
Paralelleştirme nasıl çalışır?
Toplu dağıtımlar, işi dosya düzeyinde dağıtır. Örneğin, 100 dosya içeren bir klasör ve 10 dosyadan oluşan mini toplu işlemler, her biri 10 dosyadan oluşan 10 toplu iş oluşturur. Bu, dosya boyutundan bağımsız olarak gerçekleşir. Dosyalar mini toplu işlerde işlenemeyecek kadar büyükse, paralelliği artırmak veya mini toplu iş başına dosya sayısını azaltmak için bunları daha küçük dosyalara bölün. Batch dağıtımları şu anda dosya boyutu dağılımındaki eğrilikleri hesaba katmıyor.
JOB_NAME=$(az ml batch-endpoint invoke --name $ENDPOINT_NAME --input $SAMPLE_INPUT_URI --input-type uri_folder --query name -o tsv)
Batch uç noktaları, farklı konumlarda bulunan dosyaların veya klasörlerin okunmasını destekler. Desteklenen türler ve bunların nasıl belirtilmesi hakkında daha fazla bilgi edinmek için bkz . Batch uç noktaları işlerinden verilere erişme.
Toplu iş yürütme ilerleme durumunu izleme
Toplu puanlama işlerinin tüm girişleri işlemesi zaman alır.
Aşağıdaki kod, iş durumunu denetler ve daha fazla ayrıntı için Azure Machine Learning stüdyosu bir bağlantı oluşturur.
az ml job show -n $JOB_NAME --web
Toplu puanlama sonuçlarını denetleme
İş çıkışları, çalışma alanının varsayılan blob depolama alanında veya belirttiğiniz depolama alanında depolanır. Varsayılanları değiştirmeyi öğrenmek için bkz . Çıkış konumunu yapılandırma. Aşağıdaki adımlar, iş tamamlandığında puanlama sonuçlarını Azure Depolama Gezgini görüntülemenizi sağlar:
Toplu puanlama işini Azure Machine Learning stüdyosu'da açmak için aşağıdaki kodu çalıştırın. job studio bağlantısı, değeri
invokeolarak yanıtınainteractionEndpoints.Studio.endpointda eklenir.az ml job show -n $JOB_NAME --webİşin grafiğinde adımı seçin
batchscoring.Çıkışlar + günlükler sekmesini ve ardından Veri çıkışlarını göster'i seçin.
Veri çıkışları'ndan simgeyi seçerek Depolama Gezgini açın.
Depolama Gezgini puanlama sonuçları aşağıdaki örnek sayfaya benzer:
Çıkış konumunu yapılandırma
Varsayılan olarak, toplu puanlama sonuçları çalışma alanının varsayılan blob deposunda işin adını taşıyan bir klasörde (sistem tarafından oluşturulan bir GUID) depolanır. Toplu iş uç noktasını çağırırken çıkış konumunu yapılandırın.
Azure Machine Learning kayıtlı veri deposundaki herhangi bir klasörü yapılandırmak için kullanın output-path . için söz dizimi--output-path, bir klasör --inputbelirttiğinizde olduğu gibi azureml://datastores/<datastore-name>/paths/<path-on-datastore>/ aynıdır. Yeni bir çıkış dosyası adı yapılandırmak için kullanın --set output_file_name=<your-file-name> .
OUTPUT_FILE_NAME=predictions_`echo $RANDOM`.csv
OUTPUT_PATH="azureml://datastores/workspaceblobstore/paths/$ENDPOINT_NAME"
JOB_NAME=$(az ml batch-endpoint invoke --name $ENDPOINT_NAME --input $SAMPLE_INPUT_URI --output-path $OUTPUT_PATH --set output_file_name=$OUTPUT_FILE_NAME --query name -o tsv)
Uyarı
Benzersiz bir çıkış konumu kullanmanız gerekir. Çıkış dosyası varsa, toplu puanlama işi başarısız olur.
Önemli
Girişlerden farklı olarak çıkışlar yalnızca blob depolama hesaplarında çalışan Azure Machine Learning veri depolarında depolanabilir.
Her iş için dağıtım yapılandırmasının üzerine yaz
Toplu iş uç noktasını çağırdığınızda, işlem kaynaklarını en iyi şekilde kullanmak ve performansı geliştirmek için bazı ayarları değiştirerek yapılandırabilirsiniz. Bu özellik, dağıtımı kalıcı olarak değiştirmeden farklı işler için farklı ayarlara ihtiyacınız olduğunda kullanışlıdır.
Hangi ayarlar geçersiz kılınabilir?
Aşağıdaki ayarları her iş için yapılandırabilirsiniz:
| Ayarlar | Ne zaman kullanılır? | Örnek senaryo |
|---|---|---|
| Örnek sayısı | Değişen veri birimleriniz olduğunda | Daha büyük veri kümeleri için daha fazla örnek kullanın (1 milyon dosya için 10 örnek ve 100.000 dosya için 2 örnek). |
| Mini toplu iş boyutu | Aktarım hızı ve bellek kullanımını dengelemeniz gerektiğinde | Büyük görüntüler için daha küçük toplu işlemler (10–50 dosya) ve küçük metin dosyaları için daha büyük toplu işlemler (100–500 dosya) kullanın. |
| En fazla yeniden deneme sayısı | Veri kalitesi değiştiğinde | Gürültülü veriler için daha yüksek yeniden denemeler (5-10); temiz veriler için daha düşük yeniden denemeler (1-3) |
| Timeout | İşleme süresi veri türüne göre değişirken | Karmaşık modeller için daha uzun zaman aşımı (300'ler); basit modeller için daha kısa zaman aşımı (30s) |
| Hata eşiği | Farklı hata tolerans düzeylerine ihtiyacınız olduğunda | Kritik işler için katı eşik (-1); deneysel işler için uzunluk eşiği (10%) |
Ayarları geçersiz kılma
JOB_NAME=$(az ml batch-endpoint invoke --name $ENDPOINT_NAME --input https://azuremlexampledata.blob.core.windows.net/data/mnist/sample --mini-batch-size 20 --instance-count 5 --query name -o tsv)
Uç noktaya dağıtım ekleme
Dağıtımı olan bir toplu iş uç noktanız olduğunda modelinizi iyileştirmeye ve yeni dağıtımlar eklemeye devam edebilirsiniz. Siz aynı uç nokta altında yeni modeller geliştirip dağıtırken Batch uç noktaları varsayılan dağıtıma hizmet almaya devam eder. Dağıtımlar birbirinizi etkilemez.
Bu örnekte, aynı MNIST sorununu çözmek için Keras ve TensorFlow ile oluşturulmuş bir modeli kullanan ikinci bir dağıtım eklersiniz.
İkinci dağıtım ekleme
Toplu dağıtımınız için bir ortam oluşturun. Kodunuzun çalışması için gereken tüm bağımlılıkları ekleyin. Kitaplığı
azureml-coreekleyin, çünkü toplu dağıtımlar için gereklidir. Aşağıdaki ortam tanımı, TensorFlow ile bir modeli çalıştırmak için gerekli kitaplıkları içerir.Deployment-keras/environment/conda.yaml dosyasının içeriğini GitHub deposundan portala kopyalayın.
"Gözden Geçir sayfasına" gelene kadar İleri'yi seçin.
Oluştur'u seçin ve ortam kullanıma hazır olana kadar bekleyin.
Kullanılan conda dosyası aşağıdaki gibi görünür:
deployment-keras/environment/conda.yaml
name: tensorflow-env channels: - conda-forge dependencies: - python=3.8.5 - pip - pip: - pandas - tensorflow - pillow - azureml-core - azureml-dataset-runtime[fuse]Model için bir puanlama betiği oluşturun:
deployment-keras/code/batch_driver.py
import os import numpy as np import pandas as pd import tensorflow as tf from typing import List from os.path import basename from PIL import Image from tensorflow.keras.models import load_model def init(): global model # AZUREML_MODEL_DIR is an environment variable created during deployment model_path = os.path.join(os.environ["AZUREML_MODEL_DIR"], "model") # load the model model = load_model(model_path) def run(mini_batch: List[str]) -> pd.DataFrame: print(f"Executing run method over batch of {len(mini_batch)} files.") results = [] for image_path in mini_batch: data = Image.open(image_path) data = np.array(data) data_batch = tf.expand_dims(data, axis=0) # perform inference pred = model.predict(data_batch) # Compute probabilities, classes and labels pred_prob = tf.math.reduce_max(tf.math.softmax(pred, axis=-1)).numpy() pred_class = tf.math.argmax(pred, axis=-1).numpy() results.append( { "file": basename(image_path), "class": pred_class[0], "probability": pred_prob, } ) return pd.DataFrame(results)Dağıtım tanımı oluşturma
deployment-keras/deployment.yml
$schema: https://azuremlschemas.azureedge.net/latest/modelBatchDeployment.schema.json name: mnist-keras-dpl description: A deployment using Keras with TensorFlow to solve the MNIST classification dataset. endpoint_name: mnist-batch type: model model: name: mnist-classifier-keras path: model code_configuration: code: code scoring_script: batch_driver.py environment: name: batch-tensorflow-py38 image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu22.04:latest conda_file: environment/conda.yaml compute: azureml:batch-cluster resources: instance_count: 1 settings: max_concurrency_per_instance: 2 mini_batch_size: 10 output_action: append_row output_file_name: predictions.csv"Kod + ortam" sayfasına gitmek için İleri'yi seçin.
Çıkarım için puanlama betiği seçin alanında deployment-keras/code/batch_driver.py puanlama betiği dosyasını seçin.
Ortam seçin alanında önceki adımda oluşturduğunuz ortamı seçin.
İleri'yi seçin.
İşlem sayfasında, önceki adımda oluşturduğunuz işlem kümesini seçin.
Örnek sayısı için dağıtım için istediğiniz işlem örneği sayısını girin. Bu durumda 2 kullanın.
İleri'yi seçin.
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 --file deployment-keras/deployment.yml --endpoint-name $ENDPOINT_NAMEİpucu
--set-defaultBu durumda parametresi eksik. Üretim senaryoları için en iyi yöntem olarak, varsayılan olarak ayarlamadan yeni bir dağıtım oluşturun. Ardından doğrulayın ve varsayılan dağıtımı daha sonra güncelleştirin.
Varsayılan olmayan toplu dağıtımı test edin
Yeni varsayılan olmayan dağıtımı test etmek için çalıştırmak istediğiniz dağıtımın adını bilmeniz gerekir.
DEPLOYMENT_NAME="mnist-keras-dpl"
JOB_NAME=$(az ml batch-endpoint invoke --name $ENDPOINT_NAME --deployment-name $DEPLOYMENT_NAME --input $SAMPLE_INPUT_URI --input-type uri_folder --query name -o tsv)
Uyarı --deployment-name , yürütülecek dağıtımı belirtmek için kullanılır. Bu parametre, toplu iş uç noktasının invoke varsayılan dağıtımını güncelleştirmeden varsayılan olmayan bir dağıtım yapmanızı sağlar.
Varsayılan toplu dağıtımı güncelleştirme
Bir uç nokta içinde belirli bir dağıtımı çağırabilirsiniz ancak genellikle uç noktanın kendisini çağırmak ve hangi dağıtımın kullanılacağına (varsayılan dağıtım) uç noktanın karar vermesine izin vermek istersiniz. Kullanıcının uç noktayı çağırmasıyla yaptığınız sözleşmeyi değiştirmeden varsayılan dağıtımı değiştirebilir (ve sonuç olarak dağıtımı sunan modeli değiştirebilirsiniz). Varsayılan dağıtımı güncelleştirmek için aşağıdaki kodu kullanın:
az ml batch-endpoint update --name $ENDPOINT_NAME --set defaults.deployment_name=$DEPLOYMENT_NAME
Toplu uç noktasını ve dağıtımı sil
Eski toplu dağıtıma ihtiyacınız yoksa aşağıdaki kodu çalıştırarak silin.
--yes bayrağı silme işlemini onaylar.
az ml batch-deployment delete --name mnist-torch-dpl --endpoint-name $ENDPOINT_NAME --yes
Toplu iş uç noktasını ve temel dağıtımlarını silmek için aşağıdaki kodu çalıştırın. Toplu puanlama işleri silinmez.
az ml batch-endpoint delete --name $ENDPOINT_NAME --yes