REST-API eines mit Python erstellten Modells mit Watson Machine Learning (CP4D-Edition)

Erstellen Sie eine REST-API eines in Python mit Cloud pak für Data 3.0.1 (im Folgenden CP4D) erstellten Modells. Sie können eine REST-API erstellen, indem Sie ein Modell in einer Entwicklungsumgebung namens Watson Stuido Local erstellen und in einer Ausführungsumgebung namens Watson Machine Learning bereitstellen. Die REST-API ermöglicht das Aufrufen des erstellten Modells aus einer externen Anwendung. Wenn Sie beispielsweise ein Modell erstellen, das Einkäufe anhand des Roaming-Verhaltens des Webs vorhersagt, können Sie die Werbung in Echtzeit auf Ihrer Smartphone-App platzieren. Wenn Sie ein Modell erstellen, das einen Fehler anhand der Sensordaten des Geräts vorhersagt, können Sie in Echtzeit benachrichtigen, dass die Möglichkeit eines Fehlers besteht.

image.png

Die unterstützten Frameworks sind: Unterstützt scikitlearn, Keras, xgboost und mehr. Framework support details https://www.ibm.com/support/knowledgecenter/en/SSQNUZ_3.0.1/wos/wos-frameworks-wml-cloud.html

■ Testumgebung CP4D: 3.0.1 WML Client: 1.0.103 Scikitlearn: 0.22.1

① Projekterstellung

Erstellen Sie zunächst ein Projekt, um ein Notizbuch zum Erstellen eines Modells zu erstellen. Wenn Sie bereits ein Projekt haben, können Sie es verwenden. Fahren Sie in diesem Fall mit ② fort.

image.png

Wählen Sie ein Projekt aus dem CP4D-Menü

image.png

Erstellen Sie ein neues Projekt. image.png

Wählen Sie ein Analyseprojekt aus und klicken Sie auf Weiter. image.png

Erstellen Sie ein leeres Projekt. image.png

Legen Sie einen Namen fest und erstellen Sie ihn. image.png

(2) Zusammenarbeit im Bereich Projektbereitstellung

Um es zu einer REST-API mit Watson Machine Learning zu machen, muss ein Ort namens Deployment Space in Watson Machine Learning vorbereitet und das erstellte Modell an diesem Ort gespeichert werden. Stellen Sie hier den Bereitstellungsbereich ein, der dem Watson Studio-Projekt entspricht.

image.png

Wechseln Sie zur Registerkarte Projekteinstellungen. image.png

Klicken Sie auf die Schaltfläche Associate Deployment Space. image.png

Wenn Sie über einen vorhandenen Bereitstellungsbereich verfügen, können Sie diesen auswählen. Erstellen Sie jedoch zunächst einen neuen und klicken Sie auf Zuordnen. image.png

Bestätigen Sie, dass die Zuordnung wie unten gezeigt abgeschlossen wurde. image.png

Hinweis: Um genau zu sein, ist das Erstellen eines Bereitstellungsbereichs obligatorisch, das Zuordnen eines Projekts zu einem Bereitstellungsbereich ist jedoch nicht obligatorisch. Sie können das Modell auch in einem nicht verwandten Bereitstellungsbereich speichern. Das Erstellen einer Zuordnung erleichtert jedoch das Auffinden der UID des Bereitstellungsbereichs, was praktisch ist.

③ Scikit Lernen Sie die Modellerstellung

Erstellen Sie ein Vorhersagemodell für Scikit Learn im Notizbuch von Watson Studio.

image.png

Gehen Sie zur Registerkarte Assets und klicken Sie auf die Schaltfläche Zum Projekt hinzufügen. image.png

Klicken Sie auf Notizbuch. image.png

Wählen Sie "Von URL" und geben Sie einen beliebigen Namen an. Geben Sie die folgende URL für die Notebook-URL an. https://raw.githubusercontent.com/hkwd/200701WML/master/cp4d301/iris_WMLCP4D301pub.ipynb Wenn Sie die Einstellungen vorgenommen haben, klicken Sie auf Notizbuch erstellen. image.png

Führen Sie die Modellierungszelle aus. Ich mache ein Modell, indem ich die Irisdaten in der Scikitlearn-Bibliothek lese. Das Modell wird in einer Variablen namens model gespeichert.

Unter Verwendung von "Sepallänge" (Gaku-Länge), "Kelchbreite" (Gaku-Breite), "Blütenblattlänge" (Blütenblattlänge), "Blütenblattbreite" (Blütenblattbreite), der Irisart Setosa, Virginia, Es ist ein Modell, das Versicolor unterscheidet und vorhersagt. Vorhersage ist das Unterscheidungsergebnis, 0 ist Setosa, 1 ist Virginia und 2 ist Versicolor. Die Spalten Setosa_prob, Virginia_prob und Versicolor_prob geben die Wahrscheinlichkeit für jeden Iristyp an. Im Fall der 0. Iris im folgenden Beispiel besteht eine Wahrscheinlichkeit von 80%, dass es sich um eine Virginica-Art handelt.

image.png

④ WML-Client-Verbindung

Laden Sie die Watson Machine Learning-Clientbibliothek von Ihrem Notebook und stellen Sie eine Verbindung zum Watson Machine Learning-Dienst her, um Ihr Modell in Ihrem Projekt oder Bereitstellungsbereich zu speichern und bereitzustellen.

image.png

Die Client-Bibliothek von Watson Machine Learning (Watson-Machine-Learning-Client-V4) ist in der Python-Umgebung von CP4D geladen, die Version ist jedoch 1.0.95, etwas alt und unterstützt CP4D 3.0.1 nicht. Zuerst mit pip aktualisieren. Ich habe hier Version 1.0.103 verwendet.

!pip install --upgrade  watson-machine-learning-client-V4

Im Folgenden stellen Sie mit dem WML-Client eine Verbindung zum Watson Machine Learning-Dienst her. Sie können Watson Machine Learning mit einem Objekt namens client ausführen.

import sys,os,os.path

token = os.environ['USER_ACCESS_TOKEN']
from watson_machine_learning_client import WatsonMachineLearningAPIClient

wml_credentials = {
   "token": token,
   "instance_id" : "wml_local",
   "url": os.environ['RUNTIME_ENV_APSX_URL'],
   "version": "3.0.1"
}

client = WatsonMachineLearningAPIClient(wml_credentials)

⑤ Registrieren Sie das Modell im Projekt

Speichern Sie mit dem zuvor instanziierten WML-Client-Client das Modell, das das in ① erstellte Vorhersagemodell der Iris ist, im Projekt.

image.png

Stellen Sie zunächst mit dem WML-Client mit set.default_project eine Verbindung zum Projekt her.

project_id = os.environ['PROJECT_ID']
client.set.default_project(project_id)

Als Nächstes erstellen wir Modellmetadaten. Die Metadaten finden Sie in client.repository.ModelMetaNames.show ().

Hier sind einige der wichtigsten. Im Folgenden wird das Schema der erklärenden Variablen festgelegt. Mit dieser Einstellung können Sie die Benutzeroberfläche für die Testausführung mit der Watson Machine Learning-Benutzeroberfläche verwenden. Der Spaltenname und der Datentyp werden von x_train abgerufen, einem Pandas-DataFrame, der erklärende Variablen enthält.

x_fields=[{'name': i, 'type': str(v)} for i,v in x_train.dtypes.items()]

image.png

Im Folgenden wird das Ausgabeschema festgelegt. Es ist im Grunde eine feste Phrase, aber der Datentyp wird von y_train erhalten, einem DataFrame von Pandas, der die Zielvariable enthält.

y_fields=[{'name': 'prediction', 'type': str(y_train.dtypes[0]),'metadata': {'modeling_role': 'prediction'}}]
y_fields.append({'name': 'probability', 'type': 'list','metadata': {'modeling_role': 'probability'}})

image.png

Legen Sie außerdem Metadaten wie NAME und TYP fest und organisieren Sie sie in einem Wörterbuch. Wenn scikit learn 0.20 war, wurde RUNTIME_UID angegeben. Wenn scikit learn, das dieses Modell erstellt hat, jedoch 0.22 ist, musste SOFTWARE_SPEC_UID anstelle von RUNTIME_UID angegeben werden.

model_name = 'iris_skl_model'
#scikit learn ist 0.RUNTIME für 22_SOFTWARE, nicht UID_SPEC_UID muss angegeben werden
sw_spec_uid = client.software_specifications.get_uid_by_name("scikit-learn_0.22-py3.6")

#Definieren Sie Modellmetadaten
pro_model_meta_props = {
    client.repository.ModelMetaNames.NAME: model_name,
    client.repository.ModelMetaNames.SOFTWARE_SPEC_UID: sw_spec_uid,
    client.repository.ModelMetaNames.TYPE: "scikit-learn_0.22",
    client.repository.ModelMetaNames.INPUT_DATA_SCHEMA:[{
        "id":"input1",
        "fields":x_fields
    }],
    client.repository.ModelMetaNames.OUTPUT_DATA_SCHEMA: {
        "id":"output",
        "fields": y_fields}
}

Speichern Sie das Modell als Projekt-Asset mit der WML-Client-Methode repository.store_model. Speichern Sie die ID so, wie sie im Rückgabewert enthalten ist.

#Modell im Projekt speichern
stored_pro_model_details = client.repository.store_model(model,
                                               meta_props=pro_model_meta_props,
                                               training_data=x_train,
                                               training_target=y_train)

pro_model_uid=stored_pro_model_details['metadata']['guid']

Wenn Sie sich die Projektressourcen an dieser Stelle ansehen, können Sie sehen, dass sie als Modell gespeichert sind. image.png

image.png

Sie können dasselbe mit der Methode repository.list_models () des WML-Clients tun. image.png

Hinweis: Um genau zu sein, ist das Speichern des Modells im Projekt nicht unbedingt erforderlich, um es zu einer REST-API zu machen, sondern indem das im Bereitstellungsbereich gespeicherte Modell auch in Watson Studio im Projekt gespeichert wird Sie können es jedoch testen und im Bereitstellungsbereich (Heraufstufungsfunktion) mit der GUI speichern.

⑥ Registrieren Sie das Modell im Bereitstellungsbereich

Schließlich werden wir das Modell im Bereitstellungsbereich von Watson Machine Learning registrieren.

image.png

Verwenden Sie die REST-API mit dem Namen Watson Data API, um die ID des in (2) zugeordneten Bereitstellungsbereichs abzurufen und eine Verbindung mit der Methode set.default_space herzustellen.

#Rufen Sie die ID des zugeordneten Bereitstellungsbereichs ab
import json, requests
# get project info
r = requests.get(os.environ['RUNTIME_ENV_APSX_URL'] + "/v2/projects/" + os.environ['PROJECT_ID'], headers = {"Authorization": "Bearer " + os.environ['USER_ACCESS_TOKEN']})
wmlProjectCompute = [c for c in r.json()["entity"]["compute"] if c["type"] == "machine_learning"][0]
space_uid = wmlProjectCompute["properties"]["space_guid"]
print(space_uid)

#Stellen Sie eine Verbindung zum Bereitstellungsbereich her
client.set.default_space(space_uid)

--Referenz

Legen Sie zusätzlich zu den in (5) oben erstellten Modellmetadaten die UID des oben erhaltenen Bereitstellungsbereichs fest.

#Fügen Sie den Modellmetadaten eine Bereitstellungsbereichs-ID hinzu
ds_model_meta_props=pro_model_meta_props
ds_model_meta_props[client.repository.ModelMetaNames.SPACE_UID]= space_uid

Speichern Sie das Modell in repository.store_model wie in ⑤ oben und rufen Sie die UID des Modells aus dem Rückgabewert ab.

#Speichern Sie das Modell im Bereitstellungsbereich
stored_ds_model_details = client.repository.store_model(model,
                                               meta_props=ds_model_meta_props,
                                               training_data=x_train,
                                               training_target=y_train)
ds_model_uid = stored_ds_model_details["metadata"]["guid"]

Das Modell wird jetzt auch im Bereitstellungsbereich gespeichert. Versuchen Sie, eine Analytics-Bereitstellung zu öffnen. image.png

Klicken Sie in ② auf den dem Projekt zugeordneten Bereitstellungsbereich. image.png

Sie können sehen, dass das Modell wie unten gezeigt registriert ist. image.png

⑦ Stellen Sie das Modell als Online-Bewertung bereit

Stellen Sie das im Bereitstellungsbereich gespeicherte Modell bereit, um es zu einer REST-API zu machen.

image.png

Es ist möglich, mit der GUI für die Analysebereitstellung bereitzustellen, aber hier werden wir versuchen, die WML-Client-API zu verwenden.

Definieren Sie zunächst die Bereitstellungsmetadaten. Mit client.deployments.ConfigurationMetaNames.get () können Sie überprüfen, über welche Art von Metadaten Sie verfügen. Geben Sie hier NAME und ONLINE an. Wenn ONLINE angegeben ist, kann die Zielvariable des Vorhersageergebnisses in Echtzeit zurückgegeben werden, indem die erklärende Variable in die REST-API eingegeben wird. Es gibt andere Bereitstellungsmethoden wie BATCH.

deployment_on_name = 'iris_skl_model_rt'
#Online-Scoring-Metadatendefinition
deploy_on_meta_props = {
    client.deployments.ConfigurationMetaNames.NAME: deployment_on_name,
    client.deployments.ConfigurationMetaNames.ONLINE: {}
}

--Referenz

Stellen Sie das Modell mit der Methode deployments.create bereit. Geben Sie für Artefakt_UID die UID des Modells an, das im Bereitstellungsbereich registriert ist. Beachten Sie, dass dies nicht die UID des im Projekt gespeicherten Modells ist.

#Modell bereitstellen
deployment_on_details = client.deployments.create(
    artifact_uid=ds_model_uid, 
    meta_props=deploy_on_meta_props)

Es wird einige Zeit dauern, und das Modell wird mit der folgenden Meldung bereitgestellt.

image.png

Rufen Sie die UID der Bereitstellung ab, wie sie im Rückgabewert enthalten ist.

deployment_on_uid = client.deployments.get_uid(deployment_on_details)

Wechseln Sie zur analytischen Bereitstellung und stellen Sie sicher, dass sie bereitgestellt wird. image.png

image.png

Klicken Sie auf das Modell, das Sie gerade registriert haben. image.png

Sie können sehen, dass es wie unten gezeigt als Online-Typ bereitgestellt wird. Klicken Sie auf Bereitstellung. image.png

Sie sehen die Endpunkt-URL der REST-API für diese Bereitstellung und den Beispielcode in verschiedenen Sprachen. image.png

⑧ Wertung

Die ursprüngliche Verwendung besteht darin, von einer externen Anwendung aus zu punkten, wie in der folgenden Abbildung gezeigt, wobei der zuvor erwähnte Beispielcode verwendet wird. Hier wird jedoch als Test eine Bewertung von Notebook mit einem WML-Client vorgenommen.

image.png

Erstellen Sie zunächst eine erklärende Variable, die Eingabedaten von Pandas von Testdaten enthält. Hier wird x_test [0: 2] verwendet, um die ersten beiden Zeilen zu extrahieren.

payload = {
    client.deployments.ScoringMetaNames.INPUT_DATA:[{
        "fields": x_test.columns.tolist(),
        "values": x_test[0:2].values.tolist()
    }]
}

Ich habe die folgenden Daten als Eingabedaten gemacht. Erklärende Variablennamen und ihre Werte [4.5, 2.3, Blütenblattlänge], "Sepallänge", "Kelchbreite", "Blütenlänge", "Blütenblattbreite" Zwei Fälle, 1,3, 0,3] und [6,0, 3,4, 4,5, 1,6], sind angegeben.

image.png

Die Bewertung erfolgt nach der Methode von deployments.score. Gibt die UID und die Eingabedaten für die Bereitstellung an.

predict=client.deployments.score(deployment_on_uid, payload )
}

Die folgenden Ergebnisse werden zurückgegeben.

image.png

Das erste Ergebnis ist [1, [0,0, 0,99, 0,01]]. Zunächst wird 1 als Vorhersage zurückgegeben, sodass vorausgesagt wird, dass es sich um Virginia handelt. Die folgende Liste [0.0, 0.99, 0.01] ist Setosa_prob, Virginia_prob, Versicolor_prob. Virginica sagt eine 99% ige Chance voraus. In ähnlicher Weise wird vorausgesagt, dass der zweite Fall Sentosa mit einer Wahrscheinlichkeit von 100% ist.

Zusammenfassung

Das von Pythons Scikit Learn erstellte Modell wurde zu einer REST-API und kann von Anwendungen verwendet werden.

Hier ist das fertige Notizbuch. https://github.com/hkwd/200701WML/blob/master/cp4d301/iris_WMLCP4D301pub.ipynb

Referenz

Beispiel für den Betrieb von Cloud Pak für Datenobjekte in Python (WML-Client, project_lib) --Qiita https://qiita.com/ttsuzuku/items/eac3e4bedc020da93bc1

Recommended Posts

REST-API eines mit Python erstellten Modells mit Watson Machine Learning (CP4D-Edition)
Ich habe mit Docker eine API erstellt, die den vorhergesagten Wert des maschinellen Lernmodells zurückgibt
Zusammenfassung des grundlegenden Ablaufs des maschinellen Lernens mit Python
Maschinelles Lernen mit Python! Vorbereitung
Beginnend mit maschinellem Python-Lernen
Maschinelles Lernen mit Python (1) Gesamtklassifizierung
"Scraping & maschinelles Lernen mit Python" Lernnotiz
Implementierung von CRUD mithilfe der REST-API mit Python + Django Rest Framework + igGrid
[Beispiel für eine Python-Verbesserung] Python mit Codecademy lernen
Verstärken Sie Bilder für maschinelles Lernen mit Python
Einfacher Slack API-Client mit Python
Maschinelles Lernen mit Python (2) Einfache Regressionsanalyse
[Shakyo] Begegnung mit Python zum maschinellen Lernen
Serverlose Gesichtserkennungs-API mit Python
Aufbau einer KI / maschinellen Lernumgebung mit Python
Ich habe versucht, die Vorhersage-API des maschinellen Lernmodells von WordPress aus aufzurufen
Quellcode für die Trennung von Tonquellen (Übungsreihe zum maschinellen Lernen), der mit Python gelernt wurde
"Einführung in das maschinelle Lernen durch Bayes'sche Inferenz" Ungefähre Inferenz eines Poisson-Mischmodells, das nur mit Python-Numpy implementiert wurde
[Python] Einfache Einführung in das maschinelle Lernen mit Python (SVM)
Maschinelles Lernen beginnend mit Python Personal Memorandum Part2
Maschinelles Lernen beginnend mit Python Personal Memorandum Part1
Python & Machine Learning Study Memo Introduction: Einführung in die Bibliothek
Ein Anfänger des maschinellen Lernens versuchte, mit Python ein Vorhersagemodell für Pferderennen zu erstellen
[Python] Sammeln Sie Bilder mit Icrawler für maschinelles Lernen [1000 Blatt]
Lassen Sie uns einen Teil des maschinellen Lernens mit Python berühren
Ich habe mit der maschinellen Vorverarbeitung von Python Data begonnen
Richten Sie die Anzahl der Stichproben zwischen Datenklassen für maschinelles Lernen mit Python aus
Erstellen Sie eine Python-Umgebung für maschinelles Lernen mit Containern
Vorhersage der Zielzeit eines vollständigen Marathons mit maschinellem Lernen - Visual: Visualisierung von Daten mit Python-
Der erste Schritt des maschinellen Lernens ~ Für diejenigen, die versuchen möchten, mit Python zu implementieren ~
Einfaches maschinelles Lernen mit AutoAI (Teil 4) Jupyter Notebook
Wichtige Punkte von "Maschinelles Lernen mit Azure ML Studio"
Führen Sie eine Pipeline für maschinelles Lernen mit Cloud Dataflow (Python) aus.
Prognostizieren Sie das Geschlecht von Twitter-Nutzern durch maschinelles Lernen
Erstellen Sie mit Python eine Entwicklungsumgebung für maschinelles Lernen
[Python] Ich habe einen Klassifikator für Iris erstellt [Maschinelles Lernen]
Maschinelles Lernen mit Bildern der Kategorie Caffe -1 unter Verwendung eines Referenzmodells
Versuchen Sie, das Modell des maschinellen Lernens in das Python-Paket aufzunehmen
Aufzeichnung der ersten Herausforderung des maschinellen Lernens mit Keras
Python lernen mit ChemTHEATER 03
"Objektorientiert" mit Python gelernt
Python lernen mit ChemTHEATER 05-1
Python lernen mit ChemTHEATER 02
Python lernen mit ChemTHEATER 01
kabu Station® API-I hat einen Python-Wrapper für die REST-API erstellt
Versuchen Sie, die Leistung des Modells für maschinelles Lernen / Regression zu bewerten
Ich habe mit Python Clustering & Dimension Compression & Visualization mit maschinellem Lernen begonnen
Das Ergebnis des maschinellen Lernens von Java-Ingenieuren mit Python www
Die erste API, die mit dem Python Djnago REST-Framework erstellt wurde
Ich habe versucht, LINE-Bot mit Python + Flask + ngrok + LINE Messaging API zu erstellen
Versuchen Sie, die Leistung des Modells für maschinelles Lernen / Klassifizierung zu bewerten
Berühren wir die API der Netatmo Weather Station mit Python. #Python #Netatmo
[Mit einfacher Erklärung] Scratch-Implementierung einer Deep Boltsman-Maschine mit Python ②
[Mit einfacher Erklärung] Scratch-Implementierung einer tiefen Boltzmann-Maschine mit Python ①
Die Zusammenfassung des maschinellen Lernens in Python für Anfänger ist sehr kurz.
Einstellungen der Python3-basierten maschinellen Lernumgebung auf dem Mac (Koexistenz mit Python2)
Generierung von Spezifikationen und Code in der REST-API-Entwicklung (Python Edition)