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 na maszynie azure Edukacja. Obliczenia bezserwerowe to w pełni zarządzane zasoby obliczeniowe na żądanie. Usługa Azure Machine Edukacja 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 Edukacja 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. Administracja IT mogą nadal 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 Edukacja 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 używają tego samego limitu przydziału co usługa Azure Machine Edukacja limitu przydziału zasobów obliczeniowych. 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 usługa Azure Machine Edukacja obliczeniowych.

Zalety obliczeń bezserwerowych

  • Usługa Azure Machine Edukacja zarządza tworzeniem, konfigurowaniem, skalowaniem, usuwaniem, stosowaniem poprawek, 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 Edukacja 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
  • Administracja kontrolować przy użyciu 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śli compute 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 polecenia default_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 Edukacja 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

Podczas przesyłania zadania nadal potrzebujesz wystarczającej ilości przydziału zasobów obliczeniowych usługi Azure Machine Edukacja (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-sklearn-1.0-ubuntu20.04-py38-cpu@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.

    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-sklearn-1.0-ubuntu20.04-py38-cpu@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-sklearn-1.0-ubuntu20.04-py38-cpu@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 GPU

  • instance_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-sklearn-1.0-ubuntu20.04-py38-cpu@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-sklearn-1.0-ubuntu20.04-py38-cpu@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-sklearn-1.0-ubuntu20.04-py38-cpu@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 zasoby obliczeniowe w Projektant.

Następne kroki

Zobacz więcej przykładów trenowania za pomocą obliczeń bezserwerowych pod adresem:-