Träna scikit-learn-modeller i stor skala med Azure Machine Learning (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 Machine Learning.
Exempelskripten i den här artikeln används för att klassificera irisblomsbilder för att skapa en maskininlärningsmodell baserad 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 använder en befintlig modell i molnet kan du använda Azure Machine Learning 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 Machine Learning.
Förutsättningar
Du kan köra den här koden i antingen en Azure Machine Learning-beräkningsinstans eller i din egen Jupyter Notebook:
Azure Machine Learning-beräkningsinstans
- Slutför snabbstarten: Kom igång med Azure Machine Learning 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 anteckningsboksfliken i Azure Machine Learning-studio. I mappen exempelträning letar du upp en slutförd och expanderad anteckningsbok genom att gå till den här katalogen: how-to-use-azureml > ml-frameworks > scikit-learn > train-hyperparameter-tune-deploy-with-sklearn folder.
- Du kan använda den förifyllda koden i exempelmappen för träning 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 Machine Learning-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 artefakterna för arbetsytan genom att skapa ett workspace
-objekt.
Skapa ett arbetsyteobjekt från filen som config.json
skapades i avsnittet förutsättningar.
from azureml.core import Workspace
ws = Workspace.from_config()
Förbereda skript
I den här självstudien har du redan fått träningsskriptet train_iris.py . I praktiken bör du kunna ta ett anpassat träningsskript som det är och köra det med Azure Machine Learning utan att behöva ändra koden.
Anteckning
- Det angivna träningsskriptet visar hur du loggar vissa mått till din Azure Machine Learning-körning 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 azure machine learning-miljön som kapslar in ditt träningsskripts beroenden kan du antingen definiera en anpassad miljö eller använda och en Azure Machine Learning-granskad miljö.
Använda en granskad miljö
Azure Machine Learning tillhandahåller även fördefinierade, organiserade miljöer om du inte vill definiera din egen miljö.
Om du vill använda en granskad 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.yml
filen .
dependencies:
- python=3.7
- scikit-learn
- numpy
- pip:
- azureml-defaults
Skapa en Azure Machine Learning-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 Machine Learning.
Konfigurera och skicka träningskörningen
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.
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 önskat beräkningsmål 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 Machine Learning 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 Machine Learning-datauppsättning.
Vad händer vid körning
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 granskad miljö anges i stället används den cachelagrade avbildningsstöd som den organiserade 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_version
och 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 Machine Learning. Distributionsguiden 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 serviceavtal och vi rekommenderar den 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 distributionsfunktionen 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_version
och 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])
Anteckning
Dessa beroenden ingår i den färdiga scikit-learn-slutsatsdragningscontainern.
- azureml-defaults
- inference-schema[numpy-support]
- scikit-learn
- numpy
Den fullständiga instruktioner omfattar distribution i Azure Machine Learning på djupet.
Nästa steg
I den här artikeln har du tränat och registrerat en scikit-learn-modell och lärt dig om distributionsalternativ. Se de här andra artiklarna om du vill veta mer om Azure Machine Learning.