Scikit-learn-modellen op schaal trainen met Azure Machine Learning (SDK v1)

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 vanaf de basis traint of een bestaand model in de cloud wilt opnemen, u kunt 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 in 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 notebookserver die vooraf is geladen met de SDK en de voorbeeldopslagplaats voor notebooks.
    • Selecteer het tabblad Notitieblok in de Azure Machine Learning-studio. Zoek in de trainingsmap voorbeelden een voltooid en uitgebreid notebook door naar deze map te navigeren: de map how-to-use-azureml > ml-frameworks > scikit-learn > train-hyperparameter-tune-deploy-with-sklearn .
    • U kunt de vooraf ingevulde code in de voorbeeldmap voor training 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 ongewijzigd kunnen uitvoeren met Azure Machine Learning zonder dat u uw code hoeft te wijzigen.

Notitie

  • Het opgegeven trainingsscript laat zien hoe u bepaalde metrische gegevens kunt vastleggen in uw Azure Machine Learning-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 met gegevenssets traint om gegevens beschikbaar te maken tijdens de training.

Uw omgeving definiëren

Als u de Azure Machine Learning-omgeving wilt definiëren waarin de afhankelijkheden van uw trainingsscript zijn ingekapseld, kunt u een aangepaste omgeving definiëren of een beheerde Azure Machine Learning-omgeving gebruiken.

Een gecureerde omgeving gebruiken

Optioneel biedt Azure Machine Learning 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.7
  - scikit-learn
  - numpy
  - pip:
    - azureml-defaults

Maak een Azure Machine Learning-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. Eventuele argumenten voor uw trainingsscript worden doorgegeven via de opdrachtregel als deze is 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 hele 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 kunt u toegang krijgen tot uw gegevens met behulp van een Azure Machine Learning-gegevensset.

Wat gebeurt er tijdens de uitvoering van de uitvoering

Wanneer de uitvoering wordt uitgevoerd, doorloopt deze de volgende fasen:

  • 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 bewaken. Als in plaats daarvan een gecureerde omgeving wordt opgegeven, wordt de back-up van de gecureerde omgeving van de installatiekopieën 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.

  • Uitvoeren: alle scripts in de scriptmap worden geüpload naar het rekendoel, gegevensarchieven worden gekoppeld of gekopieerd en de script wordt 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

Nadat u het model hebt getraind, kunt u het opslaan en registreren in 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_framework, model_framework_version, en resource_configurationop te geven, wordt de implementatie van het model zonder code beschikbaar. Met modelimplementatie zonder code kunt u uw model rechtstreeks implementeren als een webservice vanuit het geregistreerde model. Het ResourceConfiguration object definieert 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 Machine Learning. De instructies voor implementatie bevat een sectie over het registreren van modellen, maar u kunt direct doorgaan naar [een rekendoel makenhoe-to-deploy-and-where.md#choose-a-compute-target) voor implementatie, aangezien u al een geregistreerd model hebt.

(Preview) Modelimplementatie zonder code

Belangrijk

Deze functie is momenteel beschikbaar als openbare preview-versie. Deze preview-versie wordt geleverd zonder serviceovereenkomst en wordt niet aanbevolen voor productieworkloads. Misschien worden bepaalde functies niet ondersteund of zijn de mogelijkheden ervan beperkt.

Zie Supplemental Terms of Use for Microsoft Azure Previews (Aanvullende gebruiksvoorwaarden voor Microsoft Azure-previews) voor meer informatie.

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

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

Notitie

Deze afhankelijkheden zijn opgenomen in de vooraf gebouwde scikit-learn-deductiecontainer.

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

In de volledige instructies wordt de implementatie in Azure Machine Learning uitgebreider beschreven.

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.