- ONNX Unterstützung
- Format-Konvertierung
- Automatische Konvertierung von Datentypen
- Erstellen eines Modells
- Ausführung eines Modells
- Ausführen im Strategy Tester
- OnnxCreate
- OnnxCreateFromBuffer
- OnnxRelease
- OnnxRun
- OnnxGetInputCount
- OnnxGetOutputCount
- OnnxGetInputName
- OnnxGetOutputName
- OnnxGetInputTypeInfo
- OnnxGetOutputTypeInfo
- OnnxSetInputShape
- OnnxSetOutputShape
- Datenstrukturen
Datenstrukturen
Die folgenden Datenstrukturen werden für die Operationen der ONNX-Modelle verwendet:
OnnxTypeInfo #
Die Struktur beschreibt den Typ eines Eingangs-oder Ausgangsparameter eines ONNX-Modells
struct OnnxTypeInfo
|
Es kann nur ein Tensor (ONNX_TYPE_TENSOR) als Eingang verwendet werden. In diesem Fall wird nur das Feld OnnxTypeInfo::tensor mit Werten gefüllt, während die anderen Felder (Map und Sequenz) nicht definiert sind.
Es kann nur einer der drei OnnxTypeInfo-Typen (ONNX_TYPE_TENSOR, ONNX_TYPE_MAP oder ONNX_TYPE_SEQUENCE) als Eingang verwendet werden. Je nach Typ wird die entsprechende untergeordnete Struktur (OnnxTypeInfo::tensor, OnnxTypeInfo::map oder OnnxTypeInfo::sequence) gefüllt.
Die Struktur beschreibt tensor durch die Eingangs-oder Ausgangsparameter eines ONNX-Modells
struct OnnxTensorTypeInfo
|
OnnxMapTypeInfo #
Die Struktur beschreibt die im Ausgangsparameter eines ONNX-Modells erhaltene Map
struct OnnxMapTypeInfo
|
OnnxSequenceTypeInfo #
Die Struktur beschreibt die im Ausgangsparameter eines ONNX-Modells erhaltene Sequenz
struct OnnxSequenceTypeInfo
|
ENUM_ONNX_TYPE #
Die Enumeration ENUM_ONNX_TYPE beschreibt den Typ eines Modellparameters
ID |
Beschreibung |
|---|---|
ONNX_TYPE_UNKNOWN |
Unbekannt |
ONNX_TYPE_TENSOR |
Tensor |
ONNX_TYPE_SEQUENCE |
Sequence |
ONNX_TYPE_MAP |
Map |
ONNX_TYPE_OPAQUE |
Abstrakt (opaque) |
ONNX_TYPE_SPARSETENSOR |
Sparse tensor |
ENUM_ONNX_DATA_TYPE #
Die Enumeration ENUM_ONNX_DATA_TYPE beschreibt den Typ der verwendeten Daten
ID |
Beschreibung |
|---|---|
ONNX_DATA_TYPE_UNDEFINED |
Undefiniert |
ONNX_DATA_TYPE_FLOAT |
float |
ONNX_DATA_TYPE_INT8 |
8-bit int |
ONNX_DATA_TYPE_UINT16 |
16-bit uint |
ONNX_DATA_TYPE_INT16 |
16-bit int |
ONNX_DATA_TYPE_INT32 |
32-bit int |
ONNX_DATA_TYPE_INT64 |
64-bit int |
ONNX_DATA_TYPE_STRING |
string |
ONNX_DATA_TYPE_BOOL |
Bool |
ONNX_DATA_TYPE_FLOAT16 |
16-bit float |
ONNX_DATA_TYPE_DOUBLE |
double |
ONNX_DATA_TYPE_UINT32 |
32-bit uint |
ONNX_DATA_TYPE_UINT64 |
64-bit uint |
ONNX_DATA_TYPE_COMPLEX64 |
64-bit komplexe Zahl |
ONNX_DATA_TYPE_COMPLEX128 |
128-bit komplexe Zahl |
ONNX_DATA_TYPE_BFLOAT16 |
16-bit bfloat (Brain Floating Point) |
ENUM_ONNX_FLAGS #
Die Enumeration ENUM_ONNX_FLAGS beschreibt den Ausführungsmodus des Modells
ID |
Beschreibung |
|---|---|
ONNX_LOGLEVEL_VERBOSE |
Alle Meldungen protokollieren |
ONNX_LOGLEVEL_INFO |
Protokolliert Info-Meldungen, Warnungen und Fehler (dieses Flag ersetzt ONNX_DEBUG_LOGS) |
ONNX_LOGLEVEL_WARNING |
Protokolliert Warnungen und Fehler (Standard) |
ONNX_LOGLEVEL_ERROR |
Protokolliert nur die Fehler. |
ONNX_NO_CONVERSION |
Automatische Konvertierung deaktivieren, Nutzerdaten so verwenden, wie sie sind |
ONNX_COMMON_FOLDER |
Laden der Modelldatei aus dem Ordner „Common\Files“; der Wert entspricht dem Flag FILE_COMMON. |
ONNX_USE_CPU_ONLY |
Das ONNX-Modell nur mit der CPU ausführen |
ONNX_GPU_DEVICE_0 |
CUDA-Gerät mit Index 0 (Standard) |
ONNX_GPU_DEVICE_1 |
CUDA-Gerät mit Index 1 * |
ONNX_GPU_DEVICE_2 |
CUDA-Gerät mit Index 2 * |
ONNX_GPU_DEVICE_3 |
CUDA-Gerät mit Index 3 * |
ONNX_GPU_DEVICE_4 |
CUDA-Gerät mit Index 4 * |
ONNX_GPU_DEVICE_5 |
CUDA-Gerät mit Index 5 * |
ONNX_GPU_DEVICE_6 |
CUDA-Gerät mit Index 6 * |
ONNX_GPU_DEVICE_7 |
CUDA-Gerät mit Index 7 * |
ONNX_ENABLE_PROFILING |
Das Profiling des ONNX-Modells aktivieren |
* Die Flags vom Typ ONNX_GPU_DEVICE_N, die auf Systemen mit zwei oder mehr CUDA-fähigen GPUs verwendet werden sollten. Wenn mehrere GPU-Auswahl-Flags angegeben sind, wird das Gerät mit dem niedrigsten Index verwendet.
Wenn ein nicht vorhandener Geräteindex angegeben ist, wird die GPU automatisch ausgewählt.
ONNX-Profilierung
Das Flag ONNX_ENABLE_PROFILING aktiviert das Profiling der ONNX-Modellausführung. Wenn dieses Flag gesetzt ist, wird eine Profilberichtsdatei mit dem Namen <module_name>_date_time.json> im folgenden Verzeichnis erstellt: <data_folder>/MQL5/Files/OnnxProfileReports>.
Hier ist <module_name> der Name der EX5-Datei des MQL-Programms.
Die Datei enthält einen detaillierten Profiling-Bericht zur Ausführung des ONNX-Modells im JSON-Format, einschließlich:
- Lade- und Initialisierungszeit der Sitzung;
- Ausführungszeit einzelner graphischer Knoten (Conv, Relu, MaxPool, Gemm usw.);
- verwendeter Ausführungsanbieter (z. B. CUDAExecutionProvider);
- Informationen zur Größe des Eingabe- und Ausgabetensors;
- Statistiken zur Thread-Planung.
Ein Beispiel für Daten aus einem Profiling-Bericht:
{"cat" : "Session","pid" :34368,"tid" :39520,"dur" :698,"ts" :11,"ph" : "X","name" :"model_loading_array","args" : {}},
|
Additional information about ONNX profiling: https://onnxruntime.ai/docs/performance/tune-performance/profiling-tools.html
Konvertierung von Arrays bei der Arbeit mit ONNX-Modellen
Aufgaben des maschinellen Lernens erfordern nicht immer eine höhere Rechengenauigkeit. Um die Berechnungen zu beschleunigen, verwenden einige Modelle Datentypen mit geringerer Genauigkeit wie Float16 und sogar Float8. Damit Nutzer die entsprechenden Daten in Modelle eingeben können, bietet MQL5 vier spezielle Funktionen, die die Standardtypen in MQL5 in die speziellen FP16- und FP8-Typen umwandeln.
Funktion |
Aktion |
|---|---|
Kopiert ein Array vom Typ float oder double in ein Array vom Typ ushort mit dem angegebenen Format |
|
Kopiert ein Array vom Typ float oder double in ein Array vom Typ uchar mit dem angegebenen Format |
|
Kopiert ein Array vom Typ ushort in ein Array vom Typ float oder double mit dem angegebenen Format |
|
Kopiert ein Array vom Typ uchar in ein Array vom Typ float oder double mit dem angegebenen Format |
Diese Array-Konvertierungsfunktionen verwenden spezielle Formate, die in den folgenden Enumerationen angegeben sind.
ENUM_FLOAT16_FORMAT #
Die Enumeration ENUM_FLOAT16_FORMAT beschreibt zwei FP16-Typenformate.
ID |
Beschreibung |
|---|---|
FLOAT_FP16 |
Standard 16-Bit-Format, auch bekannt als half (halb) |
FLOAT_BFP16 |
Das spezielle Format brain float point |
Jedes dieser Formate hat seine Vorteile und Einschränkungen. FLOAT16 bietet eine höhere Genauigkeit, erfordert aber mehr Speicher- und Rechenressourcen. BFLOAT16 hingegen bietet eine höhere Leistung und Effizienz bei der Datenverarbeitung, kann aber weniger genau sein.
ENUM_FLOAT8_FORMAT #
Die Enumeration ENUM_FLOAT8_FORMAT beschreibt vier FP8-Typenformate.
FP8 (8-Bit-floating point) ist einer der Datentypen, die zur Darstellung von Gleitkommazahlen verwendet werden. In FP8 wird jede Zahl durch 8 Datenbits dargestellt, die typischerweise in drei Komponenten unterteilt sind: Vorzeichen, Exponent und Mantisse. Dieses Format bietet ein Gleichgewicht zwischen Genauigkeit und Speichereffizienz und ist daher attraktiv für Anwendungen, die Speicher und Recheneffizienz erfordern.
ID |
Beschreibung |
|---|---|
FLOAT_FP8_E4M3FN |
8-Bit-Gleitkommazahl, 4 Bits für den Exponenten und 3 Bits für die Mantisse. Wird in der Regel als Koeffizient verwendet. |
FLOAT_FP8_E4M3FNUZ |
8-Bit-Gleitkommazahl, 4 Bits für den Exponenten und 3 Bits für die Mantisse. Unterstützt NaN, nicht unterstützt werden Negativ-Nullen und Inf. Wird in der Regel als Koeffizient verwendet. |
FLOAT_FP8_E5M2FN |
8-Bit-Gleitkommazahl, 5 Bits für den Exponenten und 2 Bits für die Mantisse. Unterstützt NaN und Inf. Wird in der Regel für Gradienten verwendet. |
FLOAT_FP8_E5M2FNUZ |
8-Bit-Gleitkommazahl, 5 Bits für den Exponenten und 2 Bits für die Mantisse. Unterstützt NaN, nicht unterstützt werden Negativ-Nullen und Inf. Wird auch für Gradienten verwendet. |
Einer der Hauptvorteile von FP8 ist seine Effizienz bei der Verarbeitung großer Datenmengen. Durch die Verwendung einer kompakten Zahlendarstellung reduziert FP8 den Speicherbedarf und beschleunigt die Berechnungen. Durch die Verwendung einer kompakten Zahlendarstellung reduziert FP8 den Speicherbedarf und beschleunigt Berechnungen.