写点什么

TensorFlow 模型优化工具包增加新功能,可将深度学习模型缩小一半

  • 2019-08-07
  • 本文字数:1487 字

    阅读完需:约 5 分钟

TensorFlow模型优化工具包增加新功能,可将深度学习模型缩小一半

北京时间 8 月 7 日,TensorFlow 官方在 Medium 博客上更新了一篇文章,宣布为模型优化工具包添加了一项新功能:半精度浮点量化工具,据介绍,该工具能够在几乎不损失精度的情况下,将训练模型缩小一半,还能改善 CPU 和硬件加速器延迟。


TensorFlow 团队将训练后的半精度浮点量化作为模型优化工具包的一部分,这一套工具包括了混合量化,全整数量化和修剪等功能。


通过牺牲极少的精度,训练后的半精度浮点量化成功缩小了 TensorFlow Lite 模型的尺寸(高达 50%),并将模型常数(如权重和偏差值)从全精度浮点(32 位)为精度降低的浮点数据类型(IEEE FP16)。


训练后的半精度浮点是训练 TensorFlow Lite 模型的好工具,因为它对精度的影响极小并且模型尺寸显着减小。


感兴趣的读者可以点击这里查看相关文档,以便解不同的量化选项和方案。


降低精度的好处

降低精度有很多好处,特别是在部署到边缘时:


  • 模型尺寸减少 2 倍。模型中的所有常量值都存储在 16 位浮点数而不是 32 位浮点数中。由于这些常数值通常在整个模型尺寸中占主导地位,因此通常会将模型的尺寸减小约一半。

  • 精确度损失可忽略不计。深度学习模型经常能够在推理上产生良好的结果,同时使用比最初训练时更少的精度。在对几个模型的实验中,研发人员发现推理质量几乎没有损失(见下面的结果)。

尺寸缩小 2 倍,精度折衷可忽略不计

训练后的半精度浮点量化对精度的影响很小,但可以使深度学习模型的大小缩小约 2 倍。例如,以下是 MobileNet V1 和 V2 型号以及 MobileNet SSD 型号的一些结果。MobileNet v1 和 v2 的准确度结果基于ImageNet图像识别任务。在COCO对象识别任务上评估 SSD 模型。


模型准确性

通过将标准 Mobilenet float32 模型和 fp16 变体分别在:ILSVRC 2012 图像分类任务,以及 COCO 对象检测任务上进行了评估,研发人员得到了如下的结果:


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

开发者可以在 TensorFlow Lite 转换器上指定训练后的半精度浮点量化,方法是使用训练好的 float32 模型,将优化设置为 DEFAULT,并将目标规范支持的类型设置为半精度浮点常量:


import tensorflow as tf converter = 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()
复制代码


转换模型后即可直接运行,就像任何其他 TensorFlow Lite 模型一样。默认情况下,模型将通过将 16 位参数“上采样”为 32 位,然后在标准 32 位浮点运算中执行操作来在 CPU 上运行。


开发者还可以在 GPU 上运行模型。研发团队已经增强了 TensorFlow Lite GPU 代理,以接收精简参数并直接运行(不需要像在 CPU 上那样转换为 float32)。在应用程序中,开发者可以通过 TfLiteGpuDelegateCreate 功能创建GPU代理。指定代理的选项时,请务必设置 precision_loss_allowed 为 1:


//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    },  }; 
复制代码


有关 GPU 代理的概述,请参阅此链接:


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


查看使用半精度浮点量化的工作示例请点这里:


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


2019-08-07 15:016892
用户头像
陈思 InfoQ编辑

发布了 576 篇内容, 共 294.6 次阅读, 收获喜欢 1305 次。

关注

评论

发布
暂无评论
发现更多内容

华为云推出全自研数据库,GaussDB(openGauss)能否撑起一片天?

华为云开发者联盟

数据库 数据 gauss db

jdk 源码系列之StringBuilder、StringBuffer

sinsy

Java jdk 源码解析

腾讯云副总裁刘煜宏:大数据平台算力弹性资源池达500万核,国内最强

腾讯云大数据

大数据

Greenplum 性能优化之路 --(一)分区表

腾讯云大数据

大数据

用go语言实现快排

Sean

算法 快速排序 Go 语言

为什么推广ipv6以及网站ipv6改造基本步骤

MySQL从删库到跑路

Web IP 网络

架构师训练营第三周学习总结

邓昀垚

极客大学架构师训练营

架构师训练营第三周作业

文智

极客大学架构师训练营

智能体的奇幻漂流之“成都折叠”篇

脑极体

为什么90%的“码农”做不了软件“架构师”?

Java架构师迁哥

Java 学习 架构师

LeetCode题解:641. 设计循环双端队列,使用双向链表,JavaScript,详细注释

Lee Chen

大前端 LeetCode

c++杂谈4

菜鸟小sailor 🐕

打造一个全功能的浏览器

Daniel

腾讯云大数据发布最新产品矩阵,助力企业整合打通海量数据

腾讯云大数据

大数据

揭开500亿“区块链”骗局

CECBC

法律 传销

区块链带来的技术创新和变革

CECBC

区块链技术 经济

数字货币视域下的金融安全实现路径

CECBC

区块链 数字货币

原创 | 使用JPA实现DDD持久化-JPA vs MyBatis

编程道与术

Java hibernate 编程 mybatis jpa

第二周-命题作业

莫森

极客大学架构师训练营

致谢!华为全联接2020精彩回顾

华为云开发者联盟

华为 华为云 智能 hdc

第二周-学习总结-框架设计原则

莫森

极客大学架构师训练营

原创 | 正确区分属性和字段

编程道与术

Java hibernate 编程 软件开发 jpa

你在开发过程中使用Git Rebase还是Git Merge?

华为云开发者联盟

git 华为 管理 代码

原创视频 | 架构漫谈—如何创造复杂而有序的软件系统【含课件下载】

编程道与术

Java 编程 架构 软件开发 软件架构

持续引领大数据行业发展,腾讯云发布全链路数据开发平台WeData

腾讯云大数据

大数据

架构师第一期作业(第三周)

Cheer

作业

线段树(Segment Tree)

zayfen

算法 线段树 segment tree

一次注定失败的裸面

escray

ruby 程序员 面试 面经

原创 | 使用JPA实现DDD持久化-O/R阻抗失配(2/2)

编程道与术

Java hibernate DDD JDBC jpa

原创 | 使用JPA实现DDD持久化-JPA,Hibernate与Spring Data JPA

编程道与术

Java hibernate Spring C Data jpa

手把手教你:将 ClickHouse 集群迁至云上

腾讯云大数据

大数据 Clickhouse

TensorFlow模型优化工具包增加新功能,可将深度学习模型缩小一半_AI&大模型_陈思_InfoQ精选文章