Delen via


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 scikit-learn-model voor machine learning traint of een bestaand model naar de cloud brengt, 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 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 notitiebloktabblad in de Azure Machine Learning-studio. Ga in de trainingsmap met voorbeelden naar 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 wordt het trainingsscript train_iris.py al voor u verstrekt. In de praktijk moet u elk aangepast trainingsscript kunnen gebruiken en uitvoeren met Azure Machine Learning zonder dat u uw code hoeft te wijzigen.

Notitie

  • Het opgegeven trainingsscript laat zien hoe u enkele metrische gegevens kunt registreren bij uw Azure Machine Learning-uitvoering met behulp van het Run object in het script.
  • Het opgegeven trainingsscript maakt gebruik van voorbeeldgegevens van de iris = datasets.load_iris() functie. 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 Machine Learning-omgeving wilt definiëren waarmee de afhankelijkheden van uw trainingsscript worden 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 Software-omgevingen 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. 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. Open in plaats daarvan uw gegevens met behulp van een Azure Machine Learning-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 is 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

Nadat 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_configurationer is geen codemodelimplementatie beschikbaar. Met implementatie van model zonder code kunt u uw model rechtstreeks implementeren als een webservice vanuit het geregistreerde model en 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 de implementatie bevatten een sectie over het registreren van modellen, maar u kunt direct doorgaan naar [het maken van een compute targethow-to-deploy-and-where.md#choose-a-compute-target) voor implementatie, omdat u al een geregistreerd model hebt.

(Preview) Implementatie van model zonder code

Belangrijk

Deze functie is momenteel beschikbaar als openbare preview-versie. Deze preview-versie wordt geleverd zonder een service level agreement en we raden deze niet aan voor productieworkloads. Misschien worden bepaalde functies niet ondersteund of zijn de mogelijkheden ervan beperkt.

Zie Aanvullende gebruiksvoorwaarden voor Microsoft Azure-previews voor meer informatie.

In plaats van de traditionele implementatieroute kunt u ook de functie voor implementatie 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_framework, model_framework_versionen resource_configuration parameters, 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 gemaakte scikit-learn-deductiecontainer.

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

In de volledige procedures wordt de implementatie in Azure Machine Learning uitgebreider behandeld.

Volgende stappen

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