OnnxRun

Exécute un modèle ONNX.

bool  OnnxRun(
   long    onnx_handle,  // handle de session ONNX
   ulong   flags,        // flags décrivant le mode d'exécution
   ...                   // entrées et sorties du modèle
   );

Paramètres

onnx_handle

[in]  Descripteur d'objet de session ONNX créé via OnnxCreate ou OnnxCreateFromBuffer.

flags

[in] Indicateurs de ENUM_ONNX_FLAGS décrivant le mode d'exécution : ONNX_DEBUG_LOGS et ONNX_NO_CONVERSION.

...

[in] [out]  Entrées et sorties du modèle.

Renvoie true en cas de succès ou false sinon. Pour obtenir le code d'erreur, appelez la fonction GetLastError.

ENUM_ONNX_FLAGS

ID

Description

ONNX_LOGLEVEL_VERBOSE

Ecrit tous les messages

ONNX_LOGLEVEL_INFO

Ecrit les messages d'informations, les avertissements et les erreurs (cet indicateur remplace ONNX_DEBUG_LOGS)

ONNX_LOGLEVEL_WARNING

Ecrit les avertissements et les erreurs (valeur par défaut)

ONNX_LOGLEVEL_ERROR

Ecrit les erreurs uniquement

ONNX_NO_CONVERSION

Désactive la conversion automatique, utilise les données utilisateur telles quelles

ONNX_COMMON_FOLDER  

Charge un fichier de modèle à partir du dossier Common\Files - la valeur est égale au flag FILE_COMMON

ONNX_USE_CPU_ONLY

Exécute le modèle ONNX en utilisant uniquement le CPU

ONNX_GPU_DEVICE_0

Périphérique CUDA avec l'index 0 (par défaut)

ONNX_GPU_DEVICE_1

Périphérique CUDA avec l'index 1 *

ONNX_GPU_DEVICE_2

Périphérique CUDA avec l'index 2 *

ONNX_GPU_DEVICE_3

Périphérique CUDA avec l'index 3  *

ONNX_GPU_DEVICE_4

Périphérique CUDA avec l'index 4  *

ONNX_GPU_DEVICE_5

Périphérique CUDA avec l'index 5  *

ONNX_GPU_DEVICE_6

Périphérique CUDA avec l'index 6  *

ONNX_GPU_DEVICE_7

Périphérique CUDA avec l'index 7  *

ONNX_ENABLE_PROFILING

Active le profilage du modèle ONNX

* Les flags sous la forme ONNX_GPU_DEVICE_N doivent être utilisés sur les systèmes dotés de 2 GPU compatibles CUDA ou plus. Si plusieurs flags de sélection GPU sont spécifiés, le périphérique avec l'index le plus bas sera utilisé.

Si un index de périphérique inexistant est spécifié, le GPU sera sélectionné automatiquement.

 

Exemple :

const long                             ExtOutputShape[] = {1,1};    // forme de sortie du modèle
const long                             ExtInputShape [] = {1,10,4}; // forme d'entrée du modèle
#resource "Python/model.onnx" as uchar ExtModel[]                   // modèle en tant que ressource
//+------------------------------------------------------------------+
//| Fonction de démarrage du programme                               |
//+------------------------------------------------------------------+
int OnStart(void)
  {
   matrix rates;
//--- récupère 10 barres
   if(!rates.CopyRates("EURUSD",PERIOD_H1,COPY_RATES_OHLC,2,10))
      return(-1);
//--- saisie d'un ensemble de vecteurs OHLC
   matrix x_norm=rates.Transpose();
   vector m=x_norm.Mean(0);               
   vector s=x_norm.Std(0);
   matrix mm(10,4);
   matrix ms(10,4);
//--- remplissage des matrices de normalisation
   for(int i=0i<10i++)
     {
      mm.Row(m,i);
      ms.Row(s,i);
     }
//--- normalisation des données d'entrée
   x_norm-=mm;
   x_norm/=ms;
//--- crée le modèle
   long handle=OnnxCreateFromBuffer(ExtModel,ONNX_DEBUG_LOGS);
//--- spécifie la forme des données d'entrée
   if(!OnnxSetInputShape(handle,0,ExtInputShape))
     {
      Print("Echec de OnnxSetInputShape, erreur ",GetLastError());
      OnnxRelease(handle);
      return(-1);
     }
//--- spécifie la forme des données de sortie
   if(!OnnxSetOutputShape(handle,0,ExtOutputShape))
     {
      Print("Echec de OnnxSetOutputShape, erreur ",GetLastError());
      OnnxRelease(handle);
      return(-1);
     }
//--- convertit les données d'entrée normalisées en type flottant
   matrixf x_normf;
   x_normf.Assign(x_norm);
//--- récupère les données de sortie du modèle ici, c'est-à-dire la prévision de prix
   vectorf y_norm(1);
//--- exécute le modèle
   if(!OnnxRun(handle,ONNX_DEBUG_LOGS | ONNX_NO_CONVERSION,x_normf,y_norm))
     {
      Print("Echec de OnnxRun, erreur ",GetLastError());
      OnnxRelease(handle);
      return(-1);
     }
//--- affiche la valeur de sortie du modèle dans le journal
   Print(y_norm);
//--- effectue la transformation inverse pour obtenir le prix prédit
   double y_pred=y_norm[0]*s[3]+m[3];
   Print("prix prédit :",y_pred);
//--- opération terminée
   OnnxRelease(handle);
   return(0);
  };

Voir également

OnnxSetInputShape, OnnxSetOutputShape