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)
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:
Sie können Datenbestände, Modelle, Funktionen, Bereitstellungen und mehr generieren und speichern. Sie können auch die von Ihnen erstellte Bereitstellung ausführen.
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>
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.
from watson_machine_learning_client import WatsonMachineLearningAPIClient
Initialisieren Sie den WML-Client mit dem Verbindungsziel und den Anmeldeinformationen. Es gibt zwei Möglichkeiten, um Anmeldeinformationen abzurufen.
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)
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. *** ***
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"
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)
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()
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()
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/
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)
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']
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.
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)
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) ***.
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.
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']
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']
#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()
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()
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.
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']
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']
Dies verwendet auch den WML-Client.
#Zeigen Sie eine Liste der Bereitstellungen an
client.deployments.list()
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.
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