Découvrir les API OVH Prescience

Base de connaissances

Découvrir les API OVH Prescience


Icons/System/eye-open Created with Sketch. 43 vues 26.09.2018 Prescience

Objectif

Prescience est un outil d'apprentissage automatique, pilotable via plusieurs API, celles-ci étant accessibles à l'utilisateur pour automatiser de multiples actions.

Ce guide vous présente ces API en détail afin de vous permettre de piloter votre propre plateforme OVH Prescience.

APIURLDescription
Prescience APIhttps://prescience-api.ai.ovh.netAPI permettant de manipuler les « sources »,« datasets » et « modèles » de Prescience.
Prescience Servinghttps://prescience-serving.ai.ovh.netAPI permettant d'évaluer un modèle généré par Prescience.

Authentification

L'utilisation de Prescience nécessite un jeton d'authentification.

Voici un exemple d'appel API :

curl -X GET "https://prescience-api.ai.ovh.net/project" -H "Authorization: Bearer ${TOKEN}"

API OVH Prescience

Sources

L'objet « source » est le résultat d'une tâche de parsing (analyse). Lors de l'appel API, l'objet retourné inclut les éléments suivants :

ChampDescriptionTypeOrdonnableFiltrable
source_idIdentifiant de la sourceStringOuiNon
input_urlURL interne du fichier pré-parsingStringNonNon
source_urlURL interne du fichier post-parsingStringNonNon
input_typeType du fichier sourceStringOuiNon
headersLe fichier pré-parsing contient les headersBooleanOuiNon
separatorSéparateur du fichier pré-parsing si CSVStringNonNon
schemaChaîne de caractères représentant le schéma en JSONStringNonNon
statusStatut de la sourceStatusOuiNon
last_updateDate de la dernière mise à jourTimestampOuiNon
created_atDate de créationTimestampOuiNon
total_stepNombre total d'étapes du processus de parsingIntegerNonNon
current_stepÉtape courante du processus de parsingIntegerNonNon
current_step_descriptionDescription de l'étape courante du processus de parsingStringNonNon
  • Liste des sources :

GET https://prescience-api.ai.ovh.net/source

ParamètresTypeInRequisDéfautSignificationExemple
PageIntegerQueryNon1Numéro de la page2
SizeIntegerQueryNon100Nombre d'éléments par page50
Sort_columnStringQueryNoncreated_atChamp selon lequel les résultats sont ordonnéssource_id
Sort_directionStringQueryNoncreated_atChamp selon lequel les résultats sont ordonnéssource_id
  • Récupération d'une source :

GET https://prescience-api.ai.ovh.net/source/{id_source}

ParamètresTypeInRequisDéfautSignificationExemple
id_sourceStringPathOuiIdentifiant de la sourcema_source
  • Suppression d'une source :

DELETE https://prescience-api.ai.ovh.net/source/{id_source}

ParamètresTypeInRequisDéfautSignificationExemple
id_sourceStringPathOuiIdentifiant de la sourcema_source

Datasets

L'objet « dataset » est le résultat d'une tâche de « preprocessing ». Lors de l'appel API, l'objet retourné contiendra les éléments suivants :

ChampDescriptionTypeOrdonnableFiltrable
dataset_idIdentifiant du datasetStringOuiOui
sourceObjet « source » ayant généré le datasetSourceNonOui
dataset_urlURL interne du fichier résultant du pré-processStringNonNon
transformation_urlURL interne du fichier PMML de transformationStringNonNon
label_idIdentifiant de la colonne « label »StringOuiNon
problem_typeType du problème de machine learning (« Classification »/« Regression »)StringOuiNon
nb_foldNombre de découpages réalisés par le pré-processBooleanOuiNon
selected_columnsListe des colonnes choisies dans la sourceString[]NonNon
schemaChaîne de caractères représentant le schéma en JSONStringNonNon
statusStatut du datasetStatusOuiNon
last_updateDate de la dernière mise à jourTimestampOuiNon
created_atDate de créationTimestampOuiNon
total_stepNombre total d'étapes du processus de preprocessIntegerNonNon
current_stepÉtape courante du processus de preprocessIntegerNonNon
current_step_descriptionDescription de l'étape courante du processus de preprocessStringNonNon
  • Liste des datasets :

GET https://prescience-api.ai.ovh.net/dataset/

ParamètresTypeInRequisDéfautSignificationExemple
PageIntegerQueryNon1Numéro de la page2
SizeIntegerQueryNon100Nombre d'éléments par page50
Sort_columnStringQueryNoncreated_atChamp selon lequel les résultats sont ordonnéssource_id
Sort_directionStringQueryNoncreated_atChamp selon lequel les résultats sont ordonnéssource_id
Dataset_idStringQueryNonChamp de filtrage sur le nom du dataset (recherche en mode LIKE)dataset
Source_idStringQueryNonChamp de filtrage sur le nom de la source du dataset (recherche en mode LIKE)source
  • Récupération d'un dataset :

GET https://prescience-api.ai.ovh.net/dataset/{id_dataset}

ParamètresTypeInRequisDéfautSignificationExemple
id_datasetStringPathOuiIdentifiant du datasetmon_dataset
  • Suppression d'un dataset :

DELETE https://prescience-api.ai.ovh.net/dataset/{id_dataset}

ParamètresTypeInRequisDéfautSignificationExemple
id_datasetStringPathOuiIdentifiant du datasetmon_dataset

Modèles

L'objet « modèle » est le résultat d'une tâche de « train ». Lors de l'appel API, l'objet retourné comportera les éléments suivants :

ChampDescriptionTypeOrdonnableFiltrable
model_idIdentifiant du modèleStringOuiNon
datasetObjet « dataset » ayant généré le modèleDatasetNonOui
label_idIdentifiant de la colonne « label »StringOuiNon
configObjet « config » ayant généré le modèleConfigNonNon
statusStatut du datasetStatusOuiNon
last_updateDate de la dernière mise à jourTimestampOuiNon
created_atDate de créationTimestampOuiNon
total_stepNombre total d'étapes du processus de « train »IntegerNonNon
current_stepÉtape courante du processus de « train »IntegerNonNon
current_step_descriptionDescription de l'étape courante du processus de « train »StringNonNon

L'objet « config » décrit la configuration utilisée pour générer le modèle de machine learning.

ChampDescriptionType
nameNom de l'algorithme utiliséString
class_identifierIdentifiant interneString
kwargsHyperparamètres du modèleDictonnaire
  • Liste des modèles :

GET https://prescience-api.ai.ovh.net/model

ParamètresTypeInRequisDéfautSignificationExemple
PageIntegerQueryNon1Numéro de la page souhaitée2
SizeIntegerQueryNon100Nombre d'éléments souhaités par page50
Sort_columnStringQueryNoncreated_atChamp selon lequel les résultats sont ordonnésmodel_id
Sort_directionStringQueryNoncreated_atChamp selon lequel les résultats sont ordonnésmodel_id
Dataset_idStringQueryNonChamp de filtrage sur le nom du dataset (recherche en mode LIKE)dataset
  • Récupération d'un modèle :

GET https://prescience-api.ai.ovh.net/model/{id_model}

ParamètresTypeInRequisDéfautSignificationExemple
id_modelStringPathOuiIdentifiant du modèlemon_model
  • Suppression d'un modèle :

DELETE https://prescience-api.ai.ovh.net/model/{id_model}

ParamètresTypeInRequisDéfautSignificationExemple
id_modelStringPathOuiIdentifiant du modèlemon_model

Parsing

Pour créer une « source », il faut lancer une tâche de parsing.

POST https://prescience-api.ai.ovh.net/ml/upload/source

ParamètresTypeInRequisDéfautSignificationExemple
parse.source_idStringMultipart parse JSONOuiNom de la sourcema-source
parse.input_typeStringMultipart parse JSONOuiType de fichier CSV ou parquet uniquementCSV
parse.separatorStringMultipart parse JSONNon,Séparateur dans le cas d'un fichier CSV;
filesFilesMultipart input-file-file-index nameNonFichier à uploader (peut en contenir plusieurs)input-file-0

Exemple :

En partant du principe que les fichiers CSV « data-1.csv » et « data-2.csv » sont dans un même répertoire :

  • fichier parse.json
{
    "source_id": "ma-source",
    "input_type": "csv",
    "separator": ","
}
curl -H "Authorization: Bearer ${TOKEN}" -v \
    -F parse='@parse.json;type=application/json' \
    -F input-file-1=@data-1.csv \
    -F input-file-2=@data-2.csv \
    https://prescience-api.ai.ovh.net/ml/upload/source

La source renvoyée dans la réponse est incomplète. En effet, la tâche étant asynchrone, elle sera complétée au fur et à mesure de son avancement.

Preprocess

Pour créer un « dataset », il faut au préalable avoir généré une « source » et avoir ensuite créé une tâche de preprocess.

POST https://prescience-api.ai.ovh.net/ml/preprocess/{source_id}

ParamètresTypeInRequisDéfautSignificationExemple
source_idStringQueryOuiNom de la source à parserma-source
dataset_idStringBody JSONOuiNom du futur datasetmon-gros-dataset
label_idStringBody JSONOuiIdentifiant de la colonne du dataset à labellisermon-label
nb_foldStringBody JSONNon10Nombre de folds à créer pendant le parsing6
problem_typeStringBody JSONOuiType du problème de machine learning (classification/regression)regression
selected_columnsString[]Body JSONNon[]Choix des colonnes pour le dataset. Par défaut, l'ensemble des colonnes sont selectionnées["colonne_1", "colonne_2"]

Exemple :

  • fichier preprocess.json
{
    "dataset_id": "mon-dataset",
    "label_id": "mon-label",
    "problem_type": "classification"
}
curl -H "Authorization: Bearer ${TOKEN}" \
     -H "Content-Type:application/json" \
     -X POST https://prescience-api.ai.ovh.net/ml/preprocess/ma-source \
     --data-binary "@preprocess.json"

Le dataset renvoyé dans la réponse est incomplet. En effet, la tâche étant asynchrone, elle sera complétée au fur et à mesure de son avancement.

Optimisation

Une fois le « dataset » créé, il est possible de commencer à l'optimiser. POST https://prescience-api.ai.ovh.net/ml/optimize/{dataset_id}

ParamètresTypeInRequisDéfautSignificationExemple
dataset_idStringQueryOuiNom du dataset à optimisermon-gros-dataset
scoring_metricStringBody JSONOuiMétrique d'optimisation (Régression : mae/mse / R2, Classification : accuracy, f1, roc_auc)ma-source
budgetIntegerBody JSON6Budget alloué à l'optimisation10

Exemple :

  • fichier optimize.json
{
    "scoring_metric": "roc_auc",
    "budget": 6
}
curl -H "Authorization: Bearer ${TOKEN}" \
     -H "Content-Type:application/json" \
     -X POST https://prescience-api.ai.ovh.net/ml/optimize/mon-gros-dataset \
     --data-binary "@optiumize.json"

La tâche d'optimisation renvoie un objet intitulé « Optimisation ». Une fois l'optimisation terminée, il sera possible de lancer une requête sur les objets « Evaluation-Result » pour obtenir la meilleure configuration possible.

Evaluation Result

L'objet « Evaluation-Result » est le résultat d'une tâche d'optimisation. Lors de l'appel API, l'objet retourné contiendra les éléments suivants :

ChampDescriptionType
uuidUnique uuid de l'évaluationInteger
spent_timeTemps passé à évaluer la configurationInteger
costsDictonnaire contenant les métriques associées à la configurationDict{}
configConfiguration testéeConfig
statusStatut du datasetStatus
last_updateDate de la dernière mise à jourTimestamp
created_atDate de créationTimestamp
total_stepNombre total d'étapes du processus d'optimisationInteger
current_stepÉtape courante du processus d'optimisationInteger
current_step_descriptionDescription de l'étape courante du processus d'optimisationString
  • Liste des évaluations :

GET https://prescience-api.ai.ovh.net/evaluation-result

ParamètresTypeInRequisDéfautSignificationExemple
Dataset_idStringQueryOuiFiltrage des évaluations sur le datasetmon-gros-dataset
PageIntegerQueryNon1Numéro de la page souhaitée2
SizeIntegerQueryNon100Nombre d'éléments souhaités par page50
Sort_columnStringQueryNoncreated_atChamp selon lequel les résultats sont ordonnéssource_id
Sort_directionStringQueryNoncreated_atChamp selon lequel les résultats sont ordonnéssource_id
StatusStringQueryNonFiltre les données selon le statutBUILT

Entraînement

Après avoir choisi la meilleure configuration dans la liste des « Evaluation-Result » nous pouvons entraîner un modèle :

POST https://jedison.ai.ovh.net/ml/train

ParamètresTypeInRequisDéfautSignificationExemple
model_idStringQueryOuiNom du futur modèlemon-model
evaluation_uuidStringQueryOuiIdentifiant de l'« Evaluation-Result »bcaef619-4bf3-4c15-b49f-bc325f98d891
dataset_idStringQueryNondataset_id lié à l'« Evaluation-Result »À renseigner pour entraîner sur un dataset différent de celui de l'« Evaluation-Result »mon-dataset-alternatif

Exemple :

curl -H "Authorization: Bearer ${TOKEN}" \
     -H "Content-Type:application/json" \
     -X POST https://prescience-api.ai.ovh.net/ml/train/?model_id=mon-model&evaluation_uuid=bcaef619-4bf3-4c15-b49f-bc325f98d891 \

La tâche d'entraînement renvoie un objet modèle incomplet. En effet, la tâche étant asynchrone, elle sera complétée au fur et à mesure de son avancement.

OVH Prescience Serving API

Description d'un modèle

Une fois qu'un modèle est entraîné, il est possible de l'utiliser pour réaliser des inférences.

Les deux API ont un objet « modèle » ne possédant pas la même structure. Seul l'identifiant model_id est commun.

  • Description d'un modèle :

POST https://prescience-serving.ai.ovh.net/model/{model_id}

L'objet retourné décrit l'objet « modèle » selon Prescience Serving.

Exemple de résultat :

{
    "id": "model",
    "properties": {
        "created.timestamp": 1537170170985,
        "accessed.timestamp": null,
        "file.size": 3737,
        "file.md5sum": "a13e6e482bb2e62d1376b502f8cbc8a2"
    },
    "schema": {
        "argumentsFields": [{
            "id": "hours-per-week",
            "dataType": "integer",
            "opType": "ordinal"
        }, {
            "id": "capital-gain",
            "dataType": "integer",
            "opType": "ordinal"
        }, {
            "id": "education-num",
            "dataType": "integer",
            "opType": "ordinal"
        }, {
            "id": "age",
            "dataType": "integer",
            "opType": "ordinal"
        }, {
            "id": "fnlwgt",
            "dataType": "integer",
            "opType": "ordinal"
        }, {
            "id": "capital-loss",
            "dataType": "integer",
            "opType": "ordinal"
        }],
        "transformFields": [{
            "id": "imputed_hours-per-week",
            "dataType": "integer",
            "opType": "ordinal"
        }, {
            "id": "imputed_capital-gain",
            "dataType": "integer",
            "opType": "ordinal"
        }, {
            "id": "imputed_education-num",
            "dataType": "integer",
            "opType": "ordinal"
        }, {
            "id": "imputed_age",
            "dataType": "integer",
            "opType": "ordinal"
        }, {
            "id": "imputed_fnlwgt",
            "dataType": "integer",
            "opType": "ordinal"
        }, {
            "id": "imputed_capital-loss",
            "dataType": "integer",
            "opType": "ordinal"
        }, {
            "id": "scaled_imputed_hours-per-week",
            "dataType": "double",
            "opType": "continuous"
        }, {
            "id": "scaled_imputed_capital-gain",
            "dataType": "double",
            "opType": "continuous"
        }, {
            "id": "scaled_imputed_education-num",
            "dataType": "double",
            "opType": "continuous"
        }, {
            "id": "scaled_imputed_age",
            "dataType": "double",
            "opType": "continuous"
        }, {
            "id": "scaled_imputed_fnlwgt",
            "dataType": "double",
            "opType": "continuous"
        }, {
            "id": "scaled_imputed_capital-loss",
            "dataType": "double",
            "opType": "continuous"
        }]
    }
}

Évaluation d'un modèle

Lors de l'étape de preprocessing, une transformation des données est effectuée. Le modèle se basant sur la sortie de cette transformation, il est impératif de transformer la donnée avant d'utiliser le modèle. Prescience Serving fournit des méthodes permettant d'effectuer à la fois cette transformation et l'inférence.

La plateforme de serving permet d'effectuer : - la transformation et l'évaluation ; - l'évaluation uniquement ; - la transformation uniquement.

MéthodeURLDescription
POSThttps://prescience-serving.ai.ovh.net/eval/{model_id}/modelInférence unitaire
POSThttps://prescience-serving.ai.ovh.net/eval/{model_id}/model/batch/csvInférence par lot depuis un fichier CSV
POSThttps://prescience-serving.ai.ovh.net/eval/{model_id}/model/batch/jsonInférence par lot depuis un tableau JSON
POSThttps://prescience-serving.ai.ovh.net/eval/{transform_id}/transformTransformation unitaire
POSThttps://prescience-serving.ai.ovh.net/eval/{transform_id}/transform/batch/csvTransformation par lot depuis un fichier CSV
POSThttps://prescience-serving.ai.ovh.net/eval/{transform_id}/transform/batch/jsonTransformation par lot depuis un tableau JSON
POSThttps://prescience-serving.ai.ovh.net/eval/{transform_model_id}/transform-modelTransformation associée au modèle et inférence unitaire.
POSThttps://prescience-serving.ai.ovh.net/eval/{transform_model_id}/transform-model/batch/csvTransformation associée au modèle et inférence par lot depuis un fichier CSV
POSThttps://prescience-serving.ai.ovh.net/eval/{transform_model_id}/transform-model/batch/jsonTransformation associée au modèle et inférence par lot depuis un tableau JSON
ParamètresTypeInRequisDéfautSignification
idStringJSONNonID de la requête
argumentsDictJSONOuiArguments de la requête
  • Exemple d'une inférence unitaire :

Fichier exemple.json:

{
    "arguments": {
        "hours-per-week": 1,
        "capital-gain": 1,
        "education-num": 1,
        "age": 1,
        "fnlwgt": 1,
        "capital-loss": 1
    }
}

Requête

curl -H "Authorization: Bearer ${TOKEN}" \
     -H "Content-Type:application/json" \
     -X POST https://prescience-serving.ai.ovh.net/eval/mon-model/transform-model \
     --data-binary "@exemple.json"
  • Exemple de l'évaluation d'un batch JSON :

Fichier exemple.json :

[
    {
        "id": "eval-1",
        "arguments": {
            "hours-per-week": 1,
            "capital-gain": 1,
            "education-num": 1,
            "age": 1,
            "fnlwgt": 1,
            "capital-loss": 1
        }
    },
    {
        "id": "eval-2",
        "arguments": {
            "hours-per-week": 1,
            "capital-gain": 1,
            "education-num": 1,
            "age": 1,
            "fnlwgt": 1,
            "capital-loss": 1
        }
    }
]

Requête

curl -H "Authorization: Bearer ${TOKEN}" \
     -H "Content-Type:application/json" \
     -X POST https://prescience-serving.ai.ovh.net/eval/mon-model/transform-model/batch/json \
     --data-binary "@exemple.json"

Aller plus loin

Échangez avec notre communauté d'utilisateurs.

Articles associés