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.
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
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.
Wählen Sie ein Projekt aus dem CP4D-Menü
Erstellen Sie ein neues Projekt.
Wählen Sie ein Analyseprojekt aus und klicken Sie auf Weiter.
Erstellen Sie ein leeres Projekt.
Legen Sie einen Namen fest und erstellen Sie ihn.
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.
Wechseln Sie zur Registerkarte Projekteinstellungen.
Klicken Sie auf die Schaltfläche Associate Deployment Space.
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.
Bestätigen Sie, dass die Zuordnung wie unten gezeigt abgeschlossen wurde.
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.
Erstellen Sie ein Vorhersagemodell für Scikit Learn im Notizbuch von Watson Studio.
Gehen Sie zur Registerkarte Assets und klicken Sie auf die Schaltfläche Zum Projekt hinzufügen.
Klicken Sie auf Notizbuch.
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.
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.
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.
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)
Speichern Sie mit dem zuvor instanziierten WML-Client-Client das Modell, das das in ① erstellte Vorhersagemodell der Iris ist, im Projekt.
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()]
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'}})
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.
Sie können dasselbe mit der Methode repository.list_models () des WML-Clients tun.
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.
Schließlich werden wir das Modell im Bereitstellungsbereich von Watson Machine Learning registrieren.
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.
Klicken Sie in ② auf den dem Projekt zugeordneten Bereitstellungsbereich.
Sie können sehen, dass das Modell wie unten gezeigt registriert ist.
Stellen Sie das im Bereitstellungsbereich gespeicherte Modell bereit, um es zu einer REST-API zu machen.
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.
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.
Klicken Sie auf das Modell, das Sie gerade registriert haben.
Sie können sehen, dass es wie unten gezeigt als Online-Typ bereitgestellt wird. Klicken Sie auf Bereitstellung.
Sie sehen die Endpunkt-URL der REST-API für diese Bereitstellung und den Beispielcode in verschiedenen Sprachen.
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.
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.
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.
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.
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
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