- ONNX 지원
- 포맷 변환
- 자동 데이터 유형 변환
- 모델 생성
- 모델 실행
- 전략 테스터에서 실행
- OnnxCreate
- OnnxCreateFromBuffer
- OnnxRelease
- OnnxRun
- OnnxGetInputCount
- OnnxGetOutputCount
- OnnxGetInputName
- OnnxGetOutputName
- OnnxGetInputTypeInfo
- OnnxGetOutputTypeInfo
- OnnxSetInputShape
- OnnxSetOutputShape
- 데이터 구조
데이터 구조
다음 데이터 구조는 ONNX 모델 작업에 사용됩니다:
OnnxTypeInfo #
구조는 ONNX 모델의 input또는output parameter의 유형을 설명합니다.
struct OnnxTypeInfo
|
텐서(ONNX_TYPE_TENSOR)만 input으로 사용할 수 있습니다. 이 경우 OnnxTypeInfo::tensor 필드만 값들로 채워지고 다른 필드(map 및 sequence)는 정의되지 않습니다.
세 가지 OnnxTypeInfo 유형(ONNX_TYPE_TENSOR, ONNX_TYPE_MAP 또는 ONNX_TYPE_SEQUENCE) 중 하나만 input으로 사용할 수 있습니다. 해당 하위 구조(OnnxTypeInfo::tensor, OnnxTypeInfo::map 또는 OnnxTypeInfo::sequence)는 유형에 따라 채워집니다.
구조는 다음의 텐서를 설명합니다. ONNX 모델의 input또는output parameter
struct OnnxTensorTypeInfo
|
OnnxMapTypeInfo #
구조는 ONNX 모델의 출력 매개변수에서 얻은 지도를 설명합니다.
struct OnnxMapTypeInfo
|
OnnxSequenceTypeInfo #
구조는 ONNX 모델의 출력 매개변수에서 얻은 시퀀스를 설명합니다.
struct OnnxSequenceTypeInfo
|
ENUM_ONNX_TYPE #
ENUM_ONNX_TYPE 열거형은 모델 매개변수의 유형에 대해 설명합니다.
ID |
설명 |
---|---|
ONNX_TYPE_UNKNOWN |
Unknown |
ONNX_TYPE_TENSOR |
Tensor |
ONNX_TYPE_SEQUENCE |
Sequence |
ONNX_TYPE_MAP |
Map |
ONNX_TYPE_OPAQUE |
Abstract (opaque) |
ONNX_TYPE_SPARSETENSOR |
Sparse tensor |
ENUM_ONNX_DATA_TYPE #
ENUM_ONNX_DATA_TYPE 열거형은 사용된 데이터 유형에 대해 설명합니다.
ID |
설명 |
---|---|
ONNX_DATA_TYPE_UNDEFINED |
Undefined |
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 complex number |
ONNX_DATA_TYPE_COMPLEX128 |
128-bit complex number |
ONNX_DATA_TYPE_BFLOAT16 |
16-bit bfloat (Brain Floating Point) |
ENUM_ONNX_FLAGS #
ENUM_ONNX_FLAGS 열거는 모델 실행 모드에 대해 설명합니다.
ID |
설명 |
---|---|
ONNX_DEBUG_LOGS |
디버그 로그 출력 |
ONNX_NO_CONVERSION |
자동 변환을 비활성화하고 사용자 데이터를 그대로 사용 |
ONNX_COMMON_FOLDER |
Common\Files 폴더에서 모델 파일을 로드합니다; 값은FILE_COMMON flag와 같습니다. |
ONNX 모델 작업할 때 배열 변환
머신 러닝 작업에 항상 더 높은 계산 정확도가 필요한 것은 아닙니다. 계산 속도를 높이기 위해 일부 모델은 Float16 및 심지어 Float8과 같은 정밀도가 낮은 데이터 유형을 사용하기도 합니다. 사용자가 관련 데이터를 모델에 입력할 수 있도록 MQL5는 표준 MQL5 유형을 특수 FP16 및 FP8 유형으로 변환하는 네 가지 특수 함수를 제공합니다.
함수 |
액션 |
---|---|
float 또는 double 유형의 배열을 주어진 형식의 ushort 유형의 배열에 복사합니다 |
|
float 또는 double 유형의 배열을 지정된 형식의 uchar 유형의 배열에 복사합니다 |
|
ushort 유형의 배열을 주어진 형식의 float 또는 double 유형의 배열로 복사합니다 |
|
uchar 유형의 배열을 지정된 형식의 float 또는 double 유형의 배열로 복사합니다 |
이러한 배열 변환 함수는 아래 열거에 지정된 특수 형식을 사용합니다.
ENUM_FLOAT16_FORMAT #
ENUM_FLOAT16_FORMAT 열거형은 두 가지 FP16 유형 형식을 설명합니다.
ID |
설명 |
---|---|
FLOAT_FP16 |
표준 16비트 형식, half라고도 함 |
FLOAT_BFP16 |
특수 브레인 부동 소수점 형식 |
이러한 각 형식에는 장점과 제한 사항이 있습니다. FLOAT16은 더 높은 정확도를 제공하지만 더 많은 저장 공간과 계산 리소스가 필요합니다. 반면 BFLOAT16은 데이터 처리에 더 높은 성능과 효율성을 제공하지만 정확도가 떨어질 수 있습니다.
ENUM_FLOAT8_FORMAT #
ENUM_FLOAT8_FORMAT 열거형은 네 가지 FP8 유형 형식을 설명합니다.
FP8(8비트 부동 소수점)은 부동 소수점 자리를 나타내는 데 사용되는 데이터 유형 중 하나입니다. FP8에서 각 숫자는 8개의 데이터 비트로 표시되며 일반적으로 부호, 지수 및 가수의 세 가지 구성 요소로 나뉩니다. 이 형식은 정확성과 저장 효율성 사이의 균형을 제공하므로 메모리 용량과 계산 효율성이 필요한 애플리케이션에 적합합니다.
ID |
설명 |
---|---|
FLOAT_FP8_E4M3FN |
8비트 부동 소수점 자리 숫자, 지수용 4비트, 가수용 3비트. 일반적으로 계수로 사용됩니다. |
FLOAT_FP8_E4M3FNUZ |
8비트 부동 소수점 자리 숫자, 지수용 4비트, 가수용 3비트. NaN을 지원하고 음의 0과 Inf를 지원하지 않습니다. 일반적으로 계수로 사용됩니다. |
FLOAT_FP8_E5M2FN |
8비트 부동 소수점 숫자, 지수용 5비트, 가수용 2비트. NaN과 Inf 지원. 일반적으로 기울기에 사용 |
FLOAT_FP8_E5M2FNUZ |
8비트 부동 소수점 숫자, 지수용 5비트, 가수용 2비트. NaN을 지원하고 음의 0과 Inf를 지원하지 않습니다. 기울기에도 사용. |
FP8의 주요 장점 중 하나는 대규모 데이터 세트 처리의 효율성입니다. FP8은 간결한 숫자 표현을 사용하여 메모리의 양을 줄이고 계산을 가속화합니다. 이는 대규모 데이터 세트를 자주 처리하는 기계 학습 및 인공 지능 애플리케이션에서 특히 중요합니다.