0 / 0
Zurück zur englischen Version der Dokumentation

Angepasste Frameworks für maschinelles Lernen

Letzte Aktualisierung: 22. Nov. 2024
Angepasste Frameworks für maschinelles Lernen

Sie können Ihr benutzerdefiniertes Framework für maschinelles Lernen verwenden, um die Protokollierung von Nutzdaten und Rückmeldungen zu vervollständigen und um die Leistungsgenauigkeit, die Erkennung von Laufzeitverzerrungen, die Erklärbarkeit, die Erkennung von Drift und die Auto-Debias-Funktion für Modellevaluierungen zu messen. Das benutzerdefinierte Framework für maschinelles Lernen muss mit IBM watsonx.ai Runtime gleichwertig sein.

Die folgenden benutzerdefinierten Frameworks für maschinelles Lernen unterstützen Modellbewertungen:

Details zur Frameworkunterstützung
Framework Problemtyp Datentyp
Äquivalent zu IBM watsonx.ai Runtime Klassifikation Strukturiert
Äquivalent zu IBM watsonx.ai Runtime Regression Strukturiert

Für ein Modell, das nicht der IBM watsonx.ai Runtime entspricht, müssen Sie einen Wrapper für das benutzerdefinierte Modell erstellen, der die erforderlichen REST-API-Endpunkte bereitstellt. Außerdem müssen Sie die Ein-/Ausgabe zwischen Watson OpenScale und der tatsächlichen angepassten Machine Learning-Engine überbrücken.

Wann ist eine angepasste Engine für maschinelles Lernen die beste Option für mich?

Eine angepasste Engine für maschinelles Lernen ist die beste Option für die folgenden Szenarios:

  • Sie verwenden keine sofort verfügbaren Produkte, um Ihre Modelle für maschinelles Lernen bereitzustellen. Sie haben ein System, das Ihre Modelle bedient, und es gibt keine direkte Unterstützung für diese Funktion bei Modellbewertungen.
  • Die Serving Engine, die Sie von einem 3rd-party verwenden, wird noch nicht für Modellevaluierungen unterstützt. Wenn dies zutrifft, sollten Sie in Betracht ziehen, eine angepasste Engine für maschinelles Lernen als Wrapper für Ihre ursprünglichen oder nativen Bereitstellungen zu entwickeln.

Funktionsweise

Die folgende Abbildung zeigt die Unterstützung der angepassten Umgebung:

Das benutzerdefinierte Diagramm wird angezeigt. Es werden Kästchen für die angepasste Umgebung mit der Client-API und der Watson OpenScale -API angezeigt.

Referenzinformationen finden Sie auch über die folgenden Links:

Watson OpenScale-API für Nutzdatenprotokollierung

Python-Client-SDK

Python SDK

  • Modelleingabekriterien für die Unterstützung von Überwachungen

    Im folgenden Beispiel verwendet Ihr Modell einen Merkmalvektor, bei dem es sich im Wesentlichen um eine Sammlung benannter Felder und deren Werte handelt, als Eingabe.

    {
    "fields": [
        "name",
        "age",
        "position"
    ],
    "values": [
        [
            "john",
            33,
            "engineer"
        ],
        [
            "mike",
            23,
            "student"
        ]
    ]
    
    

    Das Feld “age” kann auf Fairness ausgewertet werden.

    Handelt es sich bei der Eingabe um einen Tensor oder eine Matrix, die aus dem Merkmalsraum der Eingabe transformiert wurde, kann dieses Modell nicht ausgewertet werden. Darüber hinaus können Deep Learning-Modelle mit Text- oder Bildeingabedaten nicht für die Verzerrungserkennung und Risikominderung verarbeitet werden.

    Außerdem müssen Trainingsdaten geladen werden, um die Erklärbarkeit zu unterstützen.

    Zur Unterstützung der Erklärbarkeit für Text sollte der vollständige Text eines der Merkmale sein. Die Erklärbarkeit für Bilder wird im aktuellen Release für ein angepasstes Modell nicht unterstützt.

  • Ausgabekriterien für die Unterstützung von Überwachungen

    Ihr Modell gibt den Eingabemerkmalvektor neben den Vorhersagewahrscheinlichkeiten verschiedener Klassen in diesem Modell aus.

    {
    "fields": [
        "name",
        "age",
        "position",
        "prediction",
        "probability"
    ],
    "labels": [
        "personal",
        "camping"
    ],
    "values": [
        [
            "john",
            33,
            "engineer",
            "personal",
            [
                0.6744664422398081,
                0.3255335577601919
            ]
        ],
        [
            "mike",
            23,
            "student"
            "camping",
            [
                0.2794765664946941,
                0.7205234335053059
            ]
        ]
    ]
    }
    

    In diesem Beispiel sind "personal” und “camping” die möglichen Klassen und die Scores in jeder Scoring-Ausgabe werden beiden Klassen zugewiesen. Wenn die Vorhersagewahrscheinlichkeiten fehlen, funktioniert die Verzerrungserkennung, die automatische Verzerrungsbereinigung jedoch nicht.

    Sie können auf die Scoring-Ausgabe über einen Live-Scoring-Endpunkt zugreifen, den Sie über die REST-API für Modellauswertungen aufrufen können. Für CUSTOMML, Amazon SageMaker, und IBM watsonx.ai Runtime verbindet sich Watson OpenScale direkt mit den nativen Scoring-Endpunkten.

Angepasste Engine für maschinelles Lernen

Eine angepasste Engine für maschinelles Lernen stellt die Infrastruktur und die Hosting-Funktionalität für Machine Learning-Modelle und Webanwendungen bereit. Benutzerdefinierte Maschinen für maschinelles Lernen, die für Modellevaluierungen unterstützt werden, müssen die folgenden Anforderungen erfüllen:

  • Die beiden folgenden Typen von REST-API-Endpunkten werden zugänglich gemacht:

    • Erkennungsendpunkt (Liste der Bereitstellungen und zugehörige Details abrufen)
    • Scoring-Endpunkte (Online- und Echtzeit-Scoring)
  • Alle Endpunkte müssen mit der Swagger-Spezifikation kompatibel sein, die unterstützt werden soll.

  • Die Eingabenutzdaten und die Ausgabe an die bzw. von der Bereitstellung muss mit dem in der Spezifikation beschriebenen JSON-Dateiformat kompatibel sein.

Watson OpenScale unterstützt nur die Authentifizierungsformate BasicAuth, none oder apiKey.

Die Spezifikation der REST-API-Endpunkte finden Sie in der REST-API.

Hinzufügen einer benutzerdefinierten Engine für maschinelles Lernen

Sie können die Modellevaluierungen so konfigurieren, dass sie mit einem benutzerdefinierten Anbieter für maschinelles Lernen arbeiten, indem Sie eine der folgenden Methoden verwenden:

  • Sie können die Konfigurationsschnittstelle verwenden, um Ihren ersten benutzerdefinierten Anbieter für maschinelles Lernen hinzuzufügen. Weitere Informationen finden Sie im Abschnitt Angepasste Machine Learning-Instanz angeben.
  • Sie können auch Python SDK verwenden, um einen Anbieter für maschinelles Lernen hinzuzufügen. Diese Methode muss verwendet werden, wenn Sie mehr als einen Anbieter verwenden möchten. Weitere Informationen finden Sie unter Angepasste Machine Learning-Engine hinzufügen.

Erkundung fortsetzen

Sie können den Benutzerdefinierten Monitor für maschinelles Lernen verwenden, um eine Möglichkeit zur Interaktion mit anderen Diensten zu schaffen.

Angepasste Serviceinstanz für maschinelles Lernen (ML) angeben

Der erste Schritt zur Konfiguration von Modellevaluierungen ist die Angabe einer Dienstinstanz. In dieser Serviceinstanz werden Ihre KI-Modelle und Bereitstellungen gespeichert.

Angepasste Serviceinstanz verbinden

KI-Modelle und -Einsätze sind in einer Service-Instanz für Modellevaluierungen verbunden. Sie können einen angepassten Service verbinden. Um Ihren Dienst zu verbinden, gehen Sie auf die Registerkarte " Das Symbol der Registerkarte 'Konfiguration', fügen Sie einen Anbieter für maschinelles Lernen hinzu und klicken Sie auf das Symbol " Das Symbol der Registerkarte 'Konfiguration' bearbeiten. Neben einem Namen, einer Beschreibung und der Angabe des Umgebungstyps Vorproduktion oder Produktion müssen Sie die folgenden Informationen angeben, die für diesen Typ von Serviceinstanz spezifisch sind:

  • Benutzername
  • Kennwort
  • API-Endpunkt, der das Format https://host:port verwendet, z. B. https://custom-serve-engine.example.net:8443

Wählen Sie aus, ob Sie eine Verbindung zu Ihren Bereitstellungen herstellen möchten, indem Sie eine Liste anfordern oder indem Sie einzelne Scoring-Endpunkte eingeben.

Liste der Bereitstellungen anfordern

Wenn Sie die Kachel Liste der Bereitstellungen anfordern ausgewählt haben, geben Sie Ihre Berechtigungsnachweise und einen API-Endpunkt ein und speichern Sie anschließend die angepasste Konfiguration.

Einzelne Scoring-Endpunkte angeben

Wenn Sie die Kachel Einzelne Scoring-Endpunkte angeben ausgewählt haben, geben Sie Ihre Berechtigungsnachweise für den API-Endpunkt ein und speichern Sie anschließend die angepasste Konfiguration.

Sie können nun bereitgestellte Modelle auswählen und Überwachungen konfigurieren. Ihre bereitgestellten Modelle werden im Insights-Dashboard aufgelistet, wo Sie auf Zum Dashboard hinzufügen klicken können. Wählen Sie die Implementierungen aus, die Sie überwachen möchten, und klicken Sie auf Konfigurieren.

Weitere Informationen finden Sie in Überwachungen konfigurieren.

Beispiele für angepasste Engines für maschinelles Lernen

Richten Sie anhand der folgenden Vorschläge eine angepasste Engine für maschinelles Lernen ein.

Python und Flask

Sie können Python und Flask verwenden, um ein scikit-learn-Modell bereitzustellen.

Zum Generieren des Modells für Abweichungserkennung müssen Sie scikit-learn Version 0.20.2 im Notebook verwenden.

Die App kann lokal zu Testzwecken und als Anwendung in IBM Cloud implementiert werden.

Node.js

Sie finden auch ein Beispiel für eine angepasste Machine-Learning-Engine, die hier in Node.js geschrieben ist.

Codemuster für end2end

Code-Muster, das ein end2end für den Einsatz einer benutzerdefinierten Engine und die Integration mit Modellevaluierungen zeigt.

Nutzdatenprotokollierung mit der angepassten Engine für maschinelles Lernen

Um die Nutzdatenprotokollierung für eine IBM watsonx.ai Runtime oder eine benutzerdefinierte Engine für maschinelles Lernen zu konfigurieren, müssen Sie die ML-Engine als benutzerdefiniert binden.

Angepasste Engine für maschinelles Lernen hinzufügen

Eine non-watsonx.ai Runtime-Engine wird über Metadaten als benutzerdefiniert hinzugefügt und es besteht keine direkte Integration mit dem IBM watsonx.ai Runtime-Service. Sie können mehr als eine Maschine für maschinelles Lernen für Modellevaluierungen hinzufügen, indem Sie die Methode " wos_client.service_providers.add verwenden.

CUSTOM_ENGINE_CREDENTIALS = {
    "url": "***",
    "username": "***",
    "password": "***",
}

wos_client.service_providers.add(
        name=SERVICE_PROVIDER_NAME,
        description=SERVICE_PROVIDER_DESCRIPTION,
        service_type=ServiceTypes.CUSTOM_MACHINE_LEARNING,
        credentials=CustomCredentials(
            url= CUSTOM_ENGINE_CREDENTIALS['url'],
            username= CUSTOM_ENGINE_CREDENTIALS['username'],
            password= CUSTOM_ENGINE_CREDENTIALS['password'],
        ),
        background_mode=False
    ).result

Mit dem folgenden Befehl können Sie Ihren Service-Provider anzeigen:

client.service_providers.get(service_provider_id).result.to_dict()

Generische ML-Bindung

Sicherheit mit einem API-Schlüssel konfigurieren

Um die Sicherheit für Ihre benutzerdefinierte Engine für maschinelles Lernen zu konfigurieren, können Sie IBM Cloud und IBM Cloud Pak for Data als Authentifizierungsanbieter für Ihre Modellevaluierungen verwenden. Sie können die https://iam.cloud.ibm.com/identity/token-URL verwenden, um ein IAM-Token für IBM Cloud zu generieren, und Sie können die https://<$hostname>/icp4d-api/v1/authorize-URL verwenden, um ein Token für Cloud Pak for Data zu generieren.

Mit der Anforderung POST /v1/deployments/{deployment_id}/online können Sie Ihre Scoring-API in den folgenden Formaten implementieren:

Anforderung

{
	"input_data": [{
		"fields": [
			"name",
			"age",
			"position"
		],
		"values": [
			[
			"john",
			 33,
			"engineer"
			],
			[
			"mike",
			 23,
			"student"
			]
		]
	}]
}

Antwort

{
	"predictions": [{
		"fields": [
			"name",
			"age",
			"position",
			"prediction",
			"probability"
		],
		"labels": [
			"personal",
			"camping"
		],
		"values": [
			[
			"john",
			 33,
			"engineer",
			"personal",
			[
			0.6744664422398081,
			0.32553355776019194
			]
			],
			[
			"mike",
			 23,
			"student",
			"camping",
			[
			0.2794765664946941,
			0.7205234335053059
			]
			]
		]
	}]
}

Angepasste Subskription hinzufügen

Führen Sie den folgenden Befehl aus, um eine angepasste Subskription hinzuzufügen:

custom_asset = Asset(
        asset_id=asset['entity']['asset']['asset_id'],
        name=asset['entity']['asset']['name'],
        url = "dummy_url",
        asset_type=asset['entity']['asset']['asset_type'] if 'asset_type' in asset['entity']['asset'] else 'model',
        problem_type=ProblemType.MULTICLASS_CLASSIFICATION,
        input_data_type=InputDataType.STRUCTURED,
    )
deployment = AssetDeploymentRequest(
        deployment_id=asset['metadata']['guid'],
        url=asset['metadata']['url'],
        name=asset['entity']['name'],
        deployment_type=asset['entity']['type'],
        scoring_endpoint =  scoring_endpoint
    )
asset_properties = AssetPropertiesRequest(
        prediction_field='predicted_label',
        probability_fields = ["probability"],
        training_data_reference=None,
        training_data_schema=None,
        input_data_schema=None,
        output_data_schema=output_schema,
    )
result = ai_client.subscriptions.add(
        data_mart_id=cls.datamart_id,
        service_provider_id=cls.service_provider_id,
        asset=custom_asset,
        deployment=deployment,
        asset_properties=asset_properties,
        background_mode=False
    ).result

Führen Sie den folgenden Befehl aus, um die Subskriptionsliste abzurufen:

subscription_id = subscription_details.metadata.id
subscription_id

details: wos_client.subscriptions.get(subscription_id).result.to_dict()

Nutzdatenprotokollierung aktivieren

Führen Sie den folgenden Befehl aus, um die Nutzdatenprotokollierung in der Subskription zu aktivieren:

request_data = {'fields': feature_columns, 
                'values': [[payload_values]]}

Führen Sie den folgenden Befehl aus, um Details zur Protokollierung abzurufen:

response_data = {'fields': list(result['predictions'][0]),
                 'values': [list(x.values()) for x in result['predictions']]}

Scoring und Nutzdatenprotokollierung

  • Führen Sie einen Scoring-Vorgang für Ihr Modell durch.

  • Speichern Sie die Anforderung und die Antwort in der Tabelle für Nutzdatenprotokollierung.

    records_list = [PayloadRecord(request=request_data, response=response_data, response_time=response_time), PayloadRecord(request=request_data, response=response_data, response_time=response_time)]
    
    subscription.payload_logging.store(records=records_list)
    

Für andere Sprachen als Python können Sie Nutzdaten auch über eine REST API protokollieren.

Übergeordnetes Thema: Unterstützte Engines, Frameworks und Modelle für maschinelles Lernen