为内存塞不下Transformer犯愁?OpenAI应用AI研究负责人写了份指南(2)

简介: 为内存塞不下Transformer犯愁?OpenAI应用AI研究负责人写了份指南

为了推动 N:M 结构稀疏化,需要将一个矩阵的列拆分为 M 列的多个 slide(也称为 stripe),这样可以很容易地观察到每个 stripe 中的列顺序和 stripe 的顺序对 N:M 稀疏化产生的限制。

Pool 和 Yu 提出了一种迭代式的贪心算法来寻找最优排列,使 N:M 稀疏化的权重幅度最大化。所有通道对都被推测性地交换,并且只采用幅度增加最大的交换,然后生成新的排列并结束单次迭代。贪心算法可能只会找到局部极小值,因此他们引入了两种技术来逃避局部极小值:

1. 有界回归:在实践中,两个随机通道的最大交换次数是固定的。每次搜索只有一个通道可以进行交换,以保持搜索空间宽而浅;2. 窄且深的搜索:选择多个 stripe 并同时优化它们。

图 9. 贪心算法实现迭代地寻找 N:M 稀疏化最佳排列的算法。

与按默认通道顺序对网络进行剪枝相比,如果在剪枝之前对网络进行置换,可以获得更好的性能。

为了从头开始训练具有 N:M 稀疏化的模型,Zhou & Ma 扩展了常用于模型量化中的反向传播更新的 STE,用于幅度剪枝和稀疏参数更新。

STE 计算剪枝后的网络的密集参数的梯度,并将其作为近似值应用于稠密网络 W:

STE 的扩展版本 SR-STE(稀疏精化 STE)通过以下方式更新稠密权重 W:


其中的掩码矩阵,⊙是元素对应位置相乘。SR-STE 通过(1)限制中对权重的剪枝,以及(2)维持中未被剪枝的权重,来防止二进制掩码剧烈变化。

图 10. STE 和 SR-STE 的对比。⊙的比较是元素乘积;⊗是矩阵乘法。

与 STE 或 SR-STE 不同,Top-KAST 方法可以在前向和反向传播的整个训练过程中保持恒定的稀疏性,还不需要使用具有稠密参数或梯度的前向传播。

在训练到第 t 步时,Top-KAST 过程如下:

稀疏前向传递:选择参数的一个子集,包含每层按大小排列的前 K 个参数,限制为权重的前 D 比例。如果时间 t 的参数化 α^t 不在 A^t(活动权重)中,则参数化为零。


其中 TopK (θ,x) 是根据大小排序后从 θ 中的前 x 个权重。

稀疏向后传递:然后将梯度应用于更大的参数子集, 其中 B 包含 (D+M), A⊂B。扩大需要更新的权重比例可以更有效地探索不同的剪枝掩码,从而更有可能将前 D% 的激活权重排列好。


训练分为两个阶段,集合 B∖A 中的附加坐标控制引入的探索量。探索量会在训练过程中逐渐减少,最终掩码会稳定下来。

图 11. Top-KAST 的剪枝掩码会随时间稳定下来。

为了防止马太效应,Top-KAST 通过 L2 正则化损失来惩罚激活权重,以鼓励产生更多新的探索。在更新期间,B∖A 中的参数比 A 受到更多的惩罚以稳定掩码。


稀疏 Transformer

稀疏 Transformer 将 Transformer 架构中的自注意力层和 FFN 层稀疏化,使单个样本推理的速度提高了 37 倍。

图 12. 当在不同网络层上应用稀疏化时,Transformer 模型解码单个 token(非批量推理)的速度。

稀疏 FFN 层:每个 FFN 层包含 2 个 MLP 和中间的一个 ReLU。因为 ReLU 会引入很多零值,所以该方法在激活函数上设计了一个固定结构,来强制要求在一个包含 N 个元素的块中只包含 1 个非零值。稀疏模式是动态的,每个 token 都不同。


其中 Y_(sparse ) 中的每个激活函数结果对应于 W_1 中的一列和 W_2 中的一行。控制器是一个低秩的 bottleneck 全连接层,其中在训练期间使用 argmax 进行推理以选择哪些列应为非零和,以及 Gumbel-softmax 技巧 。因为可以在加载 FFN 权重矩阵之前计算 Controller (x),所以可以知道哪些列将被清零,因此选择不将它们加载到内存中以加快推理速度。

图 13. (a) 稀疏 FFN 层;红色列未加载到内存中以进行更快的推理。(b) 1:4 稀疏度的稀疏 FFN 控制器。

稀疏注意力层:在注意力层中,维度 d_(model) 被划分为 S 个模块,每个模块的大小为 M=d_(model)/S。为了确保每个细分都可以访问嵌入的任何部分,Scaling Transformer 引入了一个乘法层(即,一个乘法层将来自多个神经网络层的输入按元素相乘),它可以表示任意排列,但包含的参数少于全连接层。

给定输入向量 ,乘法层输出


乘法层的输出是一个大小为 的张量。然后由二维卷积层对其进行处理,其中 length 和 S 被视为图像的高度和宽度。这样的卷积层进一步减少了注意力层的参数数量和计算时间。

图 14. (a) 引入乘法层以使分区能够访问嵌入的任何部分。(b) 乘法全连接层和二维卷积层的结合减少了注意力层的参数数量和计算时间。

相关文章
|
22天前
|
人工智能 开发者
OpenVINO™ DevCon中国系列工作坊:AI模型优化与端侧应用落地
解锁AI高效部署新路径,共赴智能创新璀璨未来
60 1
|
29天前
|
存储 人工智能 机器人
别再只做聊天机器人:AI 应用商业闭环的工程落地指南,免费体验中
本文介绍了如何通过阿里云百炼平台创建一个星座运势分析AI智能体,并集成支付宝MCP服务实现支付闭环。解决AI产品无法直接变现的问题,完成“服务-支付-交易”全流程闭环,帮助开发者快速实现商业化。
|
28天前
|
存储 人工智能 运维
|
28天前
|
存储 人工智能 分布式计算
从数据工程师到AI工程师,我的阿里云ODPS应用实践
阿里云DataWorks提供完善的智能计算与多模态数据处理能力,通过Object Table与MaxFrame实现非结构化数据高效治理,结合OSS与AI模型,助力电商、媒体等行业实现数据驱动的智能化升级。
|
30天前
|
人工智能 前端开发 数据库
波动跃迁:基于 Knative 加速 AI Agent 应用落地
Knative 提供了基于请求自动弹性、缩容到 0 以及多版本管理的 Serverless 能力,看如何助力 AI Agent 初创企业快速产品落地。
|
1月前
|
人工智能 自然语言处理 分布式计算
AI 驱动传统 Java 应用集成的关键技术与实战应用指南
本文探讨了如何将AI技术与传统Java应用集成,助力企业实现数字化转型。内容涵盖DJL、Deeplearning4j等主流AI框架选择,技术融合方案,模型部署策略,以及智能客服、财务审核、设备诊断等实战应用案例,全面解析Java系统如何通过AI实现智能化升级与效率提升。
160 0
|
9月前
|
Go 开发工具
百炼-千问模型通过openai接口构建assistant 等 go语言
由于阿里百炼平台通义千问大模型没有完善的go语言兼容openapi示例,并且官方答复assistant是不兼容openapi sdk的。 实际使用中发现是能够支持的,所以自己写了一个demo test示例,给大家做一个参考。
|
6月前
|
机器学习/深度学习 人工智能 开发者
GPT-4o-mini-transcribe:OpenAI 推出实时语音秒转文本模型!高性价比每分钟0.003美元
GPT-4o-mini-transcribe 是 OpenAI 推出的语音转文本模型,基于 GPT-4o-mini 架构,采用知识蒸馏技术,适合在资源受限的设备上运行,具有高效、实时和高性价比的特点。
285 2
GPT-4o-mini-transcribe:OpenAI 推出实时语音秒转文本模型!高性价比每分钟0.003美元
|
6月前
|
人工智能 自然语言处理 语音技术
GPT-4o mini TTS:OpenAI 推出轻量级文本转语音模型!情感操控+白菜价冲击配音圈
GPT-4o mini TTS 是 OpenAI 推出的轻量级文本转语音模型,支持多语言、多情感控制,适用于智能客服、教育学习、智能助手等多种场景。
284 2
GPT-4o mini TTS:OpenAI 推出轻量级文本转语音模型!情感操控+白菜价冲击配音圈

热门文章

最新文章