Dans le projet d'analyse Cloud Pak for Data (CP4D), Notebook et Data Refinery Flow peuvent être convertis en Jobs et exécutés par lots. Ce que je veux faire cette fois, ce sont les deux points suivants.
Strictement parlant, Job semble être plus précis dans l'expression «définir les variables d'environnement et démarrer» que «passer des arguments à l'exécution». Puisqu'il commence probablement comme un pod OpenShift en interne, je suppose qu'il traite la variable d'environnement comme un OpenShift ConfigMap.
Commençons réellement Job avec l'API, donnons des variables d'environnement à ce moment-là et transmettons-les à la logique de traitement.
Créez un carnet et transformez-le en Job. En supposant que "MYENV1", "MYENV2" et "MYENV3" sont les variables d'environnement à traiter cette fois, les valeurs sont traitées dans une trame de données pandas et sorties au format CSV vers les actifs de données du projet d'analyse. Bien sûr, ces variables d'environnement ne sont pas définies par défaut, alors définissez les valeurs par défaut par défaut dans os.getenv.
import os
myenv1 = os.getenv('MYENV1', default='no MYENV1')
myenv2 = os.getenv('MYENV2', default='no MYENV2')
myenv3 = os.getenv('MYENV3', default='no MYENV3')
print(myenv1)
print(myenv2)
print(myenv3)
# -output-
# no MYENV1
# no MYENV2
# no MYENV3
Ensuite, encadrez ces trois valeurs avec des pandas,
import pandas as pd
df = pd.DataFrame({'myenv1' : [myenv1], 'myenv2' : [myenv2], 'myenv3' : [myenv3]})
df
# -output-
# myenv1 myenv2 myenv3
# 0 no MYENV1 no MYENV2 no MYENV3
Exportez en tant qu'actif de données pour votre projet d'analyse. Ajoutez un horodatage au nom du fichier. La sortie des actifs de données vers le projet d'analyse est [cet article](https://qiita.com/ttsuzuku/items/eac3e4bedc020da93bc1#%E3%83%87%E3%83%BC%E3%82%BF%E8 % B3% 87% E7% 94% A3% E3% 81% B8% E3% 81% AE% E3% 83% 87% E3% 83% BC% E3% 82% BF% E3% 81% AE% E4% BF % 9D% E5% AD% 98-% E5% 88% 86% E6% 9E% 90% E3% 83% 97% E3% 83% AD% E3% 82% B8% E3% 82% A7% E3% 82% AF% E3% 83% 88).
from project_lib import Project
project = Project.access()
import datetime
now = datetime.datetime.now(datetime.timezone(datetime.timedelta(hours=9))).strftime('%Y%m%d_%H%M%S')
project.save_data("jov_env_test_"+now+".csv", df.to_csv(),overwrite=True)
Dans le menu Notebook, sélectionnez Fichier> Enregistrer les versions pour enregistrer la version. Requis lors de la création d'un Job. Cliquez ensuite sur le bouton Job en haut à droite de l'écran Notebook> Create Job. Donnez un nom au travail et cliquez sur Créer.
Exécutons le Job créé sur l'écran CP4D. Tout d'abord, sans définir de variables d'environnement, cliquez simplement sur le bouton "Exécuter la tâche" pour l'exécuter.
OK lorsque le travail est exécuté et qu'il devient "Terminé".
En regardant les actifs de données du projet d'analyse, un fichier CSV est généré,
Si vous cliquez sur le nom du fichier pour voir l'aperçu, vous pouvez voir que la valeur par défaut définie dans Notebook est stockée.
Ensuite, définissez la variable d'environnement et exécutez-la. Sur l'écran Travail, cliquez sur «Modifier» sous «Variables d'environnement» et définissez les trois lignes suivantes.
MYENV1=1
MYENV2=hoge
MYENV3=10.5
C'est comme ça.
Après avoir soumis les paramètres, essayez à nouveau d'exécuter le Job. Le contenu du fichier CSV résultant ressemble à ceci. Puisqu'il s'agit d'une variable d'environnement, elle est traitée comme une chaîne String même si vous entrez une valeur numérique.
Utilisez les requêtes de python pour lancer le Job créé via l'API. Exécutez le code suivant à partir de l'environnement Python en dehors de CP4D.
Pour obtenir le jeton, effectuez une authentification de base avec le nom d'utilisateur et le mot de passe et obtenez le accessToken. Pour l'authentification, [Exemple d'exécution avec curl dans le manuel du produit CP4D v2.5](https://www.ibm.com/support/knowledgecenter/ja/SSQNUZ_2.5.0/wsj/analyze-data/ml-authentication- Il y a local.html).
url = "https://cp4d.hostname.com"
uid = "username"
pw = "password"
import requests
#Authentication
response = requests.get(url+"/v1/preauth/validateAuth", auth=(uid,pw), verify=False).json()
token = response['accessToken']
L'option verify = False dans les demandes est une solution de contournement de vérification de certificat si CP4D utilise un certificat auto-signé.
Obtenez la liste des tâches du projet d'analyse. En guise de préparation, découvrez à l'avance l'ID du projet d'analyse à utiliser sur CP4D. Affichez et vérifiez la variable d'environnement PROJECT_ID dans le bloc-notes de votre projet d'analyse.
Enquête sur l'ID de projet(Exécuter sur Notebook sur CP4D)
import os
os.environ['PROJECT_ID']
# -output-
# 'f3110316-687e-450a-8f17-57296c907973'
Définissez l'ID de projet ci-dessus et obtenez la liste des tâches avec l'API. L'API utilise l'API Watson Data. La référence de l'API est Jobs / Get list of jobs under a project est.
project_id = 'f3110316-687e-450a-8f17-57296c907973'
headers = {
'Authorization': 'Bearer ' + token,
'Content-Type': 'application/json'
}
# Job list
response = requests.get(url+"/v2/jobs?project_id="+project_id, headers=headers, verify=False).json()
response
# -output-
#{'total_rows': 1,
# 'results': [{'metadata': {'name': 'job_env_test',
# 'description': '',
# 'asset_id': 'b05d1214-d684-4bd8-b1fa-cc05a8ccee81',
# 'owner_id': '1000331001',
# 'version': 0},
# 'entity': {'job': {'asset_ref': '6e0b450e-2f9e-4605-88bf-d8a5e2bda4a3',
# 'asset_ref_type': 'notebook',
# 'configuration': {'env_id': 'jupconda36-f3110316-687e-450a-8f17-57296c907973',
# 'env_type': 'notebook',
# 'env_variables': ['MYENV1=1', 'MYENV2=hoge', 'MYENV3=10.5']},
# 'last_run_initiator': '1000331001',
# 'last_run_time': '2020-05-31T22:20:18Z',
# 'last_run_status': 'Completed',
# 'last_run_status_timestamp': 1590963640135,
# 'schedule': '',
# 'last_run_id': 'ebd1c2f1-f7e7-40cc-bb45-5e12f4635a14'}}}]}
L'identifiant asset_id ci-dessus est l'ID du Job "job_env_test". Stockez-le dans une variable.
job_id = "b05d1214-d684-4bd8-b1fa-cc05a8ccee81"
Exécutez le Job ci-dessus avec l'API. La référence API est Job Runs / Start a run for a job. Au moment de l'exécution, vous devez donner à json la valeur job_run et inclure ici également les variables d'environnement d'exécution.
jobrunpost = {
"job_run": {
"configuration" : {
"env_variables" : ["MYENV1=100","MYENV2=runbyapi","MYENV3=100.0"]
}
}
}
Donnez le job_run ci-dessus comme json pour exécuter le travail. L'ID d'exécution est stocké dans l''asset_id 'de la réponse' metadata '.
# Run job
response = requests.post(url+"/v2/jobs/"+job_id+"/runs?project_id="+project_id, headers=headers, json=jobrunpost, verify=False).json()
# Job run id
job_run_id = response['metadata']['asset_id']
job_run_id
# -output-
# 'cedec57a-f9a7-45e9-9412-d7b87a04036a'
Après l'exécution, vérifiez l'état. La référence de l'API est Job Runs / Get a specific run of a jobest.
# Job run status
response = requests.get(url+"/v2/jobs/"+job_id+"/runs/"+job_run_id+"?project_id="+project_id, headers=headers, verify=False).json()
response['entity']['job_run']['state']
# -output-
# 'Starting'
Si vous exécutez ce requests.get plusieurs fois, le résultat deviendra "Démarrage" -> "En cours d'exécution" -> "Terminé". Lorsqu'il devient «Terminé», l'exécution est terminée.
Revenez à l'écran CP4D et vérifiez le contenu du fichier CSV généré dans les actifs de données du projet d'analyse.
Il a été confirmé que la variable d'environnement spécifiée dans job_run est correctement stockée dans les données de résultat.
(prime) Des caractères codés sur deux octets peuvent également être utilisés pour la valeur de la variable d'environnement job_run.
Job contenant des caractères codés sur deux octets_run
jobrunpost = {
"job_run": {
"configuration" : {
"env_variables" : ["MYENV1=AIUEO","MYENV2=a-I-U-E-O","MYENV3=Aio"]
}
}
}
Résultat de l'exécution:
Après cela, vous pouvez faire bouillir ou cuire la valeur (chaîne de caractères) de la variable d'environnement reçue dans Job's Notebook ou l'utiliser comme vous le souhaitez.
(Matériel de référence) https://github.ibm.com/GREGORM/CPDv3DeployML/blob/master/NotebookJob.ipynb Ce référentiel contenait des exemples utiles de notebooks pouvant être utilisés avec CP4D.
Recommended Posts