Megosztás:


Rövid útmutató: Az Azure Machine Learning használatának első lépései

A KÖVETKEZŐKRE VONATKOZIK: Python SDK azure-ai-ml v2 (aktuális)

Ez az oktatóanyag az Azure Machine Learning szolgáltatás leggyakrabban használt funkcióit mutatja be. Létrehozhat, regisztrálhat és üzembe helyezhet egy modellt. Ez az oktatóanyag segít megismerni az Azure Machine Learning alapfogalmait és azok leggyakoribb használatát.

Ebben a rövid útmutatóban egy gépi tanulási modell betanítása, regisztrálása és üzembe helyezése az Azure Machine Learning használatával – mindezt egy Python-jegyzetfüzetből. A végére lesz egy működő végpontja, amelyet előrejelzésekhez hívhat meg.

Megtudhatja, hogyan:

  • Betanítási feladat futtatása skálázható felhőbeli számításon
  • A betanított modell regisztrálása
  • A modell üzembe helyezése online végpontként
  • A végpont tesztelése mintaadatokkal

Létrehozhat egy betanítási szkriptet az adatelőkészítés, a betanítás és a modell regisztrálásához. A modell betanítása után végpontként telepíti, majd meghívja a végpontot inferencia céljából.

A lépések a következők:

  • Fogópont beállítása az Azure Machine Learning-munkaterületen
  • Betanítási szkript létrehozása
  • Méretezhető számítási erőforrás, számítási fürt létrehozása
  • Hozzon létre és futtasson egy parancsfeladatot, amely a megfelelő feladatkörnyezettel konfigurált betanítási szkriptet futtatja a számítási fürtön
  • A betanítási szkript kimenetének megtekintése
  • Az újonnan betanított modell üzembe helyezése végpontként
  • Az Azure Machine Learning-végpont meghívása következtetéshez

Előfeltételek

  1. Az Azure Machine Learning használatához munkaterületre van szüksége. Ha nem rendelkezik ilyen erőforrással, végezze el a munkaterület létrehozásához szükséges erőforrások létrehozását, és tudjon meg többet a használatáról.

    Fontos

    Ha az Azure Machine Learning-munkaterület felügyelt virtuális hálózattal van konfigurálva, előfordulhat, hogy kimenő szabályokat kell hozzáadnia a nyilvános Python-csomagtárakhoz való hozzáférés engedélyezéséhez. További információ: Forgatókönyv: Nyilvános gépi tanulási csomagok elérése.

  2. Jelentkezzen be a stúdióba , és válassza ki a munkaterületet, ha még nincs megnyitva.

  3. Jegyzetfüzet megnyitása vagy létrehozása a munkaterületen:

    • Ha kódot szeretne másolni és beilleszteni a cellákba, hozzon létre egy új jegyzetfüzetet.
    • Vagy nyissa meg az oktatóanyagokat/get-started-notebooks/quickstart.ipynb fájlt a Studio Minták szakaszából. Ezután válassza a Klónozás lehetőséget a jegyzetfüzet fájlokhoz való hozzáadásához. A mintajegyzetfüzetek megkereséséhez lásd : Learn from sample notebooks.

A kernel beállítása és megnyitása a Visual Studio Code-ban (VS Code)

  1. A megnyitott jegyzetfüzet fölötti felső sávon hozzon létre egy számítási példányt, ha még nem rendelkezik ilyenrel.

    Képernyőkép a számítási példányok létrehozásáról.

  2. Ha a számítási példány le van állítva, válassza a Számítás indítása lehetőséget, és várja meg, amíg fut.

    Képernyőkép egy leállított számítási példány indításáról.

  3. Várjon, amíg a számítási példány fut. Ezután győződjön meg arról, hogy a jobb felső sarokban található kernel az Python 3.10 - SDK v2. Ha nem, válassza ki a kernelt a legördülő listából.

    Képernyőkép a kernel beállításáról.

    Ha nem látja ezt a kernelt, ellenőrizze, hogy fut-e a számítási példány. Ha igen, válassza a jegyzetfüzet jobb felső sarkában található Frissítés gombot.

  4. Ha megjelenik egy szalagcím, amely azt jelzi, hogy hitelesíteni kell, válassza a Hitelesítés lehetőséget.

  5. A jegyzetfüzetet itt futtathatja, vagy megnyithatja a VS Code-ban egy teljes integrált fejlesztési környezethez (IDE) az Azure Machine Learning-erőforrások segítségével. Válassza a Megnyitás a VS Code-ban lehetőséget, majd válassza a webes vagy asztali lehetőséget. Ha így indul el, a VS Code a számítási példányhoz, a kernelhez és a munkaterület fájlrendszeréhez lesz csatolva.

    Képernyőkép a jegyzetfüzet VS Code-ban való megnyitásáról.

Fontos

Az oktatóanyag többi része az oktatóanyag-jegyzetfüzet celláit tartalmazza. Másolja és illessze be őket az új jegyzetfüzetbe, vagy váltson most a jegyzetfüzetre, ha klónozta.

Leíró létrehozása munkaterületre

Mielőtt belemerül a kódba, szüksége van egy módszerre a munkaterületre való hivatkozáshoz. A munkaterület az Azure Machine Learning legfelső szintű erőforrása, amely egy központi helyet biztosít az Azure Machine Learning használata során létrehozott összetevőkkel való munkához.

Hozzon létre ml_client leíróként a munkaterülethez – ez a kliens kezeli az összes erőforrást és feladatot.

A következő cellába írja be az előfizetés azonosítóját, az erőforráscsoport nevét és a munkaterület nevét. Az alábbi értékek megkeresése:

  1. A jobb felső Azure Machine Learning Studio eszköztáron válassza ki a munkaterület nevét.
  2. Másolja a munkaterület, az erőforráscsoport és az előfizetés azonosítójának értékét a kódba.
  3. Másolja ki az egyik értéket, zárja be a területet, és illessze be. Ezután térjen vissza a következő értékhez.

Képernyőkép: keresse meg a kód hitelesítő adatait az eszköztár jobb felső sarkában.

from azure.ai.ml import MLClient
from azure.identity import DefaultAzureCredential

# authenticate
credential = DefaultAzureCredential()

SUBSCRIPTION = "<SUBSCRIPTION_ID>"
RESOURCE_GROUP = "<RESOURCE_GROUP>"
WS_NAME = "<AML_WORKSPACE_NAME>"
# Get a handle to the workspace
ml_client = MLClient(
    credential=credential,
    subscription_id=SUBSCRIPTION,
    resource_group_name=RESOURCE_GROUP,
    workspace_name=WS_NAME,
)

Feljegyzés

Az MLClient létrehozása során nem történik csatlakozás a munkaterülethez. Az ügyfél inicializálása lusta. Megvárja az első alkalommal, amikor hívást kell kezdeményeznie. Ez a művelet a következő kódcellában történik.

# Verify that the handle works correctly.
# If you ge an error here, modify your SUBSCRIPTION, RESOURCE_GROUP, and WS_NAME in the previous cell.
ws = ml_client.workspaces.get(WS_NAME)
print(ws.location, ":", ws.resource_group)

Betanítási szkript létrehozása

Hozza létre a betanítási szkriptet, amely a main.py Python-fájl.

Először hozzon létre egy forrásmappát a szkripthez:

import os

train_src_dir = "./src"
os.makedirs(train_src_dir, exist_ok=True)

Ez a szkript előre feldolgozja az adatokat, és felosztja őket tesztelési és betanítási adatkészletekre. Egy faalapú modellt képez be ezen adatok használatával, és visszaadja a kimeneti modellt.

A folyamat futtatása során az MLFlow használatával naplózza a paramétereket és a metrikákat.

Az alábbi cella az IPython magic használatával írja be a betanítási szkriptet az imént létrehozott könyvtárba.

%%writefile {train_src_dir}/main.py
import os
import argparse
import pandas as pd
import mlflow
import mlflow.sklearn
from sklearn.ensemble import GradientBoostingClassifier
from sklearn.metrics import classification_report
from sklearn.model_selection import train_test_split

def main():
    """Main function of the script."""

    # input and output arguments
    parser = argparse.ArgumentParser()
    parser.add_argument("--data", type=str, help="path to input data")
    parser.add_argument("--test_train_ratio", type=float, required=False, default=0.25)
    parser.add_argument("--n_estimators", required=False, default=100, type=int)
    parser.add_argument("--learning_rate", required=False, default=0.1, type=float)
    parser.add_argument("--registered_model_name", type=str, help="model name")
    args = parser.parse_args()
   
    # Start Logging
    mlflow.start_run()

    # enable autologging
    mlflow.sklearn.autolog()

    ###################
    #<prepare the data>
    ###################
    print(" ".join(f"{k}={v}" for k, v in vars(args).items()))

    print("input data:", args.data)
    
    credit_df = pd.read_csv(args.data, header=1, index_col=0)

    mlflow.log_metric("num_samples", credit_df.shape[0])
    mlflow.log_metric("num_features", credit_df.shape[1] - 1)

    train_df, test_df = train_test_split(
        credit_df,
        test_size=args.test_train_ratio,
    )
    ####################
    #</prepare the data>
    ####################

    ##################
    #<train the model>
    ##################
    # Extracting the label column
    y_train = train_df.pop("default payment next month")

    # convert the dataframe values to array
    X_train = train_df.values

    # Extracting the label column
    y_test = test_df.pop("default payment next month")

    # convert the dataframe values to array
    X_test = test_df.values

    print(f"Training with data of shape {X_train.shape}")

    clf = GradientBoostingClassifier(
        n_estimators=args.n_estimators, learning_rate=args.learning_rate
    )
    clf.fit(X_train, y_train)

    y_pred = clf.predict(X_test)

    print(classification_report(y_test, y_pred))
    ###################
    #</train the model>
    ###################

    ##########################
    #<save and register model>
    ##########################
    # Registering the model to the workspace
    print("Registering the model via MLFlow")

    # pin numpy
    conda_env = {
        'name': 'mlflow-env',
        'channels': ['conda-forge'],
        'dependencies': [
            'python=3.10.15',
            'pip<=21.3.1',
            {
                'pip': [
                    'mlflow==2.17.0',
                    'cloudpickle==2.2.1',
                    'pandas==1.5.3',
                    'psutil==5.8.0',
                    'scikit-learn==1.5.2',
                    'numpy==1.26.4',
                ]
            }
        ],
    }

    mlflow.sklearn.log_model(
        sk_model=clf,
        registered_model_name=args.registered_model_name,
        artifact_path=args.registered_model_name,
        conda_env=conda_env,
    )

    # Saving the model to a file
    mlflow.sklearn.save_model(
        sk_model=clf,
        path=os.path.join(args.registered_model_name, "trained_model"),
    )
    ###########################
    #</save and register model>
    ###########################
    
    # Stop Logging
    mlflow.end_run()

if __name__ == "__main__":
    main()

A modell betanítása után a szkript menti és regisztrálja a modellfájlt a munkaterületen. A regisztrált modell a végpontok következtetésére használható.

Előfordulhat, hogy a Frissítés lehetőséget kell választania az új mappa és szkript megtekintéséhez a Fájlok mappában.

Képernyőkép a frissítés ikonról.

A parancs konfigurálása

Most már rendelkezik egy szkripttel, amely végrehajtja a kívánt feladatokat, és egy számítási fürttel, amelyen futtathatja a szkriptet. Használjon egy általános célú parancsot , amely parancssori műveleteket futtathat. Ez a parancssori művelet közvetlenül meghívhatja a rendszerparancsokat, vagy szkriptet futtathat.

Bemeneti változók létrehozása a bemeneti adatok, a felosztási arány, a tanulási sebesség és a regisztrált modellnév megadásához. A parancsszkript:

  • Olyan környezetet használ, amely meghatározza a betanítási szkripthez szükséges szoftver- és futtatókörnyezeti kódtárakat. Az Azure Machine Learning számos válogatott vagy kész környezetet biztosít, amelyek hasznosak a gyakori betanítási és következtetési forgatókönyvekhez. Itt az egyik ilyen környezetet használja. Az oktatóanyagban: Modell betanítása az Azure Machine Learningben, megtudhatja, hogyan hozhat létre egyéni környezetet.
  • Magát a parancssori műveletet konfigurálja – python main.py ebben az esetben. A bemenetek és kimenetek a jelölésen keresztül érhetők el a ${{ ... }} parancsban.
  • Egy interneten található fájlból fér hozzá az adatokhoz.
  • Mivel nem adott meg számítási erőforrást, a szkript egy automatikusan létrehozott kiszolgáló nélküli számítási fürtön fut.
from azure.ai.ml import command
from azure.ai.ml import Input

registered_model_name = "credit_defaults_model"

job = command(
    inputs=dict(
        data=Input(
            type="uri_file",
            path="https://azuremlexamples.blob.core.windows.net/datasets/credit_card/default_of_credit_card_clients.csv",
        ),
        test_train_ratio=0.2,
        learning_rate=0.25,
        registered_model_name=registered_model_name,
    ),
    code="./src/",  # location of source code
    command="python main.py --data ${{inputs.data}} --test_train_ratio ${{inputs.test_train_ratio}} --learning_rate ${{inputs.learning_rate}} --registered_model_name ${{inputs.registered_model_name}}",
    environment="azureml://registries/azureml/environments/sklearn-1.5/labels/latest",
    display_name="credit_default_prediction",
)

Feladat küldése

Küldje el a feladatot az Azure Machine Learningben való futtatáshoz. Ezúttal használja create_or_update a következőt ml_client: .

ml_client.create_or_update(job)

Feladat kimenetének megtekintése és várakozás a feladat befejezésére

Tekintse meg a feladatot az Azure Machine Learning Studióban az előző cella kimenetében található hivatkozás kiválasztásával.

A feladat kimenete így néz ki az Azure Machine Learning Studióban. Ismerje meg a különböző részleteket, például a metrikákat, a kimeneteket és egyebeket tartalmazó füleket. A munka befejezése után a képzés eredményeként egy modellt regisztrál a munkahelyén.

Képernyőkép a feladat áttekintési lapjáról.

Fontos

Várjon, amíg a feladat állapota kész, a folytatás megkezdése előtt – általában 2–3 percre van szükség. Ha a számítási fürt nullára van skálázva, akár 10 percet is várhat, amíg előkészíti.

Amíg vár, fedezze fel a stúdióban a feladatok részleteit:

  • Metrikák lap: Az MLflow által naplózott betanítási metrikák megtekintése
  • Kimenetek + naplók lap: A betanítási naplók ellenőrzése
  • Modellek lap: A regisztrált modell megtekintése (a befejezés után)

A modell üzembe helyezése online végpontként

Helyezze üzembe gépi tanulási modelljét webszolgáltatásként az Azure felhőben egy online endpoint.

Gépi tanulási szolgáltatás üzembe helyezéséhez használja a regisztrált modellt.

Új online végpont létrehozása

Miután regisztrálta a modellt, hozza létre az online végpontot. A végpont nevének egyedinek kell lennie a teljes Azure-régióban. Ebben az oktatóanyagban hozzon létre egy egyedi nevet a UUID használatával.

import uuid

# Creating a unique name for the endpoint
online_endpoint_name = "credit-endpoint-" + str(uuid.uuid4())[:8]

Hozza létre a végpontot.

# Expect the endpoint creation to take a few minutes
from azure.ai.ml.entities import (
    ManagedOnlineEndpoint,
    ManagedOnlineDeployment,
    Model,
    Environment,
)

# create an online endpoint
endpoint = ManagedOnlineEndpoint(
    name=online_endpoint_name,
    description="this is an online endpoint",
    auth_mode="key",
    tags={
        "training_dataset": "credit_defaults",
        "model_type": "sklearn.GradientBoostingClassifier",
    },
)

endpoint = ml_client.online_endpoints.begin_create_or_update(endpoint).result()

print(f"Endpoint {endpoint.name} provisioning state: {endpoint.provisioning_state}")

Feljegyzés

Várja meg, hogy a végpont létrehozása néhány percet vesz igénybe.

A végpont létrehozása után kérje le a következő kódban látható módon:

endpoint = ml_client.online_endpoints.get(name=online_endpoint_name)

print(
    f'Endpoint "{endpoint.name}" with provisioning state "{endpoint.provisioning_state}" is retrieved'
)

A modell üzembe helyezése a végponton

A végpont létrehozása után telepítse a modellt a belépési szkript használatával. Minden végpont több üzembe helyezéssel is rendelkezhet. Megadhat szabályokat, amelyek a forgalmat ezekre a telepítésekre irányítják. Ebben a példában egyetlen üzembe helyezést hoz létre, amely a bejövő forgalom 100%-át kezeli. Válasszon egy színnevet az üzembe helyezéshez, például kék, zöld vagy piros. A választás tetszőleges.

A regisztrált modell legújabb verziójának megkereséséhez tekintse meg a Modellek lapot az Azure Machine Learning Studióban. Másik lehetőségként használja az alábbi kódot a legújabb verziószám lekéréséhez.

# Let's pick the latest version of the model
latest_model_version = max(
    [int(m.version) for m in ml_client.models.list(name=registered_model_name)]
)
print(f'Latest model is version "{latest_model_version}" ')

Telepítse a modell legújabb verzióját.

# picking the model to deploy. Here we use the latest version of our registered model
model = ml_client.models.get(name=registered_model_name, version=latest_model_version)

# Expect this deployment to take approximately 6 to 8 minutes.
# create an online deployment.
# if you run into an out of quota error, change the instance_type to a comparable VM that is available.
# Learn more on https://azure.microsoft.com/pricing/details/machine-learning/.
blue_deployment = ManagedOnlineDeployment(
    name="blue",
    endpoint_name=online_endpoint_name,
    model=model,
    instance_type="Standard_DS3_v2",
    instance_count=1,
)

blue_deployment = ml_client.begin_create_or_update(blue_deployment).result()

Feljegyzés

Az üzembe helyezés várhatóan körülbelül 6–8 percet vesz igénybe.

Amikor az üzembe helyezés befejeződik, készen állsz a tesztelésre.

Tesztelés minta lekérdezéssel

Miután üzembe helyezi a modellt a végponton, futtassa a következtetést a modell használatával.

Hozzon létre egy mintakérelemfájlt, amely a pontszámszkript run metódusában elvárt tervet követi.

deploy_dir = "./deploy"
os.makedirs(deploy_dir, exist_ok=True)
%%writefile {deploy_dir}/sample-request.json
{
  "input_data": {
    "columns": [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22],
    "index": [0, 1],
    "data": [
            [20000,2,2,1,24,2,2,-1,-1,-2,-2,3913,3102,689,0,0,0,0,689,0,0,0,0],
            [10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 10, 9, 8]
        ]
  }
}
# test the blue deployment with some sample data
ml_client.online_endpoints.invoke(
    endpoint_name=online_endpoint_name,
    request_file="./deploy/sample-request.json",
    deployment_name="blue",
)

Az erőforrások eltávolítása

Ha nincs szüksége a végpontra, törölje az erőforrás használatának leállításához. A törlés előtt győződjön meg arról, hogy más üzemelő példányok nem használnak az adott végpontot.

Feljegyzés

A teljes törlés várhatóan körülbelül 20 percet vesz igénybe.

ml_client.online_endpoints.begin_delete(name=online_endpoint_name)

Számítási példány leállítása

Ha most nincs rá szüksége, állítsa le a számítási egységet:

  1. A stúdió bal oldali paneljén válassza a Számítás lehetőséget.
  2. A felső lapon válassza a Számítási példányok lehetőséget.
  3. Válassza ki a számítási példányt a listában.
  4. A felső eszköztáron válassza a Leállítás lehetőséget.

Az összes erőforrás törlése

Fontos

A létrehozott erőforrások előfeltételként használhatók más Azure Machine Learning-oktatóanyagokhoz és útmutatókhoz.

Ha nem tervezi használni a létrehozott erőforrások egyikét sem, törölje őket, hogy ne járjon költséggel:

  1. Az Azure Portal keresőmezőjében adja meg az erőforráscsoportokat , és válassza ki az eredmények közül.

  2. A listából válassza ki a létrehozott erőforráscsoportot.

  3. Az Áttekintés lapon válassza az Erőforráscsoport törlése lehetőséget.

    Képernyőkép egy erőforráscsoport azure portalon való törlésére vonatkozó kijelölésekről.

  4. Adja meg az erőforráscsoport nevét. Ezután válassza a Törlés elemet.

Következő lépések

További lehetőségek az Azure Machine Learning használatával történő buildelésre:

Oktatóanyag Leírás
Adatok feltöltése, elérése és feltárása Nagy méretű adatok tárolása a felhőben, és azok elérése jegyzetfüzetekből
Modellfejlesztés felhőbeli munkaállomáson Modellek prototípusa és fejlesztése interaktívan
Modell üzembe helyezése online végpontként Speciális üzembehelyezési konfigurációk megismerése
Gyártási csővezetékek létrehozása Automatizált, újrafelhasználható ML-munkafolyamatok létrehozása