XTuner微调个人小助手认知 #书生浦语大模型实战营#

2024-08-27 04:12

本文主要是介绍XTuner微调个人小助手认知 #书生浦语大模型实战营#,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.任务:

本次的任务是使用 XTuner 微调 InternLM2-Chat-1.8B 实现自己的小助手认知,从而让模型能够个性化的回复,让模型知道他是我们的小助手,在实战营帮我们完成XTuner微调个人小助手认知的任务。并截图打卡。

任务打卡:

微调前,模型的回复比较通用。

微调后,模型可以有个性化的回复啦。

2.流程:

详细的流程可以参考链接:Tutorial/docs/L1/XTuner/readme.md at camp3 · InternLM/Tutorial · GitHub

2.1环境准备

我们需要创建一个开发机,并安装好相关的Python依赖包。

然后安装好Xtuner。这里我们需要先从从 Github 上下载源码。

# 创建一个目录,用来存放源代码
mkdir -p /root/InternLM/codecd /root/InternLM/codegit clone -b v0.1.21  https://github.com/InternLM/XTuner /root/InternLM/code/XTuner

 其次,进入源码目录,执行安装。

# 进入到源码目录
cd /root/InternLM/code/XTuner
conda activate xtuner0121# 执行安装
pip install -e '.[deepspeed]'

2.2.模型准备

对于学习而言,我们可以使用 InternLM 推出的1.8B的小模型来完成此次微调演示。我们可以通过以下代码一键通过符号链接的方式链接到模型文件,这样既节省了空间,也便于管理。

# 创建一个目录,用来存放微调的所有资料,后续的所有操作都在该路径中进行
mkdir -p /root/InternLM/XTunercd /root/InternLM/XTunermkdir -p Shanghai_AI_Laboratoryln -s /root/share/new_models/Shanghai_AI_Laboratory/internlm2-chat-1_8b Shanghai_AI_Laboratory/internlm2-chat-1_8b

 2.3.微调前的模型对话

我们可以通过网页端的 Demo 来看看微调前 internlm2-chat-1_8b 的对话效果。基本效果如下:

 2.4.指令跟随微调

1)准备数据文件

为了简化数据文件准备,我们也可以通过脚本生成的方式来准备数据。

2)准备配置文件

在准备好了模型和数据集后,我们就要根据我们选择的微调方法结合微调方案来找到与我们最匹配的配置文件了,从而减少我们对配置文件的修改量。

列出支持的配置文件:XTuner 提供多个开箱即用的配置文件,可以通过以下命令查看。

conda activate xtuner0121xtuner list-cfg -p internlm2

复制一个预设的配置文件:由于我们是对internlm2-chat-1_8b模型进行指令微调,所以与我们的需求最匹配的配置文件是 internlm2_chat_1_8b_qlora_alpaca_e3,这里就复制该配置文件。

cd /root/InternLM/XTuner
conda activate xtuner0121xtuner copy-cfg internlm2_chat_1_8b_qlora_alpaca_e3 .

对配置文件进行修改:在选择了一个最匹配的配置文件并准备好其他内容后,下面我们要做的事情就是根据我们自己的内容对该配置文件进行调整,使其能够满足我们实际训练的要求。

#######################################################################
#                          PART 1  Settings                           #
#######################################################################
- pretrained_model_name_or_path = 'internlm/internlm2-chat-1_8b'
+ pretrained_model_name_or_path = '/root/InternLM/XTuner/Shanghai_AI_Laboratory/internlm2-chat-1_8b'- alpaca_en_path = 'tatsu-lab/alpaca'
+ alpaca_en_path = 'datas/assistant.json'evaluation_inputs = [
-    '请给我介绍五个上海的景点', 'Please tell me five scenic spots in Shanghai'
+    '请介绍一下你自己', 'Please introduce yourself'
]#######################################################################
#                      PART 3  Dataset & Dataloader                   #
#######################################################################
alpaca_en = dict(type=process_hf_dataset,
-   dataset=dict(type=load_dataset, path=alpaca_en_path),
+   dataset=dict(type=load_dataset, path='json', data_files=dict(train=alpaca_en_path)),tokenizer=tokenizer,max_length=max_length,
-   dataset_map_fn=alpaca_map_fn,
+   dataset_map_fn=None,template_map_fn=dict(type=template_map_fn_factory, template=prompt_template),remove_unused_columns=True,shuffle_before_pack=True,pack_to_max_length=pack_to_max_length,use_varlen_attn=use_varlen_attn)

 2.5.启动微调

当我们准备好了所有内容,我们只需要将使用 xtuner train 命令令即可开始训练。

cd /root/InternLM/XTuner
conda activate xtuner0121xtuner train ./internlm2_chat_1_8b_qlora_alpaca_e3_copy.py

 2.6.模型格式转换

模型转换的本质其实就是将原本使用 Pytorch 训练出来的模型权重文件转换为目前通用的 HuggingFace 格式文件,那么我们可以通过以下命令来实现一键转换。

cd /root/InternLM/XTuner
conda activate xtuner0121# 先获取最后保存的一个pth文件
pth_file=`ls -t ./work_dirs/internlm2_chat_1_8b_qlora_alpaca_e3_copy/*.pth | head -n 1`
export MKL_SERVICE_FORCE_INTEL=1
export MKL_THREADING_LAYER=GNU
xtuner convert pth_to_hf ./internlm2_chat_1_8b_qlora_alpaca_e3_copy.py ${pth_file} ./hf

 2.7.模型合并

对于 LoRA 或者 QLoRA 微调出来的模型其实并不是一个完整的模型,而是一个额外的层(Adapter),训练完的这个层最终还是要与原模型进行合并才能被正常的使用。

cd /root/InternLM/XTuner
conda activate xtuner0121export MKL_SERVICE_FORCE_INTEL=1
export MKL_THREADING_LAYER=GNU
xtuner convert merge /root/InternLM/XTuner/Shanghai_AI_Laboratory/internlm2-chat-1_8b ./hf ./merged --max-shard-size 2GB

2.8.微调后的模型对话

微调完成后,我们可以再次运行xtuner_streamlit_demo.py脚本来观察微调后的对话效果,不过在运行之前,我们需要将脚本中的模型路径修改为微调后的模型的路径。

3.问题:

本次任务整体来说还是比较顺利的,但也有一些问题,总的来说就是微调后模型的效果不理想。

一开始模型微调后,模型的输出和微调前相比并没有表现出个性化的内容。

主要表现为两者的输出结果相差不大。

后来可能又出现了过拟合的问题。模型可以输出个性化的结果了,但对其他问题的回答不理想。

由于时间关系,没有在此做过多的纠结了。选择了一个差不多的效果,就截图打卡了。

这块如果时间充足的话,是值得好好研究细化的。

4.知识点:

列举一些本次任务的相关知识点和一些小的tricks。

4.1.微调

微调(fine-tuning)是一种基于预训练模型,通过少量的调整(fine-tune)来适应新的任务或数据的方法。

微调的优势包括:1)减少数据需求;2)提高效率;3)更好的性能

在大模型的下游应用中,经常会用到两种微调模式:增量预训练 和 指令跟随 。

4.2.增量预训练

增量预训练是一种在预训练模型已经完成了初始预训练阶段后,利用额外的数据集进行进一步训练的过程。这些额外的数据集通常包含特定领域的知识,或者是为了纠正模型在某些方面的偏差而设计的。

优点:1)灵活性:可以根据需要轻松添加新的数据集来扩展模型的知识;2)高效性:相比于重新开始预训练,增量预训练通常需要较少的计算资源;3)针对性:能够有针对性地提升模型在特定任务或领域内的性能。

挑战:1)过拟合风险;2)数据质量;3)参数调整;4)灾难性遗忘

4.3.指令跟随

指令跟随是指模型能够理解和执行人类语言中的指令,这是实现人机交互和提高智能系统智能化水平的重要方面。指令跟随的核心在于通过构造特定的输入提示(prompt)来指导模型生成期望的输出。

4.4.Lora

LoRA(Low-Rank Adaptation)是一种使用低精度权重对大型预训练语言模型进行微调的技术,它的核心思想是在不改变原有模型权重的情况下,通过添加少量新参数来进行微调。这种方法降低了模型的存储需求,也降低了计算成本,实现了对大模型的快速适应,同时保持了模型性能。

QLoRA(Quantized LoRA)微调技术是对LoRA的一种改进,它通过引入高精度权重和可学习的低秩适配器来提高模型的准确性。并且在LoRA的基础上,引入了量化技术。通过将预训练模型量化为int4格式,可以进一步减少微调过程中的计算量,同时也可以减少模型的存储空间,这对于在资源有限的设备上运行模型非常有用。最终,可以使我们在消费级的显卡上进行模型的微调训练。

4.5.DeepSpeed

DeepSpeed 是一个由微软开发的开源深度学习优化库,它旨在提高大规模深度学习模型训练的效率和可扩展性。DeepSpeed 解决了训练大规模模型时常见的性能瓶颈问题,并且通过一系列创新的技术和工具,使得训练和推理更加高效。

DeepSpeed 的特点:1)高效训练;2)大规模模型支持;3)内存优化;4)并行计算;5)易用性;6)社区支持。

4.6.符号链接

符号链接(Symbolic Link),通常简称为“软链接”,是一种在文件系统中创建指向另一个文件引用的方法。在 Unix 和类 Unix 操作系统(如 Linux 和 macOS)中,符号链接是非常有用的工具,它们允许用户在文件系统中创建指向其他文件或目录的链接,而不必复制实际的数据内容。

符号链接的特点:1)指向文件而非复制;2)跨文件系统;3)节省空间;4)易于管理。

在命令行中,可以使用 ln 命令来创建符号链接。具体来说,使用 -s 选项可以创建符号链接。

本次就写到这里啦,喜欢的小伙伴收藏点赞关注吧。也欢迎评论区留言讨论。

这篇关于XTuner微调个人小助手认知 #书生浦语大模型实战营#的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1110603

相关文章

SQL Server跟踪自动统计信息更新实战指南

《SQLServer跟踪自动统计信息更新实战指南》本文详解SQLServer自动统计信息更新的跟踪方法,推荐使用扩展事件实时捕获更新操作及详细信息,同时结合系统视图快速检查统计信息状态,重点强调修... 目录SQL Server 如何跟踪自动统计信息更新:深入解析与实战指南 核心跟踪方法1️⃣ 利用系统目录

java中pdf模版填充表单踩坑实战记录(itextPdf、openPdf、pdfbox)

《java中pdf模版填充表单踩坑实战记录(itextPdf、openPdf、pdfbox)》:本文主要介绍java中pdf模版填充表单踩坑的相关资料,OpenPDF、iText、PDFBox是三... 目录准备Pdf模版方法1:itextpdf7填充表单(1)加入依赖(2)代码(3)遇到的问题方法2:pd

PyTorch中的词嵌入层(nn.Embedding)详解与实战应用示例

《PyTorch中的词嵌入层(nn.Embedding)详解与实战应用示例》词嵌入解决NLP维度灾难,捕捉语义关系,PyTorch的nn.Embedding模块提供灵活实现,支持参数配置、预训练及变长... 目录一、词嵌入(Word Embedding)简介为什么需要词嵌入?二、PyTorch中的nn.Em

在IntelliJ IDEA中高效运行与调试Spring Boot项目的实战步骤

《在IntelliJIDEA中高效运行与调试SpringBoot项目的实战步骤》本章详解SpringBoot项目导入IntelliJIDEA的流程,教授运行与调试技巧,包括断点设置与变量查看,奠定... 目录引言:为良驹配上好鞍一、为何选择IntelliJ IDEA?二、实战:导入并运行你的第一个项目步骤1

Spring Boot3.0新特性全面解析与应用实战

《SpringBoot3.0新特性全面解析与应用实战》SpringBoot3.0作为Spring生态系统的一个重要里程碑,带来了众多令人兴奋的新特性和改进,本文将深入解析SpringBoot3.0的... 目录核心变化概览Java版本要求提升迁移至Jakarta EE重要新特性详解1. Native Ima

Spring Boot 与微服务入门实战详细总结

《SpringBoot与微服务入门实战详细总结》本文讲解SpringBoot框架的核心特性如快速构建、自动配置、零XML与微服务架构的定义、演进及优缺点,涵盖开发环境准备和HelloWorld实战... 目录一、Spring Boot 核心概述二、微服务架构详解1. 微服务的定义与演进2. 微服务的优缺点三

SpringBoot集成MyBatis实现SQL拦截器的实战指南

《SpringBoot集成MyBatis实现SQL拦截器的实战指南》这篇文章主要为大家详细介绍了SpringBoot集成MyBatis实现SQL拦截器的相关知识,文中的示例代码讲解详细,有需要的小伙伴... 目录一、为什么需要SQL拦截器?二、MyBATis拦截器基础2.1 核心接口:Interceptor

从入门到进阶讲解Python自动化Playwright实战指南

《从入门到进阶讲解Python自动化Playwright实战指南》Playwright是针对Python语言的纯自动化工具,它可以通过单个API自动执行Chromium,Firefox和WebKit... 目录Playwright 简介核心优势安装步骤观点与案例结合Playwright 核心功能从零开始学习

Java docx4j高效处理Word文档的实战指南

《Javadocx4j高效处理Word文档的实战指南》对于需要在Java应用程序中生成、修改或处理Word文档的开发者来说,docx4j是一个强大而专业的选择,下面我们就来看看docx4j的具体使用... 目录引言一、环境准备与基础配置1.1 Maven依赖配置1.2 初始化测试类二、增强版文档操作示例2.

MySQL 多列 IN 查询之语法、性能与实战技巧(最新整理)

《MySQL多列IN查询之语法、性能与实战技巧(最新整理)》本文详解MySQL多列IN查询,对比传统OR写法,强调其简洁高效,适合批量匹配复合键,通过联合索引、分批次优化提升性能,兼容多种数据库... 目录一、基础语法:多列 IN 的两种写法1. 直接值列表2. 子查询二、对比传统 OR 的写法三、性能分析