当前位置: 首页 > news >正文

完全开源的语言模型学习记录--TrilinearCIM架构

文章目录

    • 在这里插入图片描述
      • 一、一段话总结
      • 二、思维导图
      • 三、详细总结
        • 1. 研究动机与问题
        • 2. 核心技术方案
        • 3. 评估与结果
        • 4. 贡献与结论
      • 四、关键问题与答案

https://arxiv.org/pdf/2604.07628
Trilinear Compute-in-Memory Architecture for Energy-Efficient Transformer Acceleration


一、一段话总结

本文提出TrilinearCIM架构,基于双栅铁电场效应晶体管(DG‑FeFET),通过背栅调制实现三操作数乘累加,在无需运行时非易失性存储器(NVM)重编程的情况下完成Transformer自注意力全流程计算,在BERT‑base与ViT‑base上验证,相比传统FeFET CIM实现最高46.6%能耗降低20.4%延迟降低,9项GLUE任务中7项精度更优,是首个纯NVM核内完成Transformer注意力计算的架构。


二、思维导图

## **研究背景** - Transformer自注意力:O(N²)复杂度、动态Q/K/V - 传统CIM局限:双操作数、需反复NVM写入 - 现有方案:混合CMOS/降写入但未根除 ## **核心创新** - 器件:DG‑FeFET(顶栅存权重、背栅动态调制) - 算子:三操作数MAC(A·B·C) - 数据流:融合投影与注意力、消除中间张量存储 ## **架构设计** - 层级:芯片→Tile→PE→SubArray - 阵列:无选择器结构、两种三线性配置 - 数字单元:Softmax/LayerNorm/GELU专用SFU ## **评估框架** - TransCIM:基于NeuroSim扩展、支持精度/PPA建模 - 配置:7nm CMOS+22nm FeFET、8bit输入权重 ## **实验结果** - 精度:GLUE 7/9任务优于双线性CIM - PPA:能耗-46.6%、延迟-20.4%、面积+37.3% - 消融:1b/6b最优精度、32×32最优延迟 ## **优势与局限** - 优势:零写入、高能效、长序列友好 - 局限:ViT精度下降、需硬件验证

三、详细总结

1. 研究动机与问题
  • Transformer自注意力生成动态Q/K/V矩阵,传统CIM需反复NVM重编程,导致延迟高、能耗大、耐久性差
  • FeFET读写不对称:写入延迟50ns、读取10ns;写入能耗亚pJ级、读取fJ级。
  • BERT‑base单次推理需**~75.5M次写入**,严重限制器件寿命。
2. 核心技术方案

(1)器件基础:DG‑FeFET

  • 顶栅(TG):非易失性存储静态权重。
  • 背栅(BG):挥发性电压调制沟道电导,提供第三操作数通路
  • 电导特性:G D S ( V B G ) ≈ G 0 ⋅ ( 1 + η B G ⋅ V B G ) G_{DS}(V_{BG})≈G_0·(1+η_{BG}·V_{BG})GDS(VBG)G0(1+ηBGVBG),工作区间G 0 ∈ [ 29 , 69 ] μ S G_0∈[29,69]μSG0[29,69]μSη ˉ B G = 0.157 V − 1 \bar{η}_{BG}=0.157V^{-1}ηˉBG=0.157V1

(2)三线性CIM原语

  • 实现三操作数乘累加(Y=A·B·C),替代传统双操作数(输入·权重)。
  • 权重一次性编程,动态操作数通过背栅电压传入,全程无NVM写入

(3)注意力数据流

  1. 缩放Query生成:R 1 = X ⋅ W Q T / d k R_1=X·W_Q^T/\sqrt{d_k}R1=XWQT/dk
  2. 注意力分数合成:R 2 = R 1 ⋅ W K ⋅ X T R_2=R_1·W_K·X^TR2=R1WKXT
  3. Value聚合:R e s u l t = S c o r e ⋅ X ⋅ W V T Result=Score·X·W_V^TResult=ScoreXWVT
  • 优势:消除中间Q/K/V存储,缓冲区需求降低**~3倍**。

(4)硬件架构

  • 层级:芯片级(2×2 Tile)→Tile级(2×2 PE)→PE级(2×2 Array)。
  • 阵列:无选择器DG‑FeFET交叉阵列,列级背栅驱动与DAC。
  • 数字单元:专用SFU执行Softmax、LayerNorm、GELU。
3. 评估与结果

(1)实验配置

  • 模型:BERT‑base、ViT‑base;数据集:GLUE、ImageNet/CIFAR。
  • 工艺:7nm CMOS + 22nm FeFET;阵列:64×64;精度:8bit输入/权重。

(2)精度结果

任务类型对比结果
GLUE(9项)TrilinearCIM在7项优于双线性CIM,MNLI+3.14%、QNLI+3.74%
视觉任务TrilinearCIM略低于双线性,因背栅DAC量化扭曲注意力峰值

(3)PPA结果(BERT‑base)

序列长度指标双线性三线性变化
64延迟(ms)7.636.08-20.4%
64能耗(μJ)1522813-46.6%
128延迟(ms)8.196.67-18.6%
128能耗(μJ)31321889-39.7%
-面积--+37.3%
-TOPS/W9.6813.47+39.2%

(4)消融实验

  • 子阵列:32×32延迟**-40.9%**,64×64能效更高。
  • 精度:1b/6b为最优精度点,能耗-37.5%、延迟-26.0%、面积+32.4%。
  • 序列长度:越长,三线性零写入优势越显著。
4. 贡献与结论
  • 首次实现纯NVM核内Transformer注意力计算零运行时重编程
  • 能效、延迟显著提升,面积开销可控。
  • 更适合NLP长序列场景,视觉任务需算法优化。

四、关键问题与答案

  1. TrilinearCIM的核心创新点是什么?
    答:核心创新是基于DG‑FeFET三操作数CIM原语,利用背栅调制提供第三操作数通路,将静态权重存于顶栅、动态操作数以背栅电压传入,完全消除Transformer注意力推理时的NVM写入,同时融合投影与注意力步骤,降低缓冲区需求约3倍。

  2. TrilinearCIM相比传统CIM的性能收益与代价是什么?
    答:收益为最高46.6%能耗降低、20.4%延迟降低、TOPS/W提升39.2%,9项GLUE任务7项精度更优;代价是37.3%面积增加,ViT视觉任务精度因背栅DAC量化有所下降。

  3. 为何TrilinearCIM在NLP任务表现更好,而视觉任务稍弱?
    答:NLP任务对噪声鲁棒性强,小扰动不改变注意力结果;ViT注意力分布稀疏、存在高幅值峰值,背栅DAC的均匀量化会扭曲关键峰值,且ViT激活通道方差更大,放大量化误差,导致精度下降。


》实战测试,随着序列长度以及隐藏层维度的升高,虽然内存下降,但是时耗明显增高

importnumpyasnpimporttime# -----------------------------------------------------------------------------# 优化版:传统注意力(高维 + 长序列 专用)# -----------------------------------------------------------------------------deftraditional_attention_fast(X,Wq,Wk,Wv,d_k,block=512):N,d=X.shape out=np.zeros((N,d_k),dtype=np.float16)foriinrange(0,N,block):Xi=X[i:i+block]Qi=Xi @ Wq.T Ki=X @ Wk.T Vi=X @ Wv.T score=(Qi @ Ki.T)/np.sqrt(d_k)attn=np.exp(score)/np.sum(np.exp(score),axis=-1,keepdims=True)out[i:i+block]=attn @ Vireturnout# -----------------------------------------------------------------------------# 极速版:TrilinearCIM 注意力(高维最强,不生成Q/K/V)# -----------------------------------------------------------------------------deftrilinear_attention_fast(X,Wq,Wk,Wv,d_k,block=512):N,d=X.shape out=np.zeros((N,d_k),dtype=np.float16)foriinrange(0,N,block):Xi=X[i:i+block]R1i=(Xi @ Wq.T)/np.sqrt(d_k)score=R1i @ Wk @ X.T attn=np.exp(score)/np.sum(np.exp(score),axis=-1,keepdims=True)out[i:i+block]=attn @ X @ Wv.Treturnout# -----------------------------------------------------------------------------# 测试:长序列 1w + 高维度 768/1024# -----------------------------------------------------------------------------if__name__=="__main__":SEQ_LEN=10000HIDDEN_DIM=128# 你可以改成 512/768/1024 测试D_K=64print(f"序列长度:{SEQ_LEN}")print(f"隐藏维度:{HIDDEN_DIM}")# 数据X=np.random.randn(SEQ_LEN,HIDDEN_DIM).astype(np.float16)Wq=np.random.randn(D_K,HIDDEN_DIM).astype(np.float16)Wk=np.random.randn(D_K,HIDDEN_DIM).astype(np.float16)Wv=np.random.randn(D_K,HIDDEN_DIM).astype(np.float16)# 传统t0=time.time()out_trad=traditional_attention_fast(X,Wq,Wk,Wv,D_K)t1=time.time()# 三线性out_tri=trilinear_attention_fast(X,Wq,Wk,Wv,D_K)t2=time.time()# 对比print(f"\n传统耗时:{t1-t0:.2f}s")print(f"三线性耗时:{t2-t1:.2f}s")print(f"🚀 三线性 加速比:{(t1-t0)/(t2-t1):.2f}x")
# cpu测试结果传统耗时:126.50s 三线性耗时:796.03s 🚀 三线性 加速比:0.16x
  • gpu
importtorchimporttime# 检查GPUdevice=torch.device("cuda"iftorch.cuda.is_available()else"cpu")print("使用设备:",device)# -----------------------------------------------------------------------------# 传统注意力(GPU)# -----------------------------------------------------------------------------deftraditional_attention_gpu(X,Wq,Wk,Wv,d_k):Q=X @ Wq.T K=X @ Wk.T V=X @ Wv.T score=(Q @ K.T)/torch.sqrt(torch.tensor(d_k,dtype=X.dtype))attn=torch.softmax(score,dim=-1)out=attn @ Vreturnout# -----------------------------------------------------------------------------# TrilinearCIM 三线性注意力(GPU,无Q/K/V中间张量)# -----------------------------------------------------------------------------deftrilinear_attention_gpu(X,Wq,Wk,Wv,d_k):R1=(X @ Wq.T)/torch.sqrt(torch.tensor(d_k,dtype=X.dtype))score=R1 @ Wk @ X.T attn=torch.softmax(score,dim=-1)out=attn @ X @ Wv.Treturnout# -----------------------------------------------------------------------------# 超长篇 + 高维度 测试# -----------------------------------------------------------------------------if__name__=="__main__":# 长序列 + 高维度SEQ_LEN=10000HIDDEN_DIM=2048# BERT-base 维度,可改 1024D_K=64# 数据放到 GPUX=torch.randn(SEQ_LEN,HIDDEN_DIM,device=device,dtype=torch.float16)Wq=torch.randn(D_K,HIDDEN_DIM,device=device,dtype=torch.float16)Wk=torch.randn(D_K,HIDDEN_DIM,device=device,dtype=torch.float16)Wv=torch.randn(D_K,HIDDEN_DIM,device=device,dtype=torch.float16)torch.cuda.synchronize()t0=time.time()# 传统out_trad=traditional_attention_gpu(X,Wq,Wk,Wv,D_K)torch.cuda.synchronize()t1=time.time()# 三线性out_tri=trilinear_attention_gpu(X,Wq,Wk,Wv,D_K)torch.cuda.synchronize()t2=time.time()# 误差abs_err=torch.abs(out_trad-out_tri).mean().item()rel_err=abs_err/torch.abs(out_trad).mean().item()# 输出结果print(f"\n📊 序列长度{SEQ_LEN}| 维度{HIDDEN_DIM}| GPU 对比")print(f"传统耗时 :{t1-t0:.3f}s")print(f"三线性耗时 :{t2-t1:.3f}s")print(f"🚀 加速比 :{((t1-t0)/(t2-t1)):.2f}x")print(f"平均绝对误差:{abs_err:.6f}")print(f"平均相对误差:{rel_err:.2%}")
序列长度10000|维度2048|GPU 对比 传统耗时:0.001s 三线性耗时:0.010s 加速比:0.13x 平均绝对误差: nan 平均相对误差: nan%
http://www.cnnetsun.cn/news/2091733.html

相关文章:

  • PyQt QAction类及其应用
  • 既要标准化又要灵活?友为合同管理系统「模板库+条款库起草」:乐高式组装,兼顾风控与个性
  • 涉密场景下,同为科技智能PDU筑牢运维审计防线
  • 091、ComfyUI与稳定扩散WebUI原理与定制:从节点混乱到优雅工作流
  • Redis 分布式锁与 Lua 原子性实践
  • 【GEO】为什么很多本地生活商家接不住 AI 流量?问题不在曝光,而在“临门一脚”
  • 从‘虹猫蓝兔’到终身学习:聊聊Continual Learning如何让AI模型像人一样成长
  • 汉字转拼音工具,即输即转可多格式导出
  • 英雄联盟国服终极换肤神器:R3nzSkin完整使用指南
  • 5分钟掌握WebSite-Downloader:Python网站离线下载终极指南
  • Sun-Panel:打造你的专属NAS门户,从零开始构建高效导航首页
  • DeepSeek V4 × 华为昇腾:国产AI算力推理适配的实质性进展
  • MCP 2026沙箱隔离配置错误率高达67%?3分钟自检清单+5行PowerShell诊断脚本(限首批200名读者获取)
  • LSTM时间序列预测实战:从原理到销售预测应用
  • golang如何集成Qdrant向量数据库_golang Qdrant向量数据库集成策略
  • 别再手动拼接URL了!手把手教你用web-view实现小程序与uni-app H5的优雅双向传参
  • 【工业级MCP网关开发白皮书】:基于C++20/Boost.Asio/FlatBuffers构建延迟<50μs的金融级网关
  • 猫抓cat-catch:浏览器资源嗅探神器,让网页资源下载变得如此简单
  • Agent 在二手车行业的落地实践
  • 终极指南:如何使用ncmdump快速免费解密网易云音乐NCM文件
  • TiDB 实战项目:从需求分析到生产级代码完整记录
  • 考研数学二图鉴——行列式
  • Visual Syslog Server:Windows上最直观的日志监控解决方案
  • SCPI指令获取不求人:以RS FSW为例,手把手教你用SCPI Recorder抓取‘隐藏’命令
  • 如何快速移除Unity游戏马赛克:5分钟完成配置的终极指南
  • AI Coding 选哪一家?2026 全面对比指南
  • 10个实用技巧:用AnimateDiff插件轻松制作AI动画视频
  • DamaiHelper:如何用智能自动化告别演唱会抢票焦虑?
  • 2026 年最新:Anthropic 注册政策变化及应对策略
  • 知识竞赛奖品清单推荐