Hardware-Aware-Transformers开源项目笔记

这篇具有很好参考价值的文章主要介绍了Hardware-Aware-Transformers开源项目笔记。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Hardware-Aware-Transformers开源项目笔记

开源项目

本文是基于论文《HAT: Hardware-Aware Transformers for Efficient Natural Language Processing》同步开源的项目整理的,如需更详细的内容,请移步至项目https://github.com/mit-han-lab/hardware-aware-transformers

背景知识

nas

Neural Architecture Search,神经网络结构搜索。

  1. 定义搜索空间;

  2. 执行搜索策略采样网络

    基于强化学习的方法

    基于进化算法的方法

    ​ 种群:针对当前问题的候选解集合

    ​ 母种群

    ​ 重组(Crossover):交叉重组,两父代个体随机匹配并将部分结构加以替换重组形成新个体。

    ​ 突变种群(Mutation):变异,以一定的概率对子代进行变异,引入新的基因。

    ​ 突变率

    基于梯度的方法

  3. 对采样的网络进行性能评估

进化算法

对网络结构进行编码,维护结构的集合(种群),

从种群中挑选结构训练并评估,留下高性能网络而淘汰低性能网络。

接下来通过预设定的结构变异操作形成新的候选,通过训练和评估后加入种群中,

迭代该过程直到满足终止条件(如达到最大迭代次数或变异后的网络性能不再上升)

进化算法代码示例

1.问题表示;

2.评估函数;

3.种群;

4.父代选择机制;

5.变异操作算子,包括重组和突变;

6.生存选择机制。

将loss作为优化目标。

Hardware-Aware-Transformers开源项目笔记,NAS,transformer,NLP

搜索算法如下所示:

Hardware-Aware-Transformers开源项目笔记,NAS,transformer,NLP

注意搜索子网络的过程中没有训练

Hardware-Aware-Transformers开源项目笔记,NAS,transformer,NLP

进化搜索参数

种群大小 125,母种群大小 25,重组 (Crossover) 种群大小 50,突变 (Mutation) 种群大小 50,0.3 突变几率。

每个硬件提供了2000个样本,按照8:1:1的方法划分数据集, 训练了一个三层的MLPLatency Predictor只用在搜索过程中,在最后实验的时候还是用的真实测得的Latency

开源项目Evolutionary Search

https://github.com/mit-han-lab/hardware-aware-transformers

训练好的SuperTransformer中进行进化搜索,并在搜索循环中增加硬件延迟约束。我们训练一个延迟预测器,以快速获得准确的延迟反馈。

1 生成延迟的数据集
python latency_dataset.py --configs=configs/[task_name]/latency_dataset/[hardware_name].yml
# for example
python latency_dataset.py --configs=configs/wmt14.en-de/latency_dataset/cpu_raspberrypi.yml

hardware_name 可以是 cpu_raspberrypi,cpu_xeon and gpu_titanxp.

--configs 文件为设计空间,在其中对模型进行采样以获得(model_architecture, real_latency)数据对。

--configs 文件示例如下

lat-dataset-path: ./latency_dataset/wmt14ende_gpu_titanxp.csv
lat-dataset-size: 2000
latgpu: True
latiter: 20 #循环20次获取硬件推理性能
latsilent: True
# below is the configs for the data point sampling space for the latency predictor

# model
arch: transformersuper_wmt_en_de
share-all-embeddings: True
max-tokens: 4096
data: data/binary/wmt16_en_de

# SuperTransformer configs
encoder-embed-dim: 640
decoder-embed-dim: 640
encoder-ffn-embed-dim: 3072
decoder-ffn-embed-dim: 3072
encoder-layers: 6
decoder-layers: 6
encoder-attention-heads: 8
decoder-attention-heads: 8

qkv-dim: 512
# SubTransformers search space
encoder-embed-choice: [640, 512]
decoder-embed-choice: [640, 512]

encoder-ffn-embed-dim-choice: [3072, 2048, 1024, 512]
decoder-ffn-embed-dim-choice: [3072, 2048, 1024, 512]

encoder-layer-num-choice: [6]
decoder-layer-num-choice: [6, 5, 4, 3, 2, 1]

encoder-self-attention-heads-choice: [8, 4, 2]
decoder-self-attention-heads-choice: [8, 4, 2]
decoder-ende-attention-heads-choice: [8, 4, 2]

# for arbitrary encoder decoder attention. -1 means attending to last one encoder layer
# 1 means last two encoder layers, 2 means last three encoder layers
decoder-arbitrary-ende-attn-choice: [-1, 1, 2]

latency_dataset目录中有该数据集示例,示例如下
Hardware-Aware-Transformers开源项目笔记,NAS,transformer,NLP

wmt14ende_gpu_titanxp_all.csv中 的数据内容如下,共2000条数据

encoder_embed_dim, #640
encoder_layer_num, #6
encoder_ffn_embed_dim_avg, #1962.666
encoder_self_attention_heads_avg, # 6.0
decoder_embed_dim, #512
decoder_layer_num,  #4
decoder_ffn_embed_dim_avg, #1920.0
decoder_self_attention_heads_avg, #2.5
decoder_ende_attention_heads_avg, # 5.5
decoder_arbitrary_ende_attn_avg, #1.5

latency_mean_encoder, # 5.495
latency_mean_decoder,# 124.549 训练时使用时间为(latency_mean_encoder+latency_mean_decoder)/lat-norm
latency_std_encoder, #0.0519
latency_std_decoder #0.4439

#后4个参数来源np.mean(encoder_latencies), np.mean(decoder_latencies), np.std(encoder_latencies), np.std(decoder_latencies)
2 训练延迟预测器

使用上述收集的数据集训练一个预测器

python latency_predictor.py --configs=configs/[task_name]/latency_predictor/[hardware_name].yml
# for example
python latency_predictor.py --configs=configs/wmt14.en-de/latency_predictor/cpu_raspberrypi.yml --ckpt-path latency_dataset/ckpts/save.pt

–ckpt-path 保存预测器模型输出路径

--configs 文件中包含 预测器模型的结构和训练设置,内容示例如下:

lat-dataset-path: ./latency_dataset/wmt14ende_gpu_titanxp_all.csv #延时数据集
feature-norm: [640, 6, 2048, 6, 640, 6, 2048, 6, 6, 2]
lat-norm: 200 #训练时数据除以200,预测后再乘回来 
feature-dim: 10
hidden-dim: 400
hidden-layer-num: 3
ckpt-path: ./latency_dataset/predictors/wmt14ende_gpu_titanxp.pt
train-steps: 5000
bsz: 128
lr: 1e-5

latency_dataset/predictors 目录中我们提供了预训练的预测器;

延时预测器输入与1中数据集格式一致)是:

1. Encoder layer number, 
2. Encoder Embedding dim,
3. Encoder hidden dim,
4. Encoder average self-attention heads,

5. Decoder layer number,
6. Decoder Embedding dim,
7. Decoder hidden dim

8. Decoder average self-attention heads,
9. average encoder-decoder attention heads,
10. average number of encoder: layers each decoder layer attends (每个decoder层关注的encoder层数量的均值)。

输出是:Predicted Latency。

运行截图示例如下
Hardware-Aware-Transformers开源项目笔记,NAS,transformer,NLP
Hardware-Aware-Transformers开源项目笔记,NAS,transformer,NLP

3 使延时约束运行搜索算法
python evo_search.py --configs=[supertransformer_config_file].yml --evo-configs=[evo_settings].yml
# for example
python evo_search.py --configs=configs/wmt14.en-de/supertransformer/space0.yml --evo-configs=configs/wmt14.en-de/evo_search/wmt14ende_titanxp.yml
  • –write-config-path是输出路径,保存搜索的subtransformer 结构的结果路径;

  • –configs 是SuperTranformer训练配置文件,包括搜索空间配置等,示例如下

# model
arch: transformersuper_wmt_en_de
share-all-embeddings: True
max-tokens: 4096
data: data/binary/wmt16_en_de #数据集

# training settings
optimizer: adam
adam-betas: (0.9, 0.98)
clip-norm: 0.0
weight-decay: 0.0
dropout: 0.3
attention-dropout: 0.1
criterion: label_smoothed_cross_entropy
label-smoothing: 0.1
ddp-backend: no_c10d
fp16: True
# warmup from warmup-init-lr to max-lr (warmup-updates steps); then cosine anneal to lr (max-update - warmup-updates steps)
update-freq: 16
max-update: 40000
warmup-updates: 10000
lr-scheduler: cosine
warmup-init-lr: 1e-7
max-lr: 0.001
lr: 1e-7
lr-shrink: 1
# logging
keep-last-epochs: 20
save-interval: 10
validate-interval: 10
# SuperTransformer configs
encoder-embed-dim: 640
decoder-embed-dim: 640
encoder-ffn-embed-dim: 3072
decoder-ffn-embed-dim: 3072
encoder-layers: 6
decoder-layers: 6
encoder-attention-heads: 8
decoder-attention-heads: 8
qkv-dim: 512
# SubTransformers search space
encoder-embed-choice: [640, 512]
decoder-embed-choice: [640, 512]
encoder-ffn-embed-dim-choice: [3072, 2048, 1024]
decoder-ffn-embed-dim-choice: [3072, 2048, 1024]
encoder-layer-num-choice: [6]
decoder-layer-num-choice: [6, 5, 4, 3, 2, 1]
encoder-self-attention-heads-choice: [8, 4]
decoder-self-attention-heads-choice: [8, 4]
decoder-ende-attention-heads-choice: [8, 4]
# for arbitrary encoder decoder attention. -1 means attending to last one encoder layer
# 1 means last two encoder layers, 2 means last three encoder layers
decoder-arbitrary-ende-attn-choice: [-1, 1, 2]

—evo-configs 包含进化搜索的设置 ,示例如下

#进化算法设置
evo-iter: 30
population-size: 125
parent-size: 25
mutation-size: 50
crossover-size: 50
mutation-prob: 0.3

# 延时预测器模型路径 
ckpt-path: ./latency_dataset/predictors/wmt14ende_gpu_titanxp.pt 
# feature-norm should match with that when train the latency predictor
feature-norm: [640, 6, 2048, 6, 640, 6, 2048, 6, 6, 2]
# lat-norm should match with that when train the latency predictor
lat-norm: 200
# supertransformer 权重路径
restore-file: ./downloaded_models/HAT_wmt14ende_super_space0.pt

# subtransformer配置路径
write-config-path: configs/wmt14.en-de/subtransformer/wmt14ende_titanxp@200ms.yml
# latency constraint
latency-constraint: 200

运行结构图示

Hardware-Aware-Transformers开源项目笔记,NAS,transformer,NLP

4. 训练搜索得到的subTransformer

最后需要从头训练 SubTransformer

python train.py --configs=[subtransformer_architecture].yml --sub-configs=configs/[task_name]/subtransformer/common.yml
# for example
python train.py --configs=configs/wmt14.en-de/subtransformer/wmt14ende_titanxp@200ms.yml --sub-configs=configs/wmt14.en-de/subtransformer/common.yml

参数解释:

–configs 是步骤3中的 --write-config-path路径

–sub-configs 包含SubTransformer的训练设置

Hardware-Aware-Transformers开源项目笔记,NAS,transformer,NLP

5. 根据重训练后的submodel 得到BLEU精度值

Hardware-Aware-Transformers开源项目笔记,NAS,transformer,NLP

代码结构分析

latency_dataset.py

encoder 输入: src_tokens [1, 30]

decoder 输入

​ [5, 1] , 原因是num_beams=5

​ [5, 2]

​ [5, 3]

​ [5, 4]

​ [5, 5]

​ …

​ [5, 30]文章来源地址https://www.toymoban.com/news/detail-806087.html

到了这里,关于Hardware-Aware-Transformers开源项目笔记的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Android图形-Hardware Composer HAL

    目录 一、引言 二、概览 三、实现HWC 3.1 为什么是HWC? 3.2 HWC的支持需求 3.3 HWC的实现思路 3.4 HWC的基元 3.5 HIDL接口 3.6 函数指针 3.7 图层和屏幕句柄 3.8 屏幕合成操作 3.9 多个屏幕 3.10 虚拟屏幕合成 3.10.1 模式 3.10.2 输出格式 3.11 同步fence 3.12 热插拔处理 3.12.1 概念理解 3.12.2 更新

    2024年02月09日
    浏览(29)
  • A2DP Hardware Offload

    关于A2DP硬件卸载功能,描述可以看https://source.android.com/docs/core/connect/bluetooth/hci_requirements#a2dp-hardware-offload-support。 如我在Android Bluetooth A2DP_阅后即奋的博客-CSDN博客中的3.2.7节所述,Audio Stream通过Audio处理器直接发给了BT控制器。 继续以Android手机为例,该功能的开关,可以开发

    2024年02月05日
    浏览(26)
  • 14.2.2 【Linux】software, hardware RAID

    磁盘阵列分为硬件与软件。所谓的硬件磁盘阵列是通过磁盘阵列卡来达成阵列的目的。磁盘阵列卡上面有一块专门的芯片在处理 RAID 的任务,因此在性能方面会比较好。在很多任务 (例如 RAID 5 的同位检查码计算) 磁盘阵列并不会重复消耗原本系统的 I/O 总线,理论上性能会

    2024年02月14日
    浏览(31)
  • ZKP16 Hardware Acceleration of ZKP

    ZK-Learning MOOC课程笔记 The What and Why of Hardware Acceleration Hardware acceleration is the use of dedicated hardware to accelerate an operation so that it runs faster and/or more efficiently. Hardware acceleration can involve optimizing functions and code to use existing hardware (COTS) or it may involve the development of new hardware designed for

    2024年02月05日
    浏览(30)
  • Clone (back up) hard disk (system) | Hardware

    本文约 3825 字,阅读大约需要 10 分钟 A. 可克隆 IDE、SATA、M.2 接口硬盘 IDE接口硬盘: SATA 接口硬盘: M.2接口硬盘: B. 可克隆文件硬盘 C. 可用于备份 / 迁移系统(快照),一块硬盘中存储多个系统分区(仅用于存储) D. 已经过测试可完整克隆的系统:Windows 10 系列、Windows S

    2024年02月15日
    浏览(30)
  • Vivado无法连接hardware的问题(localhost(0)/auto connect失败)

    购买了XILINX ARTIX-7系列的fpga开发板,在vivado上写完代码跑完仿真后进行板级验证,但是在hardware management里中选择auto connect后无法连接到板子。 解决方法: 检查物理连接,保持板子接电且上电了。在建立项目的时候不要选择错板子的型号。 查看USB的驱动有没有安装好。 如果

    2024年02月11日
    浏览(38)
  • [4.9]-AutoSAR零基础学习-(SHE)Secure Hardware Extension规范<1>

    目录 1 术语 2 功能介绍 2.1 简介 2.2 SHE基本要求         SHE(The Secure Hardware Ex

    2024年02月08日
    浏览(27)
  • 开发一个RISC-V上的操作系统(七)—— 硬件定时器(Hardware Timer)

    目录 往期文章传送门 一、硬件定时器 硬件实现 软件实现 二、上板测试 开发一个RISC-V上的操作系统(一)—— 环境搭建_riscv开发环境_Patarw_Li的博客-CSDN博客 开发一个RISC-V上的操作系统(二)—— 系统引导程序(Bootloader)_Patarw_Li的博客-CSDN博客 开发一个RISC-V上的操作系统

    2024年02月12日
    浏览(29)
  • 野火FPGA征途PRO问题解决:1.用QUARTUS 13.0,start为灰色,显示no hardware

    自己是小白,在点亮LED灯的过程中到最后一步时发现start灰色,按照下面的步骤已经解决了。希望对你有帮助。 显示no hardware大概率是因为板子和电脑连接后电脑没有驱动 检查电路板和电脑USB连接无误(dog) 在Windows系统中搜索设备管理器 展开设备管理器的其它设备 找到U

    2024年02月14日
    浏览(41)
  • SpringIoc容器之Aware | 京东云技术团队

    Aware是Spring提供的一个标记超接口,指示bean有资格通过回调样式的方法由Spring容器通知特定的框架对象,以获取到容器中特有对象的实例的方法之一。实际的方法签名由各个子接口确定,但通常只包含一个接受单个参数的void返回方法。 9个内置实现又分两类,前三个为直接调

    2024年02月13日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包