Trainieren von Scikit-learn-Modellen im großen Stil mit Azure Machine Learning (SDK v1)

GILT FÜR:Python SDK azureml v1

In diesem Artikel erfahren Sie, wie Sie Scikit-learn-Trainingsskripts mit Azure Machine Learning ausführen.

Mit den Beispielskripts in diesem Artikel werden Irisbilder zum Erstellen eines Machine Learning-Modells auf der Grundlage des Iris-Datasets von Scikit-learn klassifiziert.

Unabhängig davon, ob Sie ein Scikit-learn-Machine Learning-Modell von Grund auf trainieren oder ob Sie ein vorhandenes Modell in die Cloud verschieben, können Sie Azure Machine Learning zum Aufskalieren von Open-Source-Trainingsaufträgen mithilfe elastischer Cloudcomputeressourcen verwenden. Sie können produktionsgeeignete Modelle mit Azure Machine Learning erstellen, bereitstellen, überwachen sowie die Versionen verwalten.

Voraussetzungen

Sie können diesen Code entweder in einer Azure Machine Learning-Compute-Instanz oder auf Ihrem eigenen Jupyter Notebook-Server ausführen:

  • Azure Machine Learning-Computeinstanz

    • Arbeiten Sie Schnellstart: Erste Schritte mit Azure Machine Learning durch, um eine Compute-Instanz zu erstellen. Jede Compute-Instanz enthält einen dedizierten Notebook-Server, der vorab mit dem SDK und dem Notebook-Beispielrepository geladen wurde.
    • Klicken Sie im Azure Machine Learning Studio auf die Registerkarte „Notebook“. Im Beispieltrainingsordner finden Sie im folgenden Ordner ein fertiges und erweitertes Notebook: how-to-use-azureml > ml-frameworks > scikit-learn > train-hyperparameter-tune-deploy-with-sklearn.
    • Sie können den vorab aufgefüllten Code im Beispieltrainingsordner verwenden, um dieses Tutorial durchzugehen.
  • Erstellen Sie einen Jupyter Notebook-Server, und führen Sie den Code in den folgenden Abschnitten aus.

Einrichten des Experiments

In diesem Abschnitt wird das Trainingsexperiment eingerichtet, indem die erforderlichen Python-Pakete geladen werden und ein Arbeitsbereich initialisiert, die Trainingsumgebung definiert und das Trainingsskript vorbereitet wird.

Initialisieren eines Arbeitsbereichs

Der Azure Machine Learning-Arbeitsbereich ist die Ressource der obersten Ebene für den Dienst. Er stellt den zentralen Ort für die Arbeit mit allen erstellten Artefakten dar. Im Python SDK können Sie auf die Arbeitsbereichsartefakte zugreifen, indem Sie ein workspace-Objekt erstellen.

Erstellen Sie ein Arbeitsbereichsobjekt aus der Datei config.json, die im Abschnitt „Voraussetzungen“ erstellt wurde.

from azureml.core import Workspace

ws = Workspace.from_config()

Vorbereiten von Skripts

In diesem Tutorial wurde das Trainingsskript train_iris.py bereits für Sie bereitgestellt. In der Praxis sollten Sie benutzerdefinierte Trainingsskripts unverändert übernehmen und mit Azure Machine Learning ausführen können, ohne Ihren Code ändern zu müssen.

Hinweis

  • Das bereitgestellte Trainingsskript zeigt, wie Sie mit dem Run-Objekt im Skript einige Metriken zu Ihrer Azure Machine Learning-Ausführung protokollieren können.
  • Das bereitgestellte Trainingsskript verwendet Beispieldaten aus der iris = datasets.load_iris()-Funktion. Informationen zum Verwenden und Zugreifen auf Ihre eigenen Daten finden Sie im Artikel zum Trainieren mit Datasets. Sie erfahren, wie Sie Daten während des Trainings verfügbar machen.

Definieren der Umgebung

Um die Azure Machine Learning-Umgebung zu definieren, die die Abhängigkeiten Ihres Trainingsskripts kapselt, können Sie entweder eine benutzerdefinierte Umgebung definieren oder eine von Azure Machine Learning kuratierte Umgebung verwenden.

Verwenden einer zusammengestellten Umgebung

Optional stellt Azure Machine Learning vordefinierte, kuratierte Umgebungen bereit, falls Sie keine eigene Umgebung definieren möchten.

Wenn Sie eine zusammengestellte Umgebung verwenden möchten, können Sie stattdessen den folgenden Befehl ausführen:

from azureml.core import Environment

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

Erstellen einer benutzerdefinierten Umgebung

Sie können auch eine eigene benutzerdefinierte Umgebung erstellen. Definieren Sie Ihre Conda-Abhängigkeiten in einer YAML-Datei. In diesem Beispiel hat die Datei den Namen conda_dependencies.yml.

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

Erstellen Sie anhand dieser Conda-Umgebungsspezifikation eine Azure Machine Learning-Umgebung. Die Umgebung wird zur Laufzeit in einen Docker-Container gepackt.

from azureml.core import Environment

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

Weitere Informationen zum Erstellen und Verwenden von Umgebungen finden Sie unter Erstellen und Verwenden von Softwareumgebungen in Azure Machine Learning.

Konfigurieren und Übermitteln Ihrer Trainingsausführung

Erstellen eines ScriptRunConfig-Elements

Erstellen Sie ein ScriptRunConfig- Objekt, um die Konfigurationsdetails Ihres Trainingsauftrags anzugeben, einschließlich Ihres Trainingsskripts, der zu verwendenden Umgebung und des Computeziels für die Ausführung. Alle Argumente des Trainingsskripts werden über die Befehlszeile übergeben, wenn sie im Parameter arguments angegeben sind.

Mit dem folgenden Code wird ein ScriptRunConfig-Objekt zum Übermitteln Ihres Auftrags zur Ausführung an Ihren lokalen Computer konfiguriert.

from azureml.core import ScriptRunConfig

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

Falls Sie Ihren Auftrag stattdessen in einem Remotecluster ausführen möchten, können Sie das gewünschte Computeziel für den Parameter compute_target von ScriptRunConfig angeben.

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)

Übermitteln Ihrer Ausführung

from azureml.core import Experiment

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

Warnung

Zum Ausführen von Trainingsskripts wird von Azure Machine Learning das gesamte Quellverzeichnis kopiert. Sind vertrauliche Daten vorhanden, die nicht hochgeladen werden sollen, verwenden Sie die IGNORE-Datei, oder platzieren Sie sie nicht im Quellverzeichnis. Greifen Sie stattdessen über ein Azure Machine Learning-Dataset auf Ihre Daten zu.

Was passiert während der Ausführung

Die Ausführung durchläuft die folgenden Phasen:

  • Vorbereitung: Ein Docker-Image wird entsprechend der definierten Umgebung erstellt. Das Image wird in die Containerregistrierung des Arbeitsbereichs hochgeladen und für spätere Ausführungen zwischengespeichert. Darüber hinaus werden Protokolle in den Ausführungsverlauf gestreamt, mit deren Hilfe der Status überwacht werden kann. Wenn stattdessen eine zusammengestellte Umgebung angegeben wird, wird das zwischengespeicherte Image verwendet, das diese zusammengestellte Umgebung unterstützt.

  • Skalierung: Der Cluster versucht ein Hochskalieren, wenn der Batch KI-Cluster mehr Knoten zur Ausführung benötigt, als derzeit verfügbar sind.

  • Wird ausgeführt: Alle Skripts im Skriptordner werden auf das Computeziel hochgeladen, Datenspeicher werden bereitgestellt oder kopiert, und script wird ausgeführt. Ausgaben aus „stdout“ und dem Ordner ./logs werden in den Ausführungsverlauf gestreamt und können zur Überwachung der Ausführung verwendet werden.

  • Nachbearbeitung: Der Ordner ./outputs der Ausführung wird in den Ausführungsverlauf kopiert.

Speichern und Registrieren des Modells

Sobald Sie das Modell trainiert haben, können Sie es in Ihrem Arbeitsbereich speichern und registrieren. Die Modellregistrierung bietet die Möglichkeit, Ihre Modelle in Ihrem Arbeitsbereich zu speichern und zu versionieren, um die Modellverwaltung und -bereitstellung zu vereinfachen.

Fügen Sie Ihrem Trainingsskript train_iris.py den folgenden Code hinzu, um das Modell zu speichern.

import joblib

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

Registrieren Sie das Modell mit dem folgenden Code in Ihrem Arbeitsbereich. Durch die Angabe der Parameter model_framework, model_framework_version und resource_configuration wird die Implementierung von Modellen ohne Code verfügbar. Mit der Modellimplementierung ohne Code können Sie Ihr Modell direkt als Webdienst aus dem registrierten Modell bereitstellen, und das Objekt ResourceConfiguration definiert die Computeressource für den Webdienst.

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

Bereitstellung

Das Modell, das Sie gerade registriert haben, kann genauso wie alle anderen registrierten Modelle in Azure Machine Learning bereitgestellt werden. Die Schrittanleitung zur Bereitstellung enthält einen Abschnitt zur Registrierung von Modellen, aber Sie können direkt zu [creating a compute targethow-to-deploy-and-where.md#choose-a-compute-target) für die Bereitstellung springen, da Sie bereits über ein registriertes Modell verfügen.

(Vorschau) Modellimplementierung ohne Code

Wichtig

Dieses Feature ist zurzeit als öffentliche Preview verfügbar. Diese Vorschauversion wird ohne Vereinbarung zum Servicelevel bereitgestellt und ist nicht für Produktionsworkloads vorgesehen. Manche Features werden möglicherweise nicht unterstützt oder sind nur eingeschränkt verwendbar.

Weitere Informationen finden Sie unter Zusätzliche Nutzungsbestimmungen für Microsoft Azure-Vorschauen.

Anstelle der traditionellen Bereitstellungsroute können Sie auch die Bereitstellung ohne Code (Vorschau) für SciKit-learn verwenden. Die Modellimplementierung ohne Code wird für alle integrierten Scikit-learn-Modelltypen unterstützt. Indem Sie Ihr Modell wie oben gezeigt mit den Parametern model_framework, model_framework_version und resource_configuration registrieren, können Sie einfach die statische Funktion deploy() verwenden, um Ihr Modell bereitzustellen.

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

Hinweis

Diese Abhängigkeiten sind im vordefinieren Scikit-learn-Container für Rückschlüsse enthalten.

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

Die vollständige Schrittanleitung behandelt die Bereitstellung in Azure Machine Learning eingehender.

Nächste Schritte

In diesem Artikel haben Sie ein sciKit-learn-Modell trainiert und registriert und sich über Bereitstellungsoptionen informiert. Weitere Informationen zu Azure Machine Learning finden Sie in den folgenden Artikeln.