当前位置:   article > 正文

关于深度学习中的数据结构INT\FLOAT\FP(为使用FP数据类型调用TensorCore的知识储备)_fp int 英文

fp int 英文
  • 首先我们需要知道何为bits和bytes?

    bits:名为位数
    bytes:为字节
    简单的数就是MB和G的关系!那么8bits=1bytes,下面是各个单位的相互转化!
    (引用自https://blog.csdn.net/m0_43432638/article/details/89973862)
    *引用自https://blog.csdn.net/m0_43432638/article/details/89973862

  • INT - 也就是整数,比如INT8就是8bit整数,取值范围是-128~127也就是256(2^8)个数,
    (整数在内存中没什么符号位,区分正负只是为了软件需要)。
    那么为什么后来有INT16 INT32之类的呢?很简单,数值范围不够用了。
    在计算机上,8、16、32、64、128纯粹是因为首先它是二进制,其次数据容易对齐。在编程语言中,不同数据类型并没有强制的使用环境,比如你定义变量是一个8bit数还是32bit数只要够用都可以,只不过数据长度太长占内存。

  • FLOAT、TF FLOAT32

    半精度(16)、单精度(32)、双精度(64)这些概念是在IEEE 754标准里定义的,浮点计数是利用浮动小数点的方式使用不同长度的二进制来表示一个数字,与之对应的是定点数。同样的长度下浮点数能表达的数字范围相比定点数更大,但浮点数并不能精确表达所有实数,而只能采用更加接近的不同精度来表达。单精度的浮点数中采用4个字节也就是32位二进制来表达一个数字,双精度浮点数采用8个字节也就是64bits来表达,当然半精度浮点数也就是采用16bits了。因为采用不同位数的浮点数的表达精度不一样,所以造成的计算误差也不一样,对于需要处理的数字范围大而且需要精确计算的科学计算来说,就要求采用双精度浮点数,而对于常见的多媒体和图形处理计算,32位的单精度浮点计算已经足够了,对于要求精度更低的机器学习等一些应用来说,半精度16位浮点数就可以甚至8位浮点数就已经够用了。
    在有关显卡和深度学习的讨论中使用的FP16\FP32指的审计上就是半、单精度变量(FloatPoint)

在混合精度训练中,权重,激活值和梯度是保存成fp16的形式,为了能够匹配fp32的网络精度,有一个权重的fp32的master copy。
tensorflow支持fp16的存储和tensor计算。包含tf.float16的数据类型的卷积和矩阵运算会自动使用fp16的计算。
为了能够使用tensor的core,fp32的模型需要转换成fp32和fp16的混合,可以手动完成,也可以自动混合精度(AMP)。
Tensorflow中自动混合精度训练 自动混合精度训练的启动很简单,只需要设定一个环境变量 export
tf_enable_auto_mixed_precision=1 当然也可以在tensorflow的python脚本里面去设定
os.environ[‘TF_ENABLE_AUTO_MIXED_PRECISION’]=‘1’ 一旦打开之后,AMP就会帮你做以下两件事情
1.在你的tensorflow的图中插入合适的cast运算,在合适的时机使用float16来计算和存储
2.在训练optimizer里面,打开自动loss scaling

在这里插入图片描述
除却前面一位符号位之外,区别仅在于指数位和数据位的不同,TF32就是具备与FP32相同的指数位(数值范围)以及与FP16相同的数据位(精度)。
但是问题来了,数据位就这么点,前面那个小数位太长就存不下,这就会导致精度不够,而TF32就是典型的为AI优化的数据类型,只不过19bit数据对齐不方便,所以就只能用32bit的寄存器了。
以游戏为例,N卡率先支持FP32,但是市面上已经有FP24的游戏了,NVIDIA无奈只能用FP32去跑FP24承受性能损失,后来为了挽回游戏性能的颓势搞了个强制FP16渲染结果落了个画质缩水的名声,主要就是24bit的数据放在32bit寄存器里浪费空间,16bit*2正好塞满。
*引自英伟达tegra吧@九方航空

  • FLOAT32\64对深度学习的性能影响?
    float64占用的内存是float32的两倍,是float16的4倍;比如对于CIFAR10数据集,如果采用float64来表示,需要60000323238/1024**3=1.4G,光把数据集调入内存就需要1.4G;如果采用float32,只需要0.7G,如果采用float16,只需要0.35G左右;占用内存的多少,会对系统运行效率有严重影响;(因此数据集文件都是采用uint8来存在数据,保持文件最小)
    *引自https://blog.csdn.net/m0_43432638/article/details/89973862

  • 更多的对浮点数位和深度学习关系的知乎讨论
    https://www.zhihu.com/question/46344503?from=profile_question_card

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/254319
推荐阅读
相关标签
  

闽ICP备14008679号