tensorflow gpu利用率低_TensorFlow 模型优化工具 — float16 量化将模型体积减半

2023-11-19

bd86749ba1e2d0cca2c75b482fdfcf16.png

我们很高兴在模型优化工具包中添加训练后的半精度浮点量化 (float16 quantization),此工具套件包含混合量化 (hybrid quantization)、训练后整形量化 (full integer quantization) 和剪枝 (pruning)。点此查看发展蓝图中的其他工具。

训练后的半精度浮点量化可以在损失极少准确度的情况下,缩小 TensorFlow Lite 模型的大小(最高可缩减 50%)。它将模型常量(如权重和偏差值)从全精度浮点(32 位)量化为精度下降的浮点数据类型 (IEEE FP16)。

注:量化 链接

https://tensorflow.google.cn/model_optimization/guide#quantization

训练后的半精度浮点量化不但对准确度的影响很小,而且能显著缩小模型尺寸,因而是初始量化 TensorFlow Lite 模型的好工具。您可在此处查看我们的文档(包含新的浮点图表),了解不同的量化选项和方案。

注:文档 链接

https://tensorflow.google.cn/lite/performance/post_training_quantization

f9cad7fc6cbb0b8122c3f56f40e378ae.gif

降低精度的益处

精度降低存在诸多益处,尤其是部署在边缘设备时:

  • 模型尺寸缩减一半。模型中的所有常量值均存储在 16 位浮点而非 32 位浮点中。这些常量值通常决定模型的总体尺寸,因此可以将模型尺寸缩减约一半。
  • 精度损失微乎其微。与初始训练精度相比,深度学习模型使用较低精度时通常可以产生良好的推理结果。我们对多个模型进行实验,发现推理质量的损失甚微。在下面的例子中可以看到,MobileNet V2 的 Top 1 准确度下降小于 0.03%(参见下文结果)。

模型大小缩减一半,准确度损失微乎其微

训练后的半精度浮点量化对准确度影响甚小,却可将深度学习模型的尺寸缩减约一半。例如,以下是 MobileNet V1 和 V2 模型以及 MobileNet SSD 模型的一些结果。MobileNet V1 和 V2 的准确度结果基于 ImageNet 图像识别任务,对 SSD 模型的评估则基于 COCO 对象识别任务。

注: ImageNet 链接

http://image-net.org/

 COCO 链接

http://cocodataset.org/

e831bb6ec378f5ba1628e5dd266f0395.png

模型准确度

对标准 Mobilenet float32 模型(与 fp16 变体)的评估基于 LSVRC 2012 图像分类任务,对 Mobilenet SSD float32 及其 fp16 变体的评估则基于 COCO 对象检测任务。

注:LSVRC 2012 图像分类任务 链接

http://www.image-net.org/challenges/LSVRC/2012/

COCO 对象检测任务 链接

http://cocodataset.org/#detection-eval

d7b16f8a90b1ac15b848c6a64ccaf19a.png

如何启用训练后的半精度浮点量化

您可以采用训练好的 float32 模型,将优化设置为“默认”,并将目标规范的支持类型设置为 float16 常量,从而在 TensorFlow Lite 转换器上指定训练后的半精度浮点量化:
1import tensorflow as tf
2converter = tf.lite.TFLiteConverter.from_saved_model(saved_model_dir)
3converter.optimizations = [tf.lite.Optimize.DEFAULT]
4converter.target_spec.supported_types = [tf.lite.constants.FLOAT16]
5Tflite_quanit_model = converter.convert()
模型转换完成后可直接运行,这与其他 TensorFlow Lite 模型并无二致。默认情况下,模型会将 16 位参数“上采样”为 32 位,接着在标准 32 位浮点运算中执行操作,最终在 CPU 上运行。随着时间推移,我们有望看到有更多的硬件支持加速 fp16 计算, 允许我们跳过上采样的步骤,直接使用 float16 精度进行计算 。您也可以在 GPU 上运行模型。我们已强化 TensorFlow Lite GPU 委派,以接收精度降低的参数,并直接使用这些参数运行(而非如 CPU 中一般将其转化为 float32)。在您的应用中,您可以通过 TfLiteGpuDelegateCreate 函数创建 GPU 委派( 文档)。指定委派选项时,请确保将 precision_loss_allowed 设置为 1,以便在 GPU 中使用16位浮点进行运算:
1//Prepare GPU delegate.
2const TfLiteGpuDelegateOptions options = {
3  .metadata = NULL,
4  .compile_options = {
5    .precision_loss_allowed = 1,  // FP16
6    .preferred_gl_object_type = TFLITE_GL_OBJECT_TYPE_FASTEST,
7    .dynamic_batch_enabled = 0,   // Not fully functional yet
8  },
9};
如需 GPU 委派概览,请参阅先前的 博文。请在此 Colab 教程中查看使用半精度浮点量化的工作示例。

注:GPU 委派 链接

https://tensorflow.google.cn/lite/performance/gpu_advanced

委派概览 链接

https://medium.com/tensorflow/tensorflow-lite-now-faster-with-mobile-gpus-developer-preview-e15797e6dee7

Colab 链接

https://github.com/tensorflow/tensorflow/blob/master/tensorflow/lite/g3doc/performance/post_training_float16_quant.ipynb

建议您立即试用此工具并提供反馈。直接分享您的用例或在 Twitter 上使用 #TFLite 和 #PoweredByTF 标签分享。

注:提交用例 链接

https://services.google.cn/fb/forms/TFCS/

致谢

T.J. Alumbaugh、Andrei Kulik、Juhyun Lee、Jared Duke、Raziel Alvarez、Sachin Joglekar、Jian Li、Yunlu Li、Suharsh Sivakumar、Nupur Garg、Lawrence Chan、Andrew Selle。

更多 TensorFlow Lite 相关阅读:

  • TensorFlow 模型优化工具包  —  训练后整型量化

  • TensorFlow 模型优化工具包  —  剪枝 API

  • TensorFlow Lite 2019 年发展蓝图

  • TensorFlow 模型优化工具包正式推出

db0f199c1765c90916e90d2fe27c0d7f.png

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

tensorflow gpu利用率低_TensorFlow 模型优化工具 — float16 量化将模型体积减半 的相关文章

随机推荐

  • qt之QCustomPlot动态更改曲线颜色,点击曲线标题名称

    一 前言 上篇文章介绍了如何调用qt自带的颜色画板 其实目的就是想更改一些颜色 本篇博客介绍更改QCustomPlot的曲线颜色 二 环境 qt5 7 mingw windows8 sqlite3 三 正文 首先在数据库中建好表 一行多列
  • 碳排放混合预测模型(Matlab代码实现)

    个人主页 研学社的博客 欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码实现 1 概述 二氧化碳排放力争于
  • [自然语言处理入门]-NLP中的注意力机制

    本章的主要内容有 注意力机制概述 传统注意力机制 注意力编码机制 1 注意力机制概述 注意力机制简单来说就是 加权求和机制 模块 加权求和模块 神经网络中的一个组件 可以单独使用 但更多地用作为 网络中的一部分 2 传统注意力机制 2 1
  • windows基线检测

    按照Windows基线检查模板检查设置windows安全机制 windows基线检查选项及风险等级 编号 检查选项 风险等级 适用类型 1 系统已安装最新的service pack 2 系统已经安装了最新的安全补丁 本地安全策略检查选项及风
  • java控制台聊天程序

    java控制台聊天程序 发送端 package ip chat import java io BufferedReader import java io InputStreamReader import java net DatagramP
  • Python中的filter()函数

    目录 一 描述 语法 返回值 二 实例 1 过滤出列表中的所有奇数 2 过滤出1 100中平方根是整数的数 一 描述 英文文档 filter function iterable Construct an iterator from thos
  • 01-----tcpdump抓包命令

    一 tcpdump抓包命令 关于tcpdump的抓包命令 非常的多 这里我只记录我平时开发时比较常用的抓包命令 当然后面可能不断的在本篇补上对应的内容 1 tcpdump的命令格式 tcpdump adeflnNOpqStvx c 数量 F
  • 大数据毕业设计 深度学习图像检索算法研究与实现 - python

    文章目录 0 前言 1 课题简介 2 图像检索介绍 1 无监督图像检索 2 有监督图像检索 3 图像检索步骤 4 应用实例 5 最后 0 前言 这两年开始毕业设计和毕业答辩的要求和难度不断提升 传统的毕设题目缺少创新和亮点 往往达不到毕业答
  • oh-my-zsh的各种主题展示,你喜欢哪一个?

    pygmalion virtualenv blink mrtazz sonicradish skaro linuxonly gnzh tjkirch 带时间
  • 物联网毕设分享 - stm32单片机酒精浓度酒驾检测系统 - 物联网 嵌入式

    文章目录 0 前言 1 简介 2 主要器件 3 实现效果 4 硬件设计 MQ 3酒精乙醇传感器模块 SIM800C模块 5 软件说明 系统框图 6 部分核心代码 7 最后 0 前言 这两年开始毕业设计和毕业答辩的要求和难度不断提升 传统的毕
  • cityscapes和foggy_cityscapes数据集使用记录

    cityscapes和foggy cityscapes数据集使用记录 cityscapes 数据集介绍 下载数据集 cityscapes转voc格式 foggy cityscapes 下载数据集 foggy cityscapes转voc格式
  • linux drm 架构 基础

    一 简介 DRM 英文全称Digital Rights Management 可以翻译为 数字版权管理 由于数字化信息的特点决定了必须有另一种独特的技术 来加强保护这些数字化的音视频节目内容 文档 电子书籍的版权 该技术就是数字权限管理技术
  • PAT (Basic Level) Practice (中文) B1034 有理数四则运算 (20 分)(C++)(分数四则运算)

    1034 有理数四则运算 20 分 本题要求编写程序 计算 2 个有理数的和 差 积 商 输入格式 输入在一行中按照 a1 b1 a2 b2 的格式给出两个分数形式的有理数 其中分子和分母全是整型范围内的整数 负号只可能出现在分子前 分母不
  • openGL之API学习(一九三)glGenTextures

    生成纹理单元名 单元名不一定是连续的 但是没有使用的 单元名是相对GL TEXTURE0的 对于单元名1 其实是GL TEXTURE0 1 glGenTextures产生的是一个比较小的整数id 纹理单元名 glActiveTexture激
  • 三分钟带你搞懂分布式链路追踪系统原理

    分布式系统为什么需要链路追踪 随着互联网业务快速扩展 软件架构也日益变得复杂 为了适应海量用户高并发请求 系统中越来越多的组件开始走向分布式化 如单体架构拆分为微服务 服务内缓存变为分布式缓存 服务组件通信变为分布式消息 这些组件共同构成了
  • 前端学习——JavaScript原生实现购物车案例

    一 购物车案例 1 1 案例介绍 今天我们来写另外一个购物车案例 说实话对于我来说这个是花了将近三个小时的时间然后才做出来的 里面可能还存在一些我没有发现的问题 但是能完成基本的功能 对于一些基本的需求都是可以完成的 下面照旧是案例实现的g
  • [Python] wxPython 状态栏组件、消息对话框组件 学习总结(原创)

    1 状态栏组件 1 基本介绍 上图 红框框内的就是状态栏 他可以分成若干个区块 比如上者分为了两个区块 并且比例是固定的 创建时可以指定 每个区块都能够显示 信息 一般通过 绑定事件 实时更新 各个区块的内容 因为状态栏本身 组件 所以除了
  • Dubbo与SpringCloud的区别

    首先来看一个表格 Dubbo 和 SpringCloud 对比 Dubbo SpringCloud 服务注册中心 Zookeeper Spring Cloud Netfilx Eureka 服务调用方式 RPC REST API 服务监控
  • Mysql从入门到精通 (innodb 引擎 锁超时查看以及设置)

    1 查看innodb引擎锁超时时间 show variables like innodb lock wait timeout 2 设置锁超时时间 set innodb lock wait timeout 5 3 代码验证 两个窗口同时开启事
  • tensorflow gpu利用率低_TensorFlow 模型优化工具 — float16 量化将模型体积减半

    我们很高兴在模型优化工具包中添加训练后的半精度浮点量化 float16 quantization 此工具套件包含混合量化 hybrid quantization 训练后整形量化 full integer quantization 和剪枝 p