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:
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.
Wenn ist die Verwendung einer angepassten Machine Learning-Engine die Option der Wahl?
Eine angepasste Machine Learning-Engine ist die beste Wahl, wenn die folgenden Situationen zutreffen:
- 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. In diesem Fall sollten Sie die Entwicklung einer angepassten Machine Learning-Engine als Wrapper für Ihre ursprünglichen oder nativen Bereitstellungen in Betracht ziehen.
Funktionsweise
Die folgende Abbildung verdeutlicht die Unterstützung für die angepasste Umgebung:
Weitere Informationen können Sie auch über die folgenden Links aufrufen:
Watson OpenScale-API für Nutzdatenprotokollierung
Eingabekriterien für das Modell zur 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. Im weiteren Sinne können Deep-Learning-Modelle mit Text- oder Bildeingaben nicht zur Erkennung und Entschärfung von Verzerrungen verwendet werden.
Außerdem müssen Trainingsdaten geladen werden, um die Erklärbarkeit zu unterstützen.
Zur Erklärbarkeit von Text sollte der gesamte Text eines der Merkmale sein. Die Erklärbarkeit von Bildern für ein Modell vom Typ 'Angepasst' wird im aktuellen Release nicht unterstützt.
Ausgabekriterien für das Modell zur 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 Machine Learning-Engine
Eine angepasste Machine Learning-Engine stellt die Infrastruktur und 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:
Sie müssen zwei Typen von REST-API-Endpunkten zugänglich machen:
- Erkennungsendpunkte (GET-Liste der Bereitstellungen und Details)
- Scoring-Endpunkte (Online- und Echtzeit-Scoring)
Alle Endpunkte müssen mit der Swagger-Spezifikation kompatibel sein, die unterstützt werden soll.
Die Nutzdaten für die Eingabe in die Bereitstellung und für die Ausgabe aus der Bereitstellung müssen mit dem JSON-Dateiformat konform sein, das in der Spezifikation beschrieben wird.
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 Ihren Machine-Learning-Provider auch mithilfe des Python-SDK hinzufügen. Diese Methode müssen Sie verwenden, wenn mehrere Provider zur Verfügung stehen sollen. Weitere Informationen finden Sie unter Angepasste Machine Learning-Engine hinzufügen.
Weiterführende Informationen
Sie können den Benutzerdefinierten Monitor für maschinelles Lernen verwenden, um eine Möglichkeit zur Interaktion mit anderen Diensten zu schaffen.
Angepasste Machine Learning-Serviceinstanz angeben
Der erste Schritt zur Konfiguration von Modellevaluierungen ist die Angabe einer Dienstinstanz. In Ihrer Serviceinstanz speichern Sie Ihre KI-Modelle und -Bereitstellungen.
Angepasste Serviceinstanz verbinden
KI-Modelle und -Einsätze sind in einer Service-Instanz für Modellevaluierungen verbunden. Sie können eine Verbindung zu einem angepassten Service herstellen. Um Ihren Dienst zu verbinden, gehen Sie auf die Registerkarte " , fügen Sie einen Anbieter für maschinelles Lernen hinzu und klicken Sie auf das Symbol " 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.
Bereitstellungsliste anfordern
Geben Sie bei Auswahl der Kachel Bereitstellungsliste anfordern Ihre Berechtigungsnachweise und den API-Endpunkt ein und speichern Sie anschließend Ihre Konfiguration.
Einzelne Scoring-Endpunkte angeben
Geben Sie bei Auswahl der Kachel Individuelle Scoring-Endpunkte eingeben Ihre Berechtigungsnachweise für den API-Endpunkt ein und speichern Sie anschließend Ihre Konfiguration.
Jetzt sind Sie bereit, bereitgestellte Modelle auszuwählen und Ihre Überwachungen zu 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.
Angepasste Machine Learning-Engine - Beispiele
Orientieren Sie sich an den folgenden Ideen, um Ihre eigene angepasste Machine Learning-Engine einzurichten.
Python und Flask
Sie können Python und Flask verwenden, um das scikit-learn-Modell zu bedienen.
Zum Generieren des Drifterkennungsmodells 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.
End-to-End-Codemuster
Code-Muster, das ein end2end für den Einsatz einer benutzerdefinierten Engine und die Integration mit Modellevaluierungen zeigt.
Nutzdatenprotokollierung mit angepasster Machine Learning-Engine
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 Machine Learning-Engine 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
Sie können Ihren Service-Provider mit dem folgenden Befehl anzeigen:
client.service_providers.get(service_provider_id).result.to_dict()
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
]
]
]
}]
}
Angepasstes Abonnement hinzufügen
Führen Sie den folgenden Befehl aus, um ein angepasstes Abonnement 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 Abonnementliste 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 im Abonnement zu aktivieren:
request_data = {'fields': feature_columns,
'values': [[payload_values]]}
Führen Sie den folgenden Befehl aus, um die Protokollierungsdetails abzurufen:
response_data = {'fields': list(result['predictions'][0]),
'values': [list(x.values()) for x in result['predictions']]}
Scoring und Nutzdatenprotokollierung
Führen Sie ein Scoring für Ihr Modell durch.
Anforderung und Antwort in der Nutzdatenprotokollierungstabelle speichern
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