- Поддержка ONNX
- Преобразование форматов
- Автоконвертация данных
- Cоздание модели
- Запуск модели
- Проверка в тестере
- OnnxCreate
- OnnxCreateFromBuffer
- OnnxRelease
- OnnxRun
- OnnxGetInputCount
- OnnxGetOutputCount
- OnnxGetInputName
- OnnxGetOutputName
- OnnxGetInputTypeInfo
- OnnxGetOutputTypeInfo
- OnnxSetInputShape
- OnnxSetOutputShape
- Структуры данных
Структуры данных
Для работы с моделями ONNX используются следующие структуры данных:
OnnxTypeInfo #
Структура описывает тип входного или выходного параметра модели ONNX
struct OnnxTypeInfo
|
В качестве входного параметра может использоваться только тензор (ONNX_TYPE_TENSOR), в этом случае заполняется значениями только поле OnnxTypeInfo::tensor, остальные поля (map и sequence) не определены.
В качестве выходного параметра может использоваться только один из трех типов OnnxTypeInfo (ONNX_TYPE_TENSOR, ONNX_TYPE_MAP или ONNX_TYPE_SEQUENCE), в зависимости от типа заполняется соответствующая подструктура (OnnxTypeInfo::tensor, OnnxTypeInfo::map или OnnxTypeInfo::sequence).
Структура описывает тензор во входном или выходном параметре модели ONNX
struct OnnxTensorTypeInfo
|
OnnxMapTypeInfo #
Структура описывает map, который получается в выходном параметре модели ONNX
struct OnnxMapTypeInfo
|
OnnxSequenceTypeInfo #
Структура описывает последовательность, которая получается в выходном параметре модели ONNX
struct OnnxSequenceTypeInfo
|
ENUM_ONNX_TYPE #
Перечисление ENUM_ONNX_TYPE описывает тип параметра модели
Идентификатор |
Описание |
---|---|
ONNX_TYPE_UNKNOWN |
Неизвестен |
ONNX_TYPE_TENSOR |
Тензор |
ONNX_TYPE_SEQUENCE |
Последовательность |
ONNX_TYPE_MAP |
Карта |
ONNX_TYPE_OPAQUE |
Абстрактный |
ONNX_TYPE_SPARSETENSOR |
Разреженный тензор |
ENUM_ONNX_DATA_TYPE #
Перечисление ENUM_ONNX_DATA_TYPE описывает тип используемых данных
Идентификатор |
Описание |
---|---|
ONNX_DATA_TYPE_UNDEFINED |
Не определен |
ONNX_DATA_TYPE_FLOAT |
float |
ONNX_DATA_TYPE_INT8 |
8-битный int |
ONNX_DATA_TYPE_UINT16 |
16-битный uint |
ONNX_DATA_TYPE_INT16 |
16-битный int |
ONNX_DATA_TYPE_INT32 |
32-битный int |
ONNX_DATA_TYPE_INT64 |
64-битный int |
ONNX_DATA_TYPE_STRING |
string |
ONNX_DATA_TYPE_BOOL |
bool |
ONNX_DATA_TYPE_FLOAT16 |
16-битный float |
ONNX_DATA_TYPE_DOUBLE |
double |
ONNX_DATA_TYPE_UINT32 |
32-битный uint |
ONNX_DATA_TYPE_UINT64 |
64-битный uint |
ONNX_DATA_TYPE_COMPLEX64 |
64-битное комплексное число |
ONNX_DATA_TYPE_COMPLEX128 |
128-битное комплексное число |
ONNX_DATA_TYPE_BFLOAT16 |
16-битный bfloat (Brain Floating Point) |
ENUM_ONNX_FLAGS #
Перечисление ENUM_ONNX_FLAGS описывает режим запуска модели
Идентификатор |
Описание |
---|---|
ONNX_DEBUG_LOGS |
Вывод логов отладки |
ONNX_NO_CONVERSION |
Запрет на автоконверсию, использовать данные пользователя как есть |
ONNX_COMMON_FOLDER |
Загрузка файла модели из папки Common\Files, по значению равен флагу FILE_COMMON |
Конвертация массивов при работе с ONNX моделями
В задачах машинного обучения не всегда нужна большая точность вычислений. Для ускорения расчетов некоторые модели используют типы данных с меньшей точностью, такие как Float16 и даже Float8. Чтобы пользователи могли подавать такие данные на вход моделей, в MQL5 добавлены 4 специальные функции, которые преобразует стандартные типы MQL5 в специальные типы FP16 и FP8.
Функция |
Действие |
---|---|
Производит копирование массива типа float или double в массив типа ushort с заданным форматом |
|
Производит копирование массива типа float или double в массив типа uchar с заданным форматом |
|
Производит копирование массива типа ushort в массив типа float или double с заданным форматом |
|
Производит копирование массива типа uchar в массив типа float или double с заданным форматом |
Данные функции для преобразования массивов используют специальные форматы, заданные в перечислениях ниже.
ENUM_FLOAT16_FORMAT #
Перечисление ENUM_FLOAT16_FORMAT описывает 2 формата типа FP16.
Идентификатор |
Описание |
---|---|
FLOAT_FP16 |
Стандартный 16-битный формат, так же известный как half |
FLOAT_BFP16 |
Специальный формат brain float point |
Оба этих формата имеют свои преимущества и ограничения. FLOAT16 обеспечивает более высокую точность, но требует больше ресурсов для хранения и вычислений. BFLOAT16, с другой стороны, обеспечивает более высокую производительность и эффективность при обработке данных, но может быть менее точным.
ENUM_FLOAT8_FORMAT #
Перечисление ENUM_FLOAT8_FORMAT описывает 4 формата типа FP8.
Формат FP8 (8-битное число с плавающей запятой) представляет собой один из типов данных, используемых для представления чисел с плавающей точкой. В FP8 каждое число представлено 8 битами данных, которые обычно разделяются на три компонента: знак, экспоненту и мантиссу. Этот формат обеспечивает компромисс между точностью и эффективностью хранения данных, что делает его привлекательным для использования в приложениях, где требуется экономия памяти и вычислительных ресурсов.
Идентификатор |
Описание |
---|---|
FLOAT_FP8_E4M3FN |
8-битное число с плавающей точкой, 4 бита порядок и 3 бита мантисса. Обычно используется как коэффициенты. |
FLOAT_FP8_E4M3FNUZ |
8-битное число с плавающей точкой, 4 бит порядок и 3 бита мантисса. Поддерживает NaN, не поддерживается отрицательный ноль и Inf. Обычно используется как коэффициенты. |
FLOAT_FP8_E5M2FN |
8-битное число с плавающей точкой, 5 бит порядок и 2 бита мантисса. Поддерживает NaN и Inf. Обычно используется для градиентов. |
FLOAT_FP8_E5M2FNUZ |
8-битное число с плавающей точкой, 5 бит порядок и 2 бита мантисса. Поддерживает NaN и Inf, не поддерживает отрицательный ноль. Также используется для градиентов. |
Одним из ключевых преимуществ FP8 является его эффективность при обработке больших объемов данных. Благодаря компактному представлению чисел, FP8 позволяет уменьшить требования к памяти и ускорить вычисления. Это особенно важно в приложениях машинного обучения и искусственного интеллекта, где обработка больших наборов данных является обычным делом.