I. Description▲
Ce modèle décrit une méthode d'utilisation de Watson OpenScale et d'un moteur d’apprentissage automatique personnalisé de service de modèles. Avec Watson OpenScale, nous pouvons surveiller la qualité du modèle et enregistrer les charges utiles, indépendamment du lieu où le modèle est hébergé. Dans ce cas, nous utilisons l'exemple d'une application de service de modèles personnalisés, qui illustre la nature ouverte et agnostique de Watson OpenScale.
IBM Watson OpenScale est un environnement ouvert qui permet aux organisations d’automatiser et d’opérationnaliser leur IA.
OpenScale fournit une plateforme puissante pour la gestion des IA et des modèles ML sur le cloud IBM, cela quel que soit leur lieu de déploiement, tout en offrant les avantages suivants :
- ouvert à la conception, Watson OpenScale permet de surveiller et de gérer les modèles ML et DL construits à l’aide de n’importe quel framework ou EDI et déployés sur n’importe quel moteur d’hébergement de modèles ;
- obtenir des résultats plus justes : Watson OpenScale détecte et aide à atténuer les biais des modèles afin de mettre en évidence les problèmes d'équité. La plateforme fournit une explication en texte clair des plages de données affectées par les biais du modèle, ainsi que des visualisations aidant les scientifiques des données et les utilisateurs professionnels à comprendre l'impact sur les résultats commerciaux. Lorsque des biais sont détectés, Watson OpenScale crée automatiquement un modèle associé sans biais qui s’exécute en parallèle du modèle déployé, prévisualisant ainsi les résultats plus équitables attendus pour les utilisateurs sans remplacer le modèle original ;
- explication des transactions : Watson OpenScale aide les entreprises à apporter plus de transparence et d’auditabilité aux applications infusées par l’IA en générant des explications sur les transactions individuelles analysées, y compris les attributs utilisés pour effectuer la prédiction et le poids de chaque attribut ;
- automatiser la création d’IA : – le Neural Network Synthesis (NeuNetS), disponible en version bêta dans cette mise à jour, synthétise les réseaux de neurones en élaborant de manière fondamentale une conception personnalisée pour un ensemble de données. Dans la version bêta, NeuNetS prendra en charge les modèles de classification des images et des textes. NeuNetS réduit le temps et la barrière des compétences nécessaires à la conception et à la formation de réseaux de neurones personnalisés, plaçant ainsi ces derniers à la portée des experts en la matière, tout en améliorant la productivité des chercheurs en données.
Lorsque vous aurez terminé ce modèle de code, vous comprendrez comment :
- construire un moteur de service de modèle personnalisé à l'aide de Keras ;
- accéder au modèle personnalisé à l'aide d'une API REST ;
- enregistrer les charges utiles du modèle à l'aide de Watson OpenScale.
II. Flux▲
Le schéma du flux se présente comme suit :
- L'utilisateur déploie le serveur d'applications sur le cloud IBM à l'aide de Kubernetes et de Docker.
- L'utilisateur crée un bloc-notes Jupyter sur Watson ™ Studio et configure Watson OpenScale et Compose PostgreSQL.
- Watson OpenScale est utilisé pour surveiller un modèle d’apprentissage automatique pour l’enregistrement et la qualité de la charge utile.
- Le serveur d'applications est utilisé pour évaluer le modèle déployé.
III. Instructions▲
Dans ce modèle de code, nous allons enregistrer la charge utile d'un modèle déployé sur un moteur de service de modèle personnalisé à l'aide de Watson OpenScale python sdk. Nous allons utiliser Keras pour créer une REST API d'apprentissage approfondi, puis surveiller avec Watson OpenScale.
Lorsque le lecteur aura terminé ce modèle de code, il sera en mesure de comprendre comment :
- Construire un moteur de service de modèle personnalisé en utilisant Keras
- Accéder au modèle personnalisé à l'aide d'une REST API
- Enregistrer les charges utiles du modèle avec Watson OpenScale
III-A. Résumé des étapes▲
Les étapes détaillées de ce modèle se résument comme suit :
- Cloner le repoÉtape 1 : cloner le repo ;
- Créer des services Watson avec IBM CloudÉtape 2 : créer des services Watson avec IBM Cloud ;
- Créez un bloc-notes dans IBM Watson Studio à utiliser avec un serveur à adresse publique ou exécuter le bloc-notes localement pour des tests locaux uniquementÉtape 3 : créer un bloc-notes dans IBM Watson Studio ;
- Exécuter le bloc-notes dans IBM Watson StudioExécuter le bloc-notes dans IBM Watson Studio .
III-B. Prérequis▲
Les prérequis avant d’entrer dans le vif du sujet sont :
- un compte IBM Cloud ;
- un compte sur IBM Watson Studio ou un moyen d'exécuter un Notebook Jupyter localement ;
- pour le déploiement de Kubernetes, configurez IBM Cloud CLI et tous les autres prérequis Kubernetes .
III-C. Étape 1 : cloner le repo▲
Clonez localement monitor-custom-ml-engine-with-watson-openscale . Dans un terminal, lancez :
git clone https://github.com/IBM/monitor-custom-ml-engine-with-watson-openscale
III-D. Étape 2 : créer des services Watson avec IBM Cloud▲
Remarque : si vous utilisez Watson Studio pour votre bloc-notes, les services créés doivent se trouver dans la même région et le même espace que votre service Watson Studio.
Créer les services suivants :
-
Vous obtiendrez le GUID de l'instance Watson OpenScale lorsque vous exécuterez le bloc-notes à l'aide de la CLI d'IBM Cloud .
-
Attendez quelques minutes le temps que la base de données soit approvisionnée
- Cliquez sur l'onglet Service Credentials , appuyez tab sur la gauche, puis cliquez sur New credential + pour créer les informations d'identification du service. Copiez-les ou laissez l'onglet ouvert pour pouvoir l'utiliser plus tard dans le bloc-notes.
III-E. Étape 3 : créer un bloc-notes dans IBM Watson Studio▲
- Dans Watson Studio , créez un New project .
- En utilisant le projet que vous avez créé, cliquez sur + Add to project puis choisissez la mosaïque Notebook ou dans l’onglet Assets, sous Notebooks, choisissez + New notebook pour créer un bloc-notes.
- Sélectionnez l’onglet From URL .
- Nommez le bloc-notes.
- Entrez éventuellement une description du bloc-notes.
- Sous Notebook URL , indiquez l’URL suivante : https://raw.githubusercontent.com/IBM/monitor-custom-ml-engine-with-watson-openscale/master/notebooks/WatsonOpenScaleAndCustomMLEngine.ipynb .
- Sélectionnez Default Python 3.5runtime, Free ou XS.
- Cliquez sur Create.
III-F. Étape 4 : exécuter le serveur d’applications▲
III-F-1. Étape 4a : exécuter le serveur d'applications dans un cluster Kubernetes▲
- Créez un cluster Kubernetes sur IBM Cloud .
- Cela doit être dans la région Dallas, la même région que l'instance Watson OpenScale .
- Sélectionnez un niveau, Free ou Standard
- Lorsque la mise en service est terminée, utilisez l'adresse IP publique du nœud de travail pour mettre à jour la valeur PUBLIC_IP dans le fichier run_server.py.
-
Créez un namespace de registre avec votre unique
namespace_name
:
ibmcloud cr namespace-add <namespace_name> -
Configurez le cluster kubernetes :
ibmcloud ks cluster-config <cluster_name_or_ID> -
Copiez la «
returned command
» et lancez-la. Cela ressemblera à :
export KUBECONFIG=/Users/<user_name>/.bluemix/plugins/container-service/clusters/pr_firm_cluster/kube-config-prod-par02-pr_firm_cluster.yml -
Construisez et publiez l'image du menu fixe (<
région
> sera probablement
ng
) :
ibmcloud cr build -t registry.<region>.bluemix.net/<namespace>/custom-ml-engine:1 . -
Déployez l'application et exposer le port :
Sélectionnezkubectl run custom-ml-engine-deployment --image=registry.<region>.bluemix.net/<namespace>/custom-ml-engine:1 kubectl create -f service.yaml
-
Obtenir l'adresse IP publique du nœud de travail et du NodePort exposé :
Sélectionnezkubectl describe service custom-ml-engine-service ibmcloud ks workers <cluster_name_or_ID>
- L'application sera disponible avec l'URL suivante : http://<IP_address>:<NodePort>
III-F-2. Étape 4b : exécuter le serveur d'applications localement▲
Remarque : l'exécution locale nécessite Python 3.5 ou 3.6 (les versions ultérieures ne fonctionneront pas avec Tensorflow). Si vous exécutez le serveur localement, il peut ne pas avoir d'adresse IP adressable publiquement si vous êtes derrière un pare-feu ou un routeur local. Par conséquent, vous devrez également exécuter le bloc-notes Jupyter localement.
- Il est recommandé d’utiliser un Python virtualenv :
python -m venv mytestenv # Python 3.X .
Maintenant, chargez l’environnement virtuel en utilisant l’une des commandes ci-dessous selon votre système d’exploitation :
source mytestenv/bin/activate # Mac or Linux
./
mytestenv/
Scripts/
activate # Windows PowerShell
- Lancez
pip install -r requirements.txt
python run_server.py
Le serveur d'applications sera disponible à l'adresse http://127.0.0.1:5000 .
III-G. Exécuter le bloc-notes dans IBM Watson Studio▲
- Suivez les instructions pour ACTION: Get data_mart_id (GUID) and apikey en utilisant IBM Cloud CLI.
- Obtenez un IAM apikey :
ibmcloud login --sso
ibmcloud iam api-key-create 'my_key'
- Obtenez un GUID OpenScale instance :
ibmcloud resource service-instance <Watson_OpenScale_instance_name>.
- Entrez le GUID en tant qu’ instance_guid et l’API Key iam en tant que apikey dans la cellule suivante pour WATSON_OS_CREDENTIALS.
- Dans la cellule après ACTION: Add your PostgreSQL credentials here, entrez les informations d'identification depuis Databases for PostgreSQL DB que vous avez créées précédemment.
- Déplacez votre curseur sur chaque cellule de code et lancez le code. Lisez les commentaires de chaque cellule pour comprendre ce que fait le code. Important : lorsque le code d’une cellule est toujours en cours d’exécution, l’étiquette située à gauche devient In [*] : ne passez pas jusqu'à la cellule suivante tant que le l’exécution du code précédent n'est pas terminée.
III-H. Échantillon d’output▲
OBTENEZ les déploiements du serveur d'applications :
Output
{"count":3,"resources":[{"entity":{"asset":{"guid":"resnet50","name":"resnet50"},"asset_properties":{"input_data_type":"unstructured_image","problem_type":"multiclass"},"description":"Keras ResNet50 model deployment for image classification","name":"ResNet50 AIOS compliant deployment","scoring_url":"http://169.60.16.73:31520/v1/deployments/resnet50/online"},"metadata":{"created_at":"2016-12-01T10:11:12Z","guid":"resnet50","modified_at":"2016-12-02T12:00:22Z"}},{"entity":{"asset":{"guid":"resnet50","name":"resnet50"},"asset_properties":{"input_data_type":"unstructured_image","problem_type":"multiclass"},"description":"Keras ResNet50 model deployment for image classification","name":"ResNet50 AIOS non compliant deployment","scoring_url":"http://169.60.16.73:31520/v1/deployments/resnet50_non_compliant/online"},"metadata":{"created_at":"2016-12-01T10:11:12Z","guid":"resnet50_non_compliant","modified_at":"2016-12-02T12:00:22Z"}},{"entity":{"asset":{"guid":"action","name":"area and action prediction"},"asset_properties":{"input_data_type":"structured","problem_type":"multiclass"},"description":"area and action spark models deployment","name":"action deployment","scoring_url":"http://169.60.16.73:31520/v1/deployments/action/online"},"metadata":{"created_at":"2016-12-01T10:11:12Z","guid":"action","modified_at":"2016-12-02T12:00:22Z"}}]}
Exécutez le script test_api.py en suivant les instructions test/README.md .
Output:
$
python test_api.py
{ 'Results:'
: [ { 'prediction'
: 'beagle'
, 'probability'
: '0.98777544'
},
{ 'prediction'
: 'pot'
, 'probability'
: '0.0020967727'
},
{ 'prediction'
: 'Cardigan'
, 'probability'
: '0.0013517012'
},
{ 'prediction'
: 'Walker_hound'
,
'probability'
: '0.0012711119'
},
{ 'prediction'
: 'Brittany_spaniel'
,
'probability'
: '0.0010085113'
}]}
Lancez le notebook
Voir example output
IV. Licence du modèle de code▲
Ce modèle de code est sous la licence Apache, version 2. Les objets de code tiers distincts invoqués dans ce modèle de code sont concédés sous licence par leurs fournisseurs respectifs en vertu de leurs propres licences distinctes. Les contributions sont soumises au certificat d'origine du développeur, version 1.1 et à la licence Apache, version 2 .
Remerciements Developpez.com▲
Developpez.com remercie IBM pour l’autorisation de publication de ce tutoriel. Les remerciements également à Guillaume SIGUI pour la mise au gabarit et Malick pour la relecture orthographique.