单精度/双精度/半精度/混合精度

计算机使用0/1来标识信息,每个0或每个1代表一个bit。信息一般会以下面的三种形式表示:

1 字符串

字符串的最小单元是char,每个char占8个bit,也就是1个byte。比如字符串“abc”这三个字符组成的串占用的存储空间:

存储空间=1x3=3(bytes)=24(bits)

2 整数

整数包括INT4、INT8、INT16、INT32、INT64,INT后面的数值表示该整数类型占用的byte个数。

3 浮点数

浮点数包括Float16、Float32、Float64,同样,Float后面的数字表示该浮点型占用byte的个数。而这三种浮点数又有个不同的名字:

  • 半精度浮点数:Float16
  • 单精度浮点数:Float32
  • 双精度浮点数:Float64

有了上面单精度、双精度、混合精度三种形式的解释,混合精度就很好理解了。就是计算中存在不同精度的浮点数,比如:

Float16+Float32

混合精度的优点

先说结论:

压缩模型大小

我们一般模型训练使用的是Float32,那换成混合精度有什么好处呢?为了更好理解,我们将Float32的模型参数都换成Float16. 在参数数目不变的情况下,将Float32的参数都更换成Float16后,模型占用的内存就变成了之前的一半。所以,混合精度最直观的优点就是能够压缩模型的大小。

前面为了好理解,将Float32全都转成了Float16,但在实际的模型训练中,Float16因为能表示的精度有限,会导致数据溢出(超出能表示的范围),所以,只能部分操作用Float16,部分操作用Float32.最终导致混合精度的提出。

混合精度比较经典的论文是这篇:

Mixed Precision Training

论文介绍了混合精度在模型训练中的方法,并在多个训练场景中证实,混合精度相对于完全Float32的模型的参数训练,最终的算法效果影响不大。

混合精度对模型训练和推理速度的影响

先说结论:

理论上没有提升,反而会下降。但在结合计算平台特性,训练和推理速度会有提升

理论上混合精度只能压缩模型的大小,在训练阶段和推理阶段,都能能大大缓解CPU内存或GPU显存限制对模型训练压力。

因为模型结构和参数数量没有发生显著的变化(忽略混合精度对模型训练,参数更新的影响),理论上训练和推理速度应该不会有大的改变。而且,因为不同的精度需要进行对齐再运算(计算时,先将不同的精度转变成统一的精度后,再进行计算),返回导致计算效率降低,从而会导致训练和推理的速度降低。

但实际上计算平台对这种特殊的计算场景一般都有专门的硬件计算加速,比如:

1 具备专用的半精度计算单元

GPU针对Float16、Float32运算,都有专门的计算单元。

2 单精度支持两个半精度计算同时进行

比如,英伟达的GPU Tesla P100支持在一个Float32里同时进行2次Float16的半精度浮点计算,所以对于半精度的理论峰值可以达到单精度浮点数计算能力的两倍。

3 TensorCore

英伟达的瓦特(如Tesla V100)和图灵架构(如Tesla T4)都具备TensorCore单元,能完成单指令的混合精度矩阵乘加运算。

混合精度的实际表现

我们以英伟达开源的BERT评测对比下:

模型训练:

模型推理:

总结

混合精度可以明显的对模型的大小进行压缩(内存占用),同时,针对优化的计算平台,在模型训练和推理的速度方面也都有提升。

参考文档:

《Nvidia GPU的浮点计算能力》

《Nvidia BERT评测》

float32精度_混合精度对模型训练和推理的影响相关推荐

  1. python单精度和双精度_单精度、双精度、多精度和混合精度计算的区别是什么?...

    点击上方"大鱼机器人",选择"置顶/星标公众号" 福利干货,第一时间送达! 编排 | strongerHuang 微信公众号 | 嵌入式专栏 我们学过数学,都知 ...

  2. 科普 | 单精度、双精度、多精度和混合精度计算的区别是什么?

    科普 | 单精度.双精度.多精度和混合精度计算的区别是什么? 转自:https://zhuanlan.zhihu.com/p/93812784 我们提到圆周率 π 的时候,它有很多种表达方式,既可以用 ...

  3. 详谈大模型训练和推理优化技术

    详谈大模型训练和推理优化技术 作者:王嘉宁,转载请注明出处:https://wjn1996.blog.csdn.net/article/details/130764843 ChatGPT于2022年1 ...

  4. PTMs:QLoRA技巧之源码解读(qlora.py文件)—解析命令与加载参数→数据预处理→模型训练+评估+推理

    PTMs:QLoRA技巧之源码解读(qlora.py文件)-解析命令与加载参数→数据预处理→模型训练+评估+推理 目录 QLoRA技巧之源码解读(qlora.py文件)-解析命令与加载参数→数据预处理 ...

  5. 训练softmax分类器实例_第四章.模型训练

    迄今为止,我们只是把机器学习模型及其大多数训练算法视为黑盒.但是如果你做了前面几章的一些练习,你可能会惊讶于你可以在不知道任何关于背后原理的情况下完成很多工作:优化一个回归系统,改进一个数字图像分类器 ...

  6. Pytorch通用图像分类模型(支持20+分类模型),直接带入数据就可训练自己的数据集,包括模型训练、推理、部署。

    Pytorch-Image-Classifier-Collection 介绍 ============================== 支持多模型工程化的图像分类器 =============== ...

  7. Tensorflow + OpenCV4 安全帽检测模型训练与推理

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 开发环境 软件版本信息: Windows10 64位 Tensor ...

  8. 使用pytorch训练你自己的图像分类模型(包括模型训练、推理预测、误差分析)

    开源代码:https://github.com/xxcheng0708/Pytorch_Image_Classifier_Template​​​​​ 使用pytorch框架搭建一个图像分类模型通常包含 ...

  9. 模型训练慢和显存不够怎么办?GPU加速混合精度训练

    目录 混合精度训练 理论原理 三大深度学习框架的打开方式 Pytorch Tensorflow PaddlePaddle 混合精度训练 一切还要从2018年ICLR的一篇论文说起... <MIX ...

最新文章

  1. java线程触发_java线程
  2. 解决Latex图片或者表格浮动
  3. python读取文件名写入excel_Python实现读取并写入Excel文件过程解析
  4. AOP - PostSharp 2.0
  5. 201521123070 《JAVA程序设计》第13周学习总结
  6. GCD and LCM HDU - 4497(素数打表+唯一分解定理)求多少种情况
  7. leetcode 451. 根据字符出现频率排序
  8. mosquitto源码分析(三)
  9. 《深入浅出DPDK》读书笔记(十五):DPDK应用篇(Open vSwitch(OVS)中的DPDK性能加速)
  10. Jedis之ShardedJedis虚拟节点一致性哈希分析
  11. Android事件机制全然解析
  12. [日志]说一个人长的丑!如何说?
  13. 在Session中放HashMap在Jsp中用JSTL遍历方法
  14. Navicat连接Linux下MySQL
  15. Google Draco 源码解析
  16. matplotlib画柱状图
  17. 【b站雅思笔记】Simon‘s IELTS Course - 阅读部分
  18. nginx 启动、重启、配置重新加载
  19. 戴尔电脑遇到问题,运行SupportAssist.更新后大部分问题可以解决。
  20. 海思hi3531处理器参数,hi3531芯片详细信息简介

热门文章

  1. HDUOJ-----Brave Game
  2. 基于web的甘特图,易度甘特图edogantt!
  3. 产品问答 | 作为项目负责人,怎么提升成员工作斗志?
  4. 产品中的实名认证该怎么设计?
  5. PMCAFF | 锤子科技产品经理朱萧木介绍 Smartisan OS 2.0 语音搜索功能
  6. 一元操作符“++”,“- ” 之强制转换数值
  7. Vue父子组件通信小总结
  8. mysql版本选择最终建议
  9. 从用户的视角看待网页设计(一)
  10. fragment的基本使用