
模型微调
文章平均质量分 76
背太阳的牧羊人
管它什么真理无穷,进一寸有一寸的欢喜。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
为什么即使模型已经被 4bit 量化,仍然可以设置 bnb_4bit_compute_dtype=“float16“,并使用 NF4 算法来量化
文章摘要:本文解释了量化LLM模型的存储与计算过程,重点说明4bit量化仅作用于权重存储而非计算阶段。通过BitsAndBytesConfig参数解析,指出4bit权重会在计算时解码为float16进行运算以保持精度。文章对比了NF4先进量化算法与传统方法的区别,并用矩阵示例演示了4bit存储与float16计算的完整流程。最后强调直接4bit运算不可行的原因,以及"存储用4bit、计算用float16"的主流做法,帮助读者理解模型量化中的精度转换原理。原创 2025-06-18 16:37:05 · 524 阅读 · 0 评论 -
BitsAndBytes(简称 BnB)是一个用于“压缩”大语言模型的工具包
**BitsAndBytes(BnB)**是一个用于压缩大语言模型的工具包,能将16/32位模型压缩至4/8位,显著降低显存占用,同时保持较高精度。它通过8-bit和4-bit量化技术实现模型瘦身,支持多种量化模式(如nf4、fp4、int4)。例如,LLaMA 2-7B模型经BnB压缩后,显存需求从14-16GB降至4-5.5GB(4-bit)。开发者只需简单配置即可加载压缩模型,使其能在消费级显卡上高效运行。BnB平衡了精度与资源消耗,是部署大模型到资源有限环境的实用解决方案。原创 2025-06-18 16:29:30 · 1093 阅读 · 0 评论 -
QLoRA和LoRA 微调
QLoRA 其实是一种结合了量化和 LoRA 微调技术的统一方法,而不是同时使用两种不同的微调方式。换句话说,QLoRA 的意思就是:先把大模型的主权重用低精度(例如 4-bit)量化,从而大幅减少存储需求;然后在此基础上,通过 LoRA 技术,仅对少部分参数(比如 1%)进行微调,这部分参数保留在较高的精度(例如 FP16)原创 2025-03-26 22:49:41 · 833 阅读 · 0 评论 -
集群的常见类型
一台计算机可能无法承载这个任务,但是你可以将任务分配给一个集群,集群中的每台计算机(GPU 节点)负责训练模型的一部分。假设你访问一个热门的网站,这个网站有很多服务器组成的集群。现在,假设你有10台计算机(也就是10个节点),这些计算机通过网络连接在一起,形成一个集群。假设你有一个非常大的计算任务,比如需要处理大量的数据,或者训练一个非常大的人工智能模型。例如,在大规模的数据分析或者深度学习训练中,集群会将数据分成小块,每台计算机(节点)处理一小部分数据,最后将结果汇总起来,从而大大加快了计算速度。原创 2025-03-25 17:32:14 · 331 阅读 · 0 评论 -
传统 embedding vs. P-Tuning 里的 embedding
下面使用 P-Tuning 进行文本分类的代码示例,我们使用 Hugging Face 的 transformers 库和 OpenPrompt 框架来实现。✔ 传统 Prompt 是死的,P-Tuning 让 Prompt 变活了(可学习),但 P-Tuning 让提示变成了“可训练的 embedding”作为基础模型,但你也可以用其他支持 P-Tuning 的模型,如。进行文本分类的代码示例,我们使用 Hugging Face 的。,而是让模型学出一组“最优的提示”。,但这个 Prompt 是。原创 2025-03-25 17:06:08 · 1051 阅读 · 0 评论 -
微调参数解释
哪部分是系统提示(例如,角色说明)。哪部分是用户输入。哪部分是模型输出。这种格式化的好处在于,它为模型提供了一个结构化、清晰的对话记录,使模型在理解对话背景和生成符合语境的回复时更有依据,从而提高整体的对话质量。原创 2025-03-25 16:32:54 · 242 阅读 · 0 评论 -
poetry install --with aws
在 Poetry 1.2+ 版本中,引入了 依赖分组(Dependency Groups) 的概念,目的是:更灵活的依赖管理,只安装某些特定功能所需的依赖(比如 AWS、测试、开发)。减少不必要的安装,避免项目安装不需要的依赖(比如仅开发时才需要的工具)。原创 2025-03-25 16:28:24 · 418 阅读 · 0 评论 -
Unsloth 库和Hugging Face Transformers 库对比使用
Unsloth 提供了专门的方法来合并并保存微调适配器和原始模型的权重,适用于需要快速、高效保存合并模型的场景。而 Transformers 库更注重通用性,提供了保存和加载模型的基础方法,但对于特定的微调适配器合并,需要额外的处理。原创 2025-03-25 16:17:06 · 947 阅读 · 0 评论 -
model.save_pretrained_merged(output_dir, tokenizer, save_method=“merged_16bit“)
Unsloth 和 Hugging Face Transformers 的联系与区别联系Unsloth 兼容 Hugging Face Transformers,并使用相同的模型结构,可以加载 HF 训练的模型。两者都支持 LoRA 低秩适配技术,并可以使用 PEFT 进行训练和微调。原创 2025-03-25 16:14:38 · 955 阅读 · 3 评论 -
使用 FastLanguageModel 的 from_pretrained 方法加载一个已经预训练好的大语言模型及其对应的分词器(tokenizer)
简单来说,这段代码就是在告诉系统:“请加载一个名为 ‘meta-llama/Llama-3.1-8B’ 的预训练模型,配置它一次能处理最多2048个 token,并且不要使用4位量化(保持全精度)。”这样做的好处是,你得到一个既能处理长文本又能保持高精度的模型和对应的分词器,方便后续进行微调或推理任务。原创 2025-03-25 16:01:26 · 1773 阅读 · 0 评论 -
使用 SentenceTransformer 加载预训练模型
使用 SentenceTransformer 加载预训练模型 就是利用现成的、经过充分训练的模型,把文本转换为可以进行数值计算的向量,从而帮助你解决各种自然语言处理任务,比如文本分类、信息检索和问答系统等。原创 2025-03-24 15:32:09 · 887 阅读 · 0 评论 -
「instruction-answer pairs」和「instruction-answer triples」的区别和联系
含义:指「指令 (instruction)」和「回答 (answer)」这两部分组成的一对数据。结构:可以想象成一个简单的二元组 (instruction, answer)。示例Instruction: “请计算 2 + 3。在这里,「指令」就是用户要做什么,「回答」就是针对该指令给出的答案。含义:在「指令」和「回答」的基础上,多出一个额外的部分,形成一个三元组。原创 2025-03-23 14:11:45 · 617 阅读 · 0 评论 -
指令型样本或偏好型样本有什么区别和联系
种样本都是从相同的上下文中提取信息,生成的基础流程类似,都需要构造提示(prompt)、调用大语言模型生成文本,并根据生成的文本构建样本数据。都用于提升模型的表现,但关注的训练信号不同。区别:目标不同:指令型样本用于让模型学会直接响应用户指令;偏好型样本则用于训练模型判断哪种回答更好,从而在排序、奖励信号等方面改进模型表现。数据结构不同:指令型样本通常只有一对问答;而偏好型样本包含多个候选答案,明确指出哪一个更符合预期。训练方式不同:前者一般用于监督微调,后者常用于偏好学习或强化学习,目的是训练原创 2025-03-21 17:58:59 · 380 阅读 · 0 评论 -
AutoModelForCausalLM, AutoTokenizer简单理解
AutoModelForCausalLM 代表 "自动加载一个因果语言模型",它就是 LLaMA、Mistral、GPT-3 这类模型的载体。AutoModelForCausalLM 的作用加载预训练好的 LLM(比如 LLaMA-3-8B、Mistral-7B)根据输入文本,生成新的文本(进行对话、回答问题等)原创 2025-03-14 15:52:33 · 995 阅读 · 0 评论 -
LLaMA-Factory 训练数据默认使用 instruction、input、output 三个 key
LLaMA-Factory 训练数据默认使用 instruction、input、output 三个 key。✅ 确保 JSON 格式正确,否则模型无法正确学习。✅ 如果要自定义 key,建议修改 LLaMA-Factory 的代码(不推荐),或保持默认格式。✅ 数据结构要根据任务类型调整,比如:问答、闲聊:instruction + output翻译任务:instruction + input + output代码生成:instruction + output文本摘要:instructio原创 2025-03-14 11:45:14 · 1470 阅读 · 0 评论 -
P-Tuning 的超参数 pre_seq_len=128,表示它给模型加了 128 个可训练的前缀 token,用来优化模型的输出
Token 就是文本的最小单位,比如一个字、一个词或标点。P-Tuning 的 pre_seq_len=128 意思是:在输入文本前 加 128 个“训练出来的前缀 token”,这些 token 可以帮助模型更好地理解任务,提高回答质量。这些前缀 token 不是人手写的,而是模型训练出来的参数,类似于“给模型偷偷加个提示,让它答得更好”。原创 2025-03-14 11:21:01 · 348 阅读 · 0 评论 -
max_samples,batch_size,gradient_accumulation_steps这三个分别的联系和区别
- **max_samples** → 控制 **一共要用多少训练数据**,影响 **训练时间**。- **batch_size** → 控制 **每次送入 GPU 计算的数据量**,影响 **计算效率和显存占用**。- **gradient_accumulation_steps** → **累积多个 batch 计算后,才更新参数**,可以 **在小 batch 训练时,模拟大 batch 训练**,降低显存占用。原创 2025-03-14 11:00:01 · 1185 阅读 · 0 评论 -
系统 RAM,内存,CPU和GPU这四种的区别和联系
都是 计算机硬件,它们各自承担不同的工作,协同完成任务。:Graphics Processing Unit(图形处理单元):Central Processing Unit(中央处理器)(数据)都要先放在这里,厨师(CPU/GPU)才能加工。(就像你下班了,工作台上的东西全被清理,啥也不留)。:临时存储数据,CPU 和 GPU 在这里“做事”(就像工作台大了,可以同时做多个汉堡)。(就像主厨抢助厨的桌子用,效率下降)。,就像主厨负责指挥整个厨房运作。,但如果要训练完整模型,(模型数据主要放这里)原创 2025-03-14 10:17:40 · 1485 阅读 · 0 评论 -
LoRA 让你在 12GB 显存的 Colab 上也能训练,而不用上百 GB 的显存
### **LoRA 适配器:用更少的计算微调大模型**LoRA(Low-Rank Adaptation,低秩适配)是一种 **微调大模型** 的方法,**可以大幅减少计算量和显存占用**,让我们在 **普通显卡** 上也能微调大模型(比如 LLaMA-3、GPT)。---### **为什么要用 LoRA?****传统微调(Fine-tuning)** 需要修改模型所有参数,训练时显存占用巨大,计算量也很高,对 **普通显卡不友好**。 **LoRA 适配器** 只调整 **一小部分参数*原创 2025-03-14 10:02:42 · 749 阅读 · 0 评论 -
如何在神经网络模型中通过低秩矩阵调整权重,并只训练少量参数
这段代码展示了的应用,如何在神经网络模型中通过低秩矩阵调整权重,并只训练少量参数。接下来我会详细解释代码中的关键部分,帮助你理解其工作原理。原创 2025-02-06 15:30:23 · 794 阅读 · 0 评论 -
如何在一个简单的神经网络模型中插入 Adapter 模块,并且只训练 Adapter 模块的参数,冻结原始模型的参数
这段代码展示了如何在一个简单的神经网络模型中插入,并且只训练 Adapter 模块的参数,冻结原始模型的参数。下面我来逐步解释代码中每一部分的含义和作用,帮助你理解 Adapter 的工作原理。原创 2025-02-06 15:27:49 · 448 阅读 · 0 评论 -
拆解 LoRA 模块
好的,我来详细拆解的代码,逐行解释每个部分的含义,确保你能完全理解它的内部机制。原创 2025-02-06 15:25:20 · 887 阅读 · 0 评论 -
bfloat16和float16 的区别和联系以及训练过程中如何选择
bfloat16(Brain Floating Point 16)和float16(半精度浮点数)都是,它们的主要作用是和,特别适用于深度学习中的大规模模型训练。尽管它们都属于 16 位格式,但在等方面存在关键差异。下面我用简单的方式解释它们的区别和联系。🚀。原创 2025-02-06 11:26:29 · 2173 阅读 · 0 评论 -
为什么要判断 if not train_config.enable_fsdp or rank == 0:才初始化 WandB
这个判断主要是为了,确保只有一个进程(通常是主进程)负责 WandB 的数据上传和日志记录。原创 2025-02-06 10:47:03 · 637 阅读 · 0 评论 -
解析 WandB 的内部机制,看看为什么只传配置参数就能实现训练过程的监控。
你的问题非常好!我们来深入解析,看看为什么。原创 2025-02-06 10:45:12 · 612 阅读 · 0 评论 -
PyTorch 预分配显存是什么,为什么会有PyTorch 预分配显存
在 GPU 训练时,PyTorch如果不预分配,每次创建 Tensor 都向 GPU 申请内存,会有cudaMalloccudaMalloc假设 PyTorch这样每次xcudaMalloccudaFree1024**2.2f1024**2.2f1024**2.2f1024**2.2fxx。原创 2025-02-06 09:34:35 · 1338 阅读 · 0 评论 -
训练过程中进程如何确定使用哪个 XPU,我们一步步拆解这个流程,不把它当黑盒子,直接从系统角度+代码运行流程来看
那我们就一步步拆解这个流程,不把它当黑盒子,直接从。所有进程可以互相通信,进行数据并行训练。让它们各自干活,不会相互影响,而。每个进程有自己的 XPU,负责让它们协作完成训练。这就证明了,每个进程。原创 2025-02-05 16:50:36 · 971 阅读 · 0 评论 -
初始化分布式训练环境,并获取当前进程的 rank(编号)和 world_size(总进程数),适用于 FSDP(Fully Sharded Data Parallel,全分片数据并行)训练模式。
这段代码的作用是,适用于。TrueFalsesetup()📌local_rank03rank03📌local_rankrank假设你有local_rank03rank07world_size8LOCAL_RANK🚀torchrun。原创 2025-02-05 16:16:37 · 2142 阅读 · 0 评论 -
CCL 和 NCCL 的区别和作用
【代码】CCL 和 NCCL 的区别和作用。原创 2025-02-05 15:46:04 · 742 阅读 · 0 评论 -
NCCL(NVIDIA Collective Communications Library,全称 英伟达集体通信库)是 NVIDIA 专门为多 GPU 通信优化的库,用于加速 分布式训练。
NCCL(NVIDIA Collective Communications Library,全称。,每块 GPU 计算不同的数据批次(Batch),但它们。在多 GPU 或多机训练时,不同的 GPU 需要。,而 NCCL 提供了一种。时,你需要选择一个后端(训练过程中,每块 GPU。,让多个 GPU 可以。,才能进行全局更新。原创 2025-02-05 14:56:37 · 862 阅读 · 0 评论 -
HSDP 的设备网格只在启用 HSDP 和 Hybrid Shard 策略时才需要。如果条件不满足还强行构建设备网格,不仅浪费资源,还可能因为配置不对报错,甚至导致训练失败
的情况下,错误地创建 HSDP 的设备网格(device mesh)。如果不加判断,直接执行。原创 2025-01-23 16:32:46 · 847 阅读 · 0 评论 -
转换模型到 bfloat16 精度之前需要做的检查工作,不然模型报错给你看
如果训练一个 13B 参数的 GPT 模型,在开启 FSDP 和 pure_bf16 的情况下,显存占用可以减少约 50%,比 float32 模式更高效。如果这些条件都成立,模型的所有参数会转换为 bfloat16 精度(更省内存的一种浮点数格式)。在分布式训练中,使用 bfloat16 精度可以显著减少显存占用,同时保持较好的数值稳定性。的前提下,使用 bfloat16 精度才既省显存又不影响训练稳定性,否则可能得不偿失!下面逐一拆解每个条件,并解释为什么只有所有条件成立时才进行。原创 2025-01-23 16:24:47 · 1252 阅读 · 0 评论 -
分词器的词表大小以及如果分词器的词表比模型的词表大,那么模型的嵌入矩阵需要被调整以适应新的词表大小。
分词器的词表大小是根据分词器在训练时遇到的所有词或子词的数量决定的。词表大小通常是由设定的最大词汇数量限制的。如果词表太小,可能需要使用子词来处理低频词;如果词表过大,会增加模型的存储和计算开销。如果你的训练数据中有预训练模型词表中没有的新词,你需要扩展分词器的词表,同时调整模型的嵌入矩阵大小,这样模型才能正确处理新词。如果不扩展词表,模型会把这些新词当成[UNK](未知词),无法很好地学习到它们的语义。词表大小是在训练前确定的,是由训练数据或预训练模型的分词器决定的。填充。原创 2025-01-23 10:52:53 · 1085 阅读 · 0 评论 -
冻结语言模型中的 自注意力层,使其参数不参与训练(梯度不会更新)。 对于跨注意力层,则解冻参数,使这些层可以进行梯度更新,从而参与训练。
【代码】冻结语言模型中的 自注意力层,使其参数不参与训练(梯度不会更新)。对于跨注意力层,则解冻参数,使这些层可以进行梯度更新,从而参与训练。原创 2025-01-22 15:10:11 · 801 阅读 · 0 评论 -
可以通过索引i判断出是不是 属于 cross_attention_layer么
可以通过索引i判断当前层是否属于,具体是通过检查索引i是否存在于列表中。iii。原创 2025-01-22 15:09:47 · 178 阅读 · 0 评论 -
“自动包装的层”是指在分布式训练中,特定的神经网络层会被自动挑选出来,并应用特殊的包装逻辑(比如 FSDP 的分片策略),以优化分布式计算的效率和内存利用率。
自动包装的层”是指通过程序定义的规则,让系统自动挑选并处理模型中的特定层,而不用手动一个个指定。它的作用是减少开发者的工作量,同时保证分布式训练中的高效性和合理性。原创 2025-01-22 14:38:54 · 530 阅读 · 0 评论 -
通过 functools.partial 固定自动包装策略中的 transformer_layer_cls 参数
这段代码通过。原创 2025-01-22 14:36:58 · 347 阅读 · 0 评论 -
副本组(Replica Group)和分片组(Sharding Group)的区别和使用
在这个例子中,6 个 GPU 是 6 个独立的设备,通过分布式训练策略(比如 FSDP 的分片和副本设计)协同工作,解决了单个 GPU 无法同时处理大模型和高效训练的问题。原创 2025-01-22 11:23:10 · 1022 阅读 · 0 评论 -
FSDP(Fully Sharded Data Parallel)是一个用于分布式训练的工具,它会将模型的参数分片并分配到多个设备上,尤其在多 GPU 设置中
只是在单 GPU 环境下使用的配置,指定模型加载到哪个 GPU 上。FSDP主要用于多 GPU 环境中,它会自动将模型分片到多个 GPU 上,充分利用 GPU 资源,减轻每个设备的内存压力。在分布式训练中,每个 GPU 会使用来绑定到不同的设备上,而FSDP会确保模型在多个设备之间进行正确的分片和参数同步。原创 2025-01-21 16:27:21 · 744 阅读 · 0 评论 -
FSDP(Fully Sharded Data Parallel)是一种在分布式训练中常用的技术,特别是在处理非常大规模的深度学习模型时
是一种在分布式训练中常用的技术,特别是在处理非常大规模的深度学习模型时。它属于 PyTorch 中的分布式训练技术之一,旨在通过将模型参数拆分并分配到不同的设备上,以减少显存使用并提高计算效率。,使其在分布式训练过程中能够分片存储参数。这样,多个 GPU 之间将共享训练任务,而每个 GPU 只负责存储和计算自己分片的参数。更多学习FSDP(Fully Sharded Data Parallel)是一个用于分布式训练的工具。原创 2025-01-21 16:24:57 · 648 阅读 · 0 评论