Trénování modelů scikit-learn ve velkém s využitím služby Azure Machine Learning (SDK v1)

PLATÍ PRO:Sada Python SDK azureml v1

V tomto článku se dozvíte, jak spouštět trénovací skripty scikit-learn pomocí služby Azure Machine Learning.

Ukázkové skripty v tomto článku slouží ke klasifikaci obrázků květů iris za účelem vytvoření modelu strojového učení na základě datové sady iris scikit-learn.

Ať už trénujete model strojového učení scikit-learn od základů, nebo přinášíte existující model do cloudu, můžete pomocí Azure Machine Learning škálovat opensourcové trénovací úlohy pomocí elastických cloudových výpočetních prostředků. Pomocí služby Azure Machine Learning můžete vytvářet, nasazovat, verze a monitorovat modely na produkční úrovni.

Požadavky

Tento kód můžete spustit buď ve výpočetní instanci Služby Azure Machine Learning, nebo ve vlastním Jupyter Notebook:

  • Výpočetní instance Azure Machine Learningu

    • Dokončete rychlý start: Začínáme se službou Azure Machine Learning a vytvořte výpočetní instanci. Každá výpočetní instance zahrnuje vyhrazený server poznámkového bloku předem načtený se sadou SDK a ukázkovým úložištěm poznámkových bloků.
    • Vyberte kartu poznámkového bloku v studio Azure Machine Learning. Ve složce školení ukázek vyhledejte dokončený a rozbalený poznámkový blok tak, že přejdete do tohoto adresáře: how-to-use-azureml-frameworks >> scikit-learn > train-hyperparameter-tune-deploy-with-sklearn .
    • K dokončení tohoto kurzu můžete použít předem vyplněný kód v ukázkové trénovací složce.
  • Vytvořte Jupyter Notebook server a spusťte kód v následujících částech.

Nastavení experimentu

Tato část nastaví trénovací experiment načtením požadovaných balíčků Pythonu, inicializací pracovního prostoru, definováním trénovacího prostředí a přípravou trénovacího skriptu.

Inicializace pracovního prostoru

Pracovní prostor Azure Machine Learning je prostředek nejvyšší úrovně pro službu. Poskytuje centralizované místo pro práci se všemi artefakty, které vytvoříte. V sadě Python SDK můžete k artefaktům pracovního prostoru přistupovat vytvořením objektu workspace .

Vytvořte objekt pracovního prostoru ze souboru vytvořeného config.json v části požadavky.

from azureml.core import Workspace

ws = Workspace.from_config()

Příprava skriptů

V tomto kurzu už máte k dispozici trénovací skript train_iris.py . V praxi byste měli být schopni vzít libovolný vlastní trénovací skript tak, jak je, a spustit ho pomocí Služby Machine Learning, aniž byste museli upravovat kód.

Poznámka

  • Poskytnutý trénovací skript ukazuje, jak protokolovat některé metriky do běhu služby Azure Machine Learning pomocí objektu Run v rámci skriptu.
  • Zadaný trénovací skript používá ukázková iris = datasets.load_iris() data z funkce. Pokud chcete používat a přistupovat k vlastním datům, přečtěte si, jak trénovat pomocí datových sad , aby byla data během trénování k dispozici.

Definování prostředí

Pokud chcete definovat prostředí Azure Machine Learning, které zapouzdřuje závislosti trénovacího skriptu, můžete buď definovat vlastní prostředí, nebo použít kurátorované prostředí Azure Machine Learning.

Použití kurátorovaných prostředí

Azure Machine Learning volitelně poskytuje předem připravená a kurátorovaná prostředí , pokud nechcete definovat vlastní prostředí.

Pokud chcete použít kurátorované prostředí, můžete místo toho spustit následující příkaz:

from azureml.core import Environment

sklearn_env = Environment.get(workspace=ws, name='AzureML-Tutorial')

Vytvoření vlastního prostředí

Můžete také vytvořit vlastní prostředí. Definujte své závislosti conda v souboru YAML; v tomto příkladu má soubor název conda_dependencies.yml.

dependencies:
  - python=3.7
  - scikit-learn
  - numpy
  - pip:
    - azureml-defaults

Vytvořte prostředí Azure Machine Learning z této specifikace prostředí Conda. Prostředí se za běhu zabalí do kontejneru Dockeru.

from azureml.core import Environment

sklearn_env = Environment.from_conda_specification(name='sklearn-env', file_path='conda_dependencies.yml')

Další informace o vytváření a používání prostředí najdete v tématu Vytváření a používání softwarových prostředí ve službě Azure Machine Learning.

Konfigurace a odeslání trénovacího spuštění

Vytvoření skriptuRunConfig

Vytvořte objekt ScriptRunConfig pro zadání podrobností konfigurace trénovací úlohy, včetně trénovacího skriptu, prostředí, které se má použít, a cílového výpočetního objektu, na kterém se má spustit. Všechny argumenty do trénovacího skriptu budou předány prostřednictvím příkazového řádku, pokud jsou zadány v parametru arguments .

Následující kód nakonfiguruje objekt ScriptRunConfig pro odeslání úlohy ke spuštění na místním počítači.

from azureml.core import ScriptRunConfig

src = ScriptRunConfig(source_directory='.',
                      script='train_iris.py',
                      arguments=['--kernel', 'linear', '--penalty', 1.0],
                      environment=sklearn_env)

Pokud chcete místo toho spustit úlohu ve vzdáleném clusteru, můžete zadat požadovaný cílový výpočetní objekt do parametru compute_target ScriptRunConfig.

from azureml.core import ScriptRunConfig

compute_target = ws.compute_targets['<my-cluster-name>']
src = ScriptRunConfig(source_directory='.',
                      script='train_iris.py',
                      arguments=['--kernel', 'linear', '--penalty', 1.0],
                      compute_target=compute_target,
                      environment=sklearn_env)

Odeslání spuštění

from azureml.core import Experiment

run = Experiment(ws,'Tutorial-TrainIRIS').submit(src)
run.wait_for_completion(show_output=True)

Upozornění

Azure Machine Learning spouští trénovací skripty zkopírováním celého zdrojového adresáře. Pokud máte citlivá data, která nechcete nahrát, použijte soubor .ignore nebo ho nezahrnujte do zdrojového adresáře . Místo toho se k datům dostanete pomocí datové sady Azure Machine Learning.

Co se stane během spuštění

Spuštění prochází následujícími fázemi:

  • Příprava: Image Dockeru se vytvoří podle definovaného prostředí. Image se nahraje do registru kontejneru pracovního prostoru a ukládá se do mezipaměti pro pozdější spuštění. Protokoly se také streamují do historie spuštění a dají se zobrazit za účelem monitorování průběhu. Pokud je místo toho zadané kurátorované prostředí, použije se zálohované image v mezipaměti, které kurátorované prostředí.

  • Škálování: Cluster se pokusí vertikálně navýšit kapacitu, pokud cluster Batch AI vyžaduje ke spuštění více uzlů, než je aktuálně k dispozici.

  • Spuštění: Všechny skripty ve složce script se nahrají do cílového výpočetního objektu, úložiště dat se připojí nebo zkopírují a script spustí se. Výstupy ze složky stdout a ./logs se streamují do historie spuštění a dají se použít k monitorování spuštění.

  • Následné zpracování: Složka ./outputs spuštění se zkopíruje do historie spuštění.

Uložení a registrace modelu

Jakmile model vytrénujete, můžete ho uložit a zaregistrovat do pracovního prostoru. Registrace modelu umožňuje ukládat a vytvářet verze modelů v pracovním prostoru, aby se zjednodušila správa a nasazení modelů.

Do trénovacího skriptu přidejte následující kód train_iris.py, který model uloží.

import joblib

joblib.dump(svm_model_linear, 'model.joblib')

Zaregistrujte model do pracovního prostoru pomocí následujícího kódu. Zadáním parametrů model_framework, model_framework_version, a resource_configurationse zpřístupní nasazení modelu bez kódu. Nasazení modelu bez kódu umožňuje přímo nasadit model jako webovou službu z registrovaného ResourceConfiguration modelu a objekt definuje výpočetní prostředek pro webovou službu.

from azureml.core import Model
from azureml.core.resource_configuration import ResourceConfiguration

model = run.register_model(model_name='sklearn-iris', 
                           model_path='outputs/model.joblib',
                           model_framework=Model.Framework.SCIKITLEARN,
                           model_framework_version='0.19.1',
                           resource_configuration=ResourceConfiguration(cpu=1, memory_in_gb=0.5))

Nasazení

Model, který jste právě zaregistrovali, se dá nasadit úplně stejně jako jakýkoli jiný zaregistrovaný model ve službě Azure Machine Learning. Postup nasazení obsahuje část věnovanou registraci modelů, ale pro nasazení můžete přeskočit přímo na [vytvoření výpočetního cílew-to-deploy-and-where.md#choose-a-compute-target), protože už máte zaregistrovaný model.

(Preview) Nasazení modelu bez kódu

Důležité

Tato funkce je v současné době ve verzi Public Preview. Tato verze Preview se poskytuje bez smlouvy o úrovni služeb a nedoporučujeme ji pro produkční úlohy. Některé funkce se nemusí podporovat nebo mohou mít omezené možnosti.

Další informace najdete v dodatečných podmínkách použití pro verze Preview v Microsoft Azure.

Místo tradiční trasy nasazení můžete pro scikit-learn použít také funkci nasazení bez kódu (Preview). Nasazení modelu bez kódu se podporuje pro všechny předdefinované typy modelů scikit-learn. Registrací modelu, jak je znázorněno výše, pomocí model_frameworkparametrů , model_framework_versiona resource_configuration můžete jednoduše použít deploy() statickou funkci k nasazení modelu.

web_service = Model.deploy(ws, "scikit-learn-service", [model])

Poznámka

Tyto závislosti jsou součástí předem připraveného kontejneru scikit-learn inference.

    - azureml-defaults
    - inference-schema[numpy-support]
    - scikit-learn
    - numpy

Úplný postup se podrobněji zabývá nasazením ve službě Azure Machine Learning.

Další kroky

V tomto článku jste vytrénovali a zaregistrovali model scikit-learn a seznámili jste se s možnostmi nasazení. Další informace o službě Azure Machine Learning najdete v těchto dalších článcích.