写点什么

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:017066
用户头像
陈思 InfoQ编辑

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

关注

评论

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

云起无垠入选《ISC 2022数字安全创新能力百强》

云起无垠

身份证扫描简史:科技进步无处不在,从复杂到极简

caidianer

ps 身份证 扫描

VUE 前端文本输出为超文本

HoneyMoose

ShineScrum捷行2022年最受欢迎的五篇文章回放

ShineScrum

PO 用户故事 项目经理 PRD 团队工作效率

Android开发环境搭建

芯动大师

android 开发环境搭建 Androidstudio

教你用JavaScript实现轮播图

小院里的霍大侠

JavaScript 编程开发 初学者 入门实战

云渲染哪个平台费用低?云渲染怎么收费

Renderbus瑞云渲染农场

云渲染 云渲染收费

反序列化漏洞小工具绕过

网络安全学海

网络安全 安全 信息安全 渗透测试 漏洞挖掘

Nginx学习笔记(一)HTTP核心配置指令

Starry

数据治理八大优势和四大挑战

用友BIP

2022年“259”号文下聚合支付发展洞察

易观分析

金融 聚合支付 收款码

java运算符类型都有哪些

千锋IT教育

场景 | 九科信息物流供应链领域RPA数字化解决方案

九科Ninetech

What's new in Dubbo 3.1.4 and 3.2.0-beta.3

Apache Dubbo

Java 开源 微服务 dubbo RPC

网易云音乐用户画像资产治理及业务赋能

网易数帆

数据仓库 数据治理 数据资产 12 月 PK 榜

喜讯|云起无垠实力入选《2022年度中国数字安全能力图谱》

云起无垠

CAS Fuzzing

linux运维常用脚本

@下一站

12月日更 12月月更 shell脚本 程序代码

请求量太大扛不住怎么办?进来学一招

捉虫大师

Go 性能优化

Deel创始人自述销售管理:大中小客户差异化、中美两风格、All hands和Connect机制

B Impact

HTTP报文首部字段概述

穿过生命散发芬芳

HTTP 12月月更

Wallys/IPQ4018 12V-56VDCPassive 24V-56V/2*MMCX 27dbm Support MU-MIMO /industrial wifi moudle

wallysmeng

IPQ4018 IPQ4028

明道云联合RestCloud打造APaaS+IPaaS融合解决方案

明道云

小令动态丨令牌云荣获浦发银行创新社区最佳商业实践奖!

令牌云数字身份

身份认证 浦发银行 璞跃中国

阿里云张献涛:高性能计算发展的三大趋势

云布道师

阿里云 弹性计算 高性能计算

跳出程序员思维:如何应对上手英文工具站的几点误区

程序员泥瓦匠

小布助手,身入大千世界

脑极体

2022-12-23:portainer是docker的web可视化工具。如果根据docker部署去写yaml,默认local是k8s,而不是docker,这不符合需求,需要修改yaml。请问部署在

福大大架构师每日一题

云原生 k8s k3s 福大大

Zebec Chain缘何能成为新晋应用链,熊市下又为何值得我们关注?

西柚子

低代码开发平台YonBuilder移动开发,开发阅读APP教程

YonBuilder低代码开发平台

App 低代码 移动开发 阅读 开发.

什么样的CRM,才值得企业为之买单呢

ToB行业头条

浪潮信息正式发布基于龙蜥 Anolis OS 的服务器操作系统 Inspur KOS

OpenAnolis小助手

开源 操作系统 龙蜥社区 浪潮信息 KOS

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