Nastavení trénování automatizovaného strojového učení pomocí sady Azure Machine Learning Python SDK v2

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

V této příručce se dozvíte, jak nastavit automatizované strojové učení, Automatizované strojové učení a trénovací úlohu pomocí sady Python SDK služby Azure Machine Learning v2. Automatizované strojové učení za vás vybere algoritmus a hyperparametry a vygeneruje model připravený k nasazení. Tato příručka obsahuje podrobnosti o různých možnostech, které můžete použít ke konfiguraci experimentů automatizovaného strojového učení.

Pokud dáváte přednost prostředí bez kódu, můžete také nastavit trénování automatizovaného strojového učení bez kódu v studio Azure Machine Learning.

Pokud dáváte přednost odesílání trénovacích úloh pomocí rozšíření Azure Machine Learning CLI v2, projděte si téma trénování modelů.

Požadavky

Pro tento článek potřebujete:

Nastavení pracovního prostoru

Pokud se chcete připojit k pracovnímu prostoru, musíte zadat předplatné, skupinu prostředků a název pracovního prostoru. Tyto podrobnosti se používají v MLClient souboru from azure.ai.ml k získání popisovače požadovaného pracovního prostoru Azure Machine Learning.

V následujícím příkladu se používá výchozí ověřování Azure společně s výchozí konfigurací pracovního prostoru nebo z jakéhokoli souboru config.json , který jste mohli zkopírovat do struktury složek. Pokud se nenajde žádný config.json , musíte při vytváření MLClientručně zavést subscription_id, resource_group a pracovní prostor.

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

credential = DefaultAzureCredential()
ml_client = None
try:
    ml_client = MLClient.from_config(credential)
except Exception as ex:
    print(ex)
    # Enter details of your Azure Machine Learning workspace
    subscription_id = "<SUBSCRIPTION_ID>"
    resource_group = "<RESOURCE_GROUP>"
    workspace = "<AZUREML_WORKSPACE_NAME>"
    ml_client = MLClient(credential, subscription_id, resource_group, workspace)

Zdroj a formát dat

Pokud chcete poskytovat trénovací data do automatizovaného strojového učení v sadě SDK v2, musíte je nahrát do cloudu prostřednictvím tabulky MLTable.

Požadavky na načítání dat do tabulky MLTable:

  • Data musí být v tabulkové podobě.
  • Hodnota, která se má predikovat, cílový sloupec, musí být v datech.

Trénovací data musí být přístupná ze vzdálených výpočetních prostředků. Automatizované strojové učení v2 (Sada Python SDK a rozhraní příkazového řádku/YAML) přijímá datové prostředky MLTable (v2), i když kvůli zpětné kompatibilitě podporuje také tabulkové datové sady v1 z verze 1 (registrovaná tabulková datová sada) prostřednictvím stejných vstupních vlastností datové sady. Doporučujeme ale použít tabulku MLTable dostupnou ve verzi 2.

Následující kód YAML je definice tabulky MLTable, která by mohla být umístěna do místní složky nebo vzdálené složky v cloudu spolu s datovým souborem (.CSV nebo souborEm Parquet).

# MLTable definition file

paths:
  - file: ./bank_marketing_train_data.csv
transformations:
  - read_delimited:
        delimiter: ','
        encoding: 'ascii'

Proto by složka MLTable měla definiční soubor MLTable a datový soubor (v tomto případě bank_marketing_train_data.csv soubor).

Následující příklad ukazuje dva způsoby vytvoření tabulky MLTable.

  • A. Poskytnete trénovací data a definiční soubor MLTable z místní složky a automaticky se nahraje do cloudu (výchozí úložiště dat pracovního prostoru).
  • B. Poskytuje již zaregistrovanou a nahranou tabulku MLTable do cloudu.
from azure.ai.ml.constants import AssetTypes
from azure.ai.ml import automl, Input

# A. Create MLTable for training data from your local directory
my_training_data_input = Input(
    type=AssetTypes.MLTABLE, path="./data/training-mltable-folder"
)

# B. Remote MLTable definition
my_training_data_input  = Input(type=AssetTypes.MLTABLE, path="azureml://datastores/workspaceblobstore/paths/Classification/Train")

Trénování, ověřování a testování dat

Můžete zadat samostatná trénovací data a sady ověřovacích dat, ale trénovací data musí být zadána parametru training_data ve funkci factory vaší automatizované úlohy ML.

Pokud parametr nebo n_cross_validation explicitně nezadátevalidation_data, použije automatizované strojové učení výchozí techniky k určení způsobu ověřování. Toto určení závisí na počtu řádků v datové sadě přiřazené k vašemu training_data parametru.

Velikost trénovacích dat Technika ověřování
Větší než 20 000 řádků Použije se rozdělení dat trénování/ověření. Ve výchozím nastavení se jako ověřovací sada používá 10 % počáteční sady trénovacích dat. Tato sada ověřování se pak používá pro výpočet metrik.
Menší než nebo rovno 20 000 řádků Používá se přístup k křížovému ověřování. Výchozí počet záhybů závisí na počtu řádků.
Pokud je datová sada menší než 1 000 řádků, použije se 10 řádků.
Pokud se řádky rovnají nebo jsou mezi 1 000 a 20 000, použijí se tři záhyby.

Výpočetní prostředí pro spuštění experimentu

Úlohy automatizovaného strojového učení se sadou Python SDK v2 (nebo rozhraním příkazového řádku v2) se v současné době podporují pouze ve vzdálených výpočetních prostředcích služby Azure Machine Learning (cluster nebo výpočetní instance).

Přečtěte si další informace o vytváření výpočetních prostředků pomocí pythonu SDKv2 (nebo CLIv2).

Konfigurace nastavení experimentu

Existuje několik možností, které můžete použít ke konfiguraci experimentu automatizovaného strojového učení. Tyto parametry konfigurace se nastavují v metodě úlohy. Pomocí funkcí a set_limits() můžete také nastavit nastavení trénování úloh a ukončit kritériaset_training().

Následující příklad ukazuje požadované parametry pro úlohu klasifikace, která určuje přesnost jako primární metriku a 5 křížových ověření.

# note that the below is a code snippet -- you might have to modify the variable values to run it successfully
classification_job = automl.classification(
    compute=my_compute_name,
    experiment_name=my_exp_name,
    training_data=my_training_data_input,
    target_column_name="y",
    primary_metric="accuracy",
    n_cross_validations=5,
    enable_model_explainability=True,
    tags={"my_custom_tag": "My custom value"}
)

# Limits are all optional

classification_job.set_limits(
    timeout_minutes=600, 
    trial_timeout_minutes=20, 
    max_trials=5,
    enable_early_termination=True,
)

# Training properties are optional
classification_job.set_training(
    blocked_training_algorithms=["LogisticRegression"], 
    enable_onnx_compatible_models=True
)

Výběr typu úlohy strojového učení (problém ML)

Než budete moct odeslat úlohu automatizovaného strojového učení, musíte určit druh problému se strojovým učením, který řešíte. Tento problém určuje, kterou funkci vaše úloha automatizovaného strojového učení používá a jaké algoritmy modelu používá.

Automatizované strojové učení podporuje tabulkové úlohy založené na datech (klasifikace, regrese, prognózování), úlohy počítačového zpracování obrazu (například klasifikaci obrázků a detekci objektů) a úlohy zpracování přirozeného jazyka (například úlohy klasifikace textu a rozpoznávání entit). Přečtěte si další informace o typech úkolů.

Podporované algoritmy

Automatizované strojové učení zkouší různé modely a algoritmy během procesu automatizace a ladění. Jako uživatel nemusíte algoritmus zadávat.

Metoda úlohy určuje seznam algoritmů/modelů, které se mají použít. allowed_training_algorithms Pomocí parametrů nebo blocked_training_algorithms ve set_training() funkci setter můžete dále upravovat iterace s dostupnými modely, které se mají zahrnout nebo vyloučit.

V následujícím seznamu odkazů můžete prozkoumat podporované algoritmy pro úlohu strojového učení uvedené níže.

Klasifikace Regrese Prognózování časové řady
Logistická regrese* Elastická síť* AutoARIMA
Light GBM* Light GBM* Prorok
Zvýšení gradientu* Zvýšení gradientu* Elastická síť
Rozhodovací strom* Rozhodovací strom* Light GBM
K Nejbližší sousedé* K Nejbližší sousedé* K Nejbližší sousedé
Lineární SVC* LASO LARS* Rozhodovací strom
Podpora klasifikace vektorů (SVC)* Stochastický gradientní sestup (SGD)* Arimax
Náhodná doménová struktura* Náhodný les LARS Lasso
Extrémně náhodné stromy* Extrémně náhodné stromy* Extrémně náhodné stromy*
Xgboost* Xgboost* Náhodný les
Naive Bayes* Xgboost ForecastTCN
Stochastický gradientní sestup (SGD)* Stochastický gradientní sestup (SGD) Zvýšení gradientu
ExponentialSmoothing
SeasonalNaive
Průměr
Naivní
Roční roční období

S dalšími algoritmy níže.

Na tomto odkazu použijte například poznámkové bloky jednotlivých typů úkolů.

Primární metrika

Parametr primary_metric určuje metriku, která se má použít při trénování modelu pro účely optimalizace. Dostupné metriky, které můžete vybrat, závisí na zvoleném typu úkolu.

Výběr primární metriky pro optimalizaci automatizovaného strojového učení závisí na mnoha faktorech. Doporučujeme, abyste si vybrali metriku, která nejlépe odpovídá vašim obchodním potřebám. Pak zvažte, jestli je metrika vhodná pro váš profil datové sady (velikost dat, rozsah, distribuce tříd atd.). Následující části shrnují doporučené primární metriky na základě typu úlohy a obchodního scénáře.

Informace o konkrétních definicích těchto metrik najdete v tématu Vysvětlení výsledků automatizovaného strojového učení.

Metriky pro scénáře klasifikace s více třídami

Tyto metriky platí pro všechny scénáře klasifikace, včetně tabulkových dat, obrázků a počítačového zpracování obrazu a NLP-Text.

Metriky závislé na prahové hodnotě, jako accuracyjsou , recall_score_weightednorm_macro_recallaprecision_score_weighted, nemusí být optimalizované také pro datové sady, které jsou malé, mají velkou nerovnoměrnou distribuci tříd (nerovnováhu tříd) nebo když se očekávaná hodnota metriky velmi blíží hodnotě 0,0 nebo 1.0. V takových případech AUC_weighted může být lepší volbou pro primární metriku. Po dokončení automatizovaného strojového učení můžete vybrat vítězný model na základě metriky, která nejlépe vyhovuje vašim obchodním potřebám.

Metric Příklady případů použití
accuracy Klasifikace obrázků, analýza mínění, předpověď změn dat
AUC_weighted Detekce podvodů, klasifikace obrázků, detekce anomálií / detekce spamu
average_precision_score_weighted Analýza mínění
norm_macro_recall Predikce změn dat
precision_score_weighted

Metriky pro scénáře klasifikace s více popisky

  • Pro klasifikaci textu je v současné době jedinou podporovanou primární metrikou více popisků Přesnost.

  • V případě klasifikace obrázků s více popisky jsou podporované primární metriky definované ve výčtu ClassificationMultilabelPrimaryMetrics.

Metriky pro scénáře NLP Text NER (pojmenované entity rozpoznávání)

  • Pro NLP Text NER (Pojmenované entity rozpoznávání) je aktuálně "Přesnost" jedinou podporovanou primární metrikou.

Metriky pro scénáře regrese

r2_scorenormalized_root_mean_squared_error a normalized_mean_absolute_error všichni se snaží minimalizovat chyby predikce. r2_score a normalized_root_mean_squared_error minimalizují průměrné kvadratické chyby, zatímco normalized_mean_absolute_error se minimalizuje průměrná absolutní hodnota chyb. Absolutní hodnota zpracovává chyby ve všech velikostech stejně a kvadratické chyby budou mít mnohem větší penalizaci za chyby s většími absolutními hodnotami. V závislosti na tom, jestli se mají větší chyby trestat více, nebo ne, můžete optimalizovat kvadratickou nebo absolutní chybu.

Hlavním rozdílem mezi r2_score a normalized_root_mean_squared_error je způsob jejich normalizace a jejich význam. normalized_root_mean_squared_error je odmocněná střední kvadratická chyba normalizovaná podle rozsahu a dá se interpretovat jako průměrná velikost chyby pro predikci. r2_score je střední kvadratická chyba normalizovaná odhadem odchylky dat. Jedná se o poměr variant, který může model zachytit.

Poznámka

r2_score a normalized_root_mean_squared_error také se chovají podobně jako primární metriky. Pokud se použije pevná ověřovací sada, tyto dvě metriky optimalizují stejný cíl, což znamená kvadratickou chybu, a budou optimalizovány stejným modelem. Pokud je k dispozici pouze trénovací sada a použije se křížové ověření, budou se mírně lišit, protože normalizátor pro normalized_root_mean_squared_error je pevný jako rozsah trénovací sady, ale normalizátor pro r2_score by se pro každý záhyb lišil, protože je to rozptyl pro každý záhyb.

Pokud je pořadí místo přesné hodnoty zajímavé, může být lepší volbou, spearman_correlation protože měří korelaci pořadí mezi skutečnými hodnotami a predikcemi.

V současné době ale žádné primární metriky pro regresi neřeší relativní rozdíl. Všechny chyby r2_scorenormalized_mean_absolute_errornormalized_root_mean_squared_error predikce ve výši 20 000 USD jsou pro pracovníka s 30 tisíci usd stejné jako u pracovníka s 20 tisíci USD, pokud tyto dva datové body patří do stejné datové sady pro regresi nebo ve stejné časové řadě určené identifikátorem časové řady. Zatímco ve skutečnosti je predikce pouze 20 000 $ z platu 2000 $ velmi blízko (malý relativní rozdíl 0,1%), zatímco $ 20 000 z $ 30 000 není blízko (velký 67% relativní rozdíl). Pokud chcete vyřešit problém relativního rozdílu, můžete model natrénovat s dostupnými primárními metrikami a pak vybrat model s nejlepším mean_absolute_percentage_error nebo root_mean_squared_log_error.

Metric Příklady případů použití
spearman_correlation
normalized_root_mean_squared_error Predikce cen (dům/produkt/tip), predikce skóre recenze
r2_score Zpoždění letecké společnosti, odhad platu, doba řešení chyby
normalized_mean_absolute_error

Metriky pro scénáře prognózování časových řad

Doporučení jsou podobná těm, která jsou uvedená v regresních scénářích.

Metric Příklady případů použití
normalized_root_mean_squared_error Predikce cen (prognózování), optimalizace zásob, prognózování poptávky
r2_score Predikce cen (prognózování), optimalizace zásob, prognózování poptávky
normalized_mean_absolute_error

Metriky pro scénáře detekce objektů obrázků

  • Pro detekci objektů obrázku jsou podporované primární metriky definovány ve výčtu ObjectDetectionPrimaryMetrics.

Metriky pro scénáře segmentace instancí obrázků

  • Ve scénářích segmentace instance image jsou podporované primární metriky definované ve výčtu InstanceSegmentationPrimaryMetrics.

Featurizace dat

V každém automatizovaném experimentu strojového učení se data automaticky transformují na čísla a vektory čísel plus (tj. převod textu na číselný) a také se škálují a normalizují, aby pomohly určitým algoritmům, které jsou citlivé na funkce v různých měřítkách. Tato transformace, škálování a normalizace dat se označuje jako featurizace.

Poznámka

Součástí základního modelu se stanou kroky automatického strojového učení (normalizace funkcí, zpracování chybějících dat, převod textu na číselný atd.). Při použití modelu pro predikce se na vstupní data automaticky použijí stejné kroky pro funkciaturace použité během trénování.

Při konfiguraci automatizovaných úloh ML můžete nastavení povolit nebo zakázat featurization pomocí .set_featurization() funkce setter.

Následující tabulka ukazuje přijatá nastavení pro funkciaturaci.

Konfigurace funkce Popis
"mode": 'auto' Označuje, že v rámci předzpracování se automaticky provádějí kroky pro ochranu dat a jejich funkci . Výchozí nastavení.
"mode": 'off' Označuje, že krok featurizace by se neměl provádět automaticky.
"mode": 'custom' Označuje, že by se měl použít přizpůsobený krok featurizace.

Následující kód ukazuje, jak může být v tomto případě pro regresní úlohu poskytována vlastní featurizace.

from azure.ai.ml.automl import ColumnTransformer

transformer_params = {
    "imputer": [
        ColumnTransformer(fields=["CACH"], parameters={"strategy": "most_frequent"}),
        ColumnTransformer(fields=["PRP"], parameters={"strategy": "most_frequent"}),
    ],
}
regression_job.set_featurization(
    mode="custom",
    transformer_params=transformer_params,
    blocked_transformers=["LabelEncoding"],
    column_name_and_types={"CHMIN": "Categorical"},
)

Kritéria ukončení

Existuje několik možností, které můžete ve funkci definovat a set_limits() ukončit experiment před dokončením úlohy.

Kritéria description
Žádná kritéria Pokud nedefinujete žádné ukončovací parametry, experiment bude pokračovat, dokud nebude u primární metriky proveden žádný další pokrok.
timeout Definuje, jak dlouho v minutách má experiment běžet. Pokud není zadaný, je celkový časový limit výchozí úlohy 6 dní (8 640 minut). Pokud chcete zadat časový limit kratší nebo roven 1 hodině (60 minut), ujistěte se, že velikost datové sady není větší než 10 000 000 (počet řádků ve sloupci) nebo že došlo k chybě.

Tento časový limit zahrnuje nastavení, procesaturace a trénování, ale nezahrnuje spuštění ensemblingu a vysvětlitelnosti modelu na konci procesu, protože tyto akce musí proběhnout po dokončení všech zkušebních verzí (podřízených úloh).
trial_timeout_minutes Maximální doba v minutách, po kterou může každá zkušební verze (podřízená úloha) běžet, než se ukončí. Pokud není zadáno, použije se hodnota 1 měsíc nebo 43200 minut.
enable_early_termination Zda se má úloha ukončit, pokud se skóre v krátkodobém horizontu nezlepšuje
max_trials Maximální počet pokusů a spuštění s jinou kombinací algoritmu a hyperparametrů, které se mají vyzkoušet během úlohy AutoML. Pokud není zadaný, výchozí hodnota je 1 000 zkušebních verzí. Pokud použijete enable_early_termination počet použitých zkušebních verzí, může být menší.
max_concurrent_trials Představuje maximální počet zkušebních verzí (podřízených úloh), které by se spustily paralelně. Toto číslo je vhodné shodovat s počtem uzlů clusteru.

Spuštění experimentu

Poznámka

Pokud experiment se stejným nastavením konfigurace a primární metrikou spustíte vícekrát, pravděpodobně se v každém experimentu zobrazí proměnlivé skóre konečných metrik a vygenerovaných modelech. Algoritmy automatizovaného strojového učení mají inherentní náhodnost, která může způsobit mírné odchylky ve výstupu modelů experimentem a konečném skóre metrik doporučeného modelu, jako je přesnost. Pravděpodobně uvidíte také výsledky se stejným názvem modelu, ale s různými použitými hyperparametry.

Upozornění

Pokud jste pro svůj pracovní prostor nastavili pravidla v bráně firewall nebo skupině zabezpečení sítě, ověřte, že jsou pro příchozí a odchozí síťový provoz udělena požadovaná oprávnění, jak je definováno v tématu Konfigurace příchozího a odchozího síťového provozu.

Odešlete experiment, aby se spustil a vygeneroval model. S objektem vytvořeným MLClient v požadavcích můžete v pracovním prostoru spustit následující příkaz.


# Submit the AutoML job
returned_job = ml_client.jobs.create_or_update(
    classification_job
)  # submit the job to the backend

print(f"Created job: {returned_job}")

# Get a URL for the status of the job
returned_job.services["Studio"].endpoint

Více podřízených spuštění v clusterech

Podřízená spuštění automatizovaného experimentu ML se dají provádět v clusteru, na kterém už běží jiný experiment. Načasování ale závisí na počtu uzlů clusteru a na tom, jestli jsou tyto uzly dostupné ke spuštění jiného experimentu.

Každý uzel v clusteru funguje jako samostatný virtuální počítač, který může provést jedno trénovací spuštění. u automatizovaného strojového učení to znamená podřízené spuštění. Pokud jsou všechny uzly zaneprázdněné, nový experiment je zařazen do fronty. Pokud ale existují volné uzly, spustí nový experiment v dostupných uzlech nebo virtuálních počítačích paralelně automatizovaná podřízená spuštění ML.

Pokud chcete pomoct se správou podřízených max_concurrent_iterations spuštění a jejich provádění, doporučujeme vytvořit vyhrazený cluster pro každý experiment a porovnat počet experimentů s počtem uzlů v clusteru. Tímto způsobem použijete všechny uzly clusteru současně s požadovaným počtem souběžných podřízených spuštění nebo iterací.

Nakonfigurujte max_concurrent_iterations ve funkci setter .set_limits(). Pokud není nakonfigurovaná, je ve výchozím nastavení pro každý experiment povoleno pouze jedno souběžné podřízené spuštění/iteraci. V případě výpočetní instance max_concurrent_trials je možné nastavit stejný počet jader na virtuálním počítači výpočetní instance.

Prozkoumání modelů a metrik

Automatizované strojové učení nabízí možnosti, jak monitorovat a vyhodnocovat výsledky trénování.

V uživatelském rozhraní Služby Azure Machine Learning na stránce modelu můžete také zobrazit hyperparametry použité při trénování konkrétního modelu a také zobrazit a přizpůsobit použitý trénovací kód interního modelu.

Registrace a nasazení modelů

Po otestování modelu a potvrzení, že ho chcete použít v produkčním prostředí, ho můžete zaregistrovat pro pozdější použití.

Tip

U registrovaných modelů je nasazení jedním kliknutím k dispozici prostřednictvím studio Azure Machine Learning. Podívejte se, jak nasadit zaregistrované modely ze studia.

AutoML v kanálech

Pokud chcete využít autoML v pracovních postupech MLOps, můžete přidat kroky úlohy AutoML do kanálů Služby Azure Machine Learning. To vám umožní automatizovat celý pracovní postup tím, že připojíte skripty pro přípravu dat k AutoML a pak zaregistrujete a ověřujete výsledný nejlepší model.

Níže je ukázkový kanál s komponentou klasifikace AutoML a komponentou příkazů, která zobrazuje výsledný výstup AutoML. Všimněte si, jak se v různých krocích odkazuje na vstupy (trénovací & ověřovací data) a výstupy (nejlepší model).

# Define pipeline
@pipeline(
    description="AutoML Classification Pipeline",
    )
def automl_classification(
    classification_train_data,
    classification_validation_data
):
    # define the automl classification task with automl function
    classification_node = classification(
        training_data=classification_train_data,
        validation_data=classification_validation_data,
        target_column_name="y",
        primary_metric="accuracy",
        # currently need to specify outputs "mlflow_model" explictly to reference it in following nodes 
        outputs={"best_model": Output(type="mlflow_model")},
    )
    # set limits and training
    classification_node.set_limits(max_trials=1)
    classification_node.set_training(enable_stack_ensemble=False, enable_vote_ensemble=False)

    command_func = command(
        inputs=dict(
            automl_output=Input(type="mlflow_model")
        ),
        command="ls ${{inputs.automl_output}}",
        environment="AzureML-sklearn-0.24-ubuntu18.04-py37-cpu:latest"
    )
    show_output = command_func(automl_output=classification_node.outputs.best_model)


pipeline_classification = automl_classification(
    classification_train_data=Input(path="./training-mltable-folder/", type="mltable"),
    classification_validation_data=Input(path="./validation-mltable-folder/", type="mltable"),
)

# ...
# Note that the above is only a snippet from the bankmarketing example you can find in our examples repo -> https://github.com/Azure/azureml-examples/tree/main/sdk/python/jobs/pipelines/1h_automl_in_pipeline/automl-classification-bankmarketing-in-pipeline

Další příklady, jak zahrnout autoML do kanálů, najdete v našem úložišti s příklady.

Další kroky