Scikit-learn-modellen op schaal trainen met Azure Machine Learning

VAN TOEPASSING OP:Python SDK azureml v1

In dit artikel leert u hoe u uw scikit-learn-trainingsscripts uitvoert met Azure Machine Learning.

De voorbeeldscripts in dit artikel worden gebruikt om irisbloemafbeeldingen te classificeren om een machine learning-model te bouwen op basis van de irisgegevensset van scikit-learn.

Of u nu een machine learning scikit-learn-model traint vanaf de basis of als u een bestaand model in de cloud brengt, kunt u Azure Machine Learning gebruiken om opensource-trainingstaken uit te schalen met behulp van elastische cloud-rekenresources. U kunt modellen op productieniveau bouwen, implementeren, versien en bewaken met Azure Machine Learning.

Vereisten

U kunt deze code uitvoeren in een Azure Machine Learning-rekenproces of uw eigen Jupyter Notebook:

  • Azure Machine Learning-rekeninstantie

    • Voltooi de quickstart: Aan de slag met Azure Machine Learning om een rekenproces te maken. Elk rekenproces bevat een toegewezen notebook-server die vooraf is geladen met de SDK en de opslagplaats met notebooks-voorbeelden.
    • Selecteer het notitiebloktabblad in de Azure Machine Learning-studio. Zoek in de trainingsmap met voorbeelden een voltooid en uitgebreid notebook door naar deze map te navigeren: how-to-use-azureml > ml-frameworks > scikit-learn > train-hyperparameter-tune-deploy-with-sklearn folder.
    • U kunt de vooraf ingevulde code in de voorbeeldtrainingsmap gebruiken om deze zelfstudie te voltooien.
  • Maak een Jupyter Notebook-server en voer de code uit in de volgende secties.

Het experiment instellen

In deze sectie wordt het trainingsexperiment ingesteld door de vereiste Python-pakketten te laden, een werkruimte te initialiseren, de trainingsomgeving te definiëren en het trainingsscript voor te bereiden.

Een werkruimte initialiseren

De Azure Machine Learning-werkruimte is de resource op het hoogste niveau voor de service. Het biedt u een centrale plek om te werken met alle artefacten die u maakt. In de Python SDK hebt u toegang tot de werkruimteartefacten door een workspace object te maken.

Maak een werkruimteobject op basis van het config.json bestand dat is gemaakt in de sectie Vereisten.

from azureml.core import Workspace

ws = Workspace.from_config()

Scripts voorbereiden

In deze zelfstudie is het trainingsscript train_iris.py al voor u beschikbaar. In de praktijk moet u elk aangepast trainingsscript kunnen gebruiken en uitvoeren met Azure ML zonder dat u uw code hoeft te wijzigen.

Opmerkingen:

  • Het opgegeven trainingsscript laat zien hoe u enkele metrische gegevens kunt registreren bij uw Azure ML-uitvoering met behulp van het Run object in het script.
  • In het opgegeven trainingsscript worden voorbeeldgegevens van de iris = datasets.load_iris() functie gebruikt. Als u uw eigen gegevens wilt gebruiken en openen, raadpleegt u hoe u traint met gegevenssets om gegevens beschikbaar te maken tijdens de training.

Uw omgeving definiëren

Als u de Azure ML-omgeving wilt definiëren die de afhankelijkheden van uw trainingsscript bevat, kunt u een aangepaste omgeving definiëren of een gecureerde Azure ML-omgeving gebruiken.

Een gecureerde omgeving gebruiken

Optioneel biedt Azure ML vooraf samengestelde, gecureerde omgevingen als u uw eigen omgeving niet wilt definiëren.

Als u een gecureerde omgeving wilt gebruiken, kunt u in plaats daarvan de volgende opdracht uitvoeren:

from azureml.core import Environment

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

Een aangepaste omgeving maken

U kunt ook uw eigen aangepaste omgeving maken. Definieer uw conda-afhankelijkheden in een YAML-bestand; in dit voorbeeld heeft het bestand de naam conda_dependencies.yml.

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

Maak een Azure ML-omgeving op basis van deze Conda-omgevingsspecificatie. De omgeving wordt tijdens runtime verpakt in een Docker-container.

from azureml.core import Environment

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

Zie Softwareomgevingen maken en gebruiken in Azure Machine Learning voor meer informatie over het maken en gebruiken van omgevingen.

Uw trainingsuitvoering configureren en verzenden

Een ScriptRunConfig maken

Maak een ScriptRunConfig-object om de configuratiegegevens van uw trainingstaak op te geven, inclusief het trainingsscript, de omgeving die u wilt gebruiken en het rekendoel om uit te voeren. Alle argumenten voor uw trainingsscript worden doorgegeven via de opdrachtregel, indien opgegeven in de arguments parameter.

Met de volgende code wordt een ScriptRunConfig-object geconfigureerd voor het verzenden van uw taak voor uitvoering op uw lokale computer.

from azureml.core import ScriptRunConfig

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

Als u in plaats daarvan uw taak wilt uitvoeren op een extern cluster, kunt u het gewenste rekendoel opgeven voor de compute_target parameter 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)

Uw uitvoering verzenden

from azureml.core import Experiment

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

Waarschuwing

Azure Machine Learning voert trainingsscripts uit door de volledige bronmap te kopiëren. Als u gevoelige gegevens hebt die u niet wilt uploaden, gebruikt u een .ignore-bestand of neemt u het niet op in de bronmap. In plaats daarvan opent u uw gegevens met behulp van een Azure ML-gegevensset.

Wat gebeurt er tijdens de uitvoering van de uitvoering

Terwijl de uitvoering wordt uitgevoerd, worden de volgende fasen doorlopen:

  • Voorbereiden: Er wordt een Docker-installatiekopieën gemaakt op basis van de gedefinieerde omgeving. De installatiekopieën worden geüpload naar het containerregister van de werkruimte en in de cache opgeslagen voor latere uitvoeringen. Logboeken worden ook gestreamd naar de uitvoeringsgeschiedenis en kunnen worden bekeken om de voortgang te controleren. Als in plaats daarvan een gecureerde omgeving wordt opgegeven, wordt de back-up van de gecureerde omgeving in de cache gebruikt.

  • Schalen: Het cluster probeert omhoog te schalen als voor het Batch AI-cluster meer knooppunten nodig zijn om de uitvoering uit te voeren dan momenteel beschikbaar is.

  • Wordt uitgevoerd: Alle scripts in de scriptmap worden geüpload naar het rekendoel, gegevensarchieven worden gekoppeld of gekopieerd en de script scripts worden uitgevoerd. Uitvoer van stdout en de map ./logs worden gestreamd naar de uitvoeringsgeschiedenis en kunnen worden gebruikt om de uitvoering te bewaken.

  • Naverwerking: de map ./outputs van de uitvoering wordt gekopieerd naar de uitvoeringsgeschiedenis.

Het model opslaan en registreren

Zodra u het model hebt getraind, kunt u het opslaan en registreren bij uw werkruimte. Met modelregistratie kunt u uw modellen opslaan en versien in uw werkruimte om modelbeheer en implementatie te vereenvoudigen.

Voeg de volgende code toe aan uw trainingsscript, train_iris.py, om het model op te slaan.

import joblib

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

Registreer het model bij uw werkruimte met de volgende code. Door de parameters model_frameworkop te geven, model_framework_versionen resource_configuration, wordt er geen codemodelimplementatie beschikbaar. Met implementatie zonder code kunt u uw model rechtstreeks implementeren als een webservice vanuit het geregistreerde model en definieert het ResourceConfiguration object de rekenresource voor de webservice.

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

Implementatie

Het model dat u zojuist hebt geregistreerd, kan op dezelfde manier worden geïmplementeerd als elk ander geregistreerd model in Azure ML. De instructies voor de implementatie bevatten een sectie over het registreren van modellen, maar u kunt direct doorgaan met het maken van een rekendoel voor implementatie, omdat u al een geregistreerd model hebt.

(Preview) Implementatie van model zonder code

In plaats van de traditionele implementatieroute kunt u ook de implementatiefunctie zonder code (preview) gebruiken voor scikit-learn. Implementatie zonder code wordt ondersteund voor alle ingebouwde scikit-learn-modeltypen. Door uw model te registreren zoals hierboven wordt weergegeven met de parameters model_framework_versionen resource_configuration de model_frameworkparameters, kunt u gewoon de deploy() statische functie gebruiken om uw model te implementeren.

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

OPMERKING: Deze afhankelijkheden zijn opgenomen in de vooraf gemaakte scikit-learn-deductiecontainer.

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

De volledige instructies hebben betrekking op de implementatie in Azure Machine Learning.

Volgende stappen

In dit artikel hebt u een scikit-learn-model getraind en geregistreerd en hebt u geleerd over implementatieopties. Zie deze andere artikelen voor meer informatie over Azure Machine Learning.