Rychlý start: Začínáme se službou Azure Machine Učení

PLATÍ PRO: Python SDK azure-ai-ml v2 (aktuální)

Tento kurz je úvodem k některým z nejčastěji používaných funkcí služby Azure Machine Učení. V něm vytvoříte, zaregistrujete a nasadíte model. Tento kurz vám pomůže seznámit se se základními koncepty služby Azure Machine Učení a jejich nejběžnějším využitím.

Dozvíte se, jak spustit úlohu trénování u škálovatelného výpočetního prostředku, pak ji nasadit a nakonec otestovat nasazení.

Vytvoříte trénovací skript pro zpracování přípravy dat, trénování a registraci modelu. Jakmile model vytrénujete, nasadíte ho jako koncový bod a pak zavoláte koncový bod pro odvozování.

Kroky, které provedete, jsou:

  • Nastavení popisovače pro pracovní prostor Azure Machine Učení
  • Vytvoření trénovacího skriptu
  • Vytvoření škálovatelného výpočetního prostředku, výpočetního clusteru
  • Vytvořte a spusťte úlohu příkazu, která spustí trénovací skript ve výpočetním clusteru nakonfigurované s odpovídajícím prostředím úlohy.
  • Zobrazení výstupu trénovacího skriptu
  • Nasazení nově natrénovaného modelu jako koncového bodu
  • Volání koncového bodu azure machine Učení pro odvozování

V tomto videu najdete přehled kroků v tomto rychlém startu.

Požadavky

  1. Pokud chcete používat Učení Azure Machine, budete nejdřív potřebovat pracovní prostor. Pokud ho nemáte, dokončete vytváření prostředků, které potřebujete, abyste mohli začít vytvářet pracovní prostor a získat další informace o jeho používání.

  2. Přihlaste se do studia a vyberte pracovní prostor, pokud ještě není otevřený.

  3. Otevřete nebo vytvořte poznámkový blok v pracovním prostoru:

    • Pokud chcete zkopírovat nebo vložit kód do buněk, vytvořte nový poznámkový blok.
    • Nebo otevřete kurzy/get-started-notebooks/quickstart.ipynb v části Ukázky studia. Potom vyberte Clone (Klonovat ) a přidejte poznámkový blok do složky Soubory. (Podívejte se, kde najít ukázky.)

Nastavení jádra

  1. Na horním panelu nad otevřeným poznámkovým blokem vytvořte výpočetní instanci, pokud ji ještě nemáte.

    Screenshot shows how to create a compute instance.

  2. Pokud je výpočetní instance zastavená, vyberte Spustit výpočetní prostředky a počkejte, až bude spuštěný.

    Screenshot shows how to start compute if it is stopped.

  3. Ujistěte se, že jádro, které se nachází v pravém horním rohu, je Python 3.10 - SDK v2. Pokud ne, vyberte toto jádro pomocí rozevíracího seznamu.

    Screenshot shows how to set the kernel.

  4. Pokud se zobrazí banner s informací, že potřebujete být ověřeni, vyberte Ověřit.

Důležité

Zbytek tohoto kurzu obsahuje buňky poznámkového bloku kurzu. Zkopírujte nebo vložte je do nového poznámkového bloku nebo přepněte do poznámkového bloku, pokud jste ho naklonovali.

Vytvoření popisovače do pracovního prostoru

Než se pustíme do kódu, potřebujete způsob, jak odkazovat na váš pracovní prostor. Pracovní prostor je prostředek nejvyšší úrovně pro Azure Machine Learning, který nabízí centralizované místo, kde můžete pracovat se všemi artefakty, které vytvoříte při použití služby Azure Machine Learning.

ml_client Vytvoříte pro popisovač pracovního prostoru. Pak použijete ml_client ke správě prostředků a úloh.

Do další buňky zadejte ID předplatného, název skupiny prostředků a název pracovního prostoru. Tyto hodnoty najdete takto:

  1. V pravém horním studio Azure Machine Learning panelu nástrojů vyberte název pracovního prostoru.
  2. Zkopírujte hodnotu pro pracovní prostor, skupinu prostředků a ID předplatného do kódu.
  3. Budete muset zkopírovat jednu hodnotu, zavřít oblast a vložit a pak se vrátit k další hodnotě.

Screenshot: find the credentials for your code in the upper right of the toolbar.

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

Poznámka:

Vytvoření MLClient se nepřipojí k pracovnímu prostoru. Inicializace klienta je opožděná, bude čekat poprvé, až bude muset provést volání (k tomu dojde v další buňce kódu).

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

Vytvoření trénovacího skriptu

Začněme vytvořením trénovacího skriptu – main.py souboru Pythonu.

Nejprve vytvořte zdrojovou složku pro skript:

import os

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

Tento skript zpracovává předběžné zpracování dat a rozdělí je na testovací a trénovací data. Potom tato data spotřebuje k trénování modelu založeného na stromové struktuře a vrácení výstupního modelu.

MlFlow se použije k protokolování parametrů a metrik během spuštění kanálu.

Následující buňka používá magii IPython k napsání trénovacího skriptu do adresáře, který jste právě vytvořili.

%%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")
    mlflow.sklearn.log_model(
        sk_model=clf,
        registered_model_name=args.registered_model_name,
        artifact_path=args.registered_model_name,
    )

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

Jak vidíte v tomto skriptu, po vytrénování modelu se soubor modelu uloží a zaregistruje do pracovního prostoru. Teď můžete použít zaregistrovaný model při odvozování koncových bodů.

Možná budete muset vybrat Aktualizovat, abyste viděli novou složku a skript ve vašich souborech.

Screenshot shows the refresh icon.

Konfigurace příkazu

Teď, když máte skript, který může provádět požadované úlohy, a výpočetní cluster ke spuštění skriptu, použijete příkaz pro obecné účely, který může spouštět akce příkazového řádku. Tato akce příkazového řádku může přímo volat systémové příkazy nebo spustit skript.

Tady vytvoříte vstupní proměnné pro zadání vstupních dat, poměru rozdělení, rychlosti učení a názvu registrovaného modelu. Skript příkazu bude:

  • Použijte prostředí, které definuje knihovny softwaru a modulu runtime potřebné pro trénovací skript. Azure Machine Učení poskytuje mnoho kurátorovaných nebo připravených prostředí, která jsou užitečná pro běžné scénáře trénování a odvozování. Tady použijete jedno z těchto prostředí. V kurzu: Natrénování modelu ve službě Azure Machine Učení se naučíte, jak vytvořit vlastní prostředí.
  • Nakonfigurujte samotnou akci příkazového řádku – python main.py v tomto případě. Vstupy a výstupy jsou v příkazu přístupné prostřednictvím zápisu ${{ ... }} .
  • V této ukázce přistupujeme k datům ze souboru na internetu.
  • Vzhledem k tomu, že výpočetní prostředek nebyl zadán, skript se spustí v bezserverovém výpočetním clusteru , který se automaticky vytvoří.
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-sklearn-1.0-ubuntu20.04-py38-cpu@latest",
    display_name="credit_default_prediction",
)

Odeslání úlohy

Teď je čas odeslat úlohu, která se má spustit ve službě Azure Machine Učení. Tentokrát použijete create_or_update .ml_client

ml_client.create_or_update(job)

Zobrazení výstupu úlohy a čekání na dokončení úlohy

Zobrazte úlohu v studio Azure Machine Learning výběrem odkazu ve výstupu předchozí buňky.

Výstup této úlohy bude v studio Azure Machine Learning vypadat takto. Prozkoumejte karty pro různé podrobnosti, jako jsou metriky, výstupy atd. Po dokončení se úloha zaregistruje v pracovním prostoru jako výsledek trénování.

Screenshot shows the overview page for the job.

Důležité

Než se vrátíte do tohoto poznámkového bloku, počkejte, až se stav úlohy dokončí. Spuštění úlohy bude trvat 2 až 3 minuty. Pokud je výpočetní cluster škálovaný na nula uzlů a vlastní prostředí stále vytváří, může to trvat déle (až 10 minut).

Nasazení modelu jako online koncového bodu

Teď nasaďte model strojového učení jako webovou službu v cloudu Azure, tj online endpoint.

K nasazení služby Machine Learning použijete model, který jste zaregistrovali.

Vytvoření nového online koncového bodu

Teď, když máte zaregistrovaný model, je čas vytvořit online koncový bod. Název koncového bodu musí být jedinečný v celé oblasti Azure. Pro účely tohoto kurzu vytvoříte jedinečný název pomocí UUID.

import uuid

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

Vytvořte koncový bod:

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

Poznámka:

Počítejte s tím, že vytvoření koncového bodu bude trvat několik minut.

Po vytvoření koncového bodu ho můžete načíst následujícím způsobem:

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

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

Nasazení modelu do koncového bodu

Po vytvoření koncového bodu nasaďte model pomocí vstupního skriptu. Každý koncový bod může mít více nasazení. Směrování provozu do těchto nasazení je možné zadat pomocí pravidel. Tady vytvoříte jedno nasazení, které zpracovává 100 % příchozího provozu. Pro nasazení jsme zvolili název barvy, například modré, zelené, červené nasazení, což je libovolné.

Na stránce Modely na studio Azure Machine Learning můžete zkontrolovat nejnovější verzi zaregistrovaného modelu. Případně níže uvedený kód načte nejnovější číslo verze, které můžete použít.

# 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}" ')

Nasaďte nejnovější verzi modelu.

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

Poznámka:

Očekáváme, že toto nasazení bude trvat přibližně 6 až 8 minut.

Až se nasazení dokončí, můžete ho otestovat.

Testování pomocí ukázkového dotazu

Jakmile je model nasazený do koncového bodu, můžete s ním spustit odvozování.

Vytvořte ukázkový soubor požadavku podle návrhu očekávaného v metodě spuštění ve skriptu skóre.

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",
)

Vyčištění prostředků

Pokud koncový bod nebudete používat, odstraňte ho, abyste prostředek přestali používat. Před odstraněním se ujistěte, že žádná další nasazení nepoužívají koncový bod.

Poznámka:

Očekáváme, že úplné odstranění bude trvat přibližně 20 minut.

ml_client.online_endpoints.begin_delete(name=online_endpoint_name)

Zastavení výpočetní instance

Pokud ji teď nebudete používat, zastavte výpočetní instanci:

  1. V sadě Studio v levé navigační oblasti vyberte Compute.
  2. Na horních kartách vyberte Výpočetní instance.
  3. V seznamu vyberte výpočetní instanci.
  4. Na horním panelu nástrojů vyberte Zastavit.

Odstranění všech prostředků

Důležité

Prostředky, které jste vytvořili, se dají použít jako předpoklady pro další kurzy a postupy pro azure machine Učení články.

Pokud nemáte v úmyslu používat žádné prostředky, které jste vytvořili, odstraňte je, abyste za ně neúčtovaly žádné poplatky:

  1. Úplně nalevo na webu Azure Portal vyberte Skupiny prostředků.

  2. V seznamu vyberte skupinu prostředků, kterou jste vytvořili.

  3. Vyberte Odstranit skupinu prostředků.

    Screenshot of the selections to delete a resource group in the Azure portal.

  4. Zadejte název skupiny prostředků. Poté vyberte Odstranit.

Další kroky

Teď, když máte představu o tom, co se týká trénování a nasazení modelu, najdete další informace o procesu v těchto kurzech:

Kurz Popis
Nahrání, přístup k datům a prozkoumání dat ve službě Azure Machine Učení Ukládání velkých dat v cloudu a jejich načtení z poznámkových bloků a skriptů
Vývoj modelů na cloudové pracovní stanici Zahájení vytváření prototypů a vývoj modelů strojového učení
Trénování modelu ve službě Azure Machine Učení Podrobné informace o trénování modelu
Nasazení modelu jako online koncového bodu Podrobné informace o nasazení modelu
Vytváření produkčních kanálů strojového učení Rozdělte kompletní úlohu strojového učení na vícekrokový pracovní postup.