首页 > 其他分享 >InternLM 大模型实战营笔记-7

InternLM 大模型实战营笔记-7

时间:2024-09-06 11:55:09浏览次数:7  
标签:实战 训练 配置文件 模型 微调 internlm2 笔记 xtuner InternLM

基础岛 第5关 XTuner微调个人小助手认知

目的:用 internlm2-chat-1_8b 模型,通过 QLoRA 的方式来微调一个自己的小助手

1. 微调前的模型对话

  1. 进行端口映射,XXXXX 是自己开发机的端口

ssh -CNg -L 8501:127.0.0.1:8501 [email protected] -p XXXXX

  1. 激活环境,运行Streamlit程序

conda activate xtuner0121
streamlit run /root/InternLM/Tutorial/tools/xtuner_streamlit_demo.py

  1. 与未进行微调的模型进行对话
    在这里插入图片描述

2. 指令跟随微调

2.1. 准备微调数据

为了让模型能够认清自己的弟位,在询问自己是谁的时候按照我们预期的结果进行回复,需要通过在微调数据集中大量加入这样的数据。准备一个数据集文件datas/assistant.json,文件内容为对话数据,是下面的对话的N次复制,这里的N=8000

{
        "conversation": [
            {
                "input": "请介绍一下你自己",
                "output": "我是tza同志的小助手,内在是上海AI实验室书生·浦语的1.8B大模型哦"
            }
        ]
    },

2.2. 准备配置文件

准备好模型和数据集后,就要根据选择的微调方法结合微调方案来找到最匹配的配置文件。

配置文件其实是一种用于定义和控制模型训练和测试过程中各个方面的参数和设置的工具

xtuner list-cfg 命令用于列出内置的所有配置文件。参数 -p 或 --pattern 表示模式匹配,后面跟着的内容将会在所有的配置文件里进行模糊匹配搜索,然后返回最有可能得内容。比如我们这里微调的是书生·浦语的模型,我们就可以匹配搜索 internlm2。

xtuner copy-cfg 命令用于复制一个内置的配置文件。该命令需要两个参数:CONFIG 代表需要复制的配置文件名称,SAVE_PATH 代表复制的目标路径。在我们的输入的这个命令中,我们的 CONFIG 对应的是上面搜索到的 internlm2_chat_1_8b_qlora_alpaca_e3 ,而 SAVE_PATH 则是当前目录 .。

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

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

配置文件介绍
打开配置文件后,我们可以看到整体的配置文件分为五部分:
PART 1 Settings:涵盖了模型基本设置,如预训练模型的选择、数据集信息和训练过程中的一些基本参数(如批大小、学习率等)。
PART 2 Model & Tokenizer:指定了用于训练的模型和分词器的具体类型及其配置,包括预训练模型的路径和是否启用特定功能(如可变长度注意力),这是模型训练的核心组成部分。
PART 3 Dataset & Dataloader:描述了数据处理的细节,包括如何加载数据集、预处理步骤、批处理大小等,确保了模型能够接收到正确格式和质量的数据。
PART 4 Scheduler & Optimizer:配置了优化过程中的关键参数,如学习率调度策略和优化器的选择,这些是影响模型训练效果和速度的重要因素。
PART 5 Runtime:定义了训练过程中的额外设置,如日志记录、模型保存策略和自定义钩子等,以支持训练流程的监控、调试和结果的保存。

2.3. 启动微调

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

xtuner train 命令用于启动模型微调进程。该命令需要一个参数:CONFIG 用于指定微调配置文件。这里我们使用修改好的配置文件 internlm2_chat_1_8b_qlora_alpaca_e3_copy.py。
训练过程中产生的所有文件,包括日志、配置文件、检查点文件、微调后的模型等,默认保存在 work_dirs 目录下,我们也可以通过添加 --work-dir 指定特定的文件保存位置。

2.4. 模型格式转换

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

xtuner convert pth_to_hf 命令用于进行模型格式转换。该命令需要三个参数:CONFIG 表示微调的配置文件, PATH_TO_PTH_MODEL 表示微调的模型权重文件路径,即要转换的模型权重, SAVE_PATH_TO_HF_MODEL 表示转换后的 HuggingFace 格式文件的保存路径。

转换完成后,可以看到模型被转换为 HuggingFace 中常用的 .bin 格式文件,这就代表着文件成功被转化为 HuggingFace 格式了。此时,hf 文件夹即为我们平时所理解的所谓 “LoRA 模型文件”

可以简单理解:LoRA 模型文件 = Adapter

2.5. 模型合并

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

对于全量微调的模型(full)其实是不需要进行整合这一步的,因为全量微调修改的是原模型的权重而非微调一个新的 Adapter ,因此是不需要进行模型整合的。

在 XTuner 中提供了一键合并的命令 xtuner convert merge,在使用前我们需要准备好三个路径,包括原模型的路径、训练好的 Adapter 层的(模型格式转换后的)路径以及最终保存的路径。

在模型合并完成后,我们就可以看到最终的模型和原模型文件夹非常相似,包括了分词器、权重文件、配置信息等等

├── merged
│ ├── config.json
│ ├── configuration_internlm2.py
│ ├── generation_config.json
│ ├── modeling_internlm2.py
│ ├── pytorch_model-00001-of-00002.bin
│ ├── pytorch_model-00002-of-00002.bin
│ ├── pytorch_model.bin.index.json
│ ├── special_tokens_map.json
│ ├── tokenization_internlm2.py
│ ├── tokenization_internlm2_fast.py
│ ├── tokenizer.json
│ ├── tokenizer.model
│ └── tokenizer_config.json

3. 微调后的模型对话

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

model_name_or_path = “/root/InternLM/XTuner/Shanghai_AI_Laboratory/internlm2-chat-1_8b”
model_name_or_path = “/root/InternLM/XTuner/merged”
在这里插入图片描述

标签:实战,训练,配置文件,模型,微调,internlm2,笔记,xtuner,InternLM
From: https://blog.csdn.net/Dylan_TAI/article/details/141930557

相关文章

  • 影刀RPA实战:美团平台与旺店通ERP订单同步核销及物流单号用户通知(一)
    介绍本文旨在操作如何高效地在美团平台和旺店通ERP之间进行订单同步,实现订单核销和物流单号实时通知用户。我们将详细介绍从导出美团平台的核销订单到通知用户发货物流单号的完整流程,包括注意事项和准备工作。本篇文章主要阐述下开发前的准备工作,讲述下开发流程步骤。准备工......
  • openHarmony南向开发笔记(四)Linux设备树
    openHarmony南向开发笔记(四)Linux设备树文章目录openHarmony南向开发笔记(四)Linux设备树一、什么是设备树二、设备树的组成部分三、设备树基本语法四、dts常用符号含义一、什么是设备树Linux设备树(DeviceTree)是Linux内核用来描述硬件信息的一种数据结构,它在内核启动......
  • 机器学习笔记-集合算法
    集合算法(EnsembleLearningAlgorithms)是通过将多个模型(通常是弱学习器)组合在一起,以提高整体预测性能的机器学习方法。它们在分类、回归等任务中非常常见。主要的集合算法包括以下几类:1.Bagging(BootstrapAggregating)原理:通过对数据集进行有放回的采样,训练多个独立的模型......
  • 驱动编写——《Android深度探索(卷1):HAL与驱动开发》笔记
    设备驱动大致骨架驱动代码.c文件#include<linux/module.h>#include<linux/init.h>#include<linux/slab.h>//使用kmalloc就需要includestaticunsignedcharmen[100000];//设备文件file,buf数据位置,count可读字节数,ppos偏移量staticssize_t驱动读函数(structfile*......
  • HTML/CSS/JS学习笔记 Day2(HTML)
    跟着该视频学习,记录笔记:【黑马程序员pink老师前端入门教程,零基础必看的h5(html5)+css3+移动端前端视频教程】https://www.bilibili.com/video/BV14J4114768?p=12&vd_source=04ee94ad3f2168d7d5252c857a2bf358Day2 内容梳理:目录HTML2.0网页开发的标签2.1基础标签的含义......
  • 从0认识竞品分析(附实战分析抖音)
    从0认识竞品分析借鉴以下文章https://www.processon.com/view/60890fda1e08531350534446https://www.cnblogs.com/kathy920617/p/9540639.htmlhttps://www.woshipm.com/evaluating/1050725.html1啥是竞品分析什么是竞品分析?顾名思义,是对竞争对手的产品进行比较分析的过程,......
  • 代码整洁之道--读书笔记(2)
    代码整洁之道简介:本书是编程大师“Bob大叔”40余年编程生涯的心得体会的总结,讲解要成为真正专业的程序员需要具备什么样的态度,需要遵循什么样的原则,需要采取什么样的行动。作者以自己以及身边的同事走过的弯路、犯过的错误为例,意在为后来者引路,助其职业生涯迈上更高台阶。本......
  • STM32学习笔记——Keil uVision5建项目
    新建文件夹——用于存放工程及工程管理新建文件夹用于存放整个工程打开“stm32-project”文件夹,新建一些文件夹用于工程源代码的分类这些文件夹都是自己建的用于不同类型代码存放,文件夹个数,命名都因人而异。(后续所有文件放在“stm32-project”中也行,不嫌乱的话)Hardware——......
  • 《Head First Software Architecture》读书笔记 —— Chapter 1: software architectu
    软件架构(SoftwareArchitecture)是一个软件系统成功的基石,它不仅决定了系统的结构,也直接影响到其可扩展性、可维护性和性能表现。在这篇博客中,我们将探讨软件架构的关键维度(dimensions)、架构决策(architecturaldecisions)以及常见的架构风格(architecturalstyles),以帮助您更好......
  • 【学习笔记】SSL证书安全机制之证书验证
    前言:每当Client从Server收到一张证书,有2件事Client需要去验证:证书是否有效?证书只是文件中的文本Client如何知道内容能够信任?Server是否是证书真正的拥有者?证书可以公开获取Client如何知道Server是真正的拥有者?1、证书是否有效?CertificateAuthority(须知道CA是证书......