【论文解析】HAQ: Hardware-Aware Automated Quantization With Mixed Precision

news/2024/11/27 4:19:10/

作者及发刊详情

@inproceedings{haq,
author = {Wang, Kuan and Liu, Zhijian and Lin, Yujun and Lin, Ji and Han, Song},
title = {HAQ: Hardware-Aware Automated Quantization With Mixed Precision},
booktitle = {IEEE Conference on Computer Vision and Pattern Recognition (CVPR)},
year = {2019}
}

摘要

Motivation

  • DNN硬件加速器开始支持混合精度(1-8位)进一步提高计算效率,这对找到每一层的最佳位宽提出了一个巨大的挑战:它需要领域专家探索巨大的设计空间,在精度,延迟,能耗和模型大小之间权衡。
  • 当前有很多专用的神经网络专用加速器,但没有为这些加速器设计专用的神经网络优化方法。传统的量化算法忽视了不同的硬件架构,网络所有层都采用一种量化方式。

Contribution

1)自动化

提出了自动量化框架,无需领域专家或基于规则的启发式方法,将人力从探索位宽选择中解放出来

2)硬件感知

该框架在循环指令流中考虑了硬件架构,不依赖中间信号(proxy signal),可以直接减少延迟、能耗和存储

3)专用化

为不同的硬件架构都提出专门的量化策略,完全为目标硬件架构定制,以优化延迟和能耗。

4)设计视角

将计算和访存都考虑在内,为不同的硬件架构提供了不同的量化策略解释

Approach

引入了基于硬件感知的自动量化(HAQ)框架,该框架利用强化学习来自动确定量化策略,并在设计回路中获取硬件加速器的反馈。而不是依赖于代理信号,如FLOPS和模型大小,该文使用一个硬件模拟器来生成直接的反馈信号(延迟和能耗)到RL代理。

Experiment

实验验证平台:

选用模型:

训练数据集:

推理任务

工具:

实验评估

在这里插入图片描述

结论

框架有效地减少了1.4-1.95×的延迟和1.9×的能耗,而accu的损失可以忽略不计

参考文献

MIT开源开源项目链接

参考链接:
机器之心@知乎:寻找最佳的神经网络架构,韩松组两篇论文解读
KGback:人工智能和机器学习入门


http://www.ppmy.cn/news/1550234.html

相关文章

前端面试题大汇总:React 篇

基础知识 1. 什么是 React?它的主要特点是什么? React 是一个用于构建用户界面的 JavaScript 库,由 Facebook 开发并维护。它主要用于构建单页应用程序(SPA)和复杂的用户界面。React 的主要特点包括: 组件…

python VS c++

一、语法特点 Python: 语法简洁、优雅,代码可读性极强,采用缩进来表示代码块,摒弃了像 C 那样使用大括号的传统方式,使得代码看上去十分清晰简洁。例如: ​ if 5 > 3:print("5大于3") elif 5 …

【高阶数据结构】LRU Cache

> 作者:დ旧言~ > 座右铭:松树千年终是朽,槿花一日自为荣。 > 目标:了解什么是LRU Cache,并能简单的模拟实现。 > 毒鸡汤:有些事情,总是不明白,所以我不会坚持。早安! &…

【Angular】eventDispatcher详解

eventDispatcher 是一种设计模式,用于在对象之间传递事件。它允许对象订阅和发布事件,从而实现松耦合的通信机制。以下是一个详细的解释和示例代码。 1. 基本概念 事件(Event):一个动作或状态变化,可以被…

SpringBoot开发——Maven多模块工程最佳实践及详细示例

文章目录 一、前言二、Maven多模块工程的最佳实践1、项目结构清晰2、依赖管理统一3、插件配置统一4、版本控制一致5、模块间通信简化 三、详细示例1、项目结构2、父模块(parent)的pom.xml文件3、子模块(module-api)的pom.xml文件4…

【Python】九大经典排序算法:从入门到精通的详解(冒泡排序、选择排序、插入排序、归并排序、快速排序、堆排序、计数排序、基数排序、桶排序)

文章目录 1. 冒泡排序(Bubble Sort)2. 选择排序(Selection Sort)3. 插入排序(Insertion Sort)4. 归并排序(Merge Sort)5. 快速排序(Quick Sort)6. 堆排序&…

PyTorch2

Tensor的常见操作: 获取元素值: 注意: 和Tensor的维度没有关系,都可以取出来! 如果有多个元素则报错; import torch def test002():data torch.tensor([18])print(data.item())pass if __name__ &qu…

【高阶数据结构】图论

> 作者:დ旧言~ > 座右铭:松树千年终是朽,槿花一日自为荣。 > 目标:了解什么是图,并能掌握深度优先遍历和广度优先遍历。 > 毒鸡汤:有些事情,总是不明白,所以我不会坚持…