Trénování modelů na bezserverových výpočetních prostředcích

PLATÍ PRO:Rozšíření Azure CLI ml v2 (aktuální)Python SDK azure-ai-ml v2 (aktuální)

Už nemusíte vytvářet a spravovat výpočetní prostředky pro trénování modelu škálovatelným způsobem. Místo toho můžete úlohu odeslat do nového cílového typu výpočetního prostředí, který se nazývá bezserverové výpočetní prostředky. Bezserverové výpočetní prostředí je nejjednodušší způsob spouštění trénovacích úloh ve službě Azure Machine Learning. Bezserverové výpočetní prostředky jsou plně spravované výpočetní prostředky na vyžádání. Azure Machine Learning vytváří, škáluje a spravuje výpočetní prostředky za vás. Prostřednictvím trénování modelů s bezserverovým výpočetním prostředím se odborníci na strojové učení můžou soustředit na své znalosti vytváření modelů strojového učení a nemusí se učit o výpočetní infrastruktuře ani ho nastavovat.

Odborníci na strojové učení můžou určit prostředky, které pracovní pozice potřebuje. Azure Machine Learning spravuje výpočetní infrastrukturu a poskytuje spravovaná izolace sítě snižuje zátěž za vás.

Podniky mohou také snížit náklady zadáním optimálních prostředků pro každou úlohu. Správci IT můžou dál používat řízení zadáním kvóty jader na úrovni předplatného a pracovního prostoru a použitím zásad Azure.

Bezserverové výpočetní prostředky lze použít k vyladění modelů v katalogu modelů, jako je LLAMA 2. Bezserverové výpočetní prostředky je možné použít ke spouštění všech typů úloh z studio Azure Machine Learning, sady SDK a rozhraní příkazového řádku. Výpočetní prostředky bez serveru je možné použít také k vytváření imagí prostředí a k zodpovědnému scénáři řídicího panelu AI. Bezserverové úlohy využívají stejnou kvótu jako výpočetní kvóta služby Azure Machine Learning. Můžete zvolit standardní (vyhrazenou) úroveň nebo spotové virtuální počítače (s nízkou prioritou). Spravovaná identita a identita uživatele se podporují pro úlohy bez serveru. Fakturační model je stejný jako výpočetní prostředí Azure Machine Learning.

Výhody bezserverového výpočetního prostředí

  • Azure Machine Learning spravuje vytváření, nastavování, škálování, odstraňování, opravy, výpočetní infrastrukturu snižující režii správy.
  • Nemusíte se učit o výpočetních prostředcích, různých typech výpočetních prostředků a souvisejících vlastnostech.
  • Není nutné opakovaně vytvářet clustery pro každou potřebnou velikost virtuálního počítače pomocí stejného nastavení a replikace pro každý pracovní prostor.
  • Náklady můžete optimalizovat zadáním přesných prostředků, které každá úloha potřebuje za běhu z hlediska typu instance (velikosti virtuálního počítače) a počtu instancí. Můžete monitorovat metriky využití úlohy, abyste optimalizovali prostředky, které by úloha potřebovala.
  • Snížení počtu kroků souvisejících se spuštěním úlohy
  • Pokud chcete zjednodušit odesílání úloh, můžete prostředky úplně přeskočit. Azure Machine Learning nastaví výchozí počet instancí a zvolí typ instance (velikost virtuálního počítače) na základě faktorů, jako je kvóta, náklady, výkon a velikost disku.
  • Menší doby čekání před spuštěním úloh v některých případech.
  • Identita uživatele a spravovaná identita přiřazená uživatelem pracovního prostoru se podporuje při odesílání úloh.
  • Díky spravovaná izolace sítě můžete zjednodušit a automatizovat konfiguraci izolace sítě. Podporuje se také virtuální síť zákazníka.
  • Řízení správce prostřednictvím kvót a zásad Azure

Jak používat bezserverové výpočetní prostředky

  • Základní modely, jako je LLAMA 2, můžete doladit pomocí poznámkových bloků, jak je znázorněno níže:

  • Při vytváření vlastního výpočetního clusteru použijete jeho název v úloze příkazu, například compute="cpu-cluster". Bez serveru můžete přeskočit vytvoření výpočetního clusteru a vynechat compute parametr tak, aby místo toho používal výpočetní prostředky bez serveru. Pokud compute není pro úlohu zadána, úloha běží na bezserverových výpočetních prostředcích. Vynecháte název výpočetních prostředků v úlohách rozhraní příkazového řádku nebo sady SDK pro použití bezserverového výpočetního prostředí v následujících typech úloh a volitelně uveďte prostředky, které by úloha potřebovala z hlediska počtu instancí a typu instance:

    • Úlohy příkazů, včetně interaktivních úloh a distribuovaného trénování
    • Úlohy AutoML
    • Uklidit úlohy
    • Paralelní úlohy
  • Pro úlohy kanálu prostřednictvím rozhraní příkazového řádku se používají default_compute: azureml:serverless pro výchozí výpočetní prostředky na úrovni kanálu. Pro úlohy kanálů prostřednictvím sady SDK použijte default_compute="serverless". Příklad najdete v úloze kanálu.

  • Když odešlete trénovací úlohu v sadě Studio (Preview), vyberte jako typ výpočetních prostředků bez serveru .

  • Při použití návrháře služby Azure Machine Learning vyberte jako výchozí výpočetní prostředí bez serveru .

  • Pro zodpovědný řídicí panel AI můžete používat bezserverové výpočetní prostředky.

Důležité informace o výkonu

Bezserverové výpočetní prostředky vám můžou pomoct zrychlit trénování následujícími způsoby:

Nedostatečná kvóta: Při vytváření vlastního výpočetního clusteru zodpovídáte za zjištění, jaká velikost virtuálního počítače a počet uzlů se má vytvořit. Pokud při spuštění úlohy nemáte dostatečnou kvótu pro cluster, úloha selže. Bezserverové výpočetní prostředky ve výchozím nastavení používají informace o vaší kvótě k výběru odpovídající velikosti virtuálního počítače.

Optimalizace vertikálního snížení kapacity: Při vertikálním snížení kapacity výpočetního clusteru musí nová úloha počkat, než dojde k vertikálnímu snížení kapacity, a pak vertikálně navýšit kapacitu před spuštěním úlohy. S bezserverovými výpočetními prostředky nemusíte čekat na vertikální snížení kapacity a vaše úloha se může spustit na jiném clusteru nebo uzlu (za předpokladu, že máte kvótu).

Optimalizace zaneprázdnění clusteru: Když je úloha spuštěná ve výpočetním clusteru a odešle se jiná úloha, za aktuálně spuštěnou úlohu se zařadí do fronty. S bezserverovými výpočetními prostředky získáte další uzel nebo jiný cluster, abyste mohli začít spouštět úlohu (za předpokladu, že máte kvótu).

Kvóta

Při odesílání úlohy stále potřebujete dostatečnou kvótu výpočetních prostředků služby Azure Machine Learning pro pokračování (jak pracovní prostor, tak kvóta na úrovni předplatného). Na základě této kvóty se vybere výchozí velikost virtuálního počítače pro bezserverové úlohy. Pokud zadáte vlastní velikost nebo rodinu virtuálních počítačů:

  • Pokud máte nějakou kvótu pro velikost nebo řadu virtuálních počítačů, ale nemáte dostatečnou kvótu pro počet instancí, zobrazí se chyba. Tato chyba doporučuje snížit počet instancí na platné číslo na základě limitu kvóty nebo požádat o navýšení kvóty pro tuto řadu virtuálních počítačů nebo změnu velikosti virtuálního počítače.
  • Pokud nemáte kvótu pro zadanou velikost virtuálního počítače, zobrazí se chyba. Tato chyba doporučuje vybrat jinou velikost virtuálního počítače, pro kterou máte kvótu nebo požádat o kvótu pro tuto řadu virtuálních počítačů.
  • Pokud máte dostatečnou kvótu pro spuštění bezserverové úlohy pro řadu virtuálních počítačů, ale jiné úlohy tuto kvótu používají, zobrazí se zpráva, že vaše úloha musí čekat ve frontě, dokud nebude kvóta k dispozici.

Když na webu Azure Portal zobrazíte využití a kvótu, zobrazí se název "Bezserverová", abyste viděli všechny kvóty spotřebované bezserverovými úlohami.

Podpora identit a předávání přihlašovacích údajů

  • Předávání přihlašovacích údajů uživatele: Bezserverové výpočetní prostředí plně podporuje předávání přihlašovacích údajů uživatele. Token uživatele, který úlohu odesílá, se používá pro přístup k úložišti. Tyto přihlašovací údaje pocházejí z vašeho ID Microsoft Entra.

    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)
    
  • Spravovaná identita přiřazená uživatelem: Pokud máte pracovní prostor nakonfigurovaný se spravovanou identitou přiřazenou uživatelem, můžete tuto identitu použít s bezserverovou úlohou pro přístup k úložišti. Pokud chcete získat přístup k tajným kódům, přečtěte si téma Použití tajných kódů přihlašovacích údajů ověřování v úlohách 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)
    
    

Informace o připojení spravované identity přiřazené uživatelem najdete v tématu připojení spravované identity přiřazené uživatelem.

Konfigurace vlastností pro úlohy příkazů

Pokud pro příkazy, úklid a úlohy AutoML nezadáte žádný cílový výpočetní objekt, výpočetní prostředí se ve výchozím nastavení nastaví na bezserverové výpočetní prostředky. Například pro tuto úlohu příkazu:

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)

Výchozí výpočetní prostředí je bezserverové výpočetní prostředí s následujícími funkcemi:

  • Jeden uzel pro tuto úlohu Výchozí počet uzlů je založený na typu úlohy. Další typy úloh najdete v následujících částech.
  • Virtuální počítač procesoru, který se určuje na základě kvóty, výkonu, nákladů a velikosti disku.
  • Vyhrazené virtuální počítače
  • Umístění pracovního prostoru

Tyto výchozí hodnoty můžete přepsat. Pokud chcete zadat typ virtuálního počítače nebo počet uzlů pro výpočetní prostředky bez serveru, přidejte resources úlohu:

  • instance_type a zvolte konkrétní virtuální počítač. Tento parametr použijte, pokud chcete konkrétní velikost virtuálního počítače s procesorem nebo GPU.

  • instance_count zadejte počet uzlů.

    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)
    
  • Pokud chcete změnit úroveň úlohy, vyberte queue_settings si mezi vyhrazenými virtuálními počítači (job_tier: Standard) a nízkou prioritou(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)
    

Příklad pro všechna pole s úlohami příkazů

Tady je příklad všech polí zadaných včetně identity, kterou má úloha použít. Není nutné zadávat nastavení virtuální sítě, protože se automaticky používá úroveň pracovního prostoru spravovaná izolace sítě.

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)

Podívejte se na další příklady trénování s bezserverovými výpočetními prostředky na adrese:-

Úloha AutoML

Není nutné zadávat výpočetní prostředky pro úlohy AutoML. Prostředky je možné volitelně zadat. Pokud není zadaný počet instancí, je výchozí na základě parametrů max_concurrent_trials a max_nodes. Pokud odešlete klasifikaci obrázků AutoML nebo úlohu NLP bez typu instance, automaticky se vybere velikost virtuálního počítače GPU. Úlohu AutoML je možné odeslat prostřednictvím rozhraní CLI, sady SDK nebo studia. Pokud chcete odesílat úlohy AutoML s bezserverovými výpočetními prostředky ve studiu, nejprve na panelu Preview povolte funkci odeslat trénovací úlohu v sadě Studio (Preview ).

Pokud chcete zadat typ nebo počet instancí, použijte ResourceConfiguration třídu.

# 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)

Úloha kanálu

Pro úlohu kanálu zadejte "serverless" jako výchozí výpočetní typ pro použití bezserverových výpočetních prostředků.

# 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"

Výpočetní prostředky bez serveru můžete také nastavit jako výchozí výpočetní prostředky v Designeru.

Další kroky

Podívejte se na další příklady trénování s bezserverovými výpočetními prostředky na adrese:-