鱼羊 发自 凹非寺 
量子位 报道 | 公众号 QbitAI

近日,TensorFlow模型优化工具包又添一员大将,训练后的半精度浮点量化(float16 quantization)工具。

有了它,就能在几乎不损失模型精度的情况下,将模型压缩至一半大小,还能改善CPU和硬件加速器延迟。

这一套工具囊括混合量化,全整数量化和修剪。

如何量化模型,尽可任君挑选。

压缩大小,不减精度

双精度是64位,单精度是32位,所谓的半精度浮点数就是使用2个字节(16位)来存储。

比起8位或16位整数,半精度浮点数具有动态范围高的优点;而与单精度浮点数相比,它能节省一半的储存空间和带宽。

比起双精度和单精度浮点数,半精度浮点显然没有那么适合计算。那么问题来了,为什么要主动降低精度呢?

因为实际上,很多应用场景对于精度的要求并没有那么高。在分布式深度学习中,模型可能会有成千上万个参数,体积一个赛一个的大,如果能把所有常量值都用16位浮点数而不是32位浮点数来存储,那么模型大小就能压缩至一半,还是相当可观的。

体积压缩了,精确度难道不会损失吗?

降低浮点数精度,当然会带来精确度的损失,但是不必担心,这样的损失小到可以忽略不计。

在ILSVRC 2012图像分类任务上分别测试标准的MobileNet float32模型和float16模型变体,可以看到,无论是MobileNet v1还是MobileNet v2,无论是top1还是top5,fp16模型的精度损失都小于0.03%

再试试对象检测任务,fp16变体比之标准模型,几乎没有精度损失。

而无论是MobileNet v1还是MobileNet SSD,fp16变体的体积都比标准模型的大小降低了约一半。

小体积,高精度,有什么理由不试试半精度浮点量化工具呢?

便捷使用

想要把你训练过的32位模型转成16位,操作并不复杂。只需设置两行关键代码。

在TensorFlow Lite converter上把32位模型的优化设置设为DEFAULT,然后把目标规范支持类型设置为FLOAT16:

import tensorflow as tfconverter = tf.lite.TFLiteConverter.from_saved_model(saved_model_dir)converter.optimizations = [tf.lite.Optimize.DEFAULT]converter.target_spec.supported_types = [tf.lite.constants.FLOAT16]Tflite_quanit_model = converter.convert()

模型转换成功之后就可以直接运行了。

默认情况下,模型是这样在CPU上运行的:把16位参数“上采样”为32位,并在标准32位浮点运算中执行操作。

这样做的原因是目前很多硬件还不支持加速fp16计算。在未来,有更多硬件支持的情况下,这些半精度值就不再需要“上采样”,而是可以直接进行计算。

在GPU上运行fp16模型更简单。

TensorFlow Lite的GPU代理已经得到加强,能够直接获取并运行16位精度参数:

//Prepare GPU delegate.const TfLiteGpuDelegateOptions options = {  .metadata = NULL,  .compile_options = {    .precision_loss_allowed = 1,  // FP16    .preferred_gl_object_type = TFLITE_GL_OBJECT_TYPE_FASTEST,    .dynamic_batch_enabled = 0,   // Not fully functional yet  },};

如果你感兴趣,TensorFlow官方还给出了教程demo,打开文末Colab链接,你就可以在线训练一个16位的MNIST模型啦。

传送门

官方指南:
https://www.tensorflow.org/lite/performance/post_training_quantization

Colab链接:
https://colab.research.google.com/github/tensorflow/tensorflow/blob/master/tensorflow/lite/g3doc/performance/post_training_float16_quant.ipynb

加入社群 | 与优秀的人交流

小程序 | 全类别AI学习教程

量子位 QbitAI · 头条号签约作者

վ'ᴗ' ի 追踪AI技术和产品新动态

喜欢就点「好看」吧 !

双精度浮点数转换_模型压缩一半,精度几乎无损,TensorFlow推出半精度浮点量化工具包,还有在线Demo...相关推荐

  1. 模型转换、模型压缩、模型加速工具汇总

    点击上方"计算机视觉工坊",选择"星标" 干货第一时间送达 编辑丨机器学习AI算法工程 一.场景需求解读   在现实场景中,我们经常会遇到这样一个问题,即某篇论 ...

  2. 模型部署到移动端_模型压缩+编译器优化,使AI算法在移动端性能超越专用硬件...

    作者 | 王言治,美国东北大学电子与计算机工程系助理教授 出品 | AI科技大本营(ID:rgznai100) 近年来,机器学习(Machine Learning)领域的研究和发展可谓是与日俱新,各式 ...

  3. java 精度函数_Java中的半精度浮点

    小编典典 您可以使用Float.intBitsToFloat()和Float.floatToIntBits()在原始浮点值之间进行转换.如果您可以采用截断的精度(而不是舍入),那么只需少量的移位就可以 ...

  4. python单精度和双精度的区别_单精度、双精度和半精度浮点格式之间的区别

    我们学过数学,都知道有理数和无理数,然后在有理数中有一类叫浮点数的数字,不知道大家对这些还有没有印象? 在软件编程的时候,我们也会用到浮点数,一种既包含小数又包含整数的数据类型. 下面就来讲讲关于浮点 ...

  5. 深度学习实战——模型推理优化(模型压缩与加速)

    忆如完整项目/代码详见github:https://github.com/yiru1225(转载标明出处 勿白嫖 star for projects thanks) 目录 系列文章目录 一.实验思路综 ...

  6. BERT-of-Theseus:基于模块替换的模型压缩方法

    ©PaperWeekly 原创 · 作者|苏剑林 学校|追一科技 研究方向|NLP.神经网络 最近了解到一种称为"BERT-of-Theseus"的 BERT 模型压缩方法,来自论 ...

  7. NeurIPS 2018 | 腾讯AI Lab详解3大热点:模型压缩、机器学习及最优化算法

    导读:AI领域顶会NeurIPS正在加拿大蒙特利尔举办.本文针对实验室关注的几个研究热点,模型压缩.自动机器学习.机器学习与最优化算法,选取23篇会议上入选的重点论文进行分析解读,与大家分享.Enjo ...

  8. 【转载】NeurIPS 2018 | 腾讯AI Lab详解3大热点:模型压缩、机器学习及最优化算法...

    原文:NeurIPS 2018 | 腾讯AI Lab详解3大热点:模型压缩.机器学习及最优化算法 导读 AI领域顶会NeurIPS正在加拿大蒙特利尔举办.本文针对实验室关注的几个研究热点,模型压缩.自 ...

  9. 深度学习模型压缩技术概览

    背景介绍 目录 背景介绍 什么是模型压缩? 剪枝 非结构化剪枝 结构化剪枝 量化 低秩近似(Low-rank approximation) 知识蒸馏(Knowledge distillation) 神 ...

最新文章

  1. RTEMS文件系统(4):系统调用开发信息(上)
  2. wordpress文章发布接口开发
  3. oracle账号注册公司名称,oracle+账号创建与管理oracle创建数据库
  4. java错误 找不到或无法加载主类
  5. sharepoint部件webparth关闭找回的方法
  6. 阿拉伯数字转中文小写数字
  7. erlang 架构原理_Erlang与Java内存架构
  8. python matplotlib 绘制曲线图,柱状图
  9. python3 装饰器_python3_装饰器_异常处理
  10. saltstack的简单安装和配置
  11. C#LeetCode刷题之#110-平衡二叉树(Balanced Binary Tree)
  12. python是什么课程-吐血整理!程序员喜爱的13个免费Python课程
  13. API和Web API(1)
  14. [HihoCoder1369]网络流一·Ford-Fulkerson算法
  15. PPT自定义内容/PPT自定义放映/PPT自定义文件等编辑说明
  16. 用VBS脚本实现软件定条件开启
  17. matlab图像处理Lena大作业
  18. 微信多开无法连接服务器,ios丨微信多开联网失败解决方法
  19. 查看计算机CPU核心数和线程数
  20. 微信小程序系列一:获取头像昵称

热门文章

  1. 非GUI运行性能脚本
  2. ROS学习笔记一(ROS的catkin工作空间)
  3. 学会使用JDK API
  4. fragment+tabhost与viewpager
  5. 从0 开始 WPF MVVM 企业级框架实现与说明 ---- 第十讲 WPF 系统MainWindow
  6. ThinkPHP源码学习之一
  7. 什么是事务的传播特性?(转载)
  8. 对路径XXX的访问被拒绝(文件操作权限)的解决方法
  9. jQuery插件uploadly报security Error:error #2049解决方案
  10. vs2015调试时不显示vector内容的解决方法