私募

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz

期货量化交易软件在 ONNX 模型中使用 float16 和 float8 格式

[复制链接]
发表于 2024-4-17 08:32:35 | 显示全部楼层 |阅读模式
1. ONNX模型中使用的新数据类型为了加快计算速度,一些模型使用精度较低的数据类型,如Float16甚至Float8。添加了对这些新数据类型的支持,以便与MQL5语言中的ONNX模型一起使用,从而允许操作8位和16位浮点表示。脚本输出ENUM_ONNX_DATA_TYPE枚举的完整元素列表。//+------------------------------------------------------------------+//|                                              ONNX_Data_Types.mq5 |//|                                  Copyright 2024, MetaQuotes Ltd. |//|                                             https://www.mql5.com |//+------------------------------------------------------------------+#property copyright "Copyright 2024, MetaQuotes Ltd."#property link      "https://www.mql5.com"#property version   "1.00"//+------------------------------------------------------------------+//| Script program start function                                    |//+------------------------------------------------------------------+void OnStart()  {//---   for(int i=0; i<21; i++)      PrintFormat("%2d %s",i,EnumToString(ENUM_ONNX_DATA_TYPE(i)));  }输出: 0: ONNX_DATA_TYPE_UNDEFINED 1: ONNX_DATA_TYPE_FLOAT 2: ONNX_DATA_TYPE_UINT8 3: ONNX_DATA_TYPE_INT8 4: ONNX_DATA_TYPE_UINT16 5: ONNX_DATA_TYPE_INT16 6: ONNX_DATA_TYPE_INT32 7: ONNX_DATA_TYPE_INT64 8: ONNX_DATA_TYPE_STRING 9: ONNX_DATA_TYPE_BOOL10: ONNX_DATA_TYPE_FLOAT1611: ONNX_DATA_TYPE_DOUBLE12: ONNX_DATA_TYPE_UINT3213: ONNX_DATA_TYPE_UINT6414: ONNX_DATA_TYPE_COMPLEX6415: ONNX_DATA_TYPE_COMPLEX12816: ONNX_DATA_TYPE_BFLOAT1617: ONNX_DATA_TYPE_FLOAT8E4M3FN18: ONNX_DATA_TYPE_FLOAT8E4M3FNUZ19: ONNX_DATA_TYPE_FLOAT8E5M220: ONNX_DATA_TYPE_FLOAT8E5M2FNUZ因此,现在可以执行使用此类数据的ONNX模型。此外,在MQL5中,还添加了用于数据转换的附加函数:bool ArrayToFP16(ushort &dst_array[],const float &src_array[],ENUM_FLOAT16_FORMAT fmt);bool ArrayToFP16(ushort &dst_array[],const double &src_array[],ENUM_FLOAT16_FORMAT fmt);bool ArrayToFP8(uchar &dst_array[],const float &src_array[],ENUM_FLOAT8_FORMAT fmt);bool ArrayToFP8(uchar &dst_array[],const double &src_array[],ENUM_FLOAT8_FORMAT fmt);bool ArrayFromFP16(float &dst_array[],const ushort &src_array[],ENUM_FLOAT16_FORMAT fmt);bool ArrayFromFP16(double &dst_array[],const ushort &src_array[],ENUM_FLOAT16_FORMAT fmt);bool ArrayFromFP8(float &dst_array[],const uchar &src_array[],ENUM_FLOAT8_FORMAT fmt);bool ArrayFromFP8(double &dst_array[],const uchar &src_array[],ENUM_FLOAT8_FORMAT fmt);由于16位和8位的浮点格式可能不同,转换函数中的“fmt”参数必须指定需要处理的数字格式。对于16位版本,将使用新的ENUM_FLOAT16_FORMAT枚举,该枚举当前具有以下值:* |0 o' m4 [9 Y! g" l: Y
FLOAT_FP16 - 标准的16位格式,也称为半浮点。( e$ b; A3 s( n- ]( b
FLOAT_BFP16 - 特殊的脑浮点浮点格式。8 h2 g  u) t/ V; {, {2 T
对于8位版本,将使用新的ENUM_FLOAT8_FORMAT枚举,该枚举当前具有以下值:
8 }4 @. T$ b7 J& ]; t. n8 L( Z2 eFLOAT_FP8_E4M3FN—8位浮点数、4位指数和3位尾数。通常用作系数。
7 ^3 k6 W! X4 {; ^FLOAT_FP8_E4M3FNUZ—8位浮点数、4位指数和3位尾数。支持NaN,不支持负零和Inf。通常用作系数。' R9 j) b9 Z+ {1 j6 a3 k
FLOAT_FP8_E5M2FN — 8位浮点数、5位指数和2位尾数。支持NaN和Inf。通常用于梯度。
' k. Y( l! A. B4 N; R$ s# w/ EFLOAT_FP8_E5M2FNUZ — 8位浮点数、5位指数和2位尾数。支持NaN和Inf,不支持负零。也用于梯度。5 i% h) Q( x( x  v& X3 J
1.1. FP16格式FLOAT16和BFLOAT16格式是用于表示浮点数的数据类型。FLOAT16,也称为“半精度浮点”格式,使用16位表示浮点数。这种格式提供了精度和计算效率之间的平衡。FLOAT16广泛用于深度学习和神经网络,在处理大量数据时需要高性能。这种格式允许通过减少数字的大小来加速计算,这在图形处理单元(GPU)上训练深度神经网络时尤为重要。BFLOAT16(或 脑浮点16)也使用16位,但它与FLOAT16的不同之处在于表示数字的方式。在这种格式中,8个比特被分配用于表示指数,其余7个比特用于表示尾数。这种格式是为用于深度学习和人工智能而开发的,尤其是在谷歌张量处理单元(Tensor Processing Unit,TPU)处理器中。BFLOAT16在训练神经网络时提供了良好的性能,并且可以有效地用于加速计算这两种格式都有其优点和局限性。FLOAT16提供了更高的精度,但需要更多的资源用于存储和计算。另一方面,BFLOAT16在处理数据时提供了更高的性能和效率,但可能不那么精确。: q3 y5 H! r5 S; v+ x' o

  a/ y3 o0 k( z% c* D8 Q$ t" B 期货量化交易软件在 ONNX 模型中使用 float16 和 float8 格式-1.jpg 添加图片注释,不超过 140 字(可选)图 1. 浮点数字FLOAT16和BFLOAT16的位表示格式
( b) t3 h) u0 [( Z  G/ s% \: Z$ |% z! x; U5 G% ~
期货量化交易软件在 ONNX 模型中使用 float16 和 float8 格式-2.jpg 添加图片注释,不超过 140 字(可选)1 {+ r. a- ^9 P; T0 g/ s
表 1. FLOAT16格式的浮点数字7 q& z2 P( w( F8 C8 o9 ?
1.1.1. FLOAT16 ONNX Cast 运算符的执行测试作为示例,让赫兹量化交易软件考虑将FLOAT16类型的数据转换为float和double类型的任务。带有Cast操作的ONNX模型:
! e9 A2 u+ i$ P5 V1 h. B1 d 期货量化交易软件在 ONNX 模型中使用 float16 和 float8 格式-3.jpg 添加图片注释,不超过 140 字(可选)
2 H; d# C9 t: E9 t- u- J% y图 2. 模型 test_cast_FLOAT16_to_DUBLE.onnx 的输入和输出参数
: H7 s% ]7 \2 T3 y8 ^) ]0 M) w& [6 ?  Q7 r3 V# S
期货量化交易软件在 ONNX 模型中使用 float16 和 float8 格式-4.jpg 添加图片注释,不超过 140 字(可选): ?9 S: x7 E- o, d$ L3 Q% j9 [
图 3. 模型 test_cast_FLOAT16_to_FLOAT.onx 的输入和输出参数' h3 w; w/ \) ?) H  q1 n! w
从ONNX模型的属性描述中可以看出,输入需要ONNX_data_type_FLOAT16类型的数据,并且模型将返回ONNX_data_type_FLOAT格式的输出数据。要转换这些值,赫兹量化交易软件将使用带有FLOAT_FP16参数的函数ArrayToFP16()和ArrayFromFP16()。
http://www.simu001.cn/x288453x1x1.html
最好的私募社区 | 第一私募论坛 | http://www.simu001.cn

精彩推荐

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|Archiver| ( 桂ICP备12001440号-3 )|网站地图

GMT+8, 2025-7-13 01:20 , Processed in 0.408276 second(s), 34 queries .

Powered by www.simu001.cn X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表