Dela via


Träna scikit-learn-modeller i stor skala med Azure Mašinsko učenje (SDK v1)

GÄLLER FÖR: Python SDK azureml v1

I den här artikeln får du lära dig hur du kör dina scikit-learn-träningsskript med Azure Mašinsko učenje.

Exempelskripten i den här artikeln används för att klassificera irisblomsbilder för att skapa en maskininlärningsmodell baserat på scikit-learns iris-datauppsättning.

Oavsett om du tränar en scikit-learn-modell för maskininlärning från grunden eller om du tar in en befintlig modell i molnet kan du använda Azure Mašinsko učenje för att skala ut träningsjobb med öppen källkod med hjälp av elastiska molnberäkningsresurser. Du kan skapa, distribuera, version och övervaka modeller i produktionsklass med Azure Mašinsko učenje.

Förutsättningar

Du kan köra den här koden antingen i en Azure Mašinsko učenje beräkningsinstans eller i din egen Jupyter Notebook:

  • Azure Machine Learning-beräkningsinstans

    • Slutför snabbstarten: Kom igång med Azure Mašinsko učenje för att skapa en beräkningsinstans. Varje beräkningsinstans innehåller en dedikerad notebook-server som är förinstallerad med SDK:t och exempellagringsplatsen för notebook-filer.
    • Välj fliken Notebook i Azure Mašinsko učenje Studio. I exempelträningsmappen hittar du en slutförd och expanderad notebook-fil genom att gå till den här katalogen: mappen how-to-use-azureml > ml-frameworks > scikit-learn > train-hyperparameter-tune-deploy-with-sklearn .
    • Du kan använda den förifyllda koden i exempelträningsmappen för att slutföra den här självstudien.
  • Skapa en Jupyter Notebook-server och kör koden i följande avsnitt.

Konfigurera experimentet

Det här avsnittet konfigurerar träningsexperimentet genom att läsa in nödvändiga Python-paket, initiera en arbetsyta, definiera träningsmiljön och förbereda träningsskriptet.

Initiera en arbetsyta

Azure Mašinsko učenje-arbetsytan är den översta resursen för tjänsten. Det ger dig en central plats där du kan arbeta med alla artefakter som du skapar. I Python SDK kan du komma åt arbetsytans artefakter genom att skapa ett workspace objekt.

Skapa ett arbetsyteobjekt från config.json filen som skapades i avsnittet krav.

from azureml.core import Workspace

ws = Workspace.from_config()

Förbereda skript

I den här självstudien tillhandahålls redan träningsskriptet train_iris.py åt dig. I praktiken bör du kunna ta ett anpassat träningsskript som det är och köra det med Azure Mašinsko učenje utan att behöva ändra koden.

Kommentar

  • Det angivna träningsskriptet visar hur du loggar vissa mått till din Azure-Mašinsko učenje köra med hjälp av Run -objektet i skriptet.
  • Det angivna träningsskriptet använder exempeldata från iris = datasets.load_iris() funktionen. Om du vill använda och komma åt dina egna data kan du se hur du tränar med datauppsättningar för att göra data tillgängliga under träningen.

Definiera din miljö

Om du vill definiera den Azure Mašinsko učenje-miljö som kapslar in träningsskriptets beroenden kan du antingen definiera en anpassad miljö eller använda och Azure Mašinsko učenje kuraterad miljö.

Använda en kuraterad miljö

Du kan också använda Azure Mašinsko učenje fördefinierade, utvalda miljöer om du inte vill definiera din egen miljö.

Om du vill använda en kuraterad miljö kan du köra följande kommando i stället:

from azureml.core import Environment

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

Skapa en anpassad miljö

Du kan också skapa en egen anpassad miljö. Definiera dina conda-beroenden i en YAML-fil. I det här exemplet heter conda_dependencies.ymlfilen .

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

Skapa en Azure Mašinsko učenje-miljö från den här Conda-miljöspecifikationen. Miljön paketeras i en Docker-container vid körning.

from azureml.core import Environment

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

Mer information om hur du skapar och använder miljöer finns i Skapa och använda programvarumiljöer i Azure Mašinsko učenje.

Konfigurera och skicka din träningskörning

Skapa en ScriptRunConfig

Skapa ett ScriptRunConfig-objekt för att ange konfigurationsinformationen för ditt träningsjobb, inklusive träningsskriptet, miljön som ska användas och beräkningsmålet som ska köras på. Eventuella argument till träningsskriptet skickas via kommandoraden om de anges i parametern arguments .

Följande kod konfigurerar ett ScriptRunConfig-objekt för att skicka jobbet för körning på den lokala datorn.

from azureml.core import ScriptRunConfig

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

Om du i stället vill köra jobbet på ett fjärrkluster kan du ange det önskade beräkningsmålet till parametern 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)

Skicka din körning

from azureml.core import Experiment

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

Varning

Azure Mašinsko učenje kör träningsskript genom att kopiera hela källkatalogen. Om du har känsliga data som du inte vill ladda upp använder du en .ignore-fil eller tar inte med den i källkatalogen . I stället kan du komma åt dina data med hjälp av en Azure Mašinsko učenje-datauppsättning.

Vad händer under körningen

När körningen körs går den igenom följande steg:

  • Förbereder: En docker-avbildning skapas enligt den definierade miljön. Avbildningen laddas upp till arbetsytans containerregister och cachelagras för senare körningar. Loggar strömmas också till körningshistoriken och kan visas för att övervaka förloppet. Om en kuraterad miljö anges i stället används den cachelagrade avbildningsstöd som den kurerade miljön.

  • Skalning: Klustret försöker skala upp om Batch AI-klustret kräver fler noder för att köra körningen än vad som för närvarande är tillgängligt.

  • Körs: Alla skript i skriptmappen laddas upp till beräkningsmålet, datalager monteras eller kopieras och script körs. Utdata från stdout och mappen ./logs strömmas till körningshistoriken och kan användas för att övervaka körningen.

  • Efterbearbetning: Mappen ./outputs för körningen kopieras till körningshistoriken.

Spara och registrera modellen

När du har tränat modellen kan du spara och registrera den på din arbetsyta. Med modellregistrering kan du lagra och versionshantera dina modeller på din arbetsyta för att förenkla modellhantering och distribution.

Lägg till följande kod i träningsskriptet, train_iris.py, för att spara modellen.

import joblib

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

Registrera modellen på din arbetsyta med följande kod. Genom att ange parametrarna model_framework, model_framework_versionoch resource_configuration, blir modelldistribution utan kod tillgänglig. Med modelldistribution utan kod kan du distribuera din modell direkt som en webbtjänst från den registrerade modellen, och ResourceConfiguration objektet definierar beräkningsresursen för webbtjänsten.

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

Distribution

Den modell som du precis har registrerat kan distribueras på exakt samma sätt som andra registrerade modeller i Azure Mašinsko učenje. Distributionens instruktioner innehåller ett avsnitt om att registrera modeller, men du kan hoppa direkt till [skapa ett beräkningsmålhow-to-deploy-and-where.md#choose-a-compute-target) för distribution, eftersom du redan har en registrerad modell.

(Förhandsversion) Distribution utan kodmodell

Viktigt!

Den här funktionen är för närvarande i allmänt tillgänglig förhandsversion. Den här förhandsversionen tillhandahålls utan ett serviceavtal och vi rekommenderar det inte för produktionsarbetsbelastningar. Vissa funktioner kanske inte stöds eller kan vara begränsade.

Mer information finns i Kompletterande villkor för användning av Microsoft Azure-förhandsversioner.

I stället för den traditionella distributionsvägen kan du också använda funktionen för distribution utan kod (förhandsversion) för scikit-learn. Distribution utan kodmodell stöds för alla inbyggda scikit-learn-modelltyper. Genom att registrera din modell enligt ovan med parametrarna model_framework, model_framework_versionoch resource_configuration kan du helt enkelt använda den deploy() statiska funktionen för att distribuera din modell.

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

Kommentar

Dessa beroenden ingår i den fördefinierade scikit-learn-slutsatsdragningscontainern.

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

Den fullständiga instruktioner omfattar distribution i Azure Mašinsko učenje mer ingående.

Nästa steg

I den här artikeln har du tränat och registrerat en scikit-learn-modell och lärt dig om distributionsalternativ. Mer information om Azure Mašinsko učenje finns i de här andra artiklarna.