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

LLaMA-Adapter源码解析

LLaMA-Adapter源码解析

伪代码

def transformer_block_with_llama_adapter(x, gating_factor, soft_prompt):residual =xy= zero_init_attention(soft_prompt, x) # llama-adapter: prepend prefixx= self_attention(x)x = x+ gating_factor * y  # llama-adapter: apply zero_init_attentionx = LayerNorm(x+residual)residual = xx = FullyConnectedLayers(x)x = AdapterLayers(x)x = LayerNorm(x + residual)return x

源码

class Attention(nn.Module):def __init__(self, args: ModelArgs):super().__init__()self.n_local_heads = args.n_heads // fs_init.get_model_parallel_world_size()self.head_dim = args.dim // args.n_headsself.wq = ColumnParallelLinear(args.dim,args.n_heads * self.head_dim,bias=False,gather_output=False,init_method=lambda x: x,)self.wk = ColumnParallelLinear(args.dim,args.n_heads * self.head_dim,bias=False,gather_output=False,init_method=lambda x: x,)self.wv = ColumnParallelLinear(args.dim,args.n_heads * self.head_dim,bias=False,gather_output=False,init_method=lambda x: x,)self.wo = RowParallelLinear(args.n_heads * self.head_dim,args.dim,bias=False,input_is_parallel=True,init_method=lambda x: x,)self.cache_k = torch.zeros((args.max_batch_size, args.max_seq_len, self.n_local_heads, self.head_dim)).cuda()self.cache_v = torch.zeros((args.max_batch_size, args.max_seq_len, self.n_local_heads, self.head_dim)).cuda()self.gate = torch.nn.Parameter(torch.zeros(1))def forward(self, x: torch.Tensor, start_pos: int, freqs_cis: torch.Tensor, mask: Optional[torch.Tensor], adapter=None):bsz, seqlen, _ = x.shapexq, xk, xv = self.wq(x), self.wk(x), self.wv(x)xq = xq.view(bsz, seqlen, self.n_local_heads, self.head_dim)xk = xk.view(bsz, seqlen, self.n_local_heads, self.head_dim)xv = xv.view(bsz, seqlen, self.n_local_heads, self.head_dim)xq, xk = apply_rotary_emb(xq, xk, freqs_cis=freqs_cis)self.cache_k = self.cache_k.to(xq)self.cache_v = self.cache_v.to(xq)self.cache_k[:bsz, start_pos : start_pos + seqlen] = xkself.cache_v[:bsz, start_pos : start_pos + seqlen] = xvkeys = self.cache_k[:bsz, : start_pos + seqlen]values = self.cache_v[:bsz, : start_pos + seqlen]if adapter is not None:adapter_len = adapter.shape[1]adapter_k = self.wk(adapter).view(1, adapter_len, self.n_local_heads, self.head_dim).repeat(bsz, 1, 1, 1)adapter_v = self.wv(adapter).view(1, adapter_len, self.n_local_heads, self.head_dim).repeat(bsz, 1, 1, 1)adapter_k = adapter_k.transpose(1, 2)adapter_v = adapter_v.transpose(1, 2)xq = xq.transpose(1, 2)keys = keys.transpose(1, 2)values = values.transpose(1, 2)scores = torch.matmul(xq, keys.transpose(2, 3)) / math.sqrt(self.head_dim)if mask is not None:scores = scores + mask  # (bs, n_local_heads, slen, cache_len + slen)scores = F.softmax(scores.float(), dim=-1).type_as(xq)output = torch.matmul(scores, values)  # (bs, n_local_heads, slen, head_dim)if adapter is not None:adapter_scores = torch.matmul(xq, adapter_k.transpose(2, 3)) / math.sqrt(self.head_dim)adapter_scores = self.gate * F.softmax(adapter_scores.float(), dim=-1).type_as(xq)output = output + torch.matmul(adapter_scores, adapter_v)output = output.transpose(1, 2).contiguous().view(bsz, seqlen, -1)return self.wo(output)

相关文章:

  • 【数据结构】树家族
  • Linux背景介绍与环境搭建
  • 你的编程能力从什么时候开始突飞猛进?
  • 2014年亚太杯APMCM数学建模大赛A题无人机创造安全环境求解全过程文档及程序
  • 京东大数据平台-第三方京东平台数据查询分析软件系统
  • 【Ubuntu】安装chrome之后无法启动
  • ChatGLM3设置角色和工具调用的解决方案
  • SkyWalking官方文档-1-概述
  • 程序员笔记本电脑选 windows 还是 MAC
  • Spring Boot 面试题——常用注解
  • uniapp原生插件之安卓文字转拼音原生插件
  • VMware 虚拟机安装 CentOS 7
  • vim手册(vim cheatsheet)
  • 论文阅读 - Detecting Social Bot on the Fly using Contrastive Learning
  • WorkManger学习汇总
  • 【跃迁之路】【477天】刻意练习系列236(2018.05.28)
  • AHK 中 = 和 == 等比较运算符的用法
  • in typeof instanceof ===这些运算符有什么作用
  • iOS帅气加载动画、通知视图、红包助手、引导页、导航栏、朋友圈、小游戏等效果源码...
  • JavaScript服务器推送技术之 WebSocket
  • quasar-framework cnodejs社区
  • ReactNative开发常用的三方模块
  • Ruby 2.x 源代码分析:扩展 概述
  • Travix是如何部署应用程序到Kubernetes上的
  • Vue全家桶实现一个Web App
  • 短视频宝贝=慢?阿里巴巴工程师这样秒开短视频
  • 精益 React 学习指南 (Lean React)- 1.5 React 与 DOM
  • 理解在java “”i=i++;”所发生的事情
  • 如何借助 NoSQL 提高 JPA 应用性能
  • 思考 CSS 架构
  • 通过几道题目学习二叉搜索树
  • 中国人寿如何基于容器搭建金融PaaS云平台
  • gunicorn工作原理
  • linux 淘宝开源监控工具tsar
  • 阿里云服务器如何修改远程端口?
  • 容器镜像
  • ​​​​​​​​​​​​​​Γ函数
  • # Python csv、xlsx、json、二进制(MP3) 文件读写基本使用
  • # 学号 2017-2018-20172309 《程序设计与数据结构》实验三报告
  • #FPGA(基础知识)
  • #pragma multi_compile #pragma shader_feature
  • #QT(智能家居界面-界面切换)
  • (10)Linux冯诺依曼结构操作系统的再次理解
  • (C语言)深入理解指针2之野指针与传值与传址与assert断言
  • (DFS + 剪枝)【洛谷P1731】 [NOI1999] 生日蛋糕
  • (附源码)springboot码头作业管理系统 毕业设计 341654
  • (免费领源码)python+django+mysql线上兼职平台系统83320-计算机毕业设计项目选题推荐
  • (转)fock函数详解
  • ***汇编语言 实验16 编写包含多个功能子程序的中断例程
  • .NET Core使用NPOI导出复杂,美观的Excel详解
  • .NET MVC 验证码
  • .net 托管代码与非托管代码
  • .NET处理HTTP请求
  • .net连接MySQL的方法
  • :中兴通讯为何成功