FasterTransformer :transformer类模型的三种结构

2023-11-12

Transformer是一种基于注意力机制的深度神经网络结构,常用于文本生成、机器翻译等NLP任务。目前常用的Transformer类模型架构主要有三种:

结构 例子
仅编码器(EncoderOnly) bert,T5 输入为一整个句子
仅解码器(DecoderOnly) GPT 输入为掩码后的句子,不断循环得到结果
Encoder-Decoder Transformer 编码器负责将输入序列转换为隐藏状态,解码器则将该隐藏状态作为输入,生成输出序列。

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

Kernel fuse

  • 如图,可见host启动调用GPU会花费很多时间
  • 在实际计算时,cpu和gpu各自计算,如果kernel很小,则gpu就需要等待cpu
    在这里插入图片描述
  • GPU Kernel融合(Kernel Fusion)是一种优化技术,用于将多个GPU内核(Kernel)组合成一个更大的内核,减少内核之间通信和数据传输开销。在GPU编程中,内核是并行执行的函数,用于处理大规模数据集上的计任务。

当存在多个连续的内核时,个内核都需要从全内存中读取数据,并将结果写到全局内存。这涉及到内核之间的数据传输和同步操作,会引入额外延迟和开销而通过融合这些内核,可以减少数据传输和同步次数,从而提整体的性能和效率。

GPU Kernel融合的过程包以下步骤:

  1. 识别可以融合的内核:通过分析内核之间的依赖系和数据访问式,确定哪些内核可以被融合。
  2. 重组内核代码:将个内核的代码合成一个更的内核函数。
  3. 优化内访问:重新安内核中的内访问模式,以最小化全局内存的读写操作。
  4. 合并内核参数将多个内的参数合并为一个内核的参数列表。
  5. 生成融合后的内核根据融合后的代码和参数生成一个新的内函数。

通过GPU Kernel融合,可以减少内核之间的通信和数据传输开销提高GPU程序性能和效率这对于需要执行多个连续计算任务的应用程序特别有益,例如图像处理、机器学习和科学计算等领域。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

KV Cache

https://arxiv.org/pdf/2211.05102.pdf

// https://jaykmody.com/blog/gpt-from-scratch/#decoder-block
def generate(inputs, params, n_head, n_tokens_to_generate):
    from tqdm import tqdm

    for _ in tqdm(range(n_tokens_to_generate), "generating"):  # auto-regressive decode loop
        logits = gpt2(inputs, **params, n_head=n_head)  # model forward pass
        next_id = np.argmax(logits[-1])  # greedy sampling
        inputs.append(int(next_id))  # append prediction to input

    return inputs[len(inputs) - n_tokens_to_generate :]  # only return generated ids
  • GPT类解码器模型,注意力块的输入是q,k,v(和掩码)。实际上可以利用线性变换的线性性质,解码时候q只需要最后一个new_q,前面的没用,用new_q作为q(比如大小为[1,d_k])。然后,需要计算当前输入令牌的new_k(比如大小为[1,d_k])和new_v(比如大小为[1,d_k])。将其附加到现有缓存得到q(比如大小为[n,d_k])和k(比如大小为[n,d_k]),并将其传递给注意块以进行进一步处理atten(new_q, k, v)。但是这时只能输出最后一个的词概率logits, kvcache = gpt2(inputs, **params, n_head=n_head, kvcache=kvcache) # model forward pass,最终代码如下:
// https://jaykmody.com/blog/gpt-from-scratch/#decoder-block
kvcache = None
for _ in tqdm(range(n_tokens_to_generate), "generating"):  # auto-regressive decode loop
    logits, kvcache = gpt2(inputs, **params, n_head=n_head, kvcache=kvcache)  # model forward pass
    next_id = np.argmax(logits[-1])  # greedy sampling
    inputs = np.append(inputs, [next_id])  # append prediction to input

CG

mem reuse

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

FasterTransformer :transformer类模型的三种结构 的相关文章

随机推荐

  • linux-awk命令

    目录 1 linux awk 模糊查询 2 linux awk 取列 2 3 linux awk 多个条件and查询 4 linux awk取列 1 5 linux awk取行 6 linux awk 所有pod日志查询 7 linux a
  • Windows server 2016 部署用户漫游

    所需设备 一台Windows server 2016 两台或者以上win7 win10 环境 Windows server 2016 为域控制器 ip地址为192 168 1 1 24 win7 win10加入域控环境 开始部署用户漫游 创
  • 编程每日一题_C程序设计_逆序的三位数

    问题描述 问题来源 C语言程序设计 浙江大学翁老师 改编 有多组数据 每组数据为一个整型正三位数 当输入一组数据时 程序输出按位序逆序的数字 若输入数字结尾为零时 输出不应有前导的零 输入格式 每个测试有多组数据 每组均为一个三位的正整数
  • [4G&5G专题-130]:RF- 软件架构

    作者主页 文火冰糖的硅基工坊 https blog csdn net HiWangWenBing 本文网址 https blog csdn net HiWangWenBing article details 119731935 目录 第1章
  • java中的静态变量的作用域_详解JAVA中static的作用

    1 深度总结 引用一位网友的话 说的非常好 如果别人问你static的作用 如果你说静态修饰 类的属性 和 类的方法 别人认为你是合格的 如果是说 可以构成 静态代码块 那别人认为你还可以 如果你说可以构成 静态内部类 那别人认为你不错 如
  • MIFARE 处理 7字节UID卡片

    免费的东西被人传到CSDN居然收费 需要的请参考参考 https www nxp com docs en application note AN10927 pdf
  • C++小游戏—猜数字

    今天我们用C 语言来制作一个小游戏 猜数字 include
  • 医学图像数据集下载地址

    有些需要富强文明上网 1 ACDC dataset Human Heart Project 2 Brain Tumor Segmentation BraTS 2019 MICCAI s Dataset on Brain Tumor Segm
  • 【Git 教程系列第 27 篇】ssh: connect to host github.com port 22: Connection refused 的解决方案

    这是 Git 教程系列第 27 篇 如果觉得有用的话 欢迎关注专栏 文章目录 一 问题描述 二 解决方案 一 问题描述 自己的一个 git 项目 昨天在公司正常 push 的时候 提示文字信息如下 ssh connect to host g
  • mysql join 循环_MySQL中Join的基本实现原理

    在 MySQL 中 只有一种 Join 算法 就是大名鼎鼎的 Nested Loop Join 他没有其他很多数据库所提供的 Hash Join 也没有 Sort Merge Join 顾名思义 Nested Loop Join 实际上就是
  • 强势出圈!当NFT头像袭来,你pick哪一款?

    NFT有多火爆 看看余文乐的新头像就知道了 余文乐instagram用的头像正是CryptopPunks 加密朋克 系列 不止余文乐 姚明 村上隆 锡安 威廉姆森 阿姆 撒盐哥等等弄潮儿纷纷打卡加密艺术 名人效应对NFT的强势崛起起着强有力
  • QVector、QList、QLinkedList类用法区别

    QVector QList QLinkedList类用法区别 1 QVector 是提供动态数组的一个模板类 QList 是提供列表的一个模板类 QLinkedList 是提供链表的一个模板类 2 QVector
  • 【比赛合集】50+场可报名的数据挖掘奖金赛,任君挑选!

    CompHub 实时聚合多平台的数据类 Kaggle 天池 和OJ类 Leetcode 牛客 比赛 本账号同时会推送最新的比赛消息 欢迎关注 近期CompHub对进行中的比赛增加了 是否可报名 的识别 你可以直接在CompHub中浏览当前可
  • QLineEdit用正则限制文本框的输入内容+正则表达式语法

    参考文章 QLineEdit输入限制 使用正则表达式限制输入浮点数 QRegExp rx 0 1 9 0 9 0 5 d 1 4 t 使用正则表达式限制只能输入数字 QRegExp rx 0 9 QRegExpValidator valid
  • 【插入排序算法】

    1 请设计直接插入排序算法 折半插入排序算法 希尔排序算法 输出每一趟的排序结果 2 源码 include
  • MMU基本概念及工作原理

    1 什么是MMU MMU是 MemoryManagementUnit 的缩写即 内存管理单元 针对各种CPU MMU是个可选的配件 MMU负责的是虚拟地址与物理地址的转换 提供硬件机制的内存访问授权 现代 CPU 的应用中 基本上都选择了使
  • qt creator各个部件显示图片总结

    在工作中 UI设计经常需要显示各式各样的图片 下面就总结了qt如何在一些部件中显示图片的方式 一 QFrame或者QWidget显示图片 在属性stylesheet中填写 loginBoxFrame border image url ico
  • 经验分享:使用谷歌浏览器下载想要的任意网页视频/音乐的方法

    在上网的时候 有些时候看到好看的视频或者需要下载需要的视频 音乐 尤其是那种在网页上面的视频 音乐 想要下载 但是根本没有下载按钮 那怎么下载呢 其实步骤很简单 只需要电脑上安装的有谷歌浏览器 轻松解决这个下载不了网页视频 音乐的问题 通过
  • Android 一个动态获取View宽高的方法

    使用场景可以为已经绘画出的view 想根据比例动态改变宽高 public class ViewUtil public static void getViewWidth final View view final OnViewListener
  • FasterTransformer :transformer类模型的三种结构

    Transformer是一种基于注意力机制的深度神经网络结构 常用于文本生成 机器翻译等NLP任务 目前常用的Transformer类模型架构主要有三种 结构 例子 仅编码器 EncoderOnly bert T5 输入为一整个句子 仅解码