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

InternLM大模型实战-4.XTuner大模型低成本微调实战

文章目录

  • 前言
  • 笔记正文
    • XTuner
      • 支持模型和数据集
    • 微调原理
    • 跟随文档学习
    • 快速上手
    • 自定义微调
      • 准备数据
      • 准备配置文件
    • MS-Agent微调

前言

本文是对于InternLM全链路开源体系系列课程的学习笔记。【XTuner 大模型单卡低成本微调实战】 https://www.bilibili.com/video/BV1yK4y1B75J/?share_source=copy_web&vd_source=99d9a9488d6d14ace3c7925a3e19793e

笔记正文

XTuner

地址:XTuner

一个大预言模型微调工具箱

  • 傻瓜化:以配置文件的形式封装了大部分微调场景
  • 轻量级:对于7B参数量的LLM,微调所需的最小显存仅为8GB。

支持模型和数据集

在这里插入图片描述

微调原理

  • LoRA:只对玩具中某些零件记性改动,而不是对整个玩具进行全面改动
  • QLoRA:LoRA的一种改进,如果你手里只有一把生锈的螺丝刀,也能改造你的玩具。

跟随文档学习

文档提供了三个微调的例子,分别叫做快速上手、自定义微调和MS-Agent微调。

快速上手

首先介绍了如何安装微调的XTuner环境,然后介绍了具有多个开箱即用的配置文件,并对于这些配置文件的名称进行了解释
例如文件名:internlm_chat_7b_qlora_oasst1_e3

模型名internlm_chat_7b
使用算法qlora
数据集oasst1
把数据集跑几次跑三次:e3

然后根据实际模型、数据集存放的位置、实际训练需求,修改配置文件中的信息。

接着就可以开始微调了。

微调训练完成后,应该在work_dirs的目录下产生pth权重,需要将其转换成hf格式的模型

xtuner convert pth_to_hf ${CONFIG_NAME_OR_PATH} ${PTH_file_dir} ${SAVE_PATH}

转换后,生成的文件应该是

|-- README.md
|-- adapter_config.json
|-- adapter_model.bin
`-- xtuner_config.py

可以理解为LoRA模型文件=Adapter

然后将hf的adapter合并到原LLM,并与之对话,这些需求xtuner都提供了相应的命令行工具。

自定义微调

这个部分演示了在实际需求下如何准备数据、修改配置文件、进行微调。

准备数据

将表格(或者其他数据格式)数据转化成jsonL格式。也就是json列表

[{"conversation":[{"system": "xxx","input": "xxx","output": "xxx"}]
},
{"conversation":[{"system": "xxx","input": "xxx","output": "xxx"}]
}]

然后划分训练集和测试集等。

准备配置文件

可以从下面的对配置文件的修改看出如何使用这种所谓的“自定义数据集”进行微调训练。

# 修改import部分
- from xtuner.dataset.map_fns import oasst1_map_fn, template_map_fn_factory
+ from xtuner.dataset.map_fns import template_map_fn_factory# 修改模型为本地路径
- pretrained_model_name_or_path = 'internlm/internlm-chat-7b'
+ pretrained_model_name_or_path = './internlm-chat-7b'# 修改训练数据为 MedQA2019-structured-train.jsonl 路径
- data_path = 'timdettmers/openassistant-guanaco'
+ data_path = 'MedQA2019-structured-train.jsonl'# 修改 train_dataset 对象
train_dataset = dict(type=process_hf_dataset,
-   dataset=dict(type=load_dataset, path=data_path),
+   dataset=dict(type=load_dataset, path='json', data_files=dict(train=data_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)

然后和前文差不多。

MS-Agent微调

数据也是由jsonl格式的,但是与前面的input、output不同,现在的每个conversations则需要赋予不同的身份了。

  • system: 表示给模型前置的人设输入,其中有告诉模型如何调用插件以及生成请求
  • user: 表示用户的输入 prompt,分为两种,通用生成的prompt和调用插件需求的 prompt
  • assistant: 为模型的回复。其中会包括插件调用代码和执行代码,调用代码是要 LLM 生成的,而执行代码是调用服务来生成结果的

而assistant则需要包含工具调用和返回,分别叫做思考阶段和执行阶段,这两个阶段是不输出的,具体格式如下
图片来源https://github.com/InternLM/tutorial/blob/main/xtuner/README.md
图片来源https://github.com/InternLM/tutorial/blob/main/xtuner/README.md

之后就是找到对应的训练配置文件,根据实际情况等进行修改即可。

http://www.lryc.cn/news/298190.html

相关文章:

  • 【SpringBoot篇】解决Redis分布式锁的 误删问题 和 原子性问题
  • 蓝桥杯Web应用开发-CSS3 新特性【练习三:文本阴影】
  • LRU缓存
  • ncc匹配提速总结
  • 人力资源智能化管理项目(day06:员工管理)
  • Java实现数据可视化的智慧河南大屏 JAVA+Vue+SpringBoot+MySQL
  • 【Flink】FlinkSQL的DataGen连接器(测试利器)
  • 5G NR 频率计算
  • 关于物理机ping不通虚拟机问题
  • 深度学习在知识图谱问答中的革新与挑战
  • JAVA设计模式之职责链模式详解
  • CSP-201912-1-报数
  • 前后端分离好处多多,怕就怕分工不分人,哈哈
  • 机器学习:Softmax介绍及代码实现
  • python基于flask的网上订餐系统769b9-django+vue
  • jenkins 发布远程服务器并部署项目
  • 【数学建模】【2024年】【第40届】【MCM/ICM】【D题 五大湖的水位控制问题】【解题思路】
  • 【开源】JAVA+Vue+SpringBoot实现公司货物订单管理系统
  • ###C语言程序设计-----C语言学习(12)#进制间转换,十进制,二进制,八进制,十六进制
  • 锐捷设备常用命令
  • python:lxml 读目录.txt文件,用 xmltodict 转换为json数据,生成jstree所需的文件
  • 【Spring】Spring 对 Ioc 的实现
  • QT学习文件操作类 QFile
  • VOL_常用记录!!
  • 解决Typora导出HTML不显示图片
  • React Native开发iOS实战录
  • C++局部变量与全局变量
  • 深入理解ES的倒排索引
  • HTML世界之第一重天
  • docker run报 docker: Error response from daemon: no command specified.