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

【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提供了一套基础组件&#xff0c;类似HTML里的标签元素&#xff0c;不推荐在uni-app中使用使用div等HTML标签。在uni-app中&#xff0c;对应<div>的标签是view&#xff0c;对应<span>的是text&#xff0c;对应<a>的是navigator&#xff0c;常用uni-app…...

基于Amazon Bedrock:一站式多模态数据处理新体验

目录 引言 关于Amazon Bedrock 基础模型体验 1、进入环境 2、发现模型及快速体验 3、打开 Amazon Bedrock 控制台 4、通过 Playgrounds 体验模型 &#xff08;1&#xff09;文本生成 &#xff08;2&#xff09;图片生成 关于资源清理 结束语 引言 在云计算和人工智能…...

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 中一个非常重要的概念&#xff0c;它用于唯一标识 widget 树中的特定 widget&#xff0c;并提供对该 widget 的访问。这在需要跨越 widget 树边界进行交互或在 widget 树重建时保持状态时尤其有用。 GlobalKey 的作用 唯一标…...

vue3 路由守卫

在Vue 3中&#xff0c;路由守卫是一种控制和管理路由跳转的机制。它允许你在执行导航前后进行一些逻辑处理&#xff0c;比如权限验证、数据预取等&#xff0c;从而增强应用的安全性和效率。路由守卫分为几种不同的类型&#xff0c;每种类型的守卫都有其特定的应用场景。 其实路…...

【MATLAB源码-第218期】基于matlab的北方苍鹰优化算法(NGO)无人机三维路径规划,输出做短路径图和适应度曲线.

操作环境&#xff1a; MATLAB 2022a 1、算法描述 北方苍鹰优化算法&#xff08;Northern Goshawk Optimization&#xff0c;简称NGO&#xff09;是一种新兴的智能优化算法&#xff0c;灵感来源于北方苍鹰的捕猎行为。北方苍鹰是一种敏捷且高效的猛禽&#xff0c;广泛分布于北…...

如何控制自己玩手机的时间?两台苹果手机帮助自律

对一些人来说&#xff0c;被智能手机“绑架”是一件心甘情愿的事&#xff0c;和它相处的一天中&#xff0c;不必面对现实的压力&#xff0c;它就像个“舒适区”。这是因为在使用手机的过程中&#xff0c;应用程序&#xff08;尤其是游戏和社交媒体应用&#xff09;会不断刺激大…...

【java-Neo4j 5开发入门篇】-最新Java开发Neo4j

系列文章目录 前言 上一篇文章讲解了Neo4j的基本使用&#xff0c;本篇文章对Java操作Neo4j进行入门级别的阐述&#xff0c;方便读者快速上手对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地址&#xff0c;与服务器建立连接 用户在浏览器地址栏输入一个URL 浏览器开始执行以下三步操作操作&#xff1a;url解析、DNS查询、TCP连接 第一步&#xff1a;URL解析 什么是URL&#xff1f; URL(Uniform Resource Locator&#xff0c;统一资源定位符)是互联网…...

elasticsearch的倒排索引是什么?

大家好&#xff0c;我是锋哥。今天分享关于【elasticsearch的倒排索引是什么&#xff1f;】面试题。希望对大家有帮助&#xff1b; elasticsearch的倒排索引是什么&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 倒排索引&#xff08;Inverted Index&a…...

Ubuntu VNC Session启动chromium和firefox报错

问题描述 VNC客户端连接到Ubuntu Server后&#xff0c;启动chromium和firefox时报错&#xff1a; $ 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添加互联设备参考 效果 首先是连接情况&#xff0c;双端都连接上自建的 Headscale&#xff0c; 手机使用移动流量&#xff0c;测试一下 ping 值 再试试进入游戏 可…...

C++ 编程基础(8)模版 | 8.2、函数模版

文章目录 一、函数模版1、声明与定义2、模版参数3、模板的实例化3.1、隐式实例化3.2、显示实例化 4、模版的特化5、注意事项6、总结 前言&#xff1a; C 函数模板是一种强大的特性&#xff0c;它允许程序员编写与类型无关的代码。通过使用模板&#xff0c;函数或类可以处理不同…...

Android Studio音频视频播放器课程设计

这个项目适合刚刚学习Android studio的初学者&#xff0c;实现音视频的基本播放功能&#xff0c;各项功能的页面都做的比较简单&#xff0c;特别适用于初学者&#xff0c;其特点在于本项目抛开了各种花里胡哨的制作&#xff0c;以最接近初学者的样式画面呈现&#xff0c;完全不…...

速盾:CDN是否支持屏蔽IP?

CDN&#xff08;内容分发网络&#xff09;是一种用于提高网站性能和可靠性的技术&#xff0c;通过将内容分发到距离终端用户更近的节点&#xff0c;减少了数据传输的延迟并提高了用户体验。在CDN中&#xff0c;屏蔽IP是一项重要的功能&#xff0c;可以帮助网站屏蔽无效或恶意请…...

DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径

目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...

从WWDC看苹果产品发展的规律

WWDC 是苹果公司一年一度面向全球开发者的盛会&#xff0c;其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具&#xff0c;对过去十年 WWDC 主题演讲内容进行了系统化分析&#xff0c;形成了这份…...

【决胜公务员考试】求职OMG——见面课测验1

2025最新版&#xff01;&#xff01;&#xff01;6.8截至答题&#xff0c;大家注意呀&#xff01; 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:&#xff08; B &#xff09; A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...

Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!

一、引言 在数据驱动的背景下&#xff0c;知识图谱凭借其高效的信息组织能力&#xff0c;正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合&#xff0c;探讨知识图谱开发的实现细节&#xff0c;帮助读者掌握该技术栈在实际项目中的落地方法。 …...

涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战

“&#x1f916;手搓TuyaAI语音指令 &#x1f60d;秒变表情包大师&#xff0c;让萌系Otto机器人&#x1f525;玩出智能新花样&#xff01;开整&#xff01;” &#x1f916; Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制&#xff08;TuyaAI…...

稳定币的深度剖析与展望

一、引言 在当今数字化浪潮席卷全球的时代&#xff0c;加密货币作为一种新兴的金融现象&#xff0c;正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而&#xff0c;加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下&#xff0c;稳定…...

音视频——I2S 协议详解

I2S 协议详解 I2S (Inter-IC Sound) 协议是一种串行总线协议&#xff0c;专门用于在数字音频设备之间传输数字音频数据。它由飞利浦&#xff08;Philips&#xff09;公司开发&#xff0c;以其简单、高效和广泛的兼容性而闻名。 1. 信号线 I2S 协议通常使用三根或四根信号线&a…...

Python Einops库:深度学习中的张量操作革命

Einops&#xff08;爱因斯坦操作库&#xff09;就像给张量操作戴上了一副"语义眼镜"——让你用人类能理解的方式告诉计算机如何操作多维数组。这个基于爱因斯坦求和约定的库&#xff0c;用类似自然语言的表达式替代了晦涩的API调用&#xff0c;彻底改变了深度学习工程…...

tomcat入门

1 tomcat 是什么 apache开发的web服务器可以为java web程序提供运行环境tomcat是一款高效&#xff0c;稳定&#xff0c;易于使用的web服务器tomcathttp服务器Servlet服务器 2 tomcat 目录介绍 -bin #存放tomcat的脚本 -conf #存放tomcat的配置文件 ---catalina.policy #to…...

Ubuntu系统复制(U盘-电脑硬盘)

所需环境 电脑自带硬盘&#xff1a;1块 (1T) U盘1&#xff1a;Ubuntu系统引导盘&#xff08;用于“U盘2”复制到“电脑自带硬盘”&#xff09; U盘2&#xff1a;Ubuntu系统盘&#xff08;1T&#xff0c;用于被复制&#xff09; &#xff01;&#xff01;&#xff01;建议“电脑…...