大模型相关目录
大模型,包括部署微调prompt/Agent应用开发、知识库增强、数据库增强、知识图谱增强、自然语言处理、多模态等大模型应用开发内容
从0起步,扬帆起航。
- swift与Internvl下的多模态大模型分布式微调指南(附代码和数据)
- 多模态大模型Internvl-1.5-26B微调后部署及测试实录(附代码)
- 多模态大模型Internvl-2-26B的OCR赋能方案(附代码)
- miniconda+xinference的大模型推理部署指南
- Mem0:大模型最强赋能“有记忆的LLM”
- 再谈Agent:Dify智能体实现Txet2SQL
- Moe模式:或将是最好的大模型应用开发路径
- 一文带你了解大模型RAG
- 详细记录swfit微调interVL2-8B多模态大模型进行目标检测(附代码)
- DIfy中集成magic-pdf实现文档解析agent与多模态大模型图文问答
- 大模型Prompt trick:利用大模型同情心提升模型性能
- 一文带你入门大模型微调
文章目录
- 大模型相关目录
- 定义
- 发展
- 细节
本文架构
定义
什么是大模型微调?
通用大模型是基于互联网公开的海量知识进行预训练的,具备很强的通识能力,但大模型在垂直或特定领域的表现往往并不尽如人意。
大模型微调是在通用大模型的基础上对超出范围或特定领域的知识,使用专门数据集或方法进行相应的调整优化,以提升其在特定领域或任务中的适用性和完成度。
为什么需要大模型微调?
大模型在处理特定行业或私域的专业知识文档、专业术语、业务流程时,可能存在理解不足或胜任力有限的情况,在大模型有限的参数规模下,其学习到的知识是有限的,机制上决定了大模型无法也不可能全知全能。
用更专业更垂直更行业的精确数据进行大模型微调,针对性的提升大模型与行业的和领域契合度,可以解决其私域能力不足的问题。
- 全量微调,利用特定任务数据调整预训练模型的所有参数,以充分适应新任务。
- 参数高效微调(Parameter-Efficient Fine-Tuning, PEFT),即低参微调。旨在通过最小化微调参数数量和计算复杂度,实现高效的迁移学习。它仅更新模型中的部分参数,显著降低训练时间和成本,适用于计算资源有限的情况。
全量微调从原理上能有效利用预训练模型的通用特征,但需要调用大量的训练资源、构建巨量的训练数据,相对与低参微调需要耗费更多的计算资源和时间成本。
从实际表现看,参数高效微调通过有效的微调算法设计
,可在有限的计算资源、训练数据、时间成本基础上,获得符合实际需求的微调表现。
PEFT技术包括Prefix Tuning、Prompt Tuning、Adapter Tuning等多种方法,可根据任务和模型需求灵活选择。
由上述篇幅介绍可知,微调原理主要基于迁移学习。预训练模型已经在大量数据上进行了训练,学会了提取通用特征。通过微调,我们可以将这些通用特征应用到特定任务上,从而提高模型的性能。由此可以解决垂直领域数据稀缺、训练资源耗费巨大、时间成本高等问题。
总的来说,大模型的微调步骤可以解析如下:
数据准备:选择与特定任务相关的数据集,并将其格式化为模型可以理解的格式。
模型调整:根据任务需求,可能需要调整模型的某些部分,如添加特定任务的输出层。
参数更新:使用任务特定的数据对模型进行训练,通常会使用较小的学习率来微调模型参数,以避免破坏模型在预训练阶段学到的知识。
评估与优化:在验证集上评估微调后的模型性能,并根据需要调整超参数或模型结构。
发展
人工智能发展的三个阶段
• 人工智能的一个让机器能听会说,能理解会思考
• 目前人工智能技术正处在从感知智能到认知智能跨越的时间节点
细节
基于LoRA的高效训练方法
• LoRA (Low-rank Adaptation) 是一种参数高效的训练方法,常用于大模型的高效训练与精调
• 主要思想:通过低秩分解的方式近似拟合大矩阵(d为隐层大小,r为秩)
矩阵的秩:矩阵的秩是指矩阵中线性无关的行(或列)的最大数目。低秩矩阵意味着其秩远小于矩阵的行数或列数。
低秩分解:目的是找到一组低秩矩阵,它们的乘积可以近似原始矩阵,同时保持原始数据的主要特征。
从16.8m到0.5m,可见lora通过低秩分解,在保证特征信息不丢失的情况下,大幅度降低了微调训练的计算量
感性地理解LoRA微调,可以理解如图所示,是在固有模型的Original Vocab、transformers主体、以及LM head三个组成成份上添加额外的参数全重进行训练。
也因为这种设计模式,LoRA微调后,要想对微调后模型进行使用,推理加载方式往往分为LoRA权重加载、合并权重后模型加载两类。
如果说LoRA是为了提升微调训练的效率,那么指令微调就是为了提升模型的指令遵循能力。
一般来说,模型输入通常由指令模板、系统提示词、输入、输出组成
指令微调(Instruction Tuning)
指令微调是一种微调策略,其核心在于让模型更好地理解和执行特定的指令。这种微调方法通常关注于:
指令微调通常涉及对模型的全面训练,可能会更新模型的全部或大部分参数,以优化模型对指令的理解和响应能力。
Alpaca是由斯坦福大学提出的一个指令精调项目,旨在让大型语言模型(如LLaMA)能够更好地理解和执行人类的指令。Alpaca微调就是使用该模板、该范式构建微调数据集进行指令微调。
大模型微调从底层原理上复杂、分支工作众多,从零开始对大模型进行微调训练,显然存在任务重、易出错、效率低的问题。先行模式下,研发人员往往采用微调框架来实现大模型的微调落地。本文以swift框架为例进行说明。
Swift是一种用于大型模型微调的框架,它由斯坦福大学的研究人员开发,旨在简化大型语言模型的微调过程。Swift框架主要针对的是指令微调(Instruction Tuning),即训练模型以更好地理解和执行人类的指令。
以下是Swift框架的一些关键特点和组成部分:
关键特点
模块化:Swift框架将微调过程分解为多个模块,使得用户可以轻松地定制和扩展微调流程。
灵活性:Swift支持多种预训练模型和微调策略,用户可以根据需要选择合适的模型和微调方法。
高效性:Swift框架设计用于高效地处理大型模型,减少微调所需的计算资源和时间。
可复现性:Swift提供了清晰的接口和配置选项,使得微调实验具有高度的可复现性。
本次以swift实现LoRA指令微调为例,具体流程可概括如下:
[
{
"instruction": "你好",
"input": "",
"output": "您好,我是XX大模型,一个由XXX开发的 AI 助手,很高兴认识您。请问我能为您做些什么?"
},
{
"instruction": "你好",
"input": "",
"output": "您好,我是XX大模型,一个由XXX打造的人工智能助手,请问有什么可以帮助您的吗?"
}
]
如左上格式构建指令微调数据集后,将数据集右图文件进行注册。
即可于swift框架下进行使用,包括微调、验证等步骤。
CUDA_VISIBLE_DEVICES=0,1,2,3 swift sft \
--model_id_or_path /data/hfd/InternVL2-8B \
--template_type internvl2 \
--dataset /home/super/lyq/train_dataset.jsonl \
--lora_target_modules ALL \
--lora_lr_ratio 16.0 \
--lora_rank 16 \
--learning_rate 1e-4 \
--num_train_epochs 5 \
--use_flash_attn True \
--gradient_accumulation_steps 4 \
--batch_size 2 \
--eval_steps 50 \
--save_steps 500 \
--neftune_noise_alpha 5 \
--model_type internvl2-8b \
--device_max_memory 15GB 15GB 15GB 15GB \
--output_dir /home/super/sgq/swift/llm-yolo/detection2/v1 \
--logging_dir /home/super/sgq/swift/llm-yolo/detection2/v1/runs
使用左侧指令即可开启微调,其中指令解释如下:
–model_id_or_path /data/hfd/InternVL2-8B
该参数为模型路径
–dataset /home/super/lyq/train_dataset.jsonl
该参数为微调数据集
–num_train_epochs 5
该参数为训练轮次,视情况调整
–use_flash_attn True
加速项,服务器未配置可不选
–output_dir /home/super/sgq/swift/llm-yolo/detection2/v1
为训练结果保存路径,结果包含微调训练参数和精度损失记录等