FasterTransformer :transformer类模型的三种结构

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

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

在这里插入图片描述

  • ByteTransformer:针对可变⻓度输⼊进⾏增强的⾼性能变压器 https://arxiv.org/pdf/2210.03052.pdf
  • https://github.com/bytedance/ByteTransformer

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

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 tqdmfor _ in tqdm(range(n_tokens_to_generate), "generating"):  # auto-regressive decode looplogits = gpt2(inputs, **params, n_head=n_head)  # model forward passnext_id = np.argmax(logits[-1])  # greedy samplinginputs.append(int(next_id))  # append prediction to inputreturn 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 looplogits, kvcache = gpt2(inputs, **params, n_head=n_head, kvcache=kvcache)  # model forward passnext_id = np.argmax(logits[-1])  # greedy samplinginputs = np.append(inputs, [next_id])  # append prediction to input

CG

  • http://giantpandacv.com/project/%E9%83%A8%E7%BD%B2%E4%BC%98%E5%8C%96/
  • 智能 CPU 卸载是一种降低显存占用的方法。扩散模型 (如 Stable Diffusion) 的推理并不是运行一个单独的模型,而是多个模型组件的串行推理。如在推理 ControlNet Stable Diffusion 时,需要首先运行 CLIP 文本编码器,其次推理扩散模型 UNet 和 ControlNet,然后运行 VAE 解码器,最后运行 safety checker (安全检查器,主要用于审核过滤违规图像)。而在扩散过程中大多数组件仅运行一次,因此不需要一直占用 GPU 内存。通过启用智能模型卸载,可以确保每个组件在不需要参与 GPU 计算时卸载到 CPU 上,从而显著降低显存占用,并且不会显著增加推理时间 (仅增加了模型在 GPU-CPU 之间的转移时间)。
  • https://zhuanlan.zhihu.com/p/630832593
  • CUDA full GPU acceleration, KV cache in VRAM

mem reuse

  • http://dlsys.cs.washington.edu/pdf/lecture9.pdf

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/76858.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

常微分方程建模R包ecode(二)——绘制相速矢量场

本节中我们考虑一个更为复杂的常微分方程模型, d X C d t ν ( X A Y A ) − β ⋅ X C ⋅ ( Y C Y A ) − ( μ g ) ⋅ X C , ( 1 ) d Y C d t β ⋅ X C ⋅ ( Y C Y A ) − ( μ g ρ ) ⋅ Y C , ( 2 ) d X A d t g ⋅ X C − β ⋅ X A ⋅ ( Y C Y A …

决策树的划分依据之:信息增益率

在上面的介绍中,我们有意忽略了"编号"这一列.若把"编号"也作为一个候选划分属性,则根据信息增益公式可计算出它的信息增益为 0.9182,远大于其他候选划分属性。 计算每个属性的信息熵过程中,我们发现,该属性的值为0, 也就…

selenium官网文档阅读总结(day 2)

1.selenium元素定位方法 1.1selenium命令 当我们使用chormdriver打开网页后,接下来就要用python操作元素,模拟用户会作出的操作,这些操作元素的方法就是命令。比如 (1) click:点击(按钮,单选框&#xff…

【Java】UWB高精度工业人员安全定位系统源码

基于VueSpring boot前后端分离架构开发的一套UWB技术高精度定位系统源码。 UWB高精度人员定位系统提供实时定位、电子围栏、轨迹回放等基础功能以及各种拓展功能,用户可根据实际需要任意选择搭配拓展功能。该系统简易部署,方便使用,实时响应。UWB高精度定…

skywalking全链路追踪

文章目录 一、介绍二、全链路追踪1. 测试1 - 正常请求2. 测试2 - 异常请求 三、过滤非业务请求链路1. 链路忽略插件2. 配置3. 测试 一、介绍 在上一篇文章skywalking安装教程中我们介绍了skywalking的作用以及如何将其集成到我们的微服务项目中。本篇文章我们介绍在微服务架构…

张量Tensor 深度学习

1 张量的定义 张量tensor理论是数学的一个分支学科,在力学中有重要的应用。张量这一术语源于力学,最初是用来表示弹性介质中各点应力状态的,后来张量理论发展成为力学和物理学的一个有力数学工具。 张量(Tensor)是一个…

基于总线加锁和缓存锁(CPU实现原子操作的两种方式)

总线锁 总线锁就是使用处理器提供的一个LOCK#信号,当一个处理器在总线上输出此信号时,其他处理器的请求将被阻塞住,那么该处理器可以独占共享内存。 CPU和内存之间的通信被锁!! 如果多个处理器同时对共享变量进行读写…

解决一个Sqoop抽数慢的问题,yarn的ATSv2嵌入式HBASE崩溃引起

新搭建的一个Hadoop环境,用Sqoop批量抽数的时候发现特别慢,我们正常情况下是一个表一分钟左右,批量抽十几个表,也就是10分钟的样子,结果发现用了2个小时: 查看yarn日志 发现有如下情况: 主要有两…

【java安全】原生反序列化利用链JDK7u21

文章目录 【java安全】原生反序列化利用链JDK7u21前言原理equalsImpl()如何调用equalsImpl()?HashSet通过反序列化间接执行equals()方法如何使hash相等? 思路整理POCGadget为什么在HashSet#add()前要将HashMap的value设为其他值? 【java安全】…

C++二叉搜索树剖析

目录 🍇二叉搜索树概念🍈二叉搜索树查找🍉二叉搜索树的插入🍊二叉搜索树的删除🍍二叉搜索树的查找、插入、删除实现🍋二叉搜索树的应用🥭二叉搜索树的性能分析🍓总结 🍇二…

爬虫教程1_Xpath 入门教程

Xpath 入门教程 在编写爬虫程序的过程中提取信息是非常重要的环节,但是有时使用正则表达式无法匹配到想要的信息,或者书写起来非常麻烦,此时就需要用另外一种数据解析方法,也就是本节要介绍的 Xpath 表达式。 Xpath表达式 XPath…

Java版工程行业管理系统源码-专业的工程管理软件- 工程项目各模块及其功能点清单 em

​ Java版工程项目管理系统 Spring CloudSpring BootMybatisVueElementUI前后端分离 功能清单如下: 首页 工作台:待办工作、消息通知、预警信息,点击可进入相应的列表 项目进度图表:选择(总体或单个)项目…

【Linux 网络】 传输层协议之TCP协议 TCP的三次握手和四次挥手

TCP协议 TCP协议段格式谈谈什么是 “可靠” 和 “不可靠”TCP协议段——序号与确认序号TCP协议段——窗口大小TCP协议段 —— 六个标志位确认应答机制(ACK)超时重传机制连接管理机制TCP 的三次握手四次挥手TCP三次握手四次挥手总结图 滑动窗口流量控制拥…

【Spring Cloud 三】Eureka服务注册与服务发现

系列文章目录 【Spring Cloud一】微服务基本知识 Eureka服务注册与服务发现 系列文章目录前言一、什么是Eureka?二、为什么要有服务注册发现中心?三、Eureka的特性四、搭建Eureka单机版4.1Eureka服务端项目代码pom文件配置文件启动类启动项目查看效果 E…

docker配置远程连接端口

配置docker 配置远程连接端口 vi /lib/systemd/system/docker.servicesystemctl daemon-reload && systemctl restart docker firewall-cmd --zonepublic --add-port2375/tcp --permanenthttp://node2:2375/version

Node.js之express框架学习心得

Node.js:颠覆传统的服务器端开发 Node.js是基于Chrome V8引擎构建的JavaScript运行时,它采用了完全不同的开发模型。Node.js使用事件驱动和非阻塞I/O的方式处理请求,通过单线程和异步机制,实现高效的并发处理。这意味着在Node.js中…

【每日易题】数据结构链表篇——单链表oj题(1),几道典型例题带你快速掌握单链表

君兮_的个人主页 勤时当勉励 岁月不待人 C/C 游戏开发 Hello,米娜桑们,这里是君兮_,今天来填一个埋了好久的坑,在暑假之前就预告过这个系列,但由于各种原因(主要是有点懒)今天才开坑。我们这个系列主要是…

1310. 数三角形

题目链接:https://www.acwing.com/problem/content/1312/ 首先不考虑三点共线的情况一共有 种,现在来计算三点共线的情况 1.三点在一条直线上 2.三点在一条竖线上 3.三点在一条斜线上,正反斜线对称,仅需考虑一边的情况 如果…

视频汇聚平台EasyCVR视频广场侧边栏支持拖拽

为了提升用户体验以及让平台的操作更加符合用户使用习惯,我们在EasyCVR v3.3版本中,支持面包屑侧边栏的广场视频、分组列表、收藏这三个模块拖拽排序,并且该操作在视频广场、视频调阅、电子地图、录像回放等页面均能支持。 TSINGSEE青犀视频…

服务器运行python程序的使用说明

服务器的使用与说明 文章目录 服务器的使用与说明1.登录2.Python的使用2.1 服务器已安装python32.2 往自己的用户目录安装python31.首先下载安装包2.解压缩3.编译与安装 2.3 新建环境变量2.4 测试 3 创建PBS作业并提交 1.登录 windowsr打开运行命令窗口,在运行框中…