NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

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


公众号推荐:

跳进 AI 的奇妙世界,一起探索未来工作的新风貌!想要深入了解 AI 如何成为产业创新的新引擎?好奇哪些城市正成为 AI 人才的新磁场?《中国生成式 AI 开发者洞察 2024》由 InfoQ 研究中心精心打造,为你深度解锁生成式 AI 领域的最新开发者动态。无论你是资深研发者,还是对生成式 AI 充满好奇的新手,这份报告都是你不可错过的知识宝典。欢迎大家扫码关注「AI前线」公众号,回复「开发者洞察」领取。

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

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

关注

评论

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

Java反射之Method的invoke方法实现,全栈系统化的学习路线

Java 程序员 后端

Java实现数据结构中的八种排序方法

Java 程序员 后端

宝藏昇腾AI应用推荐!CANN带你体验黑白图像自动上色的快乐~

华为云开发者联盟

开源 黑白 图像 CANN 昇腾

Java中高级核心知识全面解析(2),腾讯Java面试

JVM调优资料

Java 程序员 后端

Java学到什么程度才算精通?,看完老板就给加薪了

Java 程序员 后端

Java实现数据结构中的八种排序方法(1)

Java 程序员 后端

九月开学

escray

生活记录 9月日更

NVMe over TCP高性能文件存储,焱融科技+Lightbits让未来照进现实

焱融科技

云计算 分布式 高性能 存储 nvme

Paxos理论介绍(4): 动态成员变更

OpenIM

Java中高级核心知识全面解析(1),Java开发实战

JVM调优资料

Java 程序员 后端

Java基础知识总结(超详细整理,你有过迷茫吗

Java 程序员 后端

RVB2601应用开发实战系列六:网络播放器设计(二)

Roy夹馍

risc-v 嵌入式开发 risc-v开发板

全网各大厂iOS面试题-文集大全

iOSer

ios 面试

5年Java经验字节社招:半月3次面试,Java资料

欢喜学安卓

Java 程序员 后端

Java学习笔记-集合,985研究生被小公司领导留了3年

Java 程序员 后端

5分钟学会Flutter开发

百度Geek说

flutter 大前端 移动端

微信PaxosStore内存云揭秘:十亿Paxos/分钟的挑战

OpenIM

2021ToB投资盘点:腾讯疯狂、阿里克制、字节激进

ToB行业头条

腾讯 字节跳动 阿里

2021最新38道Spring大厂面试题,你碰到过哪道,电商秒杀Java面试题

欢喜学安卓

Java 程序员 后端

Java 线程池原理分析,一举拿下腾讯美团滴滴offer

JVM调优资料

Java 程序员 后端

Java8-Stream:2万字20个实例,价值2000元的Java学习资源泄露

JVM调优资料

Java 程序员 后端

Java中高级核心知识全面解析(3),Java编程入门到精通

JVM调优资料

Java 程序员 后端

Java内存区域总结(堆

Java 程序员

Java反射的简单入门

Java 程序员 后端

2021-07-26 日期时间类,万字总结

欢喜学安卓

Java 程序员 后端

Java 小记 — RabbitMQ 的实践与思考,Redis灵魂14问

JVM调优资料

Java 程序员 后端

java-注解,最新Java笔试题分享

JVM调优资料

Java 程序员 后端

低代码与专业代码有什么区别?

低代码小观

程序员 开发者 低代码 开发工具 低代码开发平台

Java中高级核心知识全面解析,Java入门教程免费视频

JVM调优资料

Java 程序员 后端

扁平-K8s网络模型漫谈

Lance

解读知识蒸馏模型TinyBert

华为云开发者联盟

mindspore 知识蒸馏 TinyBert 信息瓶颈 蒸馏

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