LLM量化

  1. Efficient Finetuning

  2. prefix tuning

针对每种任务,学习prefix vector

启发于prompting,调整上下文内容让模型去输出自己想要的内容

核心就是找到一个上下文去引导模型解决NLP生成任务

传统情况下,我们为了得到想要的结果,会人工去设计一些模版,这被称为硬模板

这种人工设计模版的方式往往需要大量尝试,所以另一种可以通过模型学习的,添加一组没有明确意义的prompt tensor的方式被提出,叫做软模板

实际实现中,就是添加了一个embedding层,形状为prefix_tokens * target_dims,

这个target_dims在p-tuing中就是直接等于hidden_size.

但是prefix-tuning在实验过程中发现这样效果并不好,于是改成在每层都加入prefix_layer,其实就是在每层的attention计算的时候,给K,V tensor(x Wk, x Wv之后的结果)前面拼接prefix tensor

通过上面等式的变换,等式的前部分是不加入prefix向量的初始attention计算的公式,后半部分则是上下文向量无关的部分。通过一个类似门的机制来计算前后两部分的比重

其实就是在原有attention中加入了一个Q tensor和k v的prefix tensor计算attention的过程,结果用门控机制做加和

关于Embedding部分,实现在了一个PrefixEncoder中,作者实验结果中得出,如果仅仅对prefix tensor做优化,结果不稳定,加入一个MLP层会更好,MLP结构就是(hs ->low_dim)+激活函数+(low_dim->hs),就是先降维再升维,训练完后仅保留MLP输出的结果

class PrefixEncoder(torch.nn.Module):  """  The torch.nn model to encode the prefix    Input shape: (batch-size, prefix-length)    Output shape: (batch-size, prefix-length, 2*layers*hidden)    """    def __init__(self, config: ChatGLMConfig):  super().__init__()  self.prefix_projection = config.prefix_projection  if self.prefix_projection:  # Use a two-layer MLP to encode the prefix  kv_size = config.num_layers * config. hidden_dim* 2  self.embedding = torch.nn.Embedding(config.pre_seq_len, kv_size)  self.trans = torch.nn.Sequential(  torch.nn.Linear(kv_size, config.hidden_size),  torch.nn.Tanh(),  torch.nn.Linear(config.hidden_size, kv_size)  )  else:  self.embedding = torch.nn.Embedding(config.pre_seq_len,  config.num_layers * config. hidden_dim * 2)  def forward(self, prefix: torch.Tensor):  if self.prefix_projection:  prefix_tokens = self.embedding(prefix)  past_key_values = self.trans(prefix_tokens)  else:  past_key_values = self.embedding(prefix)  return past_key_values

关于Embedding的维度,输出是hs * layer_nums*2,因为每一层都要加入prefix,所以乘上layer_nums,由于要给K V都拼接,所以乘2

self.prefix_projection用于区分是否要加入MLP结构,这也是区分Prefix tuning和p-tuningV2的一个方式,p-tuning v2中认为中重参数化的方式收益很小,选择不加入MLP层,其他部分基本和Prefix tuing一致。

具体插入过程,在huggingface实现中,是通过past_key_values的方式给巧妙地传递到每层的

Adapter tuing

Lora系列

Efficient Inference

Quantization基础

Post-training quantization (训练完后做量化然后做推理)

Quantization-aware traing(将量化的过程融合到训练里,减少量化损失)

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

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

相关文章

语言:C#

一、VSCode生成exe 二、

EasyRecovery(易恢复) 使用测试及详细使用方法

你有没有因为数据丢失懊悔不已,EasyRecovery(易恢复),来自美国拥有38年数据恢复的软件,只有收费版,重要事情说三遍,EasyRecovery 没有免费版,可以成功找回删除的部分文件&#xff0c…

SQLite .journal 文件

在之前插入大量数据测试的时候,发现在数据库文件同级目录下会产生一个同名.journal的文件,并且不是一直会存在,而是生成一会就会自动删除,然后继续生成继续删除,直到数据插入完成。 初步猜测,应该是类似 re…

增强客户黏性:服装实体店扫码连锁收银软件提供多样的会员营销策略

随着消费者对购物体验的需求不断提升,服装实体店面临着更大的挑战和机遇。为了增强客户黏性,提升销售业绩,越来越多的服装实体店开始引入扫码连锁收银软件,并提供多样化的会员营销策略。这一举措不仅为店铺提供了更加智能化的经营…

C语言——文件相关操作补充

一、文件读取结束的判定 当我们使用例如fgetc、fgets、fscanf、fread等函数来读取文件内容时,我们可能遇到需要判断文件读取的结束,一般情况下都是通过这些函数的返回值来判断文件读取是否结束。 1、fgetc 返回读取的字符的ASCII值,如果读…

Java 守护线程 ( Daemon Thread )详解

在Java中,线程分为两类:用户线程(User Thread)和守护线程(Daemon Thread)。守护线程是后台线程,主要服务于用户线程,当所有的用户线程结束时,守护线程也会自动结束,JVM会随之退出。守护线程的一个典型例子是…

Web前端一套全部清晰 ⑧ day5 CSS.3 选择器、PxCook软件、盒子模型

谁不是一路荆棘而过呢 —— 24.5.12 CSS.3 选择器、PxCook软件、盒子模型 一、选择器 1.结构伪类选择器 1.作用: 根据元素的结构关系查找元素。 选择器 说明 E:first-child 查找第一个 E元素 E:last-child 查找最后一个E元素 E:nth-chil…

【qt】最快的开发界面效率——混合编程

混合编程 一.准备工作1.创建项目2.添加项目资源 二.ui界面设计1.menuBar菜单栏2.action ▲3.toolBar工具栏4.中心组件 三.代码界面设计1.toolBar添加组件2.statusBar状态栏添加组件 四.完成界面的功能1.对action配置信号槽2.对action转到信号槽3.代码添加的组件手动关联槽函数 …

7 Days yo Die 七日杀服务器开服联机教程

1、购买后登录服务器(百度搜索莱卡云)game.lcayun.com 进入控制面板后会出现正在安装的界面,安装时长约5分钟左右 安装成功后你就可以看到我们的控制台界面 复制服务器ip地址打开游戏➡加入游戏 有两种方法加入游戏 第一种方法:…

三. TensorRT基础入门-导出并分析ONNX

目录 前言0. 简述1. generate-onnx2. export-onnx3. 补充-ONNX3.1 概念3.2 组成 总结参考 前言 自动驾驶之心推出的 《CUDA与TensorRT部署实战课程》,链接。记录下个人学习笔记,仅供自己参考 本次课程我们来学习课程第三章—TensorRT 基础入门&#xff0…

redis深入理解之实战

1、SpringBoot整合redis 1.1 导入相关依赖 <dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId> </dependency> <dependency><groupId>org.springframework.boot</groupId><artifactId&g…

纯CSS实现步骤条

纯CSS实现纵向Steps步骤条效果 效果图 实现思路 步骤条是一种用于引导用户按照特定流程完成任务的导航条&#xff0c;在各种分步表单交互场景中广泛应用。步骤条通常由编号、名称和引导线三个基本要素组成。本文中要实现的是一个简单的步骤条&#xff0c;包含上述三个基本要素…

SpringBoot结合Canal 实现数据同步

1、Canal介绍 Canal 指的是阿里巴巴开源的数据同步工具&#xff0c;用于数据库的实时增量数据订阅和消费。它可以针对 MySQL、MariaDB、Percona、阿里云RDS、Gtid模式下的异构数据同步等情况进行实时增量数据同步。 当前的 canal 支持源端 MySQL 版本包括 5.1.x , 5.5.x , 5.6.…

计算机网络技术主要学什么内容,有哪些课程

计算机网络技术专业是一个涉及理论与实践紧密结合的学科&#xff0c;主要学习内容有计算机网络基础、网络设备技术、网络编程等内容&#xff0c;以下是上大学网&#xff08;www.sdaxue.com&#xff09;整理的计算机网络技术主要学什么内容&#xff0c;供大家参考&#xff01; 基…

20.接口自动化-Git

1、Git和SVN–版本控制系统 远程服务出问题后&#xff0c;可以先提交commit到本地仓库&#xff0c;之后再提交push远程仓库 git有clone Git环境组成部分 常用Git代码仓库服务-远程仓库 GitHub-服务器在国外&#xff0c;慢 GitLab-开源&#xff0c;可以在自己服务器搭建&…

根据docker部署nginx并且实现https

目录 一、Docker中启用HTTPS有几个重要的原因 二、https介绍 三、https过程 四、安装docker-20.10.18 五、如何获取证书 通过阿里云获取证书 六、docker部署nginx并且实现https 6.1准备证书 6.2准备nginx.conf 和 index.html文件 6.3生成容器 6.4浏览器验证证书 一、…

ssm120基于SSM框架的金鱼销售平台的开发和实现+jsp

金鱼销售平台 摘 要 随着科学技术的飞速发展&#xff0c;各行各业都在努力与现代先进技术接轨&#xff0c;通过科技手段提高自身的优势&#xff1b;对于金鱼销售平台当然也不能排除在外&#xff0c;随着网络技术的不断成熟&#xff0c;带动了金鱼销售平台&#xff0c;它彻底改…

栈与队列的实现

前言 本次博客将要实现一下栈和队列&#xff0c;好吧 他们两个既可以使用动态数组也可以使用链表来实现 本次会有详细的讲解 栈的实现 栈的基础知识 什么是栈呢&#xff1f; 栈的性质是后进先出 来画个图来理解 当然可不可以出一个进一个呢&#xff0c;当然可以了 比如…

Vue路由开启步骤

1.在控制台输入命令 //控制台下载安装npm add vue-router3.6.5 2.在main.js下导入并注册组件 import Vue from vue import App from ./App.vue//控制台下载安装npm add vue-router3.6.5 //导入 import VueRouter from "vue-router";//注册 Vue.use(VueRouter) con…

IntelliJ的Maven编译返回找不到有效证书

文章目录 小结问题及解决找不到有效证书找不到org.springframework.stereotype.Service问题IntelliJ: Cannot resolve symbol springframework 参考 小结 将IntelliJ工程拷贝到新的机器中&#xff0c;返回Maven编译返回找不到有效证书的问题&#xff0c;进行了解决。 问题及解…