Beispiel für den Betrieb eines Cloud Pak for Data-Objekts in Python (WML-Client, project_lib)

Einführung

Beim Erstellen eines Modells mit Notebook (Jupyter Notebook) im Analyseprojekt von Cloud Pak for Data (im Folgenden: CP4D) wird Watson-Machine-Learning-Client als Bibliothek zum Importieren von Daten, Speichern des Modells, Bereitstellen des erstellten Modells usw. verwendet. -Es gibt V4 (im Folgenden WML-Client) [^ 1] und project_lib [^ 2]. Beide sind standardmäßig in der Notebook-Standard-Python-Umgebung von CP4D enthalten. In diesem Artikel werde ich Ihnen im Detail zeigen, wie Sie diese Bibliotheken verwenden.

[^ 1]: Weitere Informationen finden Sie im WML-Client-Referenzhandbuch Watson-Machine-Learning-Client (V4) und in CP4D v2. 5 Weitere Informationen finden Sie im Produkthandbuch Bereitstellen mit Python-Client (https://www.ibm.com/support/knowledgecenter/en/SSQNUZ_2.5.0/wsj/wmls/wmls-deploy-python.html). Bitte beachten Sie, dass das WML-Client-Referenzhandbuch von Zeit zu Zeit aktualisiert werden kann.

[^ 2]: Weitere Informationen finden Sie im CP4D v2.5-Produkthandbuch [Verwenden von project-lib für Python](https://www.ibm.com/support/knowledgecenter/en/SSQNUZ_2.5.0/wsj/analyze-data]. /project-lib-python.html)

Da sich der WML-Client auch durch Angabe der URL authentifiziert, funktioniert er auch in einer Python-Umgebung außerhalb von CP4D. Es kann auch als Objektmanipulationsmethode für Modelle und Bereitstellungen in CP4D aus externen Stapelprogrammen verwendet werden.

(Operation bestätigte Version)

So überprüfen Sie mit dem Befehl pip in Notebook

python


!pip show watson-machine-learning-client-V4

output


Name: watson-machine-learning-client-V4
Version: 1.0.64
Summary: Watson Machine Learning API Client
Home-page: http://wml-api-pyclient-v4.mybluemix.net
Author: IBM
Author-email: [email protected], [email protected], [email protected]
License: BSD
Location: /opt/conda/envs/Python-3.6-WMLCE/lib/python3.6/site-packages
Requires: urllib3, pandas, tabulate, requests, lomond, tqdm, ibm-cos-sdk, certifi
Required-by: 
!pip show project_lib

output


Name: project-lib
Version: 1.7.1
Summary: programmatic interface for accessing project assets in IBM Watson Studio
Home-page: https://github.ibm.com/ax/project-lib-python
Author: IBM Watson Studio - Notebooks Team
Author-email: None
License: UNKNOWN
Location: /opt/conda/envs/Python-3.6-WMLCE/lib/python3.6/site-packages
Requires: requests
Required-by: 

Liste der wichtigsten Operationen auf CP4D und den verwendeten Bibliotheken

Sie können Datenbestände, Modelle, Funktionen, Bereitstellungen und mehr generieren und speichern. Sie können auch die von Ihnen erstellte Bereitstellung ausführen.

Operationen an Analyseprojekten

Das Datenelement verwendet hauptsächlich project_lib und das Modellsystem verwendet den WML-Client.

Hauptoperationen Bibliothek zu verwenden
Lesen von Daten aus Datenbeständen[^3] project_lib oder
pandas.read_mit csv'/project_data/data_asset/Dateiname'Lesen Sie direkt
Ausgeben von Dateidaten an Datenbestände[^4] project_lib
Liste der Datenbestände WML client
Modell speichern WML client
Liste der Modelle WML client
Funktion speichern WML client
Liste der Funktionen WML client

[^ 3]: Um die Daten zu laden, klicken Sie oben rechts im Notebook-Bildschirm auf die Datenschaltfläche (geschrieben als 0100) und dann auf den entsprechenden Namen des Daten-Assets> In Code einfügen> pandas DataFrame im Notebook. Der Code wird automatisch in die Zelle eingefügt. Standardmäßig scheint der Code von pandas.read_csv im Fall einer Datei und der Code von project_lib im Fall einer DB-Tabelle eingefügt zu sein.

[^ 4]: Dies ist auch mit dem WML-Client möglich. Da jedoch bestätigt wurde, dass die gespeicherte Datei in einem anderen Bereich als dem ursprünglichen Datenelement gespeichert ist und der Dateiname beim Herunterladen falsch ist, wurde der WML-Client bestätigt. Wir empfehlen, es nicht in Datenbeständen zu speichern. Ich werde auch in diesem Artikel nicht schreiben, wie das geht. </ span>

Vorgänge im Bereitstellungsbereich (analytische Bereitstellung)

Alle verwenden den WML-Client.

Hauptoperationen Bibliothek zu verwenden
Ausgeben von Dateidaten an Datenbestände WML client
Liste der Datenbestände WML client
Modell speichern WML client
Liste der Modelle WML client
Funktion(Funktion)sparen[^5] WML client
Funktion(Funktion)Listenanzeige[^5] WML client
Bereitstellung erstellen WML client
Bereitstellungen auflisten WML client
Führen Sie die Bereitstellung durch WML client

[^ 5]: Auf dem Bildschirm des Bereitstellungsbereichs wird die Funktion als "Funktion" ausgedrückt. Ich bin der Meinung, dass die japanische Übersetzung nicht einheitlich und nicht gut ist.

Import und Initialisierung von WML-Clients

WML-Client importieren

from watson_machine_learning_client import WatsonMachineLearningAPIClient

WML-Client-Initialisierung (Authentifizierung)

Initialisieren Sie den WML-Client mit dem Verbindungsziel und den Anmeldeinformationen. Es gibt zwei Möglichkeiten, um Anmeldeinformationen abzurufen.

  1. Verwenden Sie den Wert der OS-Umgebungsvariablen USER_ACCESS_TOKEN
  2. Verwenden Sie den CP4D-Benutzernamen und das Passwort

1 ist eine Methode, die mit Notebook auf CP4D verwendet werden kann. Wenn Sie den WML-Client in einer Umgebung außerhalb von CP4D verwenden, ist dies 2. Als Anmerkung,

Im Fall von Methode 1



import os
token = os.environ['USER_ACCESS_TOKEN']
url = "https://cp4d.host.name.com"
wml_credentials = {
    "token" : token,
    "instance_id" : "openshift",
    "url": url,
    "version": "3.0.0"
}
client = WatsonMachineLearningAPIClient(wml_credentials)

Im Fall von Methode 2


#Geben Sie als Benutzername und Kennwort den CP4D-Benutzer an, der tatsächlich zur Authentifizierung verwendet wird.
url = "https://cp4d.host.name.com"
wml_credentials = {
   "username":"xxxxxxxx",
   "password": "xxxxxxxx",
   "instance_id": "openshift",
   "url" : url,
   "version": "3.0.0"
}
client = WatsonMachineLearningAPIClient(wml_credentials)

Wechseln zwischen Analyseprojekt und Bereitstellungsbereich

Legen Sie fest, ob das Operationsziel der nachfolgenden Verarbeitung das Analyseprojekt (default_project) oder der Bereitstellungsbereich (default_space) ist. Der Ausgangszustand wird im Analyseprojekt festgelegt. *** Führen Sie beim Ändern des Operationsziels unbedingt diesen Schaltvorgang (Suchtpunkt) durch. *** ***

So finden Sie jede ID

Verwenden Sie für die ID des Analyseprojekts die ID, die in der Betriebssystemumgebungsvariablen PROJECT_ID enthalten ist.

Legen Sie die ID des Analyseprojekts fest


project_id = os.environ['PROJECT_ID']

Die ID des Bereitstellungsbereichs finden Sie im Voraus unter "Speicherplatz-GUID" unter "Einstellungen" des Bereitstellungsbereichs auf dem CP4D-Bildschirm oder verwenden Sie die in client.repository.list_spaces () angezeigte GUID mit der folgenden Methode.

Ermitteln Sie die ID des Bereitstellungsbereichs


client.repository.list_spaces()

output


------------------------------------  --------------------  ------------------------
GUID                                  NAME                  CREATED
xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx  DepSpaceName          2020-05-25T09:13:04.919Z
------------------------------------  --------------------  ------------------------

Legen Sie die ID des Bereitstellungsbereichs fest


space_id = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"

Betriebsziel wechseln

Wechseln Sie das Operationsziel zum Analyseprojekt


client.set.default_project(project_id)

Wechseln Sie das Betriebsziel in den Bereitstellungsbereich


client.set.default_space(space_id)

Bearbeiten von Datenbeständen

Liste der Datenbestände (Analyseprojekt)

Verwenden Sie den WML-Client.

#Wechseln Sie zu einem Analyseprojekt (nur wenn Sie wechseln müssen)
client.set.default_project(project_id)

#Liste der Datenbestände anzeigen
client.data_assets.list()

Datenbestände auflisten (Bereitstellungsbereich)

Verwenden Sie den WML-Client.

#Wechseln Sie zum Bereitstellungsbereich (nur wenn Sie wechseln müssen)
client.set.default_space(space_id)

#Liste der Datenbestände anzeigen
client.data_assets.list()

Daten aus Datenbeständen lesen (Analyseprojekt)

Klicken Sie auf die Datenschaltfläche (geschrieben als 0100) oben rechts im Notebook-Bildschirm und klicken Sie auf den entsprechenden Namen des Daten-Assets> In Code einfügen> Pandas DataFrame, um den Code automatisch in die Zelle im Notebook einzufügen. Es ist einfach, dies zu verwenden.

Bei Dateien wie CSV wird der Code zum Lesen der Daten automatisch in pandas.read_csv eingefügt. Der X-Teil von df_data_X wird automatisch erhöht, wenn Sie den Einfügevorgang wiederholen.

Code eingeben(Für Dateien)


import pandas as pd
df_data_1 = pd.read_csv('/project_data/data_asset/filename.csv')
df_data_1.head()

Das Produkthandbuch enthält einen Beispielcode zum Lesen der Dateidaten mit project_lib. Dies ist jedoch der Code.

project_Dateien mit lib lesen


from project_lib import Project
project = Project.access()

my_file = project.get_file("filename.csv")

my_file.seek(0)
import pandas as pd
df = pd.read_csv(my_file)

Bei DB-Tabellen wird der Code mit project_lib oben automatisch in "In Code einfügen" eingefügt. Da im Kopf `` `# @ hidden_cell``` steht, können Sie diese Zelle beim Freigeben eines Notizbuchs nicht einschließen. [^ 6]

[^ 6]: CP4D v2.5-Produkthandbuch [Ausblenden empfindlicher Codezellen im Notizbuch](https://www.ibm.com/support/knowledgecenter/ja/SSQNUZ_2.5.0/wsj/analyze-data /hide_code.html)

Code eingeben(Db2-Tabelle SCHEMANAME.Beispiel für TBL1)


# @hidden_cell
# This connection object is used to access your data and contains your credentials.
# You might want to remove those credentials before you share your notebook.

from project_lib import Project
project = Project.access()
TBL1_credentials = project.get_connected_data(name="TBL1")

import jaydebeapi, pandas as pd
TBL1_connection = jaydebeapi.connect('com.ibm.db2.jcc.DB2Driver',
    '{}://{}:{}/{}:user={};password={};'.format('jdbc:db2',
    TBL1_credentials['host'],
    TBL1_credentials.get('port', '50000'),
    TBL1_credentials['database'],
    TBL1_credentials['username'],
    TBL1_credentials['password']))

query = 'SELECT * FROM SCHEMANAME.TBL1'
data_df_1 = pd.read_sql(query, con=TBL1_connection)
data_df_1.head()

# You can close the database connection with the following code.
# TBL1_connection.close()
# To learn more about the jaydebeapi package, please read the documentation: https://pypi.org/project/JayDeBeApi/

Speicherung von Daten in Datenbeständen (Analyseprojekt)

So speichern Sie einen Pandas-Datenrahmen als CSV-Datei. Verwenden Sie project_lib.

from project_lib import Project
project = Project.access()

project.save_data("filename.csv", df_data_1.to_csv(),overwrite=True)

Speicherung von Daten in Datenbeständen (Bereitstellungsbereich)

Ebenso, wie die CSV-Datei im Bereitstellungsbereich gespeichert wird. Die Datenbestände im Bereitstellungsbereich werden während der Stapelausführung der Bereitstellung als Eingabedaten verwendet. Verwenden Sie den WML-Client.

#Geben Sie den Pandas-Datenrahmen einmal als CSV-Datei aus. Standardmäßig/home/wsuser/Unter Arbeit gelagert
df_data_1.to_csv("filename.csv")

#Wechseln Sie zum Bereitstellungsbereich (nur wenn Sie wechseln müssen)
client.set.default_space(space_id)

#Als Datenbestand speichern
asset_details = client.data_assets.create(name="filename.csv",file_path="/home/wsuser/work/filename.csv")

Die ID und href des gespeicherten Datenbestands sind im Rückgabewert Aktivitätsdetails von create enthalten. Die ID und href werden beim Stapeln der Bereitstellung im Bereitstellungsbereich verwendet.

#Rückgabewert von create(Meta-Informationen)Bestätigung von
asset_details

output


{'metadata': {'space_id': 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx',
  'guid': 'yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy',
  'href': '/v2/assets/zzzzzzzz-zzzz-zzzz-zzzz-zzzzzzzzzzzz?space_id=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx',
  'asset_type': 'data_asset',
  'created_at': '2020-05-25T09:23:06Z',
  'last_updated_at': '2020-05-25T09:23:06Z'},
 'entity': {'data_asset': {'mime_type': 'text/csv'}}}

_


asset_id = client.data_assets.get_uid(asset_details)
asset_href = client.data_assets.get_href(asset_details)

_)


asset_id = asset_details['metadata']['guid']
asset_href = asset_details['metadata']['href']

Abrufen von Metainformationen aus Asset-Details zum Rückgabewert Abrufen von Meta-Informationen aus Asset-Details zum Rückgabewert (eine andere Methode Erstellen Sie ein Modell zur Vorbereitung des Modellbetriebs

Erstellen Sie beispielsweise ein sckikt-learn-Zufallswaldmodell unter Verwendung der Iris-Beispieldaten.

#Laden Sie die Iris-Beispieldaten
from sklearn.datasets import load_iris
iris = load_iris()
df = pd.DataFrame(iris.data, columns=iris.feature_names)
df['iris_type'] = iris.target_names[iris.target]

#Erstellen Sie ein Modell in einer zufälligen Gesamtstruktur
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier

X = df.drop('iris_type', axis=1)
y = df['iris_type']
X_train, X_test, y_train, y_test = train_test_split(X,y,random_state=0)

clf = RandomForestClassifier(max_depth=2, random_state=0, n_estimators=10)
model = clf.fit(X_train, y_train)
    
#Überprüfen Sie die Genauigkeit des Modells
from sklearn.metrics import confusion_matrix, accuracy_score
y_test_predicted = model.predict(X_test)    
print("confusion_matrix:")
print(confusion_matrix(y_test,y_test_predicted))
print("accuracy:", accuracy_score(y_test,y_test_predicted))

Das obige `Modell `ist das trainierte Modell.

Modell speichern (Analyseprojekt)

Das Speichern des Modells in einem Analyseprojekt ist möglich, für die Bereitstellung jedoch nicht erforderlich. Verwenden Sie den WML-Client.

#Wechseln Sie zu einem Analyseprojekt (nur wenn Sie wechseln müssen)
client.set.default_project(project_id)

#Beschreiben von Modell-Metainformationen
model_name = "sample_iris_model"
meta_props={
    client.repository.ModelMetaNames.NAME: model_name,
    client.repository.ModelMetaNames.RUNTIME_UID: "scikit-learn_0.22-py3.6",
    client.repository.ModelMetaNames.TYPE: "scikit-learn_0.22",
    client.repository.ModelMetaNames.INPUT_DATA_SCHEMA:{
        "id":"iris model",
        "fields":[
            {'name': 'sepal length (cm)', 'type': 'double'},
            {'name': 'sepal width (cm)', 'type': 'double'},
            {'name': 'petal length (cm)', 'type': 'double'},
            {'name': 'petal width (cm)', 'type': 'double'}
        ]
    },
    client.repository.ModelMetaNames.OUTPUT_DATA_SCHEMA: {
        "id":"iris model",
        "fields": [
            {'name': 'iris_type', 'type': 'string','metadata': {'modeling_role': 'prediction'}}
        ]
    }
}

#Speichern Sie das Modell. Der Rückgabewert enthält die Metadaten des erstellten Modells
model_artifact = client.repository.store_model(model, meta_props=meta_props, training_data=X, training_target=y)
Ergänzung: Meta-Informationen, die in das Modell aufgenommen werden sollen

Es ist nicht zwingend erforderlich, INPUT_DATA_SCHEMA und OUTPUT_DATA_SCHEMA in den Metainformationen meta_props anzugeben, die in das Modell aufgenommen werden sollen. Dies ist jedoch erforderlich, wenn Sie die Testausführung im Formularformat auf dem Bildschirm mit den Bereitstellungsdetails nach der Bereitstellung angeben möchten. Das hier angegebene Format ist das Formulareingabeformat (Suchtpunkt) ***.

So überprüfen Sie die RUNTIME_UID, die angegeben werden kann
Der in GUID angezeigte Teil kann in meta_props als RUNTIME_UID angegeben werden.

python


# https://wml-api-pyclient-dev-v4.mybluemix.net/#runtimes
client.runtimes.list(limit=200)

output(CP4Dv2.Im Falle von 5)


    --------------------------  --------------------------  ------------------------  --------
    GUID                        NAME                        CREATED                   PLATFORM
    do_12.10                    do_12.10                    2020-05-03T08:35:16.679Z  do
    do_12.9                     do_12.9                     2020-05-03T08:35:16.648Z  do
    pmml_4.3                    pmml_4.3                    2020-05-03T08:35:16.618Z  pmml
    pmml_4.2.1                  pmml_4.2.1                  2020-05-03T08:35:16.590Z  pmml
    pmml_4.2                    pmml_4.2                    2020-05-03T08:35:16.565Z  pmml
    pmml_4.1                    pmml_4.1                    2020-05-03T08:35:16.537Z  pmml
    pmml_4.0                    pmml_4.0                    2020-05-03T08:35:16.510Z  pmml
    pmml_3.2                    pmml_3.2                    2020-05-03T08:35:16.478Z  pmml
    pmml_3.1                    pmml_3.1                    2020-05-03T08:35:16.450Z  pmml
    pmml_3.0                    pmml_3.0                    2020-05-03T08:35:16.422Z  pmml
    ai-function_0.1-py3.6       ai-function_0.1-py3.6       2020-05-03T08:35:16.378Z  python
    ai-function_0.1-py3         ai-function_0.1-py3         2020-05-03T08:35:16.350Z  python
    hybrid_0.2                  hybrid_0.2                  2020-05-03T08:35:16.322Z  hybrid
    hybrid_0.1                  hybrid_0.1                  2020-05-03T08:35:16.291Z  hybrid
    xgboost_0.90-py3.6          xgboost_0.90-py3.6          2020-05-03T08:35:16.261Z  python
    xgboost_0.82-py3.6          xgboost_0.82-py3.6          2020-05-03T08:35:16.235Z  python
    xgboost_0.82-py3            xgboost_0.82-py3            2020-05-03T08:35:16.204Z  python
    xgboost_0.80-py3.6          xgboost_0.80-py3.6          2020-05-03T08:35:16.173Z  python
    xgboost_0.80-py3            xgboost_0.80-py3            2020-05-03T08:35:16.140Z  python
    xgboost_0.6-py3             xgboost_0.6-py3             2020-05-03T08:35:16.111Z  python
    spss-modeler_18.2           spss-modeler_18.2           2020-05-03T08:35:16.083Z  spss
    spss-modeler_18.1           spss-modeler_18.1           2020-05-03T08:35:16.057Z  spss
    spss-modeler_17.1           spss-modeler_17.1           2020-05-03T08:35:16.029Z  spss
    scikit-learn_0.22-py3.6     scikit-learn_0.22-py3.6     2020-05-03T08:35:16.002Z  python
    scikit-learn_0.20-py3.6     scikit-learn_0.20-py3.6     2020-05-03T08:35:15.965Z  python
    scikit-learn_0.20-py3       scikit-learn_0.20-py3       2020-05-03T08:35:15.939Z  python
    scikit-learn_0.19-py3.6     scikit-learn_0.19-py3.6     2020-05-03T08:35:15.912Z  python
    scikit-learn_0.19-py3       scikit-learn_0.19-py3       2020-05-03T08:35:15.876Z  python
    scikit-learn_0.17-py3       scikit-learn_0.17-py3       2020-05-03T08:35:15.846Z  python
    spark-mllib_2.4             spark-mllib_2.4             2020-05-03T08:35:15.816Z  spark
    spark-mllib_2.3             spark-mllib_2.3             2020-05-03T08:35:15.788Z  spark
    spark-mllib_2.2             spark-mllib_2.2             2020-05-03T08:35:15.759Z  spark
    tensorflow_1.15-py3.6       tensorflow_1.15-py3.6       2020-05-03T08:35:15.731Z  python
    tensorflow_1.14-py3.6       tensorflow_1.14-py3.6       2020-05-03T08:35:15.705Z  python
    tensorflow_1.13-py3.6       tensorflow_1.13-py3.6       2020-05-03T08:35:15.678Z  python
    tensorflow_1.11-py3.6       tensorflow_1.11-py3.6       2020-05-03T08:35:15.646Z  python
    tensorflow_1.13-py3         tensorflow_1.13-py3         2020-05-03T08:35:15.619Z  python
    tensorflow_1.13-py2         tensorflow_1.13-py2         2020-05-03T08:35:15.591Z  python
    tensorflow_0.11-horovod     tensorflow_0.11-horovod     2020-05-03T08:35:15.562Z  native
    tensorflow_1.11-py3         tensorflow_1.11-py3         2020-05-03T08:35:15.533Z  python
    tensorflow_1.10-py3         tensorflow_1.10-py3         2020-05-03T08:35:15.494Z  python
    tensorflow_1.10-py2         tensorflow_1.10-py2         2020-05-03T08:35:15.467Z  python
    tensorflow_1.9-py3          tensorflow_1.9-py3          2020-05-03T08:35:15.435Z  python
    tensorflow_1.9-py2          tensorflow_1.9-py2          2020-05-03T08:35:15.409Z  python
    tensorflow_1.8-py3          tensorflow_1.8-py3          2020-05-03T08:35:15.383Z  python
    tensorflow_1.8-py2          tensorflow_1.8-py2          2020-05-03T08:35:15.356Z  python
    tensorflow_1.7-py3          tensorflow_1.7-py3          2020-05-03T08:35:15.326Z  python
    tensorflow_1.7-py2          tensorflow_1.7-py2          2020-05-03T08:35:15.297Z  python
    tensorflow_1.6-py3          tensorflow_1.6-py3          2020-05-03T08:35:15.270Z  python
    tensorflow_1.6-py2          tensorflow_1.6-py2          2020-05-03T08:35:15.243Z  python
    tensorflow_1.5-py2-ddl      tensorflow_1.5-py2-ddl      2020-05-03T08:35:15.209Z  python
    tensorflow_1.5-py3-horovod  tensorflow_1.5-py3-horovod  2020-05-03T08:35:15.181Z  python
    tensorflow_1.5-py3.6        tensorflow_1.5-py3.6        2020-05-03T08:35:15.142Z  python
    tensorflow_1.5-py3          tensorflow_1.5-py3          2020-05-03T08:35:15.109Z  python
    tensorflow_1.5-py2          tensorflow_1.5-py2          2020-05-03T08:35:15.079Z  python
    tensorflow_1.4-py2-ddl      tensorflow_1.4-py2-ddl      2020-05-03T08:35:15.048Z  python
    tensorflow_1.4-py3-horovod  tensorflow_1.4-py3-horovod  2020-05-03T08:35:15.019Z  python
    tensorflow_1.4-py3          tensorflow_1.4-py3          2020-05-03T08:35:14.987Z  python
    tensorflow_1.4-py2          tensorflow_1.4-py2          2020-05-03T08:35:14.945Z  python
    tensorflow_1.3-py2-ddl      tensorflow_1.3-py2-ddl      2020-05-03T08:35:14.886Z  python
    tensorflow_1.3-py3          tensorflow_1.3-py3          2020-05-03T08:35:14.856Z  python
    tensorflow_1.3-py2          tensorflow_1.3-py2          2020-05-03T08:35:14.829Z  python
    tensorflow_1.2-py3          tensorflow_1.2-py3          2020-05-03T08:35:14.799Z  python
    tensorflow_1.2-py2          tensorflow_1.2-py2          2020-05-03T08:35:14.771Z  python
    pytorch-onnx_1.2-py3.6      pytorch-onnx_1.2-py3.6      2020-05-03T08:35:14.742Z  python
    pytorch-onnx_1.1-py3.6      pytorch-onnx_1.1-py3.6      2020-05-03T08:35:14.712Z  python
    pytorch-onnx_1.0-py3        pytorch-onnx_1.0-py3        2020-05-03T08:35:14.682Z  python
    pytorch-onnx_1.2-py3.6-edt  pytorch-onnx_1.2-py3.6-edt  2020-05-03T08:35:14.650Z  python
    pytorch-onnx_1.1-py3.6-edt  pytorch-onnx_1.1-py3.6-edt  2020-05-03T08:35:14.619Z  python
    pytorch_1.1-py3.6           pytorch_1.1-py3.6           2020-05-03T08:35:14.590Z  python
    pytorch_1.1-py3             pytorch_1.1-py3             2020-05-03T08:35:14.556Z  python
    pytorch_1.0-py3             pytorch_1.0-py3             2020-05-03T08:35:14.525Z  python
    pytorch_1.0-py2             pytorch_1.0-py2             2020-05-03T08:35:14.495Z  python
    pytorch_0.4-py3-horovod     pytorch_0.4-py3-horovod     2020-05-03T08:35:14.470Z  python
    pytorch_0.4-py3             pytorch_0.4-py3             2020-05-03T08:35:14.434Z  python
    pytorch_0.4-py2             pytorch_0.4-py2             2020-05-03T08:35:14.405Z  python
    pytorch_0.3-py3             pytorch_0.3-py3             2020-05-03T08:35:14.375Z  python
    pytorch_0.3-py2             pytorch_0.3-py2             2020-05-03T08:35:14.349Z  python
    torch_lua52                 torch_lua52                 2020-05-03T08:35:14.322Z  lua
    torch_luajit                torch_luajit                2020-05-03T08:35:14.295Z  lua
    caffe-ibm_1.0-py3           caffe-ibm_1.0-py3           2020-05-03T08:35:14.265Z  python
    caffe-ibm_1.0-py2           caffe-ibm_1.0-py2           2020-05-03T08:35:14.235Z  python
    caffe_1.0-py3               caffe_1.0-py3               2020-05-03T08:35:14.210Z  python
    caffe_1.0-py2               caffe_1.0-py2               2020-05-03T08:35:14.180Z  python
    caffe_frcnn                 caffe_frcnn                 2020-05-03T08:35:14.147Z  Python
    caffe_1.0-ddl               caffe_1.0-ddl               2020-05-03T08:35:14.117Z  native
    caffe2_0.8                  caffe2_0.8                  2020-05-03T08:35:14.088Z  Python
    darknet_0                   darknet_0                   2020-05-03T08:35:14.059Z  native
    theano_1.0                  theano_1.0                  2020-05-03T08:35:14.032Z  Python
    mxnet_1.2-py2               mxnet_1.2-py2               2020-05-03T08:35:14.002Z  python
    mxnet_1.1-py2               mxnet_1.1-py2               2020-05-03T08:35:13.960Z  python
    --------------------------  --------------------------  ------------------------  --------

Es gibt andere Metainformationen, die in meta_props enthalten sein können, und es wird im Allgemeinen empfohlen, diese so weit wie möglich hinzuzufügen, da aufgezeichnet werden kann, unter welchen Bedingungen das erstellte Modell erstellt wurde.

Metainformationen, die in meta_props
beschrieben werden können
client.repository.ModelMetaNames.get()

output


['CUSTOM',
 'DESCRIPTION',
 'DOMAIN',
 'HYPER_PARAMETERS',
 'IMPORT',
 'INPUT_DATA_SCHEMA',
 'LABEL_FIELD',
 'METRICS',
 'MODEL_DEFINITION_UID',
 'NAME',
 'OUTPUT_DATA_SCHEMA',
 'PIPELINE_UID',
 'RUNTIME_UID',
 'SIZE',
 'SOFTWARE_SPEC_UID',
 'SPACE_UID',
 'TAGS',
 'TRAINING_DATA_REFERENCES',
 'TRAINING_LIB_UID',
 'TRANSFORMED_LABEL_FIELD',
 'TYPE']

Modell speichern (Bereitstellungsspeicherplatz)

Verwenden Sie den WML-Client, um das Modell im Bereitstellungsbereich zu speichern. Alternativ können Sie das Modell wie oben beschrieben im Analyseprojekt speichern und dann auf dem CP4D-Bildschirm auf "Heraufstufen" des Modells klicken, um das Modell des Analyseprojekts zu kopieren und im Bereitstellungsbereich zu speichern. Werden.

#Wechseln Sie zum Bereitstellungsbereich (nur wenn Sie wechseln müssen)
client.set.default_space(space_id)

#Beschreiben von Modell-Metainformationen
model_name = "sample_iris_model"
meta_props={
    client.repository.ModelMetaNames.NAME: model_name,
    client.repository.ModelMetaNames.RUNTIME_UID: "scikit-learn_0.22-py3.6",
    client.repository.ModelMetaNames.TYPE: "scikit-learn_0.22",
    client.repository.ModelMetaNames.INPUT_DATA_SCHEMA:{
        "id":"iris model",
        "fields":[
            {'name': 'sepal length (cm)', 'type': 'double'},
            {'name': 'sepal width (cm)', 'type': 'double'},
            {'name': 'petal length (cm)', 'type': 'double'},
            {'name': 'petal width (cm)', 'type': 'double'}
        ]
    },
    client.repository.ModelMetaNames.OUTPUT_DATA_SCHEMA: {
        "id":"iris model",
        "fields": [
            {'name': 'iris_type', 'type': 'string','metadata': {'modeling_role': 'prediction'}}
        ]
    }
}

#Speichern Sie das Modell. Der Rückgabewert enthält die Metadaten des erstellten Modells
model_artifact = client.repository.store_model(model, meta_props=meta_props, training_data=X, training_target=y)

Als Ergänzung sind die in meta_props einzuschließenden Metainformationen dieselben wie ["Ergänzung: In das Modell einzuschließende Metainformationen"](# Ergänzungs-Metainformationen, die in das Modell aufgenommen werden sollen).

Die ID des gespeicherten Modells ist im Rückgabewert model_artifact enthalten. Sie benötigen die ID, wenn Sie die Bereitstellung erstellen. Extrahieren Sie die ID wie unten gezeigt.

Abrufen der ID aus dem Rückgabewert


model_id = client.repository.get_model_uid(model_artifact)

Abrufen der ID aus dem Rückgabewert (eine andere Methode)


model_id = model_artifact['metadata']['guid']

Liste der Modelle (Analyseprojekt)

#Wechseln Sie zu einem Analyseprojekt (nur wenn Sie wechseln müssen)
client.set.default_project(project_id)

#Liste der Modelle anzeigen
client.repository.list_models()

Listenmodelle (Bereitstellungsbereich)

Verwenden Sie den WML-Client.

#Wechseln Sie zum Bereitstellungsbereich (nur wenn Sie wechseln müssen)
client.set.default_space(space_id)

#Liste der Modelle anzeigen
client.repository.list_models()

Bereitstellungsvorgänge (nur Bereitstellungsbereich)

Verwenden Sie den WML-Client. Es gibt zwei Arten der Bereitstellung: den Stapeltyp und den Online-Typ. Die ID des Modells, das bereitgestellt werden soll, wird angegeben, um erstellt zu werden.

Erstellen einer Bereitstellung (Online-Typ)

Online-Bereitstellung


dep_name = "sample_iris_online"
meta_props = {
    client.deployments.ConfigurationMetaNames.NAME: dep_name,
    client.deployments.ConfigurationMetaNames.ONLINE: {}
}

deployment_details = client.deployments.create(model_id, meta_props=meta_props)

Die Bereitstellung dauert weniger als eine Minute. Wenn Sie jedoch die folgende Ausgabe sehen, ist die Bereitstellung erfolgreich.

output


#######################################################################################

Synchronous deployment creation for uid: 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' started

#######################################################################################
    
initializing
ready
        
------------------------------------------------------------------------------------------------
Successfully finished deployment creation, deployment_uid='yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy'
------------------------------------------------------------------------------------------------

Die ID der erstellten Bereitstellung kann wie folgt aus dem Rückgabewert abgerufen werden.

#ID der Bereitstellung vom Typ ONLINE
dep_id_online = deployment_details['metadata']['guid']

Erstellen einer Bereitstellung (Stapeltyp)

Bereitstellung vom Stapeltyp


dep_name = "sample_iris_batch"
meta_props = {
    client.deployments.ConfigurationMetaNames.NAME: dep_name,
    client.deployments.ConfigurationMetaNames.BATCH: {},
    client.deployments.ConfigurationMetaNames.COMPUTE: {
        "name": "S",
        "nodes": 1
    }
}

deployment_details = client.deployments.create(model_id, meta_props=meta_props)

Wenn "Erfolgreich" angezeigt wird, ist die Bereitstellung erfolgreich. Die ID der erstellten Bereitstellung kann wie folgt aus dem Rückgabewert abgerufen werden.

#ID der Bereitstellung vom Typ BATCH
dep_id_batch = deployment_details['metadata']['guid']

Bereitstellungen auflisten

Dies verwendet auch den WML-Client.

#Zeigen Sie eine Liste der Bereitstellungen an
client.deployments.list()

Ausführung der Bereitstellung (Online-Typ)

Wenn Sie eine Online-Bereitstellung durchführen, erstellen Sie Eingabedaten (JSON-Format) für die Bewertung, werfen sie in REST in die Bereitstellung und erhalten das Vorhersageergebnis. Erstellen Sie zunächst Beispiel-Eingabedaten.

Generieren Sie Beispiel-Eingabedaten für die Scoring-Ausführung


# sample data for scoring (setosa)
scoring_x = pd.DataFrame(
    data = [[5.1,3.5,1.4,0.2]],
    columns=['sepal length (cm)','sepal width (cm)','petal length (cm)','petal width (cm)']
)

values = scoring_x.values.tolist()
fields = scoring_x.columns.values.tolist()
scoring_payload = {client.deployments.ScoringMetaNames.INPUT_DATA: [{'fields': fields, 'values': values}]}
scoring_payload

output


{'input_data': [{'fields': ['sepal length (cm)',
    'sepal width (cm)',
    'petal length (cm)',
    'petal width (cm)'],
   'values': [[5.1, 3.5, 1.4, 0.2]]}]}

Es gibt zwei Möglichkeiten, eine Online-Bereitstellung durchzuführen: WML-Client und Anforderungen.

Online-Bewertung mit WMLclient durchführen


prediction = client.deployments.score(dep_id_online, scoring_payload)
prediction

output


{'predictions': [{'fields': ['prediction', 'probability'],
   'values': [[0, [0.8131726303900102, 0.18682736960998966]]]}]}

Ein Beispiel für die Ausführung von Anforderungen kann durch Kopieren aus dem Codeausschnitt auf dem Bildschirm mit den Bereitstellungsdetails des CP4D-Bildschirms verwendet werden. mltoken ist ein API-Authentifizierungstoken, das von der Betriebssystemumgebungsvariablen USER_ACCESS_TOKEN in [WML-Client-Initialisierung (Authentifizierung)](# WML-Client-Initialisierungsauthentifizierung) am Anfang dieses Artikels abgerufen wird. Sie können `so wie es ist verwenden. Wenn Sie in einer Umgebung außerhalb von CP4D ausgeführt werden, lesen Sie Abrufen eines Inhaber-Tokens im CP4D-Produkthandbuch. Führen Sie ml-authentication-local.html) aus und beziehen Sie es im Voraus.

import urllib3, requests, json

# token = "XXXXXXXXXXXXXXXXXX"
# url = "https://cp4d.host.name.com"
header = {'Content-Type': 'application/json', 'Authorization': 'Bearer ' + token}
dep_url = url + "/v4/deployments/" + dep_id_online + "/predictions"

response = requests.post(dep_url, json=scoring_payload, headers=header)
prediction = json.loads(response.text)
prediction

output


{'predictions': [{'fields': ['prediction', 'probability'],
   'values': [['setosa', [0.9939393939393939, 0.006060606060606061, 0.0]]]}]}

Wenn Ihre CP4D-Domäne ein selbstsigniertes Zertifikat verwendet und request.post die Zertifikatsprüfung nicht besteht, können Sie dies vorübergehend vermeiden, indem Sie die Optionen `` `verify = False``` in request.post verwenden. Benutzung auf eigene Gefahr.

Ausführung der Bereitstellung (Stapeltyp)

Bei der Ausführung einer Bereitstellung vom Stapeltyp wird die CSV-Datei, die die Eingabedaten sein wird, im Voraus im Datenelement des Bereitstellungsbereichs registriert, und die href dieses Datenbestands wird angegeben.

Vorbereitung der Eingabedaten


#CSV-Konvertierung der ersten 5 Zeilen der Iris-Trainingsdaten X als Beispiel
X.head(5).to_csv("iris_test.csv")

#Wechseln Sie zum Bereitstellungsbereich (nur wenn Sie wechseln müssen)
client.set.default_space(space_id)

#Registrierung in Datenbeständen
asset_details = client.data_assets.create(name="iris_test.csv",file_path="/home/wsuser/work/iris_test.csv")
asset_href = client.data_assets.get_href(asset_details)

Batch-Scoring-Ausführung


#Erstellen Sie Metainformationen für den Ausführungsjob
job_payload_ref = {
    client.deployments.ScoringMetaNames.INPUT_DATA_REFERENCES: [{
        "location": {
            "href": asset_href
        },
        "type": "data_asset",
        "connection": {}
    }],
    client.deployments.ScoringMetaNames.OUTPUT_DATA_REFERENCE: {
        "location": {
            "name": "iris_test_out_{}.csv".format(dep_id_batch),
            "description": "testing csv file"
        },
        "type": "data_asset",
        "connection": {}
    }
}

#Stapelausführung(create_Wird ausgeführt, wenn Sie arbeiten)
job = client.deployments.create_job(deployment_id=dep_id_batch, meta_props=job_payload_ref)
job_id = client.deployments.get_job_uid(job)

Sie können den Status des Ausführungsergebnisses mit dem folgenden Code überprüfen. Wenn Sie es in Ihr Programm einbetten möchten, empfiehlt es sich, eine Schleife durchzuführen, bis der Status vollständig ist.

#Überprüfen Sie den Status von Stapelausführungsjobs
client.deployments.get_job_status(job_id)

output


#Wenn läuft
{'state': 'queued', 'running_at': '', 'completed_at': ''}

#Wenn die Ausführung abgeschlossen ist
{'state': 'completed',
 'running_at': '2020-05-28T05:43:22.287357Z',
 'completed_at': '2020-05-28T05:43:22.315966Z'}

das ist alles. Sie können auch Python-Funktionen speichern und bereitstellen, aber ich werde sie hinzufügen oder in einen anderen Artikel schreiben, wenn ich die Gelegenheit dazu bekomme.


(Hinzugefügt am 1. Juni 2020) Das folgende Git-Repository enthält ein Beispielnotizbuch mit Modellen und Bereitstellungen, die mit CP4D v3.0 verwendet werden können. https://github.ibm.com/GREGORM/CPDv3DeployML

Recommended Posts

Beispiel für den Betrieb eines Cloud Pak for Data-Objekts in Python (WML-Client, project_lib)
Stellen Sie Funktionen mit Cloud Pak for Data bereit
Beseitigen Sie verstümmelte japanische Zeichen in Matplotlib-Diagrammen mit Cloud Pak for Data Notebook
Zeigen Sie FX (Forex) Daten Candle Stick in Python an
Speichern Sie Pandas-Daten mit Cloud Pak for Data (Watson Studio) im Excel-Format in Datenbeständen.
Erstellen Sie Ihre eigenen Big Data in Python zur Validierung
Bereinigen Sie das Cloud-Paket für den Datenbereitstellungsbereich
Generieren Sie Word Cloud aus Testfalldaten mit Python3
Objektorientiert in Python
Überprüfen Sie die Funktionsweise von Python für .NET in jeder Umgebung
[In kürzester Zeit verstehen] Python-Grundlagen für die Datenanalyse
Python-Code zum Schreiben von CSV-Daten in den DSX-Objektspeicher
Abrufen von Daten aus der Analyse-API mit Google API Client für Python
Behandeln Sie Umgebungsdaten in Python
Python für die Datenanalyse Kapitel 4
String-Objektmethoden in Python
Zeigen Sie UTM-30LX-Daten in Python an
Nullobjektvergleich in Python
Techniken zum Sortieren in Python
Python für die Datenanalyse Kapitel 2
Über "für _ in range ():" von Python
Python für die Datenanalyse Kapitel 3
Installieren Sie Networkx in der Python 3.7-Umgebung zur Verwendung in Malware Data Science-Büchern
Protokolldatei mit Job (Notizbuch) von Cloud Pak for Data ausgeben
Versuchen Sie vorerst, FireBase Cloud Firestore mit Python zu verwenden