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
-
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í.
-
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 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
Na horním panelu nad otevřeným poznámkovým blokem vytvořte výpočetní instanci, pokud ji ještě nemáte.
Pokud je výpočetní instance zastavená, vyberte Spustit výpočetní prostředky a počkejte, až bude spuštěný.
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.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:
- V pravém horním studio Azure Machine Learning panelu nástrojů vyberte název pracovního prostoru.
- Zkopírujte hodnotu pro pracovní prostor, skupinu prostředků a ID předplatného do kódu.
- 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_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 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í.
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:
- V sadě Studio v levé navigační oblasti vyberte Compute.
- Na horních kartách vyberte Výpočetní instance.
- V seznamu vyberte výpočetní instanci.
- 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:
Úplně nalevo na webu Azure Portal vyberte Skupiny prostředků.
V seznamu vyberte skupinu prostředků, kterou jste vytvořili.
Vyberte Odstranit skupinu prostředků.
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í.