【LLM训练系列02】如何找到一个大模型Lora的target_modules
方法1:观察attention中的线性层
import numpy as np
import pandas as pd
from peft import PeftModel
import torch
import torch.nn.functional as F
from torch import Tensor
from transformers import AutoTokenizer, AutoModel, BitsAndBytesConfig
from typing import List
from tqdm.auto import tqdm
from sentence_transformers import SentenceTransformer
import os
os.environ['CUDA_VISIBLE_DEVICES']='1,2'
os.environ["TOKENIZERS_PARALLELISM"] = "false"model_path ="/home/jovyan/codes/llms/Qwen2.5-14B-Instruct"
base_model = AutoModel.from_pretrained(model_path, device_map='cuda:0',trust_remote_code=True)
打印attention模型层的名字
for name, module in base_model.named_modules():if 'attn' in name or 'attention' in name: # Common attention module namesprint(name)for sub_name, sub_module in module.named_modules(): # Check sub-modules within attentionprint(f" - {sub_name}")
方法2:通过bitsandbytes量化查找线性层
import bitsandbytes as bnb
def find_all_linear_names(model):lora_module_names = set()for name, module in model.named_modules():if isinstance(module, bnb.nn.Linear4bit):names = name.split(".")# model-specificlora_module_names.add(names[0] if len(names) == 1 else names[-1])if "lm_head" in lora_module_names: # needed for 16-bitlora_module_names.remove("lm_head")return list(lora_module_names)
加载模型
bnb_config = BitsAndBytesConfig(load_in_4bit=True,bnb_4bit_use_double_quant=True,bnb_4bit_quant_type="nf4",bnb_4bit_compute_dtype=torch.bfloat16)
base_model = AutoModel.from_pretrained(model_path,quantization_config=bnb_config,device_map="auto")
查找Lora的目标层
find_all_linear_names(base_model)
还有个函数,一样的原理
def find_target_modules(model):# Initialize a Set to Store Unique Layersunique_layers = set()# Iterate Over All Named Modules in the Modelfor name, module in model.named_modules():# Check if the Module Type Contains 'Linear4bit'if "Linear4bit" in str(type(module)):# Extract the Type of the Layerlayer_type = name.split('.')[-1]# Add the Layer Type to the Set of Unique Layersunique_layers.add(layer_type)# Return the Set of Unique Layers Converted to a Listreturn list(unique_layers)find_target_modules(base_model)
方法3:通过分析开源框架的源码swift
代码地址
from collections import OrderedDict
from dataclasses import dataclass, field
from typing import List, Union@dataclass
class ModelKeys:model_type: str = Nonemodule_list: str = Noneembedding: str = Nonemlp: str = Nonedown_proj: str = Noneattention: str = Noneo_proj: str = Noneq_proj: str = Nonek_proj: str = Nonev_proj: str = Noneqkv_proj: str = Noneqk_proj: str = Noneqa_proj: str = Noneqb_proj: str = Nonekva_proj: str = Nonekvb_proj: str = Noneoutput: str = None@dataclass
class MultiModelKeys(ModelKeys):language_model: Union[List[str], str] = field(default_factory=list)connector: Union[List[str], str] = field(default_factory=list)vision_tower: Union[List[str], str] = field(default_factory=list)generator: Union[List[str], str] = field(default_factory=list)def __post_init__(self):# compatfor key in ['language_model', 'connector', 'vision_tower', 'generator']:v = getattr(self, key)if isinstance(v, str):setattr(self, key, [v])if v is None:setattr(self, key, [])LLAMA_KEYS = ModelKeys(module_list='model.layers',mlp='model.layers.{}.mlp',down_proj='model.layers.{}.mlp.down_proj',attention='model.layers.{}.self_attn',o_proj='model.layers.{}.self_attn.o_proj',q_proj='model.layers.{}.self_attn.q_proj',k_proj='model.layers.{}.self_attn.k_proj',v_proj='model.layers.{}.self_attn.v_proj',embedding='model.embed_tokens',output='lm_head',
)INTERNLM2_KEYS = ModelKeys(module_list='model.layers',mlp='model.layers.{}.feed_forward',down_proj='model.layers.{}.feed_forward.w2',attention='model.layers.{}.attention',o_proj='model.layers.{}.attention.wo',qkv_proj='model.layers.{}.attention.wqkv',embedding='model.tok_embeddings',output='output',
)CHATGLM_KEYS = ModelKeys(module_list='transformer.encoder.layers',mlp='transformer.encoder.layers.{}.mlp',down_proj='transformer.encoder.layers.{}.mlp.dense_4h_to_h',attention='transformer.encoder.layers.{}.self_attention',o_proj='transformer.encoder.layers.{}.self_attention.dense',qkv_proj='transformer.encoder.layers.{}.self_attention.query_key_value',embedding='transformer.embedding',output='transformer.output_layer',
)BAICHUAN_KEYS = ModelKeys(module_list='model.layers',mlp='model.layers.{}.mlp',down_proj='model.layers.{}.mlp.down_proj',attention='model.layers.{}.self_attn',qkv_proj='model.layers.{}.self_attn.W_pack',embedding='model.embed_tokens',output='lm_head',
)YUAN_KEYS = ModelKeys(module_list='model.layers',mlp='model.layers.{}.mlp',down_proj='model.layers.{}.mlp.down_proj',attention='model.layers.{}.self_attn',qk_proj='model.layers.{}.self_attn.qk_proj',o_proj='model.layers.{}.self_attn.o_proj',q_proj='model.layers.{}.self_attn.q_proj',k_proj='model.layers.{}.self_attn.k_proj',v_proj='model.layers.{}.self_attn.v_proj',embedding='model.embed_tokens',output='lm_head',
)CODEFUSE_KEYS = ModelKeys(module_list='gpt_neox.layers',mlp='gpt_neox.layers.{}.mlp',down_proj='gpt_neox.layers.{}.mlp.dense_4h_to_h',attention='gpt_neox.layers.{}.attention',o_proj='gpt_neox.layers.{}.attention.dense',qkv_proj='gpt_neox.layers.{}.attention.query_key_value',embedding='gpt_neox.embed_in',output='gpt_neox.embed_out',
)PHI2_KEYS = ModelKeys(module_list='transformer.h',mlp='transformer.h.{}.mlp',down_proj='transformer.h.{}.mlp.c_proj',attention='transformer.h.{}.mixer',o_proj='transformer.h.{}.mixer.out_proj',qkv_proj='transformer.h.{}.mixer.Wqkv',embedding='transformer.embd',output='lm_head',
)QWEN_KEYS = ModelKeys(module_list='transformer.h',mlp='transformer.h.{}.mlp',down_proj='transformer.h.{}.mlp.c_proj',attention='transformer.h.{}.attn',o_proj='transformer.h.{}.attn.c_proj',qkv_proj='transformer.h.{}.attn.c_attn',embedding='transformer.wte',output='lm_head',
)PHI3_KEYS = ModelKeys(module_list='model.layers',mlp='model.layers.{}.mlp',down_proj='model.layers.{}.mlp.down_proj',attention='model.layers.{}.self_attn',o_proj='model.layers.{}.self_attn.o_proj',qkv_proj='model.layers.{}.self_attn.qkv_proj',embedding='model.embed_tokens',output='lm_head',
)PHI3_SMALL_KEYS = ModelKeys(module_list='model.layers',mlp='model.layers.{}.mlp',down_proj='model.layers.{}.mlp.down_proj',attention='model.layers.{}.self_attn',o_proj='model.layers.{}.self_attn.dense',qkv_proj='model.layers.{}.self_attn.query_key_value',embedding='model.embed_tokens',output='lm_head',
)DEEPSEEK_V2_KEYS = ModelKeys(module_list='model.layers',mlp='model.layers.{}.mlp',down_proj='model.layers.{}.mlp.down_proj',attention='model.layers.{}.self_attn',o_proj='model.layers.{}.self_attn.o_proj',qa_proj='model.layers.{}.self_attn.q_a_proj',qb_proj='model.layers.{}.self_attn.q_b_proj',kva_proj='model.layers.{}.self_attn.kv_a_proj_with_mqa',kvb_proj='model.layers.{}.self_attn.kv_b_proj',embedding='model.embed_tokens',output='lm_head',
)
我的博客即将同步至腾讯云开发者社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=3hiaca88ulogc
相关文章:
【LLM训练系列02】如何找到一个大模型Lora的target_modules
方法1:观察attention中的线性层 import numpy as np import pandas as pd from peft import PeftModel import torch import torch.nn.functional as F from torch import Tensor from transformers import AutoTokenizer, AutoModel, BitsAndBytesConfig from typ…...
uni-app快速入门(八)--常用内置组件(上)
uni-app提供了一套基础组件,类似HTML里的标签元素,不推荐在uni-app中使用使用div等HTML标签。在uni-app中,对应<div>的标签是view,对应<span>的是text,对应<a>的是navigator,常用uni-app…...
基于Amazon Bedrock:一站式多模态数据处理新体验
目录 引言 关于Amazon Bedrock 基础模型体验 1、进入环境 2、发现模型及快速体验 3、打开 Amazon Bedrock 控制台 4、通过 Playgrounds 体验模型 (1)文本生成 (2)图片生成 关于资源清理 结束语 引言 在云计算和人工智能…...
FAX动作文件优化脚本(MAX清理多余关键帧插件)
大较好,为大家介绍一个节省FBX容量的插件!只保留有用的动画轴向,其他不参与动画运动的清除! 一.插件目的:: 1.我们使用的U3D引擎产生的游戏资源包容量太大,故全方位优化动画资源; 2.在max曲线编辑器内,点取轴向太过麻烦,费事,直观清除帧大大提高效率。 如: 二:…...
Chapter 2 - 16. Understanding Congestion in Fibre Channel Fabrics
Transforming an I/O Operation to FC frames A read or write I/O operation (Figure 2-28) between an initiator and a target undergoes a series of transformations before being transmitted on a Fibre Channel link. 启动程序和目标程序之间的读取或写入 I/O 操作(图…...
mysql数据库(六)pymysql、视图、触发器、存储过程、函数、流程控制、数据库连接池
pymysql、视图、触发器、存储过程、函数、流程控制、数据库连接池 文章目录 pymysql、视图、触发器、存储过程、函数、流程控制、数据库连接池一、pymysql二、视图三、触发器四、存储过程五、函数六、流程控制七、数据库连接池 一、pymysql 可以使用pip install pymysql安装py…...
RFdiffusion EuclideanDiffuser类解读
EuclideanDiffuser 是 RFdiffusion 中的一个关键类,专门设计用于对**三维空间中的点(如蛋白质的原子坐标)**进行扩散处理。它通过逐步向这些点添加噪音来实现扩散过程,从而为扩散模型提供输入数据,并通过逆扩散还原这些数据。 get_beta_schedule函数源代码 def get_beta…...
Flutter实现气泡提示框学习
前置知识点学习 GlobalKey GlobalKey 是 Flutter 中一个非常重要的概念,它用于唯一标识 widget 树中的特定 widget,并提供对该 widget 的访问。这在需要跨越 widget 树边界进行交互或在 widget 树重建时保持状态时尤其有用。 GlobalKey 的作用 唯一标…...
vue3 路由守卫
在Vue 3中,路由守卫是一种控制和管理路由跳转的机制。它允许你在执行导航前后进行一些逻辑处理,比如权限验证、数据预取等,从而增强应用的安全性和效率。路由守卫分为几种不同的类型,每种类型的守卫都有其特定的应用场景。 其实路…...
【MATLAB源码-第218期】基于matlab的北方苍鹰优化算法(NGO)无人机三维路径规划,输出做短路径图和适应度曲线.
操作环境: MATLAB 2022a 1、算法描述 北方苍鹰优化算法(Northern Goshawk Optimization,简称NGO)是一种新兴的智能优化算法,灵感来源于北方苍鹰的捕猎行为。北方苍鹰是一种敏捷且高效的猛禽,广泛分布于北…...
如何控制自己玩手机的时间?两台苹果手机帮助自律
对一些人来说,被智能手机“绑架”是一件心甘情愿的事,和它相处的一天中,不必面对现实的压力,它就像个“舒适区”。这是因为在使用手机的过程中,应用程序(尤其是游戏和社交媒体应用)会不断刺激大…...
【java-Neo4j 5开发入门篇】-最新Java开发Neo4j
系列文章目录 前言 上一篇文章讲解了Neo4j的基本使用,本篇文章对Java操作Neo4j进行入门级别的阐述,方便读者快速上手对Neo4j的开发。 一、开发环境与代码 1.docker 部署Neo4j #这里使用docker部署Neo4j,需要镜像加速的需要自行配置 docker run --name…...
Python的3D可视化库 - vedo (1)简介和模块功能概览
文章目录 1. vedo和它支持的功能简介1.1 安装vedo1.2 命令行接口1.3 导出3D文件1.4 文件格式转换 2. vedo模块功能概览2.1 绘制和渲染visual 管理可视化、对象及其属性的显示的基类plotter 3D渲染colors 定义和显示颜色dolfin FEniCS/Dolfin库的支持 2.2 图形数据管理mesh 多边…...
全面解析:HTML页面的加载全过程(一)--输入URL地址,与服务器建立连接
用户输入URL地址,与服务器建立连接 用户在浏览器地址栏输入一个URL 浏览器开始执行以下三步操作操作:url解析、DNS查询、TCP连接 第一步:URL解析 什么是URL? URL(Uniform Resource Locator,统一资源定位符)是互联网…...
elasticsearch的倒排索引是什么?
大家好,我是锋哥。今天分享关于【elasticsearch的倒排索引是什么?】面试题。希望对大家有帮助; elasticsearch的倒排索引是什么? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 倒排索引(Inverted Index&a…...
Ubuntu VNC Session启动chromium和firefox报错
问题描述 VNC客户端连接到Ubuntu Server后,启动chromium和firefox时报错: $ chromium [348564:348564:1117/102143.085649:ERROR:ozone_platform_x11.cc(244)] Missing X server or $DISPLAY [348564:348564:1117/102143.085732:ERROR:env.cc(258)] Th…...
【Tealscale + Headscale + 自建服务器】异地组网笔记
文章目录 效果为什么要用 Headscale云服务器安装 Headscale配置 config.yaml创建反向代理搭建管理 UI授权管理 UI添加互联设备参考 效果 首先是连接情况,双端都连接上自建的 Headscale, 手机使用移动流量,测试一下 ping 值 再试试进入游戏 可…...
C++ 编程基础(8)模版 | 8.2、函数模版
文章目录 一、函数模版1、声明与定义2、模版参数3、模板的实例化3.1、隐式实例化3.2、显示实例化 4、模版的特化5、注意事项6、总结 前言: C 函数模板是一种强大的特性,它允许程序员编写与类型无关的代码。通过使用模板,函数或类可以处理不同…...
Android Studio音频视频播放器课程设计
这个项目适合刚刚学习Android studio的初学者,实现音视频的基本播放功能,各项功能的页面都做的比较简单,特别适用于初学者,其特点在于本项目抛开了各种花里胡哨的制作,以最接近初学者的样式画面呈现,完全不…...
速盾:CDN是否支持屏蔽IP?
CDN(内容分发网络)是一种用于提高网站性能和可靠性的技术,通过将内容分发到距离终端用户更近的节点,减少了数据传输的延迟并提高了用户体验。在CDN中,屏蔽IP是一项重要的功能,可以帮助网站屏蔽无效或恶意请…...
机器学习—学习曲线
学习曲线是帮助理解学习算法如何工作的一种方法,作为它所拥有的经验的函数。 绘制一个符合二阶模型的学习曲线,多项式或二次函数,画出交叉验证错误Jcv,以及Jtrain训练错误,所以在这个曲线中,横轴将是Mtrai…...
在 macOS 和 Linux 中,波浪号 `~`的区别
文章目录 1、在 macOS 和 Linux 中,波浪号 ~macOS示例 Linux示例 区别总结其他注意事项示例macOSLinux 结论 2、root 用户的主目录通常是 /root解释示例切换用户使用 su 命令使用 sudo 命令 验证当前用户总结 1、在 macOS 和 Linux 中,波浪号 ~ 在 macO…...
【Java】实战:多数元素
一、题目描述 给定一个大小为 n 的数组 nums ,返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。 你可以假设数组是非空的,并且给定的数组总是存在多数元素。 示例 1: 输入:nums [3,2,3] 输出&#x…...
一文解决Latex中的eps报错eps-converted-to.pdf not found: using draft setting.
在使用Vscode配的PDFLatex编译IEEE TII的Latex模板时,出现eps文件不能转换为pdf错误,看了几十篇方法都没用,自己研究了半天终于可以正常运行了。主要原因还是Settings.JSON中的PDFLatex模块缺少:"--shell-escape", 命令…...
计算光纤色散带来的相位移动 matlab
需要注意的地方 1.以下内容纯属个人理解,很有可能不准确,请大家仅做参考 2.光速不要直接用3e8 m/s,需要用精确的2.9979.... 3.光的频率无论在真空还是光纤(介质)都是不变的,是固有属性,但是波长lambdac/f在不同的介…...
国内docker pull拉取镜像的解决方法
访问网站,查找该网站上可用的镜像源,然后替换掉下面代码中的hub-mirror.c.163.com: docker pull hub-mirror.c.163.com/library/nginx:latest 另外,进入到镜像之后,可以使用下面的命令查看操作系统版本。 lsb_releas…...
“Kafka面试攻略:核心问题与高效回答”
1,生产者发送消息的原理 发送消息的过程中,涉及到两个线程,main线程和sender线程,main线程会创建一个双端队列,main线程向双端队列发送消息,sender线程从双端队列里拉取消息,发送给Kafka Broke…...
C++ 多线程std::thread以及条件变量和互斥量的使用
前言 本文章主要介绍C11语法中std::thread的使用,以及条件变量和互斥量的使用。 std::thread介绍 构造函数 std::thread 有4个构造函数 // 默认构造函,构造一个线程对象,在这个线程中不执行任何处理动作 thread() noexcept;// 移动构造函…...
新华三H3CNE网络工程师认证—子接口技术
子接口(subinterface)是通过协议和技术将一个物理接口(interface)虚拟出来的多个逻辑接口。在VLAN虚拟局域网中,通常是一个物理接口对应一个 VLAN。在多个 VLAN 的网络上,无法使用单台路由器的一个物理接口…...
【MySQL】InnoDB内存结构
目录 InnoDB内存结构 主要组成 缓冲池 缓冲池的作用 缓冲池的结构 缓冲池中页与页之间连接方式分析 缓冲池如何组织数据 控制块初始化 页面初始化 缓冲池中页的管理 缓冲区淘汰策略 查看缓冲池信息 总结 变更缓冲区-Chang Buffer 变更缓冲区的作用 主要配置选项…...
中国网站建设排名/企业网站搜索优化网络推广
点击上方蓝色字体,选择“标星公众号”优质文章,第一时间送达关注公众号后台回复pay或mall获取实战项目资料视频作者 : 9龙来源:juejin.im/post/6844903849753329678一、引言java8最大的特性就是引入Lambda表达式,即函数式编程&…...
怎么给自己的网站设置关键词/深圳推广公司介绍
oracle 的表空间实例详解查询表空间sql;">SELECT UPPER(F.TABLESPACE_NAME) "表空间名", D.TOT_GROOTTE_MB "表空间大小(M)", D.TOT_GROOTTE_MB - F.TOTAL_BYTES "已使用空间(M)", TO_CHAR(ROUND((D.TOT_GROOTTE_MB - F.TOTAL_…...
广东宇晟建设工程有限公司网站/十大互联网广告公司
在日常开发中我们经常会碰到小数计算,而小数直接计算的话会出现一些小小的错误,如下 System.out.println(1.01 2.02); 复制代码你说能输出什么?3.03?实际上输出的是3.0300000000000002。这是因为不论是float 还是double都是浮点…...
怎么查看网站死链/seo推广沧州公司电话
Hadoop框架自身集成了很多第三方的JAR包库。Hadoop框架自身启动或者在运行用户的MapReduce等应用程序时,会优先查找Hadoop预置的JAR包。这样的话,当用户的应用程序使用的第三方库已经存在于Hadoop框架的预置目录,但是两者的版本不同时&#x…...
网站建设商谈/网络服务器的作用
方法一:循环元素删除 (使用的方式FOR循环操作。不建议使用大数据量的转换。。n*n的循环量) // 删除ArrayList中重复元素 public static void removeDuplicate(List list) { for ( int i 0 ; i < list.size() - 1 ; i …...
便宜虚拟主机做网站备份/公司网站设计的内容有哪些
公司电脑监控软件怎么样?哪家好?目前,许多公司都需要配置电脑监控软件来监控公司电脑,尤其现在公司电脑监控软件在行业内是非常多的,功能也非常强大。超级眼公司电脑监控软件,在监控软件内,企业…...