Kurz: Trénování modelu ve službě Azure Machine Učení

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

Zjistěte, jak datový vědec používá k trénování modelu Učení Azure Machine. V tomto příkladu použijeme přidruženou datovou sadu platebních karet k zobrazení toho, jak můžete použít azure machine Učení pro klasifikační problém. Cílem je předpovědět, jestli má zákazník vysokou pravděpodobnost výchozí platby platební kartou.

Trénovací skript zpracovává přípravu dat, trénuje a zaregistruje model. Tento kurz vás provede postupem odeslání cloudové úlohy trénování (úloha příkazu). Pokud se chcete dozvědět více o tom, jak načíst data do Azure, přečtěte si kurz: Nahrání, přístup k datům a prozkoumání dat v azure machine Učení. Postupujte takto:

  • Získání popisovače pracovního prostoru Azure Machine Učení
  • Vytvoření výpočetního prostředku a prostředí úloh
  • Vytvoření trénovacího skriptu
  • Vytvořte a spusťte úlohu příkazu pro spuštění trénovacího skriptu na výpočetním prostředku, který je nakonfigurovaný s odpovídajícím prostředím úlohy a zdrojem dat.
  • 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í

Toto video ukazuje, jak začít studio Azure Machine Learning, abyste mohli postupovat podle kroků v tomto kurzu. Video ukazuje, jak vytvořit poznámkový blok, vytvořit výpočetní instanci a naklonovat poznámkový blok. Kroky jsou popsané také v následujících částech.

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/train-model.ipynb z čá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.

Použití úlohy příkazu k trénování modelu ve službě Azure Machine Učení

Pokud chcete vytrénovat model, musíte odeslat úlohu. Typ úlohy, kterou odešlete v tomto kurzu, je úloha příkazu. Azure Machine Učení nabízí několik různých typů úloh pro trénování modelů. Uživatelé si můžou vybrat metodu trénování na základě složitosti modelu, velikosti dat a požadavků na rychlost trénování. V tomto kurzu se dozvíte, jak odeslat úlohu příkazu pro spuštění trénovacího skriptu.

Úloha příkazu je funkce, která umožňuje odeslat vlastní trénovací skript pro trénování modelu. Můžete ho také definovat jako vlastní trénovací úlohu. Úloha příkazu ve službě Azure Machine Učení je typ úlohy, která spouští skript nebo příkaz v zadaném prostředí. Pomocí úloh příkazů můžete trénovat modely, zpracovávat data nebo jakýkoli jiný vlastní kód, který chcete spustit v cloudu.

V tomto kurzu se zaměříme na použití úlohy příkazu k vytvoření vlastní trénovací úlohy, kterou použijeme k trénování modelu. Pro každou vlastní úlohu trénování se vyžadují následující položky:

  • prostředí
  • data
  • příkazová úloha
  • trénovací skript

V tomto kurzu poskytneme všechny tyto položky pro náš příklad: vytvoření klasifikátoru pro predikci zákazníků, kteří mají vysokou pravděpodobnost výchozího nastavení plateb platební kartou.

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. 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ě.
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í prostředí úlohy

Pokud chcete spustit úlohu Učení Azure na výpočetním prostředku, potřebujete prostředí. Prostředí obsahuje seznam softwarových modulů runtime a knihoven, které chcete nainstalovat na výpočetní prostředí, ve kterém budete trénovat. Je to podobné prostředí Pythonu na místním počítači.

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í.

V tomto příkladu vytvoříte vlastní prostředí Conda pro vaše úlohy pomocí souboru conda yaml.

Nejprve vytvořte adresář pro uložení souboru.

import os

dependencies_dir = "./dependencies"
os.makedirs(dependencies_dir, exist_ok=True)

Následující buňka používá magii IPython k zápisu souboru conda do adresáře, který jste právě vytvořili.

%%writefile {dependencies_dir}/conda.yaml
name: model-env
channels:
  - conda-forge
dependencies:
  - python=3.8
  - numpy=1.21.2
  - pip=21.2.4
  - scikit-learn=1.0.2
  - scipy=1.7.1
  - pandas>=1.1,<1.2
  - pip:
    - inference-schema[numpy-support]==1.3.0
    - mlflow==2.8.0
    - mlflow-skinny==2.8.0
    - azureml-mlflow==1.51.0
    - psutil>=5.8,<5.9
    - tqdm>=4.59,<4.60
    - ipykernel~=6.0
    - matplotlib

Specifikace obsahuje některé obvyklé balíčky, které použijete ve své úloze (numpy, pip).

Na tento soubor yaml se můžete odkazovat a vytvořit a zaregistrovat toto vlastní prostředí ve vašem pracovním prostoru:

from azure.ai.ml.entities import Environment

custom_env_name = "aml-scikit-learn"

custom_job_env = Environment(
    name=custom_env_name,
    description="Custom environment for Credit Card Defaults job",
    tags={"scikit-learn": "1.0.2"},
    conda_file=os.path.join(dependencies_dir, "conda.yaml"),
    image="mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest",
)
custom_job_env = ml_client.environments.create_or_update(custom_job_env)

print(
    f"Environment with name {custom_job_env.name} is registered to workspace, the environment version is {custom_job_env.version}"
)

Konfigurace trénovací úlohy pomocí funkce příkazu

Vytvoříte úlohu příkazu Azure Machine Učení pro trénování modelu pro výchozí predikci kreditu. Úloha příkazu spustí trénovací skript v zadaném prostředí pro zadaný výpočetní prostředek. Už jste vytvořili prostředí a výpočetní cluster. Dále vytvoříte trénovací skript. V našem konkrétním případě trénujeme naši datovou sadu, abychom pomocí modelu vytvořili klasifikátor GradientBoostingClassifier .

Trénovací skript zpracovává přípravu, trénování a registraci trénovaného modelu. Metoda train_test_split zpracovává rozdělení datové sady na testovací a trénovací data. V tomto kurzu vytvoříte trénovací skript Pythonu.

Úlohy příkazů je možné spouštět z rozhraní příkazového řádku, sady Python SDK nebo studia. V tomto kurzu pomocí sady Azure Machine Učení Python SDK v2 vytvoříte a spustíte úlohu příkazu.

Vytvoření trénovacího skriptu

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

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žívá k protokolování parametrů a metrik během naší úlohy. Balíček MLFlow umožňuje sledovat metriky a výsledky pro každý model, který Azure trénuje. K prvnímu získání nejlepšího modelu pro naše data použijeme MLFlow a pak si prohlédneme metriky modelu ve studiu Azure.

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

    #Split train and test datasets
    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()

Po vytrénování modelu v tomto skriptu se soubor modelu uloží a zaregistruje do pracovního prostoru. Registrace modelu umožňuje ukládat a vytvářet verze modelů v cloudu Azure ve vašem pracovním prostoru. Jakmile zaregistrujete model, najdete všechny ostatní zaregistrované modely na jednom místě v nástroji Azure Studio označované jako registr modelů. Registr modelů vám pomůže organizovat a sledovat trénované modely.

Konfigurace příkazu

Teď, když máte skript, který může provádět úlohu klasifikace, použijte příkaz pro obecné účely, který může spouštět akce příkazového řádku. Tato akce příkazového řádku může být přímo voláním systémových příkazů nebo spuštěním skriptu.

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 dříve vytvořené prostředí – zápis můžete použít @latest k označení nejnovější verze prostředí při spuštění příkazu.
  • 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 ${{ ... }} .
  • 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="aml-scikit-learn@latest",
    display_name="credit_default_prediction",
)

Odeslání úlohy

Teď je čas odeslat úlohu, která se má spustit v studio Azure Machine Learning. Tentokrát použijete create_or_update .ml_client ml_clientje klientská třída, která umožňuje připojit se k předplatnému Azure pomocí Pythonu a pracovat se službami Azure Machine Učení. ml_client umožňuje odesílat úlohy pomocí Pythonu.

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

Když buňku spustíte, výstup poznámkového bloku zobrazí odkaz na stránku podrobností úlohy v Azure Studiu. Alternativně můžete také vybrat Úlohy v levé navigační nabídce. Úloha je seskupení mnoha spuštění ze zadaného skriptu nebo části kódu. Informace o spuštění jsou uloženy v rámci této úlohy. Stránka s podrobnostmi poskytuje přehled úlohy, čas, který trvalo jeho spuštění, kdy byla vytvořena atd. Stránka obsahuje také karty s dalšími informacemi o úloze, jako jsou metriky, výstupy a protokoly a kód. Níže jsou uvedené karty, které jsou k dispozici na stránce podrobností úlohy:

  • Přehled: V části Přehled najdete základní informace o úloze, včetně jejího stavu, časů spuštění a ukončení a typu spuštěné úlohy.
  • Vstupy: Vstupní oddíl obsahuje data a kód, které byly použity jako vstupy pro úlohu. Tato část může zahrnovat datové sady, skripty, konfigurace prostředí a další prostředky, které byly použity během trénování.
  • Výstupy a protokoly: Karta Výstupy a protokoly obsahuje protokoly vygenerované při spuštění úlohy. Tato karta vám pomůže při řešení potíží, pokud se s trénovacím skriptem nebo vytvořením modelu něco nepovede.
  • Metriky: Karta Metriky ukazuje klíčové metriky výkonu z vašeho modelu, jako je trénovací skóre, skóre f1 a skóre přesnosti.

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

Pokud chcete pokračovat v dalších kurzech, přejděte k dalším krokům.

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

Informace o nasazení modelu

V tomto kurzu jste použili online datový soubor. Další informace o dalších způsobech přístupu k datům najdete v kurzu: Nahrání, přístup k datům a prozkoumání dat ve službě Azure Machine Učení.

Pokud chcete získat další informace o různých způsobech trénování modelů ve službě Azure Machine Učení, přečtěte si téma Co je automatizované strojové učení (AutoML)? Automatizované strojové učení je doplňkový nástroj, který zkracuje dobu, po kterou datový vědec stráví hledáním modelu, který nejlépe vyhovuje jejich datům.

Pokud chcete další příklady podobné tomuto kurzu, podívejte se do části Ukázky studia. Stejné ukázky jsou k dispozici na naší stránce s příklady GitHubu. Příklady zahrnují kompletní poznámkové bloky Pythonu, které můžete spouštět kód a učit se trénovat model. Můžete upravit a spustit existující skripty z ukázek, které obsahují scénáře včetně klasifikace, zpracování přirozeného jazyka a detekce anomálií.