Trenowanie modelu na obliczeniach bezserwerowych
DOTYCZY: Rozszerzenie interfejsu wiersza polecenia platformy Azure w wersji 2 (current)Zestaw PYTHON SDK azure-ai-ml v2 (bieżąca)
Nie trzeba już tworzyć zasobów obliczeniowych i zarządzać nimi w celu wytrenowania modelu w sposób skalowalny. Zadanie można zamiast tego przesłać do nowego typu docelowego obliczeniowego, nazywanego bezserwerowym obliczeniami. Obliczenia bezserwerowe to najprostszy sposób uruchamiania zadań szkoleniowych w usłudze Azure Machine Learning. Obliczenia bezserwerowe to w pełni zarządzane zasoby obliczeniowe na żądanie. Usługa Azure Machine Learning tworzy i skaluje zasoby obliczeniowe oraz zarządza nimi. Dzięki trenowaniu modeli przy użyciu obliczeń bezserwerowych specjaliści uczenia maszynowego mogą skupić się na swojej wiedzy na temat tworzenia modeli uczenia maszynowego i nie muszą uczyć się o infrastrukturze obliczeniowej lub konfigurowaniu jej.
Specjaliści ds. uczenia maszynowego mogą określić zasoby, których potrzebuje zadanie. Usługa Azure Machine Learning zarządza infrastrukturą obliczeniową i zapewnia zarządzana izolacja sieci zmniejszenie obciążenia.
Przedsiębiorstwa mogą również obniżyć koszty, określając optymalne zasoby dla każdego zadania. Administratorzy IT nadal mogą stosować kontrolę, określając limit przydziału rdzeni na poziomie subskrypcji i obszaru roboczego oraz stosując zasady platformy Azure.
Obliczenia bezserwerowe mogą służyć do dostosowywania modeli w katalogu modeli, takich jak LLAMA 2. Bezserwerowe obliczenia mogą służyć do uruchamiania wszystkich typów zadań z poziomu programu Azure Machine Learning Studio, zestawu SDK i interfejsu wiersza polecenia. Bezserwerowe obliczenia mogą być również używane do tworzenia obrazów środowiska i scenariuszy pulpitu nawigacyjnego odpowiedzialnego używania sztucznej inteligencji. Zadania bezserwerowe zużywają ten sam limit przydziału co limit przydziału zasobów obliczeniowych usługi Azure Machine Learning. Możesz wybrać standardowa (dedykowaną) warstwę lub maszyny wirtualne typu spot (o niskim priorytcie). Tożsamość zarządzana i tożsamość użytkownika są obsługiwane w przypadku zadań bezserwerowych. Model rozliczeń jest taki sam jak obliczenia usługi Azure Machine Learning.
Zalety obliczeń bezserwerowych
- Usługa Azure Machine Learning zarządza tworzeniem, konfigurowaniem, skalowaniem, usuwaniem, poprawianiem, infrastrukturą obliczeniową, co zmniejsza obciążenie związane z zarządzaniem
- Nie musisz dowiedzieć się więcej o obliczeniach, różnych typach obliczeniowych i powiązanych właściwościach.
- Nie ma potrzeby wielokrotnego tworzenia klastrów dla każdego wymaganego rozmiaru maszyny wirtualnej, używania tych samych ustawień i replikowania dla każdego obszaru roboczego.
- Koszty można zoptymalizować, określając dokładne zasoby, których potrzebuje każde zadanie w czasie wykonywania, pod względem typu wystąpienia (rozmiar maszyny wirtualnej) i liczby wystąpień. Możesz monitorować metryki wykorzystania zadania, aby zoptymalizować zasoby, których potrzebuje zadanie.
- Zmniejszenie liczby kroków związanych z uruchamianiem zadania
- Aby jeszcze bardziej uprościć przesyłanie zadań, możesz całkowicie pominąć zasoby. Usługa Azure Machine Learning domyślnie określa liczbę wystąpień i wybiera typ wystąpienia (rozmiar maszyny wirtualnej) na podstawie czynników, takich jak limit przydziału, koszt, wydajność i rozmiar dysku.
- Mniejsze czasy oczekiwania przed rozpoczęciem wykonywania zadań w niektórych przypadkach.
- Tożsamość użytkownika i tożsamość zarządzana przypisana przez użytkownika obszaru roboczego jest obsługiwana w przypadku przesyłania zadań.
- Dzięki zarządzana izolacja sieci można usprawnić i zautomatyzować konfigurację izolacji sieci. Obsługiwana jest również sieć wirtualna klienta
- Kontrola administratora za pośrednictwem limitu przydziału i zasad platformy Azure
Jak używać obliczeń bezserwerowych
Modele podstaw, takie jak LLAMA 2, można dostosować przy użyciu notesów, jak pokazano poniżej:
Podczas tworzenia własnego klastra obliczeniowego należy użyć jego nazwy w zadaniu polecenia, takim jak
compute="cpu-cluster"
. Bezserwerowe można pominąć tworzenie klastra obliczeniowego i pominąćcompute
parametr , aby zamiast tego używać bezserwerowych obliczeń. Jeślicompute
nie zostanie określony dla zadania, zadanie jest uruchamiane na bezserwerowych obliczeniach. Pomiń nazwę obliczeniową w zadaniach interfejsu wiersza polecenia lub zestawu SDK, aby używać bezserwerowych obliczeń w następujących typach zadań i opcjonalnie podaj zasoby, których zadanie wymagałoby pod względem liczby wystąpień i typu wystąpienia:- Zadania poleceń, w tym zadania interakcyjne i trenowanie rozproszone
- Zadania automatycznego uczenia maszynowego
- Zadania zamiatania
- Zadania równoległe
W przypadku zadań potoku za pomocą interfejsu wiersza polecenia dla
default_compute: azureml:serverless
domyślnych obliczeń na poziomie potoku. W przypadku zadań potoków za pomocą zestawu SDK użyj poleceniadefault_compute="serverless"
. Zobacz Przykładowe zadanie potoku.Po przesłaniu zadania szkoleniowego w programie Studio (wersja zapoznawcza) wybierz pozycję Bezserwerowa jako typ obliczeniowy.
W przypadku korzystania z projektanta usługi Azure Machine Learning wybierz pozycję Bezserwerowe jako domyślne zasoby obliczeniowe.
Do odpowiedzialnego pulpitu nawigacyjnego sztucznej inteligencji można używać bezserwerowych obliczeń
Zagadnienia dotyczące wydajności
Przetwarzanie bezserwerowe może pomóc przyspieszyć trenowanie w następujący sposób:
Niewystarczający limit przydziału: podczas tworzenia własnego klastra obliczeniowego odpowiadasz za ustalenie rozmiaru maszyny wirtualnej i liczby węzłów do utworzenia. Jeśli zadanie zostanie uruchomione, jeśli nie masz wystarczającego limitu przydziału dla klastra, zadanie zakończy się niepowodzeniem. Obliczenia bezserwerowe domyślnie używają informacji o limitach przydziału, aby wybrać odpowiedni rozmiar maszyny wirtualnej.
Optymalizacja skalowania w dół: gdy klaster obliczeniowy jest skalowany w dół, nowe zadanie musi czekać na wykonanie skalowania w dół, a następnie przeskalować w górę przed uruchomieniem zadania. W przypadku bezserwerowych zasobów obliczeniowych nie trzeba czekać na skalowanie w dół, a zadanie może zacząć działać w innym klastrze/węźle (przy założeniu, że masz limit przydziału).
Optymalizacja zajętości klastra: gdy zadanie jest uruchomione w klastrze obliczeniowym, a inne zadanie jest przesyłane, zadanie jest w kolejce za aktualnie uruchomionym zadaniem. W przypadku obliczeń bezserwerowych uzyskujesz inny węzeł/inny klaster, aby rozpocząć uruchamianie zadania (przy założeniu, że masz limit przydziału).
Norma sprzedaży
Podczas przesyłania zadania nadal potrzebujesz wystarczającego limitu przydziału zasobów obliczeniowych usługi Azure Machine Learning (przydział na poziomie obszaru roboczego i subskrypcji). Domyślny rozmiar maszyny wirtualnej dla zadań bezserwerowych jest wybierany na podstawie tego limitu przydziału. Jeśli określisz własny rozmiar/rodzinę maszyn wirtualnych:
- Jeśli masz pewien limit przydziału dla rozmiaru/rodziny maszyn wirtualnych, ale nie masz wystarczającego limitu przydziału dla liczby wystąpień, zostanie wyświetlony błąd. Błąd zaleca zmniejszenie liczby wystąpień do prawidłowej liczby na podstawie limitu przydziału lub zażądanie zwiększenia limitu przydziału dla tej rodziny maszyn wirtualnych lub zmiany rozmiaru maszyny wirtualnej
- Jeśli nie masz limitu przydziału dla określonego rozmiaru maszyny wirtualnej, zostanie wyświetlony błąd. Błąd zaleca wybranie innego rozmiaru maszyny wirtualnej, dla której masz limit przydziału lub limit przydziału żądań dla tej rodziny maszyn wirtualnych
- Jeśli masz wystarczający limit przydziału dla rodziny maszyn wirtualnych do uruchomienia zadania bezserwerowego, ale inne zadania korzystają z limitu przydziału, zostanie wyświetlony komunikat informujący, że zadanie musi czekać w kolejce do momentu udostępnienia limitu przydziału
Po wyświetleniu użycia i limitu przydziału w witrynie Azure Portal zostanie wyświetlona nazwa "Bezserwerowa", aby wyświetlić wszystkie limity przydziału używane przez zadania bezserwerowe.
Obsługa tożsamości i przekazywanie poświadczeń
Przekazywanie poświadczeń użytkownika: przetwarzanie bezserwerowe w pełni obsługuje przekazywanie poświadczeń użytkownika. Token użytkownika, który przesyła zadanie, jest używany do uzyskiwania dostępu do magazynu. Te poświadczenia pochodzą z twojego identyfikatora Entra firmy Microsoft.
from azure.ai.ml import command from azure.ai.ml import MLClient # Handle to the workspace from azure.identity import DefaultAzureCredential # Authentication package from azure.ai.ml.entities import ResourceConfiguration from azure.ai.ml.entities import UserIdentityConfiguration credential = DefaultAzureCredential() # Get a handle to the workspace. You can find the info on the workspace tab on ml.azure.com ml_client = MLClient( credential=credential, subscription_id="<Azure subscription id>", resource_group_name="<Azure resource group>", workspace_name="<Azure Machine Learning Workspace>", ) job = command( command="echo 'hello world'", environment="azureml://registries/azureml/environments/sklearn-1.5/labels/latest", identity=UserIdentityConfiguration(), ) # submit the command job ml_client.create_or_update(job)
Tożsamość zarządzana przypisana przez użytkownika: jeśli masz obszar roboczy skonfigurowany z tożsamością zarządzaną przypisaną przez użytkownika, możesz użyć tej tożsamości z zadaniem bezserwerowym na potrzeby dostępu do magazynu. Aby uzyskać dostęp do wpisów tajnych, zobacz Używanie wpisów tajnych poświadczeń uwierzytelniania w zadaniach usługi Azure Machine Learning.
from azure.ai.ml import command from azure.ai.ml import MLClient # Handle to the workspace from azure.identity import DefaultAzureCredential # Authentication package from azure.ai.ml.entities import ResourceConfiguration from azure.ai.ml.entities import ManagedIdentityConfiguration credential = DefaultAzureCredential() # Get a handle to the workspace. You can find the info on the workspace tab on ml.azure.com ml_client = MLClient( credential=credential, subscription_id="<Azure subscription id>", resource_group_name="<Azure resource group>", workspace_name="<Azure Machine Learning Workspace>", ) job = command( command="echo 'hello world'", environment="azureml://registries/azureml/environments/sklearn-1.5/labels/latest", identity= ManagedIdentityConfiguration(), ) # submit the command job ml_client.create_or_update(job)
Aby uzyskać informacje na temat dołączania tożsamości zarządzanej przypisanej przez użytkownika, zobacz dołączanie tożsamości zarządzanej przypisanej przez użytkownika.
Konfigurowanie właściwości dla zadań poleceń
Jeśli dla zadań poleceń, zamiatania i automatycznego uczenia maszynowego nie określono żadnego docelowego obiektu obliczeniowego, wartością domyślną obliczeń bezserwerowych. Na przykład dla tego zadania polecenia:
from azure.ai.ml import command
from azure.ai.ml import command
from azure.ai.ml import MLClient # Handle to the workspace
from azure.identity import DefaultAzureCredential # Authentication package
credential = DefaultAzureCredential()
# Get a handle to the workspace. You can find the info on the workspace tab on ml.azure.com
ml_client = MLClient(
credential=credential,
subscription_id="<Azure subscription id>",
resource_group_name="<Azure resource group>",
workspace_name="<Azure Machine Learning Workspace>",
)
job = command(
command="echo 'hello world'",
environment="azureml://registries/azureml/environments/sklearn-1.5/labels/latest",
)
# submit the command job
ml_client.create_or_update(job)
Domyślnie obliczenia są obliczane bezserwerowe za pomocą następujących elementów:
- Jeden węzeł dla tego zadania. Domyślna liczba węzłów jest oparta na typie zadania. Zobacz następujące sekcje, aby zapoznać się z innymi typami zadań.
- Maszyna wirtualna procesora CPU, która jest określana na podstawie limitu przydziału, wydajności, kosztów i rozmiaru dysku.
- Dedykowane maszyny wirtualne
- Lokalizacja obszaru roboczego
Możesz zastąpić te wartości domyślne. Jeśli chcesz określić typ maszyny wirtualnej lub liczbę węzłów dla obliczeń bezserwerowych, dodaj resources
do zadania:
instance_type
aby wybrać określoną maszynę wirtualną. Użyj tego parametru, jeśli chcesz mieć określony rozmiar maszyny wirtualnej procesora CPU/procesora GPUinstance_count
aby określić liczbę węzłów.from azure.ai.ml import command from azure.ai.ml import MLClient # Handle to the workspace from azure.identity import DefaultAzureCredential # Authentication package from azure.ai.ml.entities import JobResourceConfiguration credential = DefaultAzureCredential() # Get a handle to the workspace. You can find the info on the workspace tab on ml.azure.com ml_client = MLClient( credential=credential, subscription_id="<Azure subscription id>", resource_group_name="<Azure resource group>", workspace_name="<Azure Machine Learning Workspace>", ) job = command( command="echo 'hello world'", environment="azureml://registries/azureml/environments/sklearn-1.5/labels/latest", resources = JobResourceConfiguration(instance_type="Standard_NC24", instance_count=4) ) # submit the command job ml_client.create_or_update(job)
Aby zmienić warstwę zadania, użyj polecenia
queue_settings
, aby wybrać między dedykowanymi maszynami wirtualnymi (job_tier: Standard
) i niskim priorytetem(jobtier: Spot
).from azure.ai.ml import command from azure.ai.ml import MLClient # Handle to the workspace from azure.identity import DefaultAzureCredential # Authentication package credential = DefaultAzureCredential() # Get a handle to the workspace. You can find the info on the workspace tab on ml.azure.com ml_client = MLClient( credential=credential, subscription_id="<Azure subscription id>", resource_group_name="<Azure resource group>", workspace_name="<Azure Machine Learning Workspace>", ) job = command( command="echo 'hello world'", environment="azureml://registries/azureml/environments/sklearn-1.5/labels/latest", queue_settings={ "job_tier": "spot" } ) # submit the command job ml_client.create_or_update(job)
Przykład dla wszystkich pól z zadaniami poleceń
Oto przykład wszystkich pól określonych w tym tożsamości, których powinno używać zadanie. Nie trzeba określać ustawień sieci wirtualnej, ponieważ zarządzana izolacja sieci poziom obszaru roboczego jest używany automatycznie.
from azure.ai.ml import command
from azure.ai.ml import MLClient # Handle to the workspace
from azure.identity import DefaultAzureCredential # Authentication package
from azure.ai.ml.entities import ResourceConfiguration
from azure.ai.ml.entities import UserIdentityConfiguration
credential = DefaultAzureCredential()
# Get a handle to the workspace. You can find the info on the workspace tab on ml.azure.com
ml_client = MLClient(
credential=credential,
subscription_id="<Azure subscription id>",
resource_group_name="<Azure resource group>",
workspace_name="<Azure Machine Learning Workspace>",
)
job = command(
command="echo 'hello world'",
environment="azureml://registries/azureml/environments/sklearn-1.5/labels/latest",
identity=UserIdentityConfiguration(),
queue_settings={
"job_tier": "Standard"
}
)
job.resources = ResourceConfiguration(instance_type="Standard_E4s_v3", instance_count=1)
# submit the command job
ml_client.create_or_update(job)
Zobacz więcej przykładów trenowania za pomocą obliczeń bezserwerowych pod adresem:-
Zadanie zautomatyzowanego uczenia maszynowego
Nie ma potrzeby określania zasobów obliczeniowych dla zadań rozwiązania AutoML. Zasoby można opcjonalnie określić. Jeśli liczba wystąpień nie jest określona, jest ona domyślna na podstawie parametrów max_concurrent_trials i max_nodes. Jeśli przesyłasz klasyfikację obrazów automl lub zadanie NLP bez typu wystąpienia, rozmiar maszyny wirtualnej procesora GPU zostanie automatycznie wybrany. Istnieje możliwość przesłania zadania automatycznego uczenia maszynowego za pośrednictwem interfejsów CLI, zestawu SDK lub programu Studio. Aby przesłać zadania automatycznego uczenia maszynowego z obliczeniami bezserwerowymi w programie Studio, najpierw włącz funkcję przesyłania zadania szkoleniowego w programie Studio (wersja zapoznawcza) w panelu wersji zapoznawczej.
Jeśli chcesz określić typ lub liczbę wystąpień, użyj ResourceConfiguration
klasy .
# Create the AutoML classification job with the related factory-function.
from azure.ai.ml.entities import ResourceConfiguration
classification_job = automl.classification(
experiment_name=exp_name,
training_data=my_training_data_input,
target_column_name="y",
primary_metric="accuracy",
n_cross_validations=5,
enable_model_explainability=True,
tags={"my_custom_tag": "My custom value"},
)
# Limits are all optional
classification_job.set_limits(
timeout_minutes=600,
trial_timeout_minutes=20,
max_trials=max_trials,
# max_concurrent_trials = 4,
# max_cores_per_trial: -1,
enable_early_termination=True,
)
# Training properties are optional
classification_job.set_training(
blocked_training_algorithms=[ClassificationModels.LOGISTIC_REGRESSION],
enable_onnx_compatible_models=True,
)
# Serverless compute resources used to run the job
classification_job.resources =
ResourceConfiguration(instance_type="Standard_E4s_v3", instance_count=6)
Zadanie potoku
W przypadku zadania potoku określ "serverless"
domyślny typ obliczeniowy do używania bezserwerowych obliczeń.
# Construct pipeline
@pipeline()
def pipeline_with_components_from_yaml(
training_input,
test_input,
training_max_epochs=20,
training_learning_rate=1.8,
learning_rate_schedule="time-based",
):
"""E2E dummy train-score-eval pipeline with components defined via yaml."""
# Call component obj as function: apply given inputs & parameters to create a node in pipeline
train_with_sample_data = train_model(
training_data=training_input,
max_epochs=training_max_epochs,
learning_rate=training_learning_rate,
learning_rate_schedule=learning_rate_schedule,
)
score_with_sample_data = score_data(
model_input=train_with_sample_data.outputs.model_output, test_data=test_input
)
score_with_sample_data.outputs.score_output.mode = "upload"
eval_with_sample_data = eval_model(
scoring_result=score_with_sample_data.outputs.score_output
)
# Return: pipeline outputs
return {
"trained_model": train_with_sample_data.outputs.model_output,
"scored_data": score_with_sample_data.outputs.score_output,
"evaluation_report": eval_with_sample_data.outputs.eval_output,
}
pipeline_job = pipeline_with_components_from_yaml(
training_input=Input(type="uri_folder", path=parent_dir + "/data/"),
test_input=Input(type="uri_folder", path=parent_dir + "/data/"),
training_max_epochs=20,
training_learning_rate=1.8,
learning_rate_schedule="time-based",
)
# set pipeline to use serverless compute
pipeline_job.settings.default_compute = "serverless"
Możesz również ustawić bezserwerowe obliczenia jako domyślne środowisko obliczeniowe w projektancie.
Następne kroki
Zobacz więcej przykładów trenowania za pomocą obliczeń bezserwerowych pod adresem:-