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

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

Zjistěte, jak datový vědec používá Azure Machine Learning k trénování modelu. V tomto příkladu použijete datovou sadu platební karty, abyste pochopili, jak použít Azure Machine Learning 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. Skript pak trénuje a zaregistruje model.

Tento kurz vás provede postupem odeslání cloudové úlohy trénování (úloha příkazu).

  • Získání popisovače pracovního prostoru Služby Azure Machine Learning
  • Vytvoření výpočetního prostředku a prostředí úloh
  • Vytvoření trénovacího skriptu
  • Vytvoření a spuštění úlohy příkazu pro spuštění trénovacího skriptu na výpočetním prostředku
  • Zobrazení výstupu trénovacího skriptu
  • Nasazení nově natrénovaného modelu jako koncového bodu
  • Volání koncového bodu služby Azure Machine Learning pro odvozování

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 a prozkoumání dat ve službě Azure Machine Learning.

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

  • Pokud chcete používat Azure Machine Learning, potřebujete 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í.

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

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

    • Pokud chcete zkopírovat a 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. Ukázkové poznámkové bloky najdete v tématu Výuka z ukázkových poznámkových bloků.

Nastavení jádra a otevření v editoru Visual Studio Code (VS Code)

  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.

    Snímek obrazovky ukazuje, jak vytvořit výpočetní instanci.

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

    Snímek obrazovky ukazuje, jak spustit zastavenou výpočetní instanci.

  3. Počkejte na spuštění výpočetní instance. Pak se ujistěte, ž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.

    Snímek obrazovky ukazuje, jak nastavit jádro.

    Pokud toto jádro nevidíte, ověřte, že je vaše výpočetní instance spuštěná. Pokud ano, vyberte tlačítko Aktualizovat v pravém horním rohu poznámkového bloku.

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

  5. Poznámkový blok můžete spustit tady nebo ho otevřít ve VS Code pro úplné integrované vývojové prostředí (IDE) s využitím prostředků Azure Machine Learning. Vyberte Otevřít v editoru VS Code a pak vyberte možnost Web nebo Desktop. Při spuštění tímto způsobem se VS Code připojí k vaší výpočetní instanci, jádru a systému souborů pracovního prostoru.

    Snímek obrazovky ukazuje, jak otevřít poznámkový blok ve VS Code.

Důležité

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

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

Pokud chcete vytrénovat model, musíte odeslat úlohu. Azure Machine Learning 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. Tuto úlohu lze také definovat jako vlastní trénovací úlohu. Úloha příkazu ve službě Azure Machine Learning 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.

Tento kurz se zaměřuje na použití úlohy příkazu k vytvoření vlastní trénovací úlohy, kterou používáte k trénování modelu. Každá vlastní trénovací úloha vyžaduje následující položky:

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

Tento kurz poskytuje tyto položky pro 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íte do kódu, potřebujete způsob, jak odkazovat na pracovní prostor. Vytvořte ml_client popisovač pracovního prostoru. Pak se používá 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. Potřebujete 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á. Čeká na první volání, ke kterému 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

Ke spuštění úlohy Azure Machine Learning na výpočetním prostředku potřebujete prostředí. Prostředí obsahuje seznam softwarových modulů runtime a knihoven, které chcete nainstalovat do výpočetních prostředků, ve kterých se trénování provede. Je to podobné prostředí Pythonu na místním počítači. Další informace najdete v tématu Co jsou prostředí Azure Machine Learning?

Azure Machine Learning 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)

Další buňka používá magii IPython k zápisu souboru conda do vytvořeného adresáře.

%%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žíváte ve své úloze, například numpy a 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 Learning 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. Prostředí a výpočetní cluster jste už vytvořili. Dále vytvořte trénovací skript. V tomto případě trénujete datovou sadu tak, abyste 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 rozdělí datovou sadu 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 Learning Python SDK v2 vytvořte a spusťte úlohu příkazu.

Vytvoření trénovacího skriptu

Začněte 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 předzpracuje data a rozdělí je na testovací a trénovací data. Potom 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 této úlohy. Balíček MLFlow umožňuje sledovat metriky a výsledky pro každý model, který Azure trénuje. Použijte MLFlow k získání nejlepšího modelu pro vaše data. Pak si prohlédněte metriky modelu v nástroji Azure Studio. Další informace najdete v tématu MLflow a Azure Machine Learning.

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

V tomto skriptu se po vytrénování modelu 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. Po registraci modelu 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.

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:

  • Používá prostředí vytvořené dříve. @latest Zápis použijte k označení nejnovější verze prostředí při spuštění příkazu.
  • Nakonfiguruje samotnou akci příkazového řádku. python main.py Vstupy a výstupy v příkazu můžete získat pomocí ${{ ... }} zápisu.
  • Vzhledem k tomu, že nebyl zadán výpočetní prostředek, skript se spustí na 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

Odešlete úlohu, která se má spustit v studio Azure Machine Learning. Tentokrát použijte create_or_update na ml_client. ml_client je klientská třída, která umožňuje připojit se k předplatnému Azure pomocí Pythonu a pracovat se službami Azure Machine Learning. 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

Pokud chcete zobrazit úlohu v studio Azure Machine Learning, vyberte odkaz ve výstupu předchozí buňky. Výstup této úlohy vypadá v studio Azure Machine Learning takto. Prozkoumejte karty pro různé podrobnosti, jako jsou metriky, výstupy atd. Po dokončení úlohy zaregistruje v pracovním prostoru model v důsledku trénování.

Snímek obrazovky znázorňující stránku s přehledem úlohy

Důležité

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

Po spuštění buňky se ve výstupu poznámkového bloku zobrazí odkaz na stránku podrobností úlohy v nástroji Machine Learning Studio. 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, a další informace. Stránka obsahuje také karty s dalšími informacemi o úloze, jako jsou metriky, výstupy a protokoly a kód. Tady jsou karty, které jsou k dispozici na stránce podrobností úlohy:

  • Přehled: Základní informace o úloze, včetně jejího stavu, časů zahájení a ukončení a typu spuštěné úlohy
  • Vstupy: 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 + protokoly: Protokoly vygenerované během spuštění úlohy. Tato karta vám pomůže s řešením potíží, pokud se s trénovacím skriptem nebo vytvořením modelu něco nepovede.
  • Metriky: Klíčové metriky výkonu z 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 na související obsah.

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 články s postupy pro Azure Machine Learning.

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. Na webu Azure Portal do vyhledávacího pole zadejte skupiny prostředků a vyberte je z výsledků.

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

  3. Na stránce Přehled vyberte Odstranit skupinu prostředků.

    Snímek obrazovky s výběrem pro odstranění skupiny prostředků na webu Azure Portal

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

Další 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 a prozkoumání dat ve službě Azure Machine Learning.

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. Další informace najdete v tématu Co je automatizované strojové učení.

Pokud byste chtěli další příklady podobné tomuto kurzu, přečtěte si téma Learn from sample notebooks. Tyto ukázky jsou k dispozici 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í.