Bereitstellen und Bewerten eines Machine Learning-Modells mit verwaltetem Onlineendpunkt mithilfe des Python SDK v2 (Vorschau)

GILT FÜR: Python SDK azure-ai-ml v2 (Vorschau)

Wichtig

SDK v2 ist derzeit als öffentliche Vorschauversion verfügbar. Die 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.

In diesem Artikel erfahren Sie, wie Sie Ihr Machine Learning-Modell für verwaltete Onlineendpunkte bereitstellen und Vorhersagen abrufen können. Sie beginnen mit der Bereitstellung eines Modells auf Ihrem lokalen Computer, um eventuelle Fehler zu beheben, und anschließend werden Sie es in Azure bereitstellen und testen.

Voraussetzungen

  • Wenn Sie nicht über ein Azure-Abonnement verfügen, können Sie ein kostenloses Konto erstellen, bevor Sie beginnen. Probieren Sie die kostenlose oder kostenpflichtige Version von Azure Machine Learning noch heute aus.
  • Das Azure Machine Learning SDK v2 für Python.
  • Sie müssen über eine Azure-Ressourcengruppe verfügen, und Sie (oder der von Ihnen verwendete Dienstprinzipal) müssen auch über den Zugriff vom Typ „Mitwirkender“ darauf verfügen.
  • Sie müssen über einen Azure Machine Learning-Arbeitsbereich verfügen.
  • Zur lokalen Bereitstellung müssen Sie die Docker-Engine auf Ihrem lokalen Computer installieren. Diese Option wird dringend empfohlen, um das Debuggen von Problemen zu vereinfachen.

Repository für Klonbeispiele

Klonen Sie zum Ausführen der Trainingsbeispiele zunächst das Beispielerepository, und wechseln Sie in das sdk-Verzeichnis:

git clone --depth 1 https://github.com/Azure/azureml-examples
cd azureml-examples/sdk

Tipp

Verwenden Sie --depth 1, um nur den letzten Commit in das Repository zu klonen, wodurch das Abschließen des Vorgangs beschleunigt wird.

Herstellen einer Verbindung mit einem Azure Machine Learning-Arbeitsbereich

Der Arbeitsbereich ist die Ressource der obersten Ebene für Azure Machine Learning und ein zentraler Ort für die Arbeit mit allen Artefakten, die Sie während der Nutzung von Azure Machine Learning erstellen. In diesem Abschnitt stellen wir eine Verbindung mit dem Arbeitsbereich her, in dem Sie die Bereitstellung vornehmen werden.

  1. Importieren Sie die erforderlichen Bibliotheken.

    # import required libraries
    from azure.ai.ml import MLClient
    from azure.ai.ml.entities import (
        ManagedOnlineEndpoint,
        ManagedOnlineDeployment,
        Model,
        Environment,
        CodeConfiguration,
    )
    from azure.identity import DefaultAzureCredential
    
  2. Konfigurieren von Arbeitsbereichsdetails und Abrufen eines Handles für den Arbeitsbereich:

    Um eine Verbindung mit dem Arbeitsbereich herzustellen, benötigen Sie Bezeichnerparameter – ein Abonnement, eine Ressourcengruppe und einen Arbeitsbereichsnamen. Sie verwenden diese Details im MLClient ab azure.ai.ml, um ein Handle zum erforderlichen Azure Machine Learning-Arbeitsbereich zu erhalten. In diesem Beispiel wird die Standardauthentifizierung von Azure verwendet.

    # enter details of your AzureML workspace
    subscription_id = "<SUBSCRIPTION_ID>"
    resource_group = "<RESOURCE_GROUP>"
    workspace = "<AZUREML_WORKSPACE_NAME>"
    
    # get a handle to the workspace
    ml_client = MLClient(
        DefaultAzureCredential(), subscription_id, resource_group, workspace
    )
    

Erstellen eines lokalen Endpunkts und der Bereitstellung

Hinweis

Für die lokale Bereitstellung muss die Docker-Engine installiert sein. Die Docker-Engine muss ausgeführt werden. Die Docker-Engine wird in der Regel gestartet, wenn der Computer gestartet wird. Wenn dies nicht der Fall ist, können Sie die Problembehandlung für die Docker-Engine durchführen.

  1. Erstellen eines lokalen Endpunkts:

    Das Ziel einer lokalen Endpunktbereitstellung besteht darin, Ihren Code und Ihre Konfiguration vor der Bereitstellung in Azure zu überprüfen und zu debuggen. Die lokale Bereitstellung weist die folgenden Einschränkungen auf:

    • Lokale Endpunkte unterstützen keine Datenverkehrsregeln, Authentifizierungen oder Testeinstellungen.
    • Lokale Endpunkte unterstützen nur eine Bereitstellung pro Endpunkt.
    # Creating a local endpoint
    import datetime
    
    local_endpoint_name = "local-" + datetime.datetime.now().strftime("%m%d%H%M%f")
    
    # create an online endpoint
    endpoint = ManagedOnlineEndpoint(
        name=local_endpoint_name, description="this is a sample local endpoint"
    )
    
    ml_client.online_endpoints.begin_create_or_update(endpoint, local=True)
    
  2. Erstellen einer lokalen Bereitstellung:

    Das Beispiel enthält alle Dateien, die zum Bereitstellen eines Modells auf einem Onlineendpunkt erforderlich sind. Um ein Modell bereitzustellen, müssen Sie über Folgendes verfügen:

    • Modelldateien (oder Name und Version eines Modells, das bereits in Ihrem Arbeitsbereich registriert ist). In diesem Beispiel verwenden wir ein scikit-learn-Modell, das Regressionen durchführt.
    • Der Code, der für die Bewertung des Modells erforderlich ist. In diesem Fall verfügen wir über eine score.py-Datei.
    • Eine Umgebung, in der Ihr Modell ausgeführt wird. Wie Sie sehen werden, kann die Umgebung ein Docker-Image mit Conda-Abhängigkeiten oder eine Dockerfile-Datei sein.
    • Einstellungen zum Angeben des Instanztyps und der Skalierungskapazität.

    Wichtige Aspekte der Bereitstellung

    • name – Name der Bereitstellung.
    • endpoint_name – Name des Endpunkts, unter dem die Bereitstellung erstellt werden soll.
    • model – Das für die Bereitstellung zu verwendende Modell. Dieser Wert kann entweder ein Verweis auf ein vorhandenes versioniertes Modell im Arbeitsbereich oder eine Inline-Modellspezifikation sein.
    • environment – Die für die Bereitstellung zu verwendende Umgebung. Dieser Wert kann entweder ein Verweis auf eine vorhandene versionierte Umgebung im Arbeitsbereich oder eine Inline-Umgebungsspezifikation sein.
    • code_configuration – Die Konfiguration für den Quellcode und das Bewertungsskript.
      • path – Pfad zum Quellcodeverzeichnis für die Bewertung des Modells.
      • scoring_script – Relativer Pfad zur Bewertungsdatei im Quellcodeverzeichnis.
    • instance_type – Die VM-Größe, die für die Bereitstellung verwendet werden soll. Eine Liste der unterstützten Größen finden Sie unter SKU-Liste für verwaltete Onlineendpunkte.
    • instance_count – Die Anzahl der Instanzen, die für die Bereitstellung verwendet werden sollen.
    model = Model(path="../model-1/model/sklearn_regression_model.pkl")
    env = Environment(
        conda_file="../model-1/environment/conda.yml",
        image="mcr.microsoft.com/azureml/openmpi3.1.2-ubuntu18.04:20210727.v1",
    )
    
    blue_deployment = ManagedOnlineDeployment(
        name="blue",
        endpoint_name=local_endpoint_name,
        model=model,
        environment=env,
        code_configuration=CodeConfiguration(
            code="../model-1/onlinescoring", scoring_script="score.py"
        ),
        instance_type="Standard_F2s_v2",
        instance_count=1,
    )
    
    ml_client.online_deployments.begin_create_or_update(
        deployment=blue_deployment, local=True
    )
    

Überprüfen Sie, ob die lokale Bereitstellung erfolgreich war.

  1. Überprüfen Sie den Status, um festzustellen, ob das Modell ohne Fehler bereitgestellt wurde:

    ml_client.online_endpoints.get(name=local_endpoint_name, local=True)
    
  2. Abrufen von Protokollen:

    ml_client.online_deployments.get_logs(
        name="blue", endpoint_name=local_endpoint_name, local=True, lines=50
    )
    

Aufrufen des lokalen Endpunkts

Rufen Sie den Endpunkt auf, um das Modell mithilfe des praktischen Befehls „invoke“ und der Übergabe von in einer JSON-Datei gespeicherten Abfrageparametern zu bewerten.

ml_client.online_endpoints.invoke(
    endpoint_name=local_endpoint_name,
    request_file="../model-1/sample-request.json",
    local=True,
)

Bereitstellen Ihres Onlineendpunkts in Azure

Stellen Sie als nächstes Ihren Onlineendpunkt in Azure bereit.

  1. Konfigurieren des Onlineendpunkts:

    Tipp

    • endpoint_name: Der Name des Endpunkts. Er muss in der Azure-Region eindeutig sein. Weitere Informationen zu den Benennungsregeln finden Sie unter Grenzwerte für verwaltete Onlineendpunkte.
    • auth_mode: Verwenden Sie key für die schlüsselbasierte Authentifizierung. Verwenden Sie aml_token für die tokenbasierte Azure Machine Learning-Authentifizierung. Ein key läuft nicht ab, dafür aber aml_token. Weitere Informationen zur Authentifizierung finden Sie unter Authentifizieren bei einem Onlineendpunkt.
    • Optional können Sie eine Beschreibung und Tags zu Ihrem Endpunkt hinzufügen.
    # Creating a unique endpoint name with current datetime to avoid conflicts
    import datetime
    
    online_endpoint_name = "endpoint-" + datetime.datetime.now().strftime("%m%d%H%M%f")
    
    # create an online endpoint
    endpoint = ManagedOnlineEndpoint(
        name=online_endpoint_name,
        description="this is a sample online endpoint",
        auth_mode="key",
        tags={"foo": "bar"},
    )
    
  2. Erstellen des Endpunkts:

    Mit der MLClient zuvor erstellten Version erstellen wir nun den Endpunkt im Arbeitsbereich. Dieser Befehl startet die Endpunkterstellung und gibt eine Bestätigungsantwort zurück, während die Endpunkterstellung fortgesetzt wird.

    ml_client.begin_create_or_update(endpoint)
    
  3. Konfigurieren der Onlinebereitstellung:

    Eine Einrichtung ist ein Satz von Ressourcen, die für das Hosting des Modells erforderlich sind, das die eigentliche Inferenz durchführt. Wir erstellen eine Bereitstellung für unseren Endpunkt mithilfe der ManagedOnlineDeployment Klasse.

    model = Model(path="../model-1/model/sklearn_regression_model.pkl")
    env = Environment(
        conda_file="../model-1/environment/conda.yml",
        image="mcr.microsoft.com/azureml/openmpi3.1.2-ubuntu18.04:20210727.v1",
    )
    
    blue_deployment = ManagedOnlineDeployment(
        name="blue",
        endpoint_name=online_endpoint_name,
        model=model,
        environment=env,
        code_configuration=CodeConfiguration(
            code="../model-1/onlinescoring", scoring_script="score.py"
        ),
        instance_type="Standard_F2s_v2",
        instance_count=1,
    )
    
  4. Erstellen der Bereitstellung:

    Mit der MLClient zuvor erstellten Version erstellen wir nun die Bereitstellung im Arbeitsbereich. Dieser Befehl startet die Bereitstellungserstellung und gibt eine Bestätigungsantwort zurück, während die Bereitstellungserstellung fortgesetzt wird.

    ml_client.begin_create_or_update(blue_deployment)
    
    # blue deployment takes 100 traffic
    endpoint.traffic = {"blue": 100}
    ml_client.begin_create_or_update(endpoint)
    

Testen des Endpunkts mit Beispieldaten

Mithilfe der MLClient zuvor erstellten Version erhalten wir einen Handle an den Endpunkt. Der Endpunkt kann mithilfe des invoke Befehls mit den folgenden Parametern aufgerufen werden:

  • endpoint_name – Name des Endpunkts
  • request_file – Datei mit Anforderungsdaten
  • deployment_name – Name der spezifischen Bereitstellung, die in einem Endpunkt getestet werden soll

Wir senden eine Beispielanforderung mithilfe einer JSON-Datei.

# test the blue deployment with some sample data
ml_client.online_endpoints.invoke(
    endpoint_name=online_endpoint_name,
    deployment_name="blue",
    request_file="../model-1/sample-request.json",
)

Verwalten von Endpunkten und Bereitstellungen

  1. Abrufen der Details des Endpunkts:

    # Get the details for online endpoint
    endpoint = ml_client.online_endpoints.get(name=online_endpoint_name)
    
    # existing traffic details
    print(endpoint.traffic)
    
    # Get the scoring URI
    print(endpoint.scoring_uri)
    
  2. Abrufen der Protokolle für die neue Bereitstellung:

    Abrufen der Protokolle für die Grün-Bereitstellung und Überprüfen nach Bedarf

    ml_client.online_deployments.get_logs(
        name="blue", endpoint_name=online_endpoint_name, lines=50
    )
    

Löschen des Endpunkts

ml_client.online_endpoints.begin_delete(name=online_endpoint_name)

Nächste Schritte

Führen Sie diese nächsten Schritte aus, um zu erfahren, wie Sie das Azure Machine Learning SDK (v2) für Python verwenden können: