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:
Python SDK'sı azure-ai-ml v2 (geçerli)
Bu makalede, Azure Machine Learning Python SDK v2 kullanarak pyTorch modelini eğitmeyi, hiper parametre ayarlamayı ve dağıtmayı öğreneceksiniz.
PyTorch'un transfer öğrenme öğreticisine dayalı bir derin öğrenme sinir ağı (DNN) oluşturmak için tavuk ve hindi görüntülerini sınıflandırmak için örnek betikler kullanırsınız. Öğrenmeyi aktarma, bir sorunun çözülmesinden elde edilen bilgileri farklı ama ilgili bir soruna uygulayan bir tekniktir. Öğrenme aktarımı sıfırdan eğitime kıyasla daha az veri, zaman ve işlem kaynağı gerektirerek eğitim sürecini kısaltır. Öğrenme aktarımı hakkında daha fazla bilgi edinmek için bkz . Derin öğrenme ve makine öğrenmesi.
İster sıfırdan bir derin öğrenme PyTorch modeli eğitin ister mevcut bir modeli buluta taşıyın, Azure Machine Learning'i kullanarak esnek bulut işlem kaynaklarını kullanarak açık kaynak eğitim işlerinin ölçeğini artırın. Azure Machine Learning ile üretim sınıfı modeller oluşturabilir, dağıtabilir, sürüm oluşturabilir ve izleyebilirsiniz.
Önkoşullar
- Azure aboneliği. Henüz bir hesabınız yoksa ücretsiz bir hesap oluşturun.
- Python 3.10 veya üzeri.
- Azure Machine Learning işlem örneğini veya kendi Jupyter not defterinizi kullanarak bu makaledeki kodu çalıştırın.
- Azure Machine Learning işlem örneği; indirme veya yükleme gerekmez:
- Hızlı Başlangıcı tamamlayın: SDK ve örnek depo ile önceden yüklenmiş ayrılmış bir not defteri sunucusu oluşturmak için Azure Machine Learning'i kullanmaya başlayın.
- Çalışma alanınızın Not Defterleri bölümündeki Örnekler sekmesinde şu dizine giderek tamamlanmış ve genişletilmiş bir not defteri bulun: SDK v2/sdk/python/jobs/tek adım/pytorch/train-hyperparameter-tune-deploy-with-pytorch
- Jupyter not defteri sunucunuz:
- Azure Machine Learning SDK'sını (v2) yükleyin.
- pytorch_train.py eğitim betiği dosyasını indirin.
- Azure Machine Learning işlem örneği; indirme veya yükleme gerekmez:
Bu kılavuzun tamamlanmış jupyter not defteri sürümünü GitHub örnekleri sayfasında da bulabilirsiniz.
Görevi ayarlama
Bu bölüm, gerekli Python paketlerini yükleyerek, bir çalışma alanına bağlanarak, komut işini çalıştırmak için işlem kaynağı oluşturarak ve işi çalıştırmak için bir ortam oluşturarak işi eğitim için ayarlar.
Çalışma alanına bağlanma
İlk olarak Azure Machine Learning çalışma alanınıza bağlanın. Çalışma alanı, hizmetin en üst düzey kaynağıdır. Azure Machine Learning'i kullanırken oluşturduğunuz tüm yapıtlarla çalışmak için merkezi bir yer sağlar.
Çalışma alanına erişmek için kullanın DefaultAzureCredential . Bu kimlik bilgisi çoğu Azure SDK kimlik doğrulama senaryolarını işler.
Sizin için işe yaramazsa DefaultAzureCredential, azure.identity paketi'ne veya kimlik doğrulamasını ayarlama bölümüne bakınız, daha fazla kullanılabilir kimlik bilgisi için.
# Handle to the workspace
from azure.ai.ml import MLClient
# Authentication package
from azure.identity import DefaultAzureCredential
credential = DefaultAzureCredential()
Tavsiye
Oturum açmak ve kimlik doğrulaması yapmak için tarayıcı kullanmayı tercih ediyorsanız, bunun yerine şunu kullanın InteractiveBrowserCredential :
from azure.identity import InteractiveBrowserCredential
credential = InteractiveBrowserCredential()
Ardından abonelik kimliğinizi, kaynak grubu adınızı ve çalışma alanı adınızı girerek çalışma alanı için bir tanıtıcı edinin. Bu parametreleri bulmak için:
- Azure Machine Learning stüdyosu araç çubuğunun sağ üst köşesinde çalışma alanı adınızı arayın.
- Kaynak grubunuzu ve abonelik kimliğinizi göstermek için çalışma alanı adınızı seçin.
- Kaynak grubunuzun ve abonelik kimliğinizin değerlerini koda kopyalayın.
# Get a handle to the workspace
ml_client = MLClient(
credential=credential,
subscription_id="<SUBSCRIPTION_ID>",
resource_group_name="<RESOURCE_GROUP>",
workspace_name="<AML_WORKSPACE_NAME>",
)
Bu betiği çalıştırmanın sonucu, diğer kaynakları ve işleri yönetmek için kullanabileceğiniz bir çalışma alanı tanımlayıcısıdır.
Not
Oluşturma MLClient , istemciyi çalışma alanına bağlamaz. İstemci başlatması yavaştır ve ilk kez çağrı yapmasını bekler. Bu makalede, bu çağrı hesaplama oluşturma sırasında gerçekleşir.
İşi çalıştırmak için işlem kaynağı oluşturma
Azure Machine Learning'in bir işi çalıştırmak için bir işlem kaynağına ihtiyacı vardır. Bu kaynak, Linux veya Windows işletim sistemine sahip tek veya çok düğümlü makineler ya da Spark gibi belirli bir işlem dokusu olabilir.
Aşağıdaki örnek betikte bir Linux işlem kümesi sağlarsınız. VM boyutlarının ve fiyatlarının tam listesi için Bkz. Azure Machine Learning fiyatlandırma sayfası. Bu örnek için bir GPU kümesine ihtiyacınız olduğundan bir Standard_NC4as_T4_v3 model seçin ve bir Azure Machine Learning işlem oluşturun.
from azure.ai.ml.entities import AmlCompute
gpu_compute_target = "gpu-cluster"
try:
# let's see if the compute target already exists
gpu_cluster = ml_client.compute.get(gpu_compute_target)
print(
f"You already have a cluster named {gpu_compute_target}, we'll reuse it as is."
)
except Exception:
print("Creating a new gpu compute target...")
# Let's create the Azure ML compute object with the intended parameters
gpu_cluster = AmlCompute(
# Name assigned to the compute cluster
name="gpu-cluster",
# Azure ML Compute is the on-demand VM service
type="amlcompute",
# VM Family
size="STANDARD_NC4AS_T4_V3",
# Minimum running nodes when there is no job running
min_instances=0,
# Nodes in cluster
max_instances=4,
# How many seconds will the node running after the job termination
idle_time_before_scale_down=180,
# Dedicated or LowPriority. The latter is cheaper but there is a chance of job termination
tier="Dedicated",
)
# Now, we pass the object to MLClient's create_or_update method
gpu_cluster = ml_client.begin_create_or_update(gpu_cluster).result()
print(
f"AMLCompute with name {gpu_cluster.name} is created, the compute size is {gpu_cluster.size}"
)İş ortamı oluşturma
Azure Machine Learning işini çalıştırmak için bir ortamınız olmalıdır. Azure Machine Learning ortamı, makine öğrenmesi eğitim betiğinizi işlem kaynağınızda çalıştırmak için gerekli yazılım yürütme ortamı ve kitaplıklar gibi bağımlılıkları kapsüller. Bu ortam, yerel makinenizdeki python ortamına benzer.
Azure Machine Learning, docker görüntüsü veya Conda yapılandırması kullanarak seçilmiş (veya hazır) bir ortam kullanmanıza veya özel bir ortam oluşturmanıza olanak tanır. Bu makalede, seçilen Azure Machine Learning ortamını AzureML-acpt-pytorch-2.8-cuda12.6yeniden kullanacaksınız. yönergesini kullanarak bu ortamın en son sürümünü kullanın @latest .
curated_env_name = "AzureML-acpt-pytorch-2.8-cuda12.6@latest"Eğitim işinizi yapılandırma ve gönderme
Bu bölümde, eğitime yönelik verileri tanıtacaksınız. Ardından, sağladığınız bir eğitim betiğini kullanarak bir eğitim işinin nasıl çalıştırıldığını ele alırsınız. Eğitim betiğini çalıştırmak için komutunu yapılandırarak eğitim işini oluşturmayı öğrenirsiniz. Ardından, Azure Machine Learning'de çalıştırılacak eğitim işini gönderirsiniz.
Eğitim verilerini alma
Bu veri kümesi iki sınıf (hindi ve tavuk) için yaklaşık 120 eğitim görüntüsünden ve her sınıf için 100 doğrulama görüntüsünden oluşur. Görüntüler, Açık Görüntüler v5 Veri Kümesinin bir alt kümesidir. Eğitim betiği pytorch_train.py veri kümesini indirir ve ayıklar.
Eğitim betiğini hazırlama
Önkoşullar bölümünde eğitim betiğini pytorch_train.py sağladınız. Uygulamada, herhangi bir özel eğitim betiğini olduğu gibi alabilmeniz ve kodunuzu değiştirmenize gerek kalmadan Azure Machine Learning ile çalıştırabilmeniz gerekir.
Sağlanan eğitim betiği verileri indirir, modeli eğiter ve modeli kaydeder.
Eğitim işini oluşturun
artık işinizi çalıştırmak için gereken tüm varlıklara sahip olduğunuz için Azure Machine Learning Python SDK v2'yi kullanarak oluşturun. Bu örnek için bir commandoluşturun.
Azure Machine Learning command , eğitim kodunuzu bulutta yürütmek için gereken tüm ayrıntıları belirten bir kaynaktır. Bu ayrıntılar giriş ve çıkışları, kullanılacak donanım türünü, yüklenecek yazılımları ve kodunuzu çalıştırmayı içerir. , command tek bir komut yürütmeye ilişkin bilgileri içerir.
Komutu yapılandırma
Eğitim betiğini çalıştırmak ve istediğiniz görevleri gerçekleştirmek için genel amacı command kullanın. Eğitim işinizin yapılandırma ayrıntılarını belirtmek için bir command nesne oluşturun.
from azure.ai.ml import command
from azure.ai.ml import Input
job = command(
inputs=dict(
num_epochs=30, learning_rate=0.001, momentum=0.9, output_dir="./outputs"
),
compute=gpu_compute_target,
environment=curated_env_name,
code="./src/", # location of source code
command="python pytorch_train.py --num_epochs ${{inputs.num_epochs}} --output_dir ${{inputs.output_dir}}",
experiment_name="pytorch-birds",
display_name="pytorch-birds-image",
)
- Bu komutun girişleri dönem sayısını, öğrenme hızını, momentum'ı ve çıkış dizinini içerir.
- Parametre değerleri için:
- Bu komutu çalıştırmak için oluşturduğunuz işlem kümesini
gpu_compute_target = "gpu-cluster"sağlayın. - Önceden başlatmış olduğunuz özel olarak hazırlanmış ortamı sağlayın.
- Samples klasöründe tamamlanmış not defterini kullanmıyorsanız, pytorch_train.py dosyasının konumunu belirtin.
- Komut satırı eyleminin kendisini yapılandırın. Bu durumda komutu şeklindedir
python pytorch_train.py. Komuttaki giriş ve çıkışlara,${{ ... }}gösterimi aracılığıyla erişebilirsiniz. - Görünen ad ve deneme adı gibi meta verileri yapılandırın. Deneme, belirli bir projede yaptığınız tüm yinelemeler için bir kapsayıcıdır. Aynı deneme adı altında gönderdiğiniz tüm işler Azure Machine Learning Stüdyosu'da yan yana görünür.
- Bu komutu çalıştırmak için oluşturduğunuz işlem kümesini
İşi gönder
Şimdi işi Azure Machine Learning'de çalıştırılacak şekilde gönderin. Bu kez create_or_updateml_client.jobs üzerinde kullanın.
ml_client.jobs.create_or_update(job)
İş tamamlandığında, eğitim sonucunda çalışma alanınıza bir model kaydeder. Ayrıca Azure Machine Learning Stüdyosu'da işi görüntülemek için bir bağlantı oluşturur.
Uyarı
Azure Machine Learning, kaynak dizinin tamamını kopyalayarak eğitim betikleri çalıştırır. Karşıya yüklemek istemediğiniz hassas verileriniz varsa bir .ignore dosyası kullanın veya kaynak dizinine eklemeyin.
İş yürütme sırasında ne olur?
İş yürütülürken aşağıdaki aşamalardan geçer:
Hazırlanıyor: İşlem, tanımladığınız ortama göre bir Docker görüntüsü oluşturur. Görüntüyü çalışma alanının kapsayıcı kayıt defterine yükler ve sonraki çalıştırmalar için önbelleğe alır. İşlem ayrıca günlükleri iş geçmişine akışla aktararak ilerleme durumunu izlemek için bunları görüntüleyebilirsiniz. Seçilen bir ortam belirtirseniz işlem, seçilen ortamı destekleyen önbelleğe alınmış görüntüyü kullanır.
Ölçeklendirme: Küme, çalıştırmayı yürütmek için şu anda kullanılabilir olandan daha fazla düğüm gerektiriyorsa ölçeği artırmayı dener.
Çalışıyor: İşlem, src betik klasöründeki tüm betikleri işlem hedefine yükler. Veri depolarını bağlar veya kopyalar. Betiği yürütür. İşlem, stdout ve ./logs klasöründen çıkışları iş geçmişine akışla aktarır. İşi izlemek için bu çıkışları kullanabilirsiniz.
Model hiperparametrelerini ayarlama
Modeli tek bir parametre kümesiyle eğitmişsiniz. Şimdi modelinizin doğruluğunu daha da geliştirip geliştirebileceğinize bakın. Azure Machine Learning'in özelliklerini kullanarak modelinizin hiper parametrelerini ayarlayın ve iyileştirin sweep .
Modelin hiper parametrelerini ayarlamak için eğitim sırasında aranacak parametre alanını tanımlayın. Eğitim görevine iletilen bazı parametreleri, azure.ml.sweep paketinden özel girdilerle değiştirin.
Eğitim betiği çeşitli dönemlerde öğrenme oranını bozan bir öğrenme oranı zamanlaması kullandığından, ilk öğrenme hızını ve momentum parametrelerini ayarlayabilirsiniz.
from azure.ai.ml.sweep import Uniform
# we will reuse the command_job created before. we call it as a function so that we can apply inputs
job_for_sweep = job(
learning_rate=Uniform(min_value=0.0005, max_value=0.005),
momentum=Uniform(min_value=0.9, max_value=0.99),
)
Ardından, izlenecek birincil metriği ve kullanılacak örnekleme algoritması gibi süpürmeye özgü bazı parametreleri kullanarak komut görevinde süpürme özelliğini yapılandırın.
Aşağıdaki kodda, rastgele örnekleme birincil ölçüm best_val_accolan öğesini en üst düzeye çıkarmak için farklı hiper parametre yapılandırma kümelerini dener.
Ayrıca, kötü performans gösteren çalıştırmaları BanditPolicyerken sonlandırmak için erken sonlandırma ilkesi de tanımlarsınız.
BanditPolicy, birincil değerlendirme ölçümünün gevşeklik faktörüne uymayan tüm çalışmaları sonlandırır. Her dönem bu politikayı uygularsınız (Ölçüm her dönem bildirildiğinden ve best_val_acc=1 evaluation_interval). İlk ilke değerlendirmesi, ilk 10 dönem (delay_evaluation=10) sonraya ertelenir.
from azure.ai.ml.sweep import BanditPolicy
sweep_job = job_for_sweep.sweep(
compute="gpu-cluster",
sampling_algorithm="random",
primary_metric="best_val_acc",
goal="Maximize",
max_total_trials=8,
max_concurrent_trials=4,
early_termination_policy=BanditPolicy(
slack_factor=0.15, evaluation_interval=1, delay_evaluation=10
),
)
Şimdi, bu işi daha önce olduğu gibi gönderin. Bu sefer, tren işini süpüren bir süpürme işi çalıştırıyorsun.
returned_sweep_job = ml_client.create_or_update(sweep_job)
# stream the output and wait until the job is finished
ml_client.jobs.stream(returned_sweep_job.name)
# refresh the latest status of the job after streaming
returned_sweep_job = ml_client.jobs.get(name=returned_sweep_job.name)
İşin çalıştığı sırada sunulan studio kullanıcı arabirimi bağlantısını kullanarak görevi izleyebilirsiniz.
En iyi modeli bulma
Tüm çalıştırmalar tamamlandığında, modeli en yüksek doğrulukla üreten çalıştırmayı bulun.
from azure.ai.ml.entities import Model
if returned_sweep_job.status == "Completed":
# First let us get the run which gave us the best result
best_run = returned_sweep_job.properties["best_child_run_id"]
# lets get the model from this run
model = Model(
# the script stores the model as "outputs"
path="azureml://jobs/{}/outputs/artifacts/paths/outputs/".format(best_run),
name="run-model-example",
description="Model created from run.",
type="custom_model",
)
else:
print(
"Sweep job status: {}. Please wait until it completes".format(
returned_sweep_job.status
)
)Modeli çevrimiçi uç nokta şeklinde dağıtın
Artık modelinizi çevrimiçi bir uç nokta olarak( yani Azure bulutunda bir web hizmeti olarak) dağıtabilirsiniz.
Bir makine öğrenmesi hizmetini dağıtmak için genellikle şunları yapmanız gerekir:
- Dağıtmak istediğiniz model varlıkları. Bu varlıklar, modelin dosyasını ve eğitim görevinizde önceden kaydettiğiniz meta verilerini içerir.
- Hizmet olarak çalıştırılacak bazı kodlar. Kod, modeli belirli bir giriş isteğinde (giriş betiği) yürütür. Dağıtılan web hizmetine gönderilen verileri alan bu betik, verileri modele iletir. Model verileri işledikten sonra betik modelin istemciye yanıtını döndürür. Betik yalnızca modelinize özgüdür ve modelin beklediği ve döndürdüğü verileri anlaması gerekir. MLFlow modeli kullandığınızda Azure Machine Learning bu betiği sizin için otomatik olarak oluşturur.
Dağıtım hakkında daha fazla bilgi için bkz . Python SDK v2 kullanarak yönetilen çevrimiçi uç nokta ile makine öğrenmesi modelini dağıtma ve puanlandırma.
Yeni bir çevrimiçi uç nokta oluşturma
Modelinizi dağıtmanın ilk adımı olarak çevrimiçi uç noktanızı oluşturun. Uç nokta adı Azure bölgesinin tamamında benzersiz olmalıdır. Bu makalede, evrensel olarak benzersiz bir tanımlayıcı (UUID) kullanarak benzersiz bir ad oluşturun.
import uuid
# Creating a unique name for the endpoint
online_endpoint_name = "aci-birds-endpoint-" + str(uuid.uuid4())[:8]from azure.ai.ml.entities import ManagedOnlineEndpoint
# create an online endpoint
endpoint = ManagedOnlineEndpoint(
name=online_endpoint_name,
description="Classify turkey/chickens using transfer learning with PyTorch",
auth_mode="key",
tags={"data": "birds", "method": "transfer learning", "framework": "pytorch"},
)
endpoint = ml_client.begin_create_or_update(endpoint).result()
print(f"Endpoint {endpoint.name} provisioning state: {endpoint.provisioning_state}")
Uç noktayı oluşturduktan sonra aşağıdaki şekilde alın:
endpoint = ml_client.online_endpoints.get(name=online_endpoint_name)
print(
f'Endpint "{endpoint.name}" with provisioning state "{endpoint.provisioning_state}" is retrieved'
)Modeli endpoint'e (uç nokta) dağıtma
Giriş betiğini kullanarak modeli dağıtın. Uç noktanın birden çok dağıtımı olabilir. Uç nokta, kuralları kullanarak trafiği bu dağıtımlara yönlendirebilir.
Aşağıdaki kodda, gelen trafiğin %100'ünü yönlendiren tek bir dağıtım oluşturursunuz. Kod, dağıtım için mavi rastgele bir renk adı kullanır. Dağıtım için yeşil veya kırmızı gibi başka bir ad da kullanabilirsiniz.
Modeli uç noktaya dağıtma kodu:
- Daha önce kaydettiğiniz modelin en iyi sürümünü dağıtır.
- score.py dosyasını kullanarak modeli puanlar.
- Çıkarım yapmak için seçilmiş ortamı (daha önce belirttiğiniz) kullanır.
from azure.ai.ml.entities import (
ManagedOnlineDeployment,
Model,
Environment,
CodeConfiguration,
)
online_deployment_name = "aci-blue"
# create an online deployment.
blue_deployment = ManagedOnlineDeployment(
name=online_deployment_name,
endpoint_name=online_endpoint_name,
model=model,
environment=curated_env_name,
code_configuration=CodeConfiguration(code="./score/", scoring_script="score.py"),
instance_type="STANDARD_NC4AS_T4_V3",
instance_count=1,
)
blue_deployment = ml_client.begin_create_or_update(blue_deployment).result()
Not
Bu dağıtımın tamamlanmasının biraz zaman almasını bekleyebilirsiniz.
Dağıtılan modeli test et
Modeli uç birime dağıttıktan sonra, modelin çıktısını tahmin etmek için uç birimdeki invoke yöntemini kullanarak.
Uç noktayı test etmek için tahmin için örnek bir görüntü kullanın. İlk olarak, görüntüyü görüntüleyin.
# install pillow if PIL cannot imported
%pip install pillow
import json
from PIL import Image
import matplotlib.pyplot as plt
%matplotlib inline
plt.imshow(Image.open("test_img.jpg"))
Resmi biçimlendirmek ve yeniden boyutlandırmak için bir işlev oluşturun.
# install torch and torchvision if needed
%pip install torch
%pip install torchvision
import torch
from torchvision import transforms
def preprocess(image_file):
"""Preprocess the input image."""
data_transforms = transforms.Compose(
[
transforms.Resize(256),
transforms.CenterCrop(224),
transforms.ToTensor(),
transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225]),
]
)
image = Image.open(image_file)
image = data_transforms(image).float()
image = torch.tensor(image)
image = image.unsqueeze(0)
return image.numpy()
Görüntüyü biçimlendirin ve bir JSON dosyasına dönüştürün.
image_data = preprocess("test_img.jpg")
input_data = json.dumps({"data": image_data.tolist()})
with open("request.json", "w") as outfile:
outfile.write(input_data)
Uç noktayı bu JSON ile çağırın ve sonucu yazdırın.
# test the blue deployment
result = ml_client.online_endpoints.invoke(
endpoint_name=online_endpoint_name,
request_file="request.json",
deployment_name=online_deployment_name,
)
print(result)Kaynakları temizleme
Uç noktaya artık ihtiyacınız yoksa, kaynağı kullanmayı durdurmak için bu uç noktayı silin. Silmeden önce uç noktayı başka dağıtımların kullanmadığından emin olun.
ml_client.online_endpoints.begin_delete(name=online_endpoint_name)
Not
Bu temizleme işleminin tamamlanmasının biraz zaman almasını bekleyebilirsiniz.
İlgili içerik
Bu makalede, Azure Machine Learning'de PyTorch kullanarak bir derin öğrenme sinir ağı eğitip kaydettiniz. Modeli çevrimiçi bir uç noktaya da dağıttınız. Azure Machine Learning hakkında daha fazla bilgi edinmek için aşağıdaki makalelere bakın: