Lors de la création d'un modèle avec Notebook (Jupyter Notebook) dans le projet d'analyse de Cloud Pak for Data (ci-après CP4D), watson-machine-learning-client comme bibliothèque pour importer des données, stocker le modèle, déployer le modèle créé, etc. -Il y a V4 (ci-après client WML) [^ 1] et project_lib [^ 2]. Les deux sont inclus par défaut dans l'environnement Python standard Notebook de CP4D. Dans cet article, je vais vous montrer comment utiliser ces bibliothèques en détail.
[^ 1]: Pour plus de détails, consultez le Guide de référence du client WML watson-machine-learning-client (V4) et CP4D v2. 5 Consultez le manuel du produit Déployer à l'aide du client Python (https://www.ibm.com/support/knowledgecenter/en/SSQNUZ_2.5.0/wsj/wmls/wmls-deploy-python.html). Veuillez noter que le guide de référence du client WML peut être mis à jour de temps à autre.
[^ 2]: Pour plus d'informations, consultez le manuel du produit CP4D v2.5 [Utilisation de project-lib pour Python](https://www.ibm.com/support/knowledgecenter/en/SSQNUZ_2.5.0/wsj/analyze-data] /project-lib-python.html)
Étant donné que le client WML s'authentifie également en spécifiant l'URL, il fonctionnera même dans un environnement Python en dehors de CP4D. Il peut également être utilisé comme méthode de manipulation d'objets pour les modèles et les déploiements dans CP4D à partir de programmes batch externes.
(Opération version confirmée)
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:
Vous pouvez générer et enregistrer des actifs de données, des modèles, des fonctions, des déploiements, etc. Vous pouvez également exécuter le déploiement que vous avez créé.
L'actif de données utilise principalement project_lib et le système de modèle utilise le client WML.
Principales opérations | Bibliothèque à utiliser |
---|---|
Lire des données à partir d'actifs de données[^3] | project_lib ou pandas.read_avec csv'/project_data/data_asset/nom de fichier'Lire directement |
Exporter les données du fichier vers les actifs de données[^4] | project_lib |
Liste des actifs de données | WML client |
Enregistrer le modèle | WML client |
Liste des modèles | WML client |
Fonction de sauvegarde | WML client |
Liste des fonctions | WML client |
[^ 3]: Pour charger les données, cliquez sur le bouton de données (écrit comme 0100) en haut à droite de l'écran Notebook, puis cliquez sur le nom de l'actif de données correspondant> Insérer dans le code> pandas DataFrame dans le Notebook. Le code est automatiquement inséré dans la cellule. Par défaut, il semble que le code de pandas.read_csv soit inséré dans le cas d'un fichier, et le code de project_lib soit inséré dans le cas d'une table DB.
[^ 4]: C'est également possible avec le client WML, mais comme il a été confirmé que le fichier stocké est enregistré dans une zone différente de l'actif de données d'origine et que le nom du fichier est incorrect lors du téléchargement, le client WML a été confirmé. Nous vous déconseillons de le stocker dans des actifs de données. Je n'écrirai pas non plus comment faire cela dans cet article. </ span>
Tous utilisent le client WML.
Principales opérations | Bibliothèque à utiliser |
---|---|
Exporter les données du fichier vers les actifs de données | WML client |
Liste des actifs de données | WML client |
Enregistrer le modèle | WML client |
Liste des modèles | WML client |
une fonction(une fonction)sauvegarder[^5] | WML client |
une fonction(une fonction)Affichage de la liste[^5] | WML client |
Créer un déploiement | WML client |
Répertorier les déploiements | WML client |
Effectuer le déploiement | WML client |
[^ 5]: Sur l'écran de l'espace de déploiement, la fonction est exprimée en "fonction". J'ai le sentiment que la traduction japonaise n'est pas unifiée et qu'elle n'est pas bonne.
from watson_machine_learning_client import WatsonMachineLearningAPIClient
Initialisez le client WML avec la destination de connexion et les informations d'identification. Il existe deux façons d'obtenir des informations d'identification.
1 est une méthode qui peut être utilisée avec Notebook sur CP4D. Si vous utilisez le client WML dans un environnement en dehors de CP4D, c'est 2. En guise de note,
Dans le cas de la méthode 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)
Dans le cas de la méthode 2
#Spécifiez le nom d'utilisateur et le mot de passe de l'utilisateur CP4D qui est réellement utilisé pour l'authentification
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)
Définissez si la cible de l'opération du traitement suivant est le projet d'analyse (default_project) ou l'espace de déploiement (default_space). L'état initial est défini dans le projet d'analyse. *** Lors du changement de la cible de l'opération, assurez-vous d'effectuer cette opération de commutation (point de dépendance). *** ***
Pour l'ID du projet d'analyse, utilisez celui contenu dans la variable d'environnement OS PROJECT_ID.
Définir l'ID du projet d'analyse
project_id = os.environ['PROJECT_ID']
Pour l'ID de l'espace de déploiement, recherchez-le à l'avance dans «GUID de l'espace» dans «Paramètres» de l'espace de déploiement sur l'écran CP4D, ou utilisez le GUID affiché dans client.repository.list_spaces () par la méthode suivante.
Découvrez l'ID de l'espace de déploiement
client.repository.list_spaces()
output
------------------------------------ -------------------- ------------------------
GUID NAME CREATED
xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx DepSpaceName 2020-05-25T09:13:04.919Z
------------------------------------ -------------------- ------------------------
Définissez l'ID de l'espace de déploiement
space_id = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
Basculer la cible de l'opération vers le projet d'analyse
client.set.default_project(project_id)
Basculer la cible de l'opération vers l'espace de déploiement
client.set.default_space(space_id)
Utilisez le client WML.
#Passer à un projet d'analyse (uniquement si vous devez basculer)
client.set.default_project(project_id)
#Afficher la liste des actifs de données
client.data_assets.list()
Utilisez le client WML.
#Basculer vers l'espace de déploiement (uniquement si vous devez basculer)
client.set.default_space(space_id)
#Afficher la liste des actifs de données
client.data_assets.list()
Cliquez sur le bouton de données (écrit comme 0100) en haut à droite de l'écran du bloc-notes et cliquez sur le nom de l'actif de données approprié> Insérer dans le code> pandas DataFrame pour insérer automatiquement le code dans la cellule du bloc-notes. C'est facile à utiliser.
Pour les fichiers tels que CSV, pandas.read_csv insère automatiquement le code pour lire les données. La partie X de df_data_X augmentera automatiquement lorsque vous répéterez l'opération d'insertion.
Insérer le code(Pour les fichiers)
import pandas as pd
df_data_1 = pd.read_csv('/project_data/data_asset/filename.csv')
df_data_1.head()
Il existe un exemple de code pour lire les données de fichier à l'aide de project_lib dans le manuel du produit, mais c'est le code.
project_Lire des fichiers avec lib
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)
Pour les tables DB, le code utilisant project_lib est automatiquement inséré dans "Insérer dans le code" ci-dessus. Puisqu'il a `` # @ hidden_cell '' dans la tête, vous pouvez choisir de ne pas inclure cette cellule lors du partage d'un cahier. [^ 6]
[^ 6]: Manuel du produit CP4D v2.5 [Masquage des cellules de code sensibles dans le bloc-notes](https://www.ibm.com/support/knowledgecenter/ja/SSQNUZ_2.5.0/wsj/analyze-data /hide_code.html)
Insérer le code(Table DB2 SCHEMANAME.Exemple de 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/
Comment enregistrer une trame de données pandas sous forme de fichier CSV. Utilisez project_lib.
from project_lib import Project
project = Project.access()
project.save_data("filename.csv", df_data_1.to_csv(),overwrite=True)
De même, comment enregistrer le fichier CSV dans l'espace de déploiement. Les actifs de données dans l'espace de déploiement sont utilisés comme données d'entrée lors de l'exécution par lots du déploiement. Utilisez le client WML.
#Sortez une fois la trame de données pandas sous forme de fichier CSV. Par défaut/home/wsuser/Stocké sous le travail
df_data_1.to_csv("filename.csv")
#Basculer vers l'espace de déploiement (uniquement si vous devez basculer)
client.set.default_space(space_id)
#Enregistrer en tant qu'actif de données
asset_details = client.data_assets.create(name="filename.csv",file_path="/home/wsuser/work/filename.csv")
L'ID et href de l'actif de données sauvegardé sont inclus dans la valeur de retour asset_details de create. L'ID et href sont utilisés lors du traitement par lots du déploiement dans l'espace de déploiement.
#valeur de retour de create(Méta-information)Confirmation de
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'}}}
Retirez-le comme suit.
Valeur de retour actif_Obtenir des méta-informations à partir des détails
asset_id = client.data_assets.get_uid(asset_details)
asset_href = client.data_assets.get_href(asset_details)
Valeur de retour actif_Obtenir des méta-informations à partir des détails (une autre façon)
asset_id = asset_details['metadata']['guid']
asset_href = asset_details['metadata']['href']
Par exemple, créez un modèle de forêt aléatoire sckikt-learn à l'aide des exemples de données Iris.
#Charger des exemples de données Iris
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]
#Créer un modèle dans une forêt aléatoire
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)
#Vérifiez la précision du modèle
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))
Le `` modèle '' ci-dessus est le modèle entraîné.
L'enregistrement du modèle dans un projet d'analyse est possible, mais pas une opération obligatoire pour le déploiement. Utilisez le client WML.
#Passer à un projet d'analyse (uniquement si vous devez basculer)
client.set.default_project(project_id)
#Décrire les méta-informations du modèle
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'}}
]
}
}
#Enregistrez le modèle. La valeur de retour contient les métadonnées du modèle créé
model_artifact = client.repository.store_model(model, meta_props=meta_props, training_data=X, training_target=y)
Il n'est pas obligatoire de spécifier INPUT_DATA_SCHEMA et OUTPUT_DATA_SCHEMA dans les méta-informations meta_props à inclure dans le modèle, mais il est obligatoire si vous souhaitez spécifier l'exécution du test au format de formulaire sur l'écran des détails du déploiement après *** déploiement. Le format spécifié ici sera le format d'entrée du formulaire (point de dépendance) ***.
python
# https://wml-api-pyclient-dev-v4.mybluemix.net/#runtimes
client.runtimes.list(limit=200)
output(CP4Dv2.En cas de 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
-------------------------- -------------------------- ------------------------ --------
Il existe d'autres méta-informations qui peuvent être incluses dans meta_props, et il est généralement recommandé de les ajouter autant que possible car elles peuvent enregistrer dans quelles conditions le modèle créé a été créé.
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']
Utilisez le client WML pour enregistrer le modèle dans l'espace de déploiement. Vous pouvez également enregistrer le modèle dans le projet d'analyse par l'opération ci-dessus, puis cliquer sur "Promouvoir" du modèle sur l'écran CP4D pour copier et enregistrer le modèle du projet d'analyse dans l'espace de déploiement. Devenir.
#Basculer vers l'espace de déploiement (uniquement si vous devez basculer)
client.set.default_space(space_id)
#Décrire les méta-informations du modèle
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'}}
]
}
}
#Enregistrez le modèle. La valeur de retour contient les métadonnées du modèle créé
model_artifact = client.repository.store_model(model, meta_props=meta_props, training_data=X, training_target=y)
En complément, les méta-informations à inclure dans meta_props sont les mêmes que ["Supplement: Meta information to be included in the model"](# Supplement-Meta information to be included in the model), veuillez donc vous y référer.
L'ID du modèle enregistré est contenu dans la valeur de retour model_artifact. Vous aurez besoin de l'ID lorsque vous créez le déploiement. Extrayez l'ID comme indiqué ci-dessous.
Obtenir l'ID à partir de la valeur de retour
model_id = client.repository.get_model_uid(model_artifact)
Obtenir l'ID de la valeur de retour (une autre méthode)
model_id = model_artifact['metadata']['guid']
#Passer à un projet d'analyse (uniquement si vous devez basculer)
client.set.default_project(project_id)
#Afficher une liste de modèles
client.repository.list_models()
Utilisez le client WML.
#Basculer vers l'espace de déploiement (uniquement si vous devez basculer)
client.set.default_space(space_id)
#Afficher une liste de modèles
client.repository.list_models()
Utilisez le client WML. Il existe deux types de déploiement, le type Batch et le type Online. L'ID du modèle à déployer est donné à créer à créer.
Déploiement de type en ligne
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)
Le déploiement prend moins d'une minute, mais si vous voyez la sortie suivante, le déploiement est réussi.
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'
------------------------------------------------------------------------------------------------
L'ID du déploiement créé peut être récupéré à partir de la valeur de retour comme suit.
#ID du déploiement de type EN LIGNE
dep_id_online = deployment_details['metadata']['guid']
Déploiement de type batch
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)
Si «Successfully» s'affiche, le déploiement est réussi. L'ID du déploiement créé peut être récupéré à partir de la valeur de retour comme suit.
#ID du déploiement de type BATCH
dep_id_batch = deployment_details['metadata']['guid']
Cela utilise également le client WML.
#Afficher une liste de déploiements
client.deployments.list()
Lors de l'exécution d'un déploiement en ligne, vous créez des données d'entrée (format JSON) pour le scoring, les lancez au déploiement dans REST et recevez le résultat de la prédiction. Commencez par créer des exemples de données d'entrée.
Générer des exemples de données d'entrée pour l'exécution de la notation
# 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]]}]}
Il existe deux façons d'effectuer un déploiement en ligne: le client WML et les requêtes.
Effectuer un scoring en ligne avec WMLclient
prediction = client.deployments.score(dep_id_online, scoring_payload)
prediction
output
{'predictions': [{'fields': ['prediction', 'probability'],
'values': [[0, [0.8131726303900102, 0.18682736960998966]]]}]}
Un exemple d'exécution de requêtes peut être utilisé en copiant à partir de l'extrait de code sur l'écran des détails de déploiement de l'écran CP4D. mltoken est un jeton d'authentification API, `` jeton '' obtenu à partir de la variable d'environnement OS USER_ACCESS_TOKEN dans [Initialisation du client WML (authentification)](# authentification d'initialisation du client WML) au début de cet article. Vous pouvez utiliser «tel quel. Lors de l'exécution à partir d'un environnement extérieur à CP4D, [Obtention d'un jeton au porteur dans le manuel du produit CP4D](https://www.ibm.com/support/knowledgecenter/ja/SSQNUZ_2.5.0/wsj/analyze-data/ Exécutez ml-authentication-local.html) et obtenez-le à l'avance.
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]]]}]}
Si votre domaine CP4D utilise un certificat auto-signé et que requests.post échoue la vérification de certificat, vous pouvez temporairement l'éviter en utilisant les options
verify = False '' '' dans requests.post. À utiliser à vos risques et périls.
Lors de l'exécution d'un déploiement de type Batch, le fichier CSV qui sera les données d'entrée est enregistré à l'avance dans l'actif de données de l'espace de déploiement, et le href de cet actif de données est spécifié.
Préparation des données d'entrée
#Conversion CSV des 5 premières lignes de données d'entraînement Iris X comme exemple
X.head(5).to_csv("iris_test.csv")
#Basculer vers l'espace de déploiement (uniquement si vous devez basculer)
client.set.default_space(space_id)
#Inscription aux actifs de données
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)
Exécution de la notation par lots
#Créer des méta-informations pour la tâche d'exécution
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": {}
}
}
#Exécution par lots(create_Sera exécuté lorsque vous travaillez)
job = client.deployments.create_job(deployment_id=dep_id_batch, meta_props=job_payload_ref)
job_id = client.deployments.get_job_uid(job)
Vous pouvez vérifier l'état du résultat de l'exécution avec le code suivant. Si vous souhaitez l'intégrer dans votre programme, il est conseillé d'exécuter la boucle jusqu'à ce que l'état soit complet.
#Vérifier l'état des travaux d'exécution par lots
client.deployments.get_job_status(job_id)
output
#Si vous courez
{'state': 'queued', 'running_at': '', 'completed_at': ''}
#Lorsque l'exécution est terminée
{'state': 'completed',
'running_at': '2020-05-28T05:43:22.287357Z',
'completed_at': '2020-05-28T05:43:22.315966Z'}
c'est tout. Vous pouvez également enregistrer et déployer des fonctions Python, mais je les ajouterai ou les écrirai dans un autre article si j'en ai l'occasion.
(Ajouté le 1er juin 2020) Le référentiel Git suivant contient un exemple de bloc-notes de modèles et de déploiements pouvant être utilisés avec CP4D v3.0. https://github.ibm.com/GREGORM/CPDv3DeployML
Recommended Posts