Megosztás a következőn keresztül:


Modellbetanítás kiszolgáló nélküli számításon

ÉRVÉNYES:Azure CLI ml-bővítmény v2 (aktuális)Python SDK azure-ai-ml v2 (aktuális)

A modell skálázható betanítása érdekében nem kell számításokat létrehoznia és kezelnie . Ehelyett elküldheti a feladatot egy kiszolgáló nélküli számításnak nevezett számítási céltípusnak. A kiszolgáló nélküli számítás a legegyszerűbb módja a betanítási feladatok futtatásának az Azure Machine Learningben. A kiszolgáló nélküli számítás egy teljes mértékben felügyelt, igény szerinti számítás. Az Azure Machine Learning létrehozza, skálázza és kezeli a számítást. Amikor kiszolgáló nélküli számítással tanít be modelleket, a gépi tanulási modellek létrehozására összpontosíthat, és nem kell megismerkednie a számítási infrastruktúrával vagy annak beállításával.

Megadhatja a feladathoz szükséges erőforrásokat. Az Azure Machine Learning felügyeli a számítási infrastruktúrát, és felügyelt hálózatelkülönítést biztosít, csökkentve az Önre nehezedő terheket.

A vállalatok az egyes feladatokhoz tartozó optimális erőforrások megadásával csökkenthetik a költségeket. Az informatikai rendszergazdák továbbra is alkalmazhatják az irányítást az alapkvóta előfizetési és munkaterületi szinten történő megadásával, valamint az Azure-szabályzatok alkalmazásával.

A kiszolgáló nélküli számítás használatával finomhangolhatja a modelleket a modellkatalógusban. Az Azure Machine Learning Studióval, a Python SDK-val és az Azure CLI-vel bármilyen típusú feladatot futtathat. A kiszolgáló nélküli számítással környezeti rendszerképeket és felelős AI-irányítópult-forgatókönyveket is létrehozhat. A kiszolgáló nélküli feladatok ugyanazt a kvótát használják fel, mint az Azure Machine Learning számítási kvótáját. Választhat standard (dedikált) vagy spot (alacsony prioritású) virtuális gépeket. A felügyelt identitás és a felhasználói identitás kiszolgáló nélküli feladatok esetén támogatott. A számlázási modell ugyanaz, mint az Azure Machine Learning számítási modellje.

Előfeltételek


  • Szerepkörkövetelmények: A feladatok elküldéséhez legalább közreműködői vagy Azure ML-adatelemzői szerepkörre van szüksége a munkaterületen.

Az első kiszolgáló nélküli feladat elküldése

Az alábbi példa egy kiszolgáló nélküli számításon futó minimális parancsfeladatot mutat be. Amikor kihagyja a paramétert compute , a feladat automatikusan kiszolgáló nélküli számítást használ.

from azure.ai.ml import command, MLClient
from azure.identity import DefaultAzureCredential, InteractiveBrowserCredential

# Initialize the ML client
try:
    credential = DefaultAzureCredential()
    credential.get_token("https://management.azure.com/.default")
except Exception:
    credential = InteractiveBrowserCredential()
ml_client = MLClient(
    credential=credential,
    subscription_id="<Azure-subscription-ID>",
    resource_group_name="<Azure-resource-group>",
    workspace_name="<Azure-Machine-Learning-workspace>",
)

# Create a simple command job - omitting 'compute' uses serverless
job = command(
    command="echo 'hello world'",
    environment="azureml://registries/azureml/environments/sklearn-1.5/labels/latest",
)

# Submit the job
returned_job = ml_client.create_or_update(job)
print(f"Job submitted: {returned_job.name}")

Várt kimenet: A feladat létrejön, és visszatér egy munka objektummal, amely állapotot tartalmaz NotStarted vagy Starting. Monitorozza a folyamatot az Azure ML Studióban vagy a hívással ml_client.jobs.get(returned_job.name).

Hivatkozás:parancsfüggvény | MLClient

A kiszolgáló nélküli számítás előnyei

  • Az Azure Machine Learning felügyeli a számítási infrastruktúra létrehozását, beállítását, méretezését, törlését és javítását a felügyeleti többletterhelés csökkentése érdekében.
  • Nem kell többet megtudnia a számításról, a különböző számítási típusokról vagy a kapcsolódó tulajdonságokról.
  • Nem kell ismétlődően fürtöket létrehoznia minden szükséges virtuálisgép-mérethez, ugyanazokat a beállításokat használva és replikálva az egyes munkaterületekhez.
  • A költségeket úgy optimalizálhatja, hogy megadja az egyes feladatokhoz szükséges erőforrásokat a futtatókörnyezetben a példánytípus (virtuálisgép-méret) és a példányszám szempontjából. A feladat kihasználtsági metrikáit is figyelheti a feladathoz szükséges erőforrások optimalizálása érdekében.
  • A feladatok futtatásához kevesebb lépésre van szükség.
  • A feladatok beküldését még egyszerűbbé teheti az erőforrások mellőzésével. Az Azure Machine Learning alapértelmezés szerint a példányok számát adja meg, és olyan tényezők figyelembevételével választja ki a példánytípust, mint a kvóta, a költség, a teljesítmény és a lemezméret.
  • Bizonyos esetekben a feladatok futásának megkezdése előtt a várakozási idő csökken.
  • A feladatbeküldéshez támogatott a felhasználói identitás és a munkaterülethez felhasználók által hozzárendelt felügyelt identitás.
  • A kezelt hálózati elkülönítés leegyszerűsítheti és automatizálhatja a hálózatelkülönítési konfigurációt. Az ügyfél virtuális hálózatai is támogatottak.
  • A felügyeleti vezérlés kvóta- és Azure-szabályzatokkal érhető el.

Kiszolgáló nélküli számítás használata

  • Amikor létrehoz egy saját számítási fürtöt, annak nevét a parancsfeladatban fogja használni. Például: compute="cpu-cluster". A kiszolgáló nélküli megoldás használatával kihagyhatja a számítási fürt létrehozását, és mellőzheti a compute paramétert, hogy helyette kiszolgáló nélküli számítást használjon. Ha compute nincs megadva feladathoz, a feladat kiszolgáló nélküli számításon fut. Hagyja ki a számítási nevet az Azure CLI- vagy Python SDK-feladatokban, hogy kiszolgáló nélküli számítást használjon a következő feladattípusokban, és opcionálisan adja meg a feladathoz szükséges erőforrásokat a példányszámhoz és a példánytípushoz:

    • Parancsfeladatok, beleértve az interaktív feladatokat és az elosztott betanítást
    • AutoML feladatok
    • Takarítási feladatok
    • Párhuzamos feladatok
  • Az Azure CLI-vel végzett folyamatfeladatok esetében használja default_compute: azureml:serverless a folyamatszintű alapértelmezett számításhoz. A Python SDK-val végzett folyamatfeladatokhoz használja a következőt default_compute="serverless": . Az alábbiakban a Pipeline feladat példa.

  • Amikor elküld egy betanítási feladatot a studióban, válassza a Kiszolgáló nélküli lehetőséget számítási típusként.

  • Az Azure Machine Learning Designer használatakor válassza a Kiszolgáló nélküli lehetőséget alapértelmezett számításként.

A teljesítménnyel kapcsolatos megfontolások

A kiszolgáló nélküli számítás a következő módokon növelheti a betanítás sebességét:

Kerülje az elégtelen kvótahibákat. Saját számítási fürt létrehozásakor Ön határozza meg a virtuális gép méretét és a csomópontok számát. Ha a feladat fut, ha nem rendelkezik elegendő kvótával a fürthöz, a feladat meghiúsul. A kiszolgáló nélküli számítás alapértelmezés szerint a kvótával kapcsolatos információkat használja a megfelelő virtuálisgép-méret kiválasztásához.

Vertikális leskálázás optimalizálása. Amikor egy számítási fürt leépül, egy új feladatnak meg kell várnia, amíg a fürt teljesen le- és visszaépül, mielőtt a feladat lefuthat. Kiszolgáló nélküli számítás esetén nem kell megvárnia a leskálázást. A feladat elkezdhet futni egy másik fürtön/csomóponton (feltéve, hogy rendelkezik kvótával).

Fürt foglalt optimalizálása. Amikor egy feladat egy számítási fürtön fut, és egy másik feladat beküldésre kerül, az Ön feladata várólistára kerül az éppen futó feladat mögött. Kiszolgáló nélküli számítással a feladat egy másik csomóponton/fürtön is elindulhat (feltéve, hogy rendelkezik kvótával).

Kvóta

Feladat elküldésekor továbbra is elegendő Azure Machine Learning számítási kvótára van szüksége a folytatáshoz (munkaterületszintű és előfizetési szintű kvótára is). A kiszolgáló nélküli feladatok alapértelmezett virtuálisgép-mérete a kvóta alapján van kiválasztva. Ha saját virtuálisgép-méretet/-családot ad meg:

  • Ha rendelkezik némi kvótával a virtuális gép méretéhez/családjához, de nem rendelkezik elegendő kvótával a példányok számához, hibaüzenet jelenik meg. A hiba azt javasolja, hogy a kvótakorlát alapján csökkentse a példányok számát érvényes számra, kérje a virtuálisgép-család kvótanövelését, vagy módosítsa a virtuális gép méretét.
  • Ha nem rendelkezik kvótával a megadott virtuálisgép-mérethez, hibaüzenet jelenik meg. A hiba azt javasolja, hogy válasszon egy másik virtuálisgép-méretet, amelyhez van kvótája, vagy kérjen kvótát a virtuálisgép-családhoz.
  • Ha rendelkezik elegendő kvótával ahhoz, hogy egy virtuálisgép-család futtassa a kiszolgáló nélküli feladatot, de más feladatok használják a kvótát, egy üzenetben közli, hogy a feladatnak várakozási sorban kell állnia, amíg a kvóta elérhetővé válik.

Amikor megtekinti a használatot és a kvótákat az Azure Portalon, a kiszolgáló nélküli feladatok által felhasznált összes kvóta kiszolgáló nélküli nevét látja.

Identitástámogatás és hitelesítő adatok átadása

A kiszolgáló nélküli számítás két identitáslehetőséget támogat a tárterület és más erőforrások eléréséhez:

  • Felhasználói hitelesítő adatok átadása: A Microsoft Entra ID tokent használja. Legjobb interaktív fejlesztéshez és teszteléshez.
  • Felhasználó által hozzárendelt felügyelt identitás: A munkaterület felügyelt identitását használja. Éles forgatókönyvekhez és automatizáláshoz a legjobb.
  • Felhasználói hitelesítő adatok átadása: A kiszolgáló nélküli számítás teljes mértékben támogatja a felhasználói hitelesítő adatok átadását. A rendszer a feladatot beküldő felhasználó felhasználói jogkivonatát használja a tárhoz való hozzáféréshez. Ezek a hitelesítő adatok a Microsoft Entra-azonosítóból származnak.

    A kiszolgáló nélküli számítás nem támogatja a rendszer által hozzárendelt identitást.

    from azure.ai.ml import command
    from azure.ai.ml import MLClient     # Handle to the workspace.
    from azure.identity import DefaultAzureCredential, InteractiveBrowserCredential     # Authentication package.
    from azure.ai.ml.entities import UserIdentityConfiguration 
    
    try:
        credential = DefaultAzureCredential()
        credential.get_token("https://management.azure.com/.default")
    except Exception:
        credential = InteractiveBrowserCredential()
    # 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)
    

    Hivatkozás:UserIdentityConfiguration | parancsfüggvény

  • Felhasználó által hozzárendelt felügyelt identitás: Ha a munkaterület felhasználó által hozzárendelt felügyelt identitással van konfigurálva, ezt az identitást használhatja a kiszolgáló nélküli feladattal a tárterület-hozzáféréshez. A titkos kódok eléréséről további információt a hitelesítési hitelesítő adatok titkos kulcsainak használata az Azure Machine Learning-feladatokban című témakörben talál.

  1. Ellenőrizze a munkaterület identitáskonfigurációját.

    from azure.ai.ml import MLClient
    from azure.identity import DefaultAzureCredential
    
    subscription_id = "<your-subscription-id>"
    resource_group = "<your-resource-group>"
    workspace = "<your-workspace-name>"
    
    ml_client = MLClient(
        DefaultAzureCredential(),
        subscription_id,
        resource_group,
        workspace
    )
    
    # Get workspace details.
    ws = ml_client.workspaces.get(name=workspace)
    print(ws)
    
    

    Keresse meg a felhasználó által hozzárendelt identitást a kimenetben. Ha hiányzik, hozzon létre egy új munkaterületet egy felhasználó által hozzárendelt felügyelt identitással az Azure Machine Learning és más szolgáltatások közötti hitelesítés beállítása című témakör utasításait követve.

  2. Használja a felhasználóhoz rendelt felügyelt identitást a munkájában.

    from azure.ai.ml import command
    from azure.ai.ml import MLClient     # Handle to the workspace.
    from azure.identity import DefaultAzureCredential, InteractiveBrowserCredential    # Authentication package.
    from azure.ai.ml.entities import ManagedIdentityConfiguration
    
    try:
        credential = DefaultAzureCredential()
        credential.get_token("https://management.azure.com/.default")
    except Exception:
        credential = InteractiveBrowserCredential()
    # 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(client_id="<workspace-UAMI-client-ID>"),
    )
    # Submit the command job.
    ml_client.create_or_update(job)
    

Referencia:ManagedIdentityConfiguration

Parancsfeladatok tulajdonságainak konfigurálása

Ha nincs megadva számítási cél a parancs-, takarítási és AutoML-feladatokhoz, a számítás alapértelmezés szerint kiszolgáló nélküli számítás lesz. Íme egy példa:

from azure.ai.ml import command 
from azure.ai.ml import MLClient # Handle to the workspace.
from azure.identity import DefaultAzureCredential, InteractiveBrowserCredential # Authentication package.

try:
    credential = DefaultAzureCredential()
    credential.get_token("https://management.azure.com/.default")
except Exception:
    credential = InteractiveBrowserCredential()
# 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)

A számítás alapértelmezetten kiszolgáló nélküli számítást használ.

  • Ehhez a feladathoz egyetlen csomópont. A csomópontok alapértelmezett száma a feladat típusától függ. A többi feladattípust a következő szakaszokban találja.
  • Cpu virtuális gép. A virtuális gép meghatározása a kvóta, a teljesítmény, a költség és a lemezméret alapján történik.
  • Dedikált virtuális gépek.
  • Munkaterület helye.

Ezeket az alapértelmezett értékeket felülbírálhatja. Ha meg szeretné adni a virtuális gép típusát vagy a kiszolgáló nélküli számítás csomópontjainak számát, adja hozzá resources a feladathoz:

  • Egy adott virtuális gép kiválasztására használható instance_type . Ezt a paramétert akkor használja, ha egy adott CPU- vagy GPU-virtuálisgép-méretet szeretne

  • A csomópontok számának megadására használható instance_count .

    from azure.ai.ml import command 
    from azure.ai.ml import MLClient # Handle to the workspace.
    from azure.identity import DefaultAzureCredential, InteractiveBrowserCredential # Authentication package.
    from azure.ai.ml.entities import JobResourceConfiguration 
    
    try:
        credential = DefaultAzureCredential()
        credential.get_token("https://management.azure.com/.default")
    except Exception:
        credential = InteractiveBrowserCredential()
    # 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)
    

    Referencia:JobResourceConfiguration

  • A feladatszint módosításához válassza queue_settings ki a dedikált virtuális gépeket (job_tier: Standard) és az alacsony prioritású virtuális gépeket (job_tier: Spot).

    from azure.ai.ml import command
    from azure.ai.ml import MLClient    # Handle to the workspace.
    from azure.identity import DefaultAzureCredential, InteractiveBrowserCredential    # Authentication package.
    try:
        credential = DefaultAzureCredential()
        credential.get_token("https://management.azure.com/.default")
    except Exception:
        credential = InteractiveBrowserCredential()
    # 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élda a parancsfeladatokkal rendelkező összes mezőre

Íme egy példa, amely az összes megadott mezőt megjeleníti, beleértve azt az identitást is, amelyet a feladatnak használnia kell. Nem kell virtuális hálózati beállításokat megadnia, mert a munkaterületszintű felügyelt hálózatelkülönítés automatikusan használatban van.

from azure.ai.ml import command
from azure.ai.ml import MLClient      # Handle to the workspace.
from azure.identity import DefaultAzureCredential, InteractiveBrowserCredential     # Authentication package.
from azure.ai.ml.entities import JobResourceConfiguration
from azure.ai.ml.entities import UserIdentityConfiguration 

try:
    credential = DefaultAzureCredential()
    credential.get_token("https://management.azure.com/.default")
except Exception:
    credential = InteractiveBrowserCredential()
# 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 = JobResourceConfiguration(instance_type="Standard_E4s_v3", instance_count=1)
# Submit the command job.
ml_client.create_or_update(job)

Referencia:JobResourceConfiguration | UserIdentityConfiguration | parancsfüggvény

Íme két további példa a kiszolgáló nélküli számítás betanításhoz való használatára:

AutoML-feladat

Nem kell megadnia az AutoML-feladatok számítását. Az erőforrások opcionálisan megadhatóak. Ha nincs megadva példányszám, az a max_concurrent_trials és max_nodes paraméterek alapján alapértelmezettként van beállítva. Ha autoML-rendszerkép-besorolást vagy NLP-feladatot küld el példánytípus megadása nélkül, a rendszer automatikusan kiválasztja a GPU-beli virtuális gép méretét. AutoML-feladatokat cli-ekkel, Python SDK-val vagy studióval küldhet be.

Ha meg szeretné adni a típust vagy a példányszámot, használja az osztályt ResourceConfiguration .

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

Folyamatfeladat

Folyamatfeladat esetén adja meg "serverless" alapértelmezett számítási típusként a kiszolgáló nélküli számítás használatát.

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

A kiszolgáló nélküli számítást is beállíthatja alapértelmezett számításként a Tervezőben.

Kiszolgáló nélküli folyamatfeladatok konfigurálása felhasználó által hozzárendelt felügyelt identitással

Amikor kiszolgálómentes számítást használ a csővezeték-feladatokban, javasoljuk, hogy a felhasználói identitást az egyes lépések szintjén állítsa be, amelyek egy számítási egységen futnak, ahelyett, hogy a gyökér csővezeték szintjén tenné ezt. (Bár az identitásbeállítás a gyökérfolyamat és a lépés szintjén is támogatott, a lépésszintű beállítás elsőbbséget élvez, ha mindkettő be van állítva. A folyamatösszetevőket tartalmazó folyamatok esetében azonban az identitást az egyes futtatandó lépésekre kell beállítani. A gyökérfolyamat vagy a folyamat összetevő szintjén beállított identitás nem fog működni. Ezért javasoljuk, hogy az egyszerűség kedvéért állítsa be az identitást az egyes lépések szintjén.)

def my_pipeline():
    train_job = train_component(
        training_data=Input(type="uri_folder", path="./data")
    )
    # Set managed identity for the job
    train_job.identity = {"type": "managed"}
    return {"train_output": train_job.outputs}

pipeline_job = my_pipeline()
# Configure the pipeline to use serverless compute.
pipeline_job.settings.default_compute = "serverless"

További példák a kiszolgáló nélküli számítással való betanításra: