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

news2024/9/25 11:21:16

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/code

cd /root/InternLM/code

git 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/XTuner

cd /root/InternLM/XTuner

mkdir -p Shanghai_AI_Laboratory

ln -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 xtuner0121

xtuner list-cfg -p internlm2

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

cd /root/InternLM/XTuner
conda activate xtuner0121

xtuner 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 xtuner0121

xtuner 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 xtuner0121

export 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 选项可以创建符号链接。

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2077799.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

深入探索【Hadoop】生态系统:Hive、Pig、HBase及更多关键组件(下)

🐇明明跟你说过:个人主页 🏅个人专栏:《大数据前沿:技术与应用并进》🏅 🔖行路有良友,便是天堂🔖 目录 一、引言 1、什么是Hadoop 2、Hadoop生态系统的构成概览 二…

【html+css 绚丽Loading】 000019 五行轮回剑

前言:哈喽,大家好,今天给大家分享htmlcss 绚丽Loading!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 &#x1f495…

【云原生】Mysql 集群技术

PS:MySQL的源码编译进行实验环境操作 1、MySQL安装及初始化 (1)生成启动脚本 (2) 修改环境变量 (3)生成配置文件 (4)数据库初始化建立mysql基本数据 (5&…

UnrealEngine学习(03):虚幻引擎术语

1. 项目 虚幻引擎5项目(Unreal Engine 5 Project) 中包含游戏的所有内容。项目中包含的大量文件夹都在磁盘上,例如 Blueprints 和 Materials 。你可以按照自己的意愿命名文件夹并将其整理到项目中。虚幻编辑器(Unreal Editor&…

云网络/云探测+零信任架构初阶知识扫盲

一、关键(边界)节点 1、边界 (1)CiscoASA Firepower 思科 Firepower NGFW(下一代防火墙)是专注于威胁防御的下一代防火墙,它将多种功能完全集于一身,采用统一管理,可在…

荣耀应用商城——被下架应用申诉指南

申诉背景 为了营造良好的荣耀应用市场生态环境,保障开发者权益及提升用户体验,此流程针对应用被下架后开发者后续的具体申诉操作流程及详细介绍。 该流程适用于开发者在荣耀应用市场提交的应用,且应用当前处于被下架状态。 申诉流程 申诉定义…

PHP概述-环境搭建-开发工具安装

老师建议注册使用百度文心一言;讯飞星火大模型-AI大语言模型-星火大模型-科大讯飞;Kimi.ai - 帮你看更大的世界 等人工智能工具软件的一个到两个,也可下载文心一言、讯飞星火、kimi等APP软件使用,对于我们在读的大二学生来说有什么…

XR虚拟拍摄和VP有什么区别

XR 虚拟拍摄技术最早源于舞台屏当中,当前衍生出“VP 虚拟制片”、“XR 扩展现实"两大类: 扩展现实(xR)拍摄,扩展是指LED屏以外区域在画面中被虚拟图形所覆盖,扩展无限的虚拟空间;现实是指LED屏为导演和演员提供肉…

51、Python之模块和包:Python的包和文件夹有何区别

引言 大学有云:“苟日新,又日新,日日新”。 看到一些教材或者文章,介绍到包的时候,一定会提到一定要在文件夹中新建一个__init__.py的文件,哪怕空文件也可以…… 我只想说,有些人的知识真的是…

等保测评与企业风险管理:构建坚实的信息安全防线

随着信息技术的飞速发展,企业在数字化转型的道路上高歌猛进。然而,随之而来的信息安全威胁也日益严峻,成为制约企业发展的关键因素。为了确保信息系统安全,等保测评作为一种重要的风险管理手段,正逐渐成为企业构建信息…

Automatic Educational Question Generation with Difficulty Level Controls

文章目录 题目摘要简介相关工作问题表述实验用户研究结论 题目 具有难度级别控制的自动教育问题生成 论文地址:https://link.springer.com/chapter/10.1007/978-3-031-36272-9_39 摘要 我们考虑自动生成各种难度的数学应用题 (MWP),以满足教师在相应教育阶段教学和…

Java 使用 POI 导出Excel,实现单元格内容为下拉选项

在使用Apache POI的库生成Excel导入模板的时候,有时候需要设置某些列只能选择下拉选项中的内容,该如何实现这个特性呢?下面是一个示例代码,演示如何实现单元格只能从下拉中选择内容。 代码 import org.apache.poi.ss.usermodel.*…

使用Vue创建cesium项目模版该如何选择?

目录 问题描述模版说明及选用建议小结 问题描述 刚入手这个项目,什么都是一知半解。使用Vue,创建Cesium项目的时候,提示需要选择一个模版(如下图所示),该如何选择项目模版选,总结如下: 模版说明…

共源级PMOS反向串联电路分析

一、共源级PMOS反向串联结构如下图: 二、具体分析 1、当VBUS_EN拉低,三极管Q5截止: 如果V-BUS>GEN_5V, T3体二极管阴极电压大于阳极电压,T3体二极管截止。由于上拉电阻R24将S端电压向G端极间电容充电,使得VgVs&…

【机器学习】探秘图像处理与分类:运用C++结合OpenCV实现智能视觉识别技术

🎬 鸽芷咕:个人主页 🔥 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 引言 在计算机视觉领域,图像处理与分类是核心任务之一。OpenCV作为一个功能强大的开源计算机视觉库,提供…

【搜索引擎】ElasticSearch 7.x版本

1 Elasticsearch概述 1.1 Elasticsearch是什么 1.2 全文搜索引擎 1.3 Elasticsearch And Solr 1.4 Elasticsearch Or Solr 1.5 Elasticsearch应用案例 2 Elassticsearch入门 2.1 Elasticsearch 安装 2.1.1 下载软件 2.1.2 安装软件 2.1.3 问题解决 2.2 Elasticsearch基本操…

【网络基础】DNS协议详解:从背景到解析过程及`dig`工具的使用

文章目录 DNS 协议① 前言 - 背景② 域名③ DNS解析过程④ Linux下用dig工具 分析DNS过程⑤ 浏览器中输入URL后,会有哪些过程 DNS 协议 DNS(域名系统,Domain Name System)是互联网的一个核心协议,用于将域名转换为 IP…

有一种“穷人性格”,大事拎不清,小事算太精

在生活的舞台上,人们各自演绎着不同的人生故事。而有一种性格特征,常常被视为与经济困境紧密相连,那就是“大事拎不清,小事算太精”的所谓“穷人性格”。这种性格不仅在个体层面影响着人们的生活轨迹,也在一定程度上反映了社会现象背后的深层次问题。 一、“穷人性格”的表…

读软件开发安全之道:概念、设计与实施10安全设计审查

1. 安全设计审查 1.1. Security Design Review,SDR 1.2. 将安全性融入软件设计的最佳方法之一是戴上“安全帽”进行单独的设计审查 1.3. 安全审查员是熟悉软件运行的系统和环境,以及知道如何使用它的人,但他们不参与设计工作,这…

【SpringCloud】(一文通) 统一服务入口-Gateway

目 录 一. 网关介绍1.1 问题1.2 什么是 API 网关1.3 常见网关实现 二. Spring Cloud Gateway2.1 快速上手2.1.1 创建网关项目2.1.2 引入网关依赖2.1.3 编写启动类2.1.4 添加Gateway的路由配置2.1.5 测试 2.2 Route Predicate Factories2.2.1 Predicate2.2.2 Route Predicate Fa…