首页 > 其他分享 >书生大模型第四期打卡 | 第五关 大模型微调之Xtuner

书生大模型第四期打卡 | 第五关 大模型微调之Xtuner

时间:2024-11-14 21:46:06浏览次数:3  
标签:text finetune xtuner data Xtuner file 打卡 root 模型

什么是Xtuner?

一种高效的微调框架,适合多种生态和硬件功能。集成了多种任务类型,支持很多开源生态。

大模型的两种微调范式:

1、增量预训练:通过文章、书籍、代码等,让基座模型学到一些新的知识,如某个垂类领域的常识

2、指令跟随微调:通过高质量的对话、问答数据,让模型学会对话模版,根据人类指令进行对话

一般大模型通过增量预训练得到垂类基座模型,再通过指令跟随得到垂类对话模型。

解决微调所需显存的问题:Lora和Qlora。

Lora:在原本的linear层之间新增一个支路adapter

上手!

1、配置环境:

cd ~
#git clone 本repo
git clone https://github.com/InternLM/Tutorial.git -b camp4
mkdir -p /root/finetune && cd /root/finetune
conda create -n xtuner-env python=3.10 -y
conda activate xtuner-env
git clone https://github.com/InternLM/xtuner.git
cd /root/finetune/xtuner
pip install  -e '.[all]'
pip install torch==2.4.1 torchvision==0.19.1 torchaudio==2.4.1 --index-url https://download.pytorch.org/whl/cu121
pip install transformers==4.39.0

这里注意不能用torch2.5,指定版本用2.4.1,并且在卡住的时候耐心等,不要急着Kill。

2、验证安装,环境配置成功时,输入xtuner list-cfg,不会报错。

3、修改提供的数据,创建新文件夹并创建修改脚本。

mkdir -p /root/finetune/data && cd /root/finetune/data
cp -r /root/Tutorial/data/assistant_Tuner.jsonl  /root/finetune/data
# 创建 `change_script.py` 文件
touch /root/finetune/data/change_script.py

4、在脚本中放以下代码,将“机智流”换成自定义的名字。

import json
import argparse
from tqdm import tqdm

def process_line(line, old_text, new_text):
    # 解析 JSON 行
    data = json.loads(line)
    
    # 递归函数来处理嵌套的字典和列表
    def replace_text(obj):
        if isinstance(obj, dict):
            return {k: replace_text(v) for k, v in obj.items()}
        elif isinstance(obj, list):
            return [replace_text(item) for item in obj]
        elif isinstance(obj, str):
            return obj.replace(old_text, new_text)
        else:
            return obj
    
    # 处理整个 JSON 对象
    processed_data = replace_text(data)
    
    # 将处理后的对象转回 JSON 字符串
    return json.dumps(processed_data, ensure_ascii=False)

def main(input_file, output_file, old_text, new_text):
    with open(input_file, 'r', encoding='utf-8') as infile, \
         open(output_file, 'w', encoding='utf-8') as outfile:
        
        # 计算总行数用于进度条
        total_lines = sum(1 for _ in infile)
        infile.seek(0)  # 重置文件指针到开头
        
        # 使用 tqdm 创建进度条
        for line in tqdm(infile, total=total_lines, desc="Processing"):
            processed_line = process_line(line.strip(), old_text, new_text)
            outfile.write(processed_line + '\n')

if __name__ == "__main__":
    parser = argparse.ArgumentParser(description="Replace text in a JSONL file.")
    parser.add_argument("input_file", help="Input JSONL file to process")
    parser.add_argument("output_file", help="Output file for processed JSONL")
    parser.add_argument("--old_text", default="尖米", help="Text to be replaced")
    parser.add_argument("--new_text", default="机智流", help="Text to replace with")
    args = parser.parse_args()

    main(args.input_file, args.output_file, args.old_text, args.new_text)

5、执行脚本,生成如下结构

|-- /finetune/data/
    |-- assistant_Tuner.jsonl
    |-- assistant_Tuner_change.jsonl

6、复制模型,进行训练

        这里推荐使用InternStudio开发机,如果使用其他机器,可以在魔搭社区或者hf上下载internlm2_5-7b-chat模型,放入以下路径。

mkdir /root/finetune/models

ln -s /root/share/new_models/Shanghai_AI_Laboratory/internlm2_5-7b-chat /root/finetune/models/internlm2_5-7b-chat

7、在finetune目录下新建文件夹,获取官方的config并进行修改

获取方式:

# cd {path/to/finetune}
cd /root/finetune
mkdir ./config
cd config
xtuner copy-cfg internlm2_5_chat_7b_qlora_alpaca_e3 ./

修改路径:

修改问题,这里的问题用于评测训练表现,应当与要微调的内容相关?

更改Dataloader:

8、开始微调

       微调命令 xtuner train,config是配置文件即internlm2_5_chat_7b_qlora_alpaca_e3_copy.py,deepseed节约显存,work-dir是文件保存位置。

cd /root/finetune
xtuner train ./config/internlm2_5_chat_7b_qlora_alpaca_e3_copy.py --deepspeed deepspeed_zero2 --work-dir ./work_dirs/assistTuner

        训练过程:就是模型的正常训练过程

9、将pytorch训练出来的格式转换为hf需要的格式

cd /root/finetune/work_dirs/assistTuner
pth_file=`ls -t /root/finetune/work_dirs/assistTuner/*.pth | head -n 1 | sed 's/:$//'`
export MKL_SERVICE_FORCE_INTEL=1
export MKL_THREADING_LAYER=GNU
xtuner convert pth_to_hf ./internlm2_5_chat_7b_qlora_alpaca_e3_copy.py ${pth_file} ./hf

转换后的目录结构:

├── hf
│   ├── README.md
│   ├── adapter_config.json
│   ├── adapter_model.bin
│   └── xtuner_config.py

10、查看微调后的对话效果

修改模型路径为微调后的:

建立网页:

streamlit run /root/Tutorial/tools/L1_XTuner_code/xtuner_streamlit_demo.py

标签:text,finetune,xtuner,data,Xtuner,file,打卡,root,模型
From: https://blog.csdn.net/m0_56841969/article/details/143770442

相关文章

  • 书生实战营第四期-基础岛第六关-OpenCompass 评测书生大模型实践
    基础任务一、使用OpenCompass评测浦语API 1、创建用于评测conda环境condacreate-nopencompasspython=3.10condaactivateopencompasscd/rootgitclone-b0.3.3https://github.com/open-compass/opencompasscdopencompasspipinstall-e.pipinstall......
  • Python注意力机制Attention下CNN-LSTM-ARIMA混合模型预测中国银行股票价格|附数据代码
    全文链接:https://tecdat.cn/?p=38195原文出处:拓端数据部落公众号 股票市场在经济发展中占据重要地位。由于股票的高回报特性,股票市场吸引了越来越多机构和投资者的关注。然而,由于股票市场的复杂波动性,有时会给机构或投资者带来巨大损失。考虑到股票市场的风险,对股价变动的研究......
  • 如何使用SpaceClaim对动力电池仿真模型进行简化
    本文摘要(由AI生成):文章概述了流体与热仿真模型简化的关键原则,指导了如何基于部件对热系统的影响进行保留、简化或舍弃。在简化过程中,要确保管道内径、液冷板内流道尺寸及细节特征保持不变,水管形态平滑,接头装配良好。对热管理系统影响较小的几何特征可简化。简化后需检查模型无......
  • 51c大模型~合集43
    我自己的原文哦~  https://blog.51cto.com/whaosoft/11870499#PanoSent情感分析的终极形态:全景式细粒度多模态对话情感分析基准罗盟,本工作的第一作者。新加坡国立大学(NUS)人工智能专业准博士生,本科毕业于武汉大学。主要研究方向为多模态大语言模型和SocialAI、Human-ecce......
  • OpenAI模型whisper 音频转文本
    最近有一个音频转文本的需求,了解到了OpenAI的whisper模型可以实现。Whisper是OpenAI提供的一个通用语音识别模型,支持多语言的音频转文本功能,并具有较高的准确性。它的主要用途包括自动语音识别(ASR)、语言翻译(将音频直接翻译成英文文本)等。Whisper支持将长时间音频文件(如对......
  • CCF - 网易雷火基金项目成果:基于大小模型协同的低资源标注技术|CNCC 2024 演讲实录
    在科技蓬勃发展的时代浪潮中,人工智能领域的每一次突破都离不开持续的科研投入和对前沿技术的不懈探索。2023年,网易伏羲与中国计算机学会(CCF)共同发起了“CCF-网易雷火联合基金”,致力于发挥和利用多方资源优势,加强与海内外青年学者的科研合作,促进中国人工智能等领域尖端技术产业......
  • 语音生成模型 PlayDialog:可生成对话播客、旁白;小米 AI 眼镜将于明年 Q2 发布丨 RTE 开
       开发者朋友们大家好: 这里是「RTE开发者日报」,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享RTE(Real-TimeEngagement)领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、「有看点的会议」,但内容仅代表编......
  • 详解漏斗模型及如何通过行为设计提升转化率
    详解漏斗模型及如何通过行为设计提升转化率|人人都是产品经理https://www.woshipm.com/pd/1695380.html详解漏斗模型及如何通过行为设计提升转化率2018-12-053评论63515浏览267收藏12分钟 漏斗模型,是一种数据分析方式,是一个线性流程,更是一种普遍适用的方法论,......
  • 模型轻量化中的模型剪枝(Pruning)方法——结构化剪枝
    模型轻量化中的模型剪枝(Pruning)方法——结构化剪枝详解目录简介结构化剪枝的基本概念结构化剪枝的数学基础结构化剪枝的步骤结构化剪枝的方法5.1通道剪枝5.2神经元剪枝5.3层剪枝结构化剪枝的优缺点结构化剪枝的应用实例代码示例8.1代码说明总结简介随着深度学......
  • 模型轻量化中的模型剪枝(Pruning)方法——动态剪枝详解
    模型轻量化中的模型剪枝(Pruning)方法——动态剪枝详解目录简介动态剪枝的基本概念动态剪枝的数学基础动态剪枝的步骤动态剪枝的方法5.1基于门控机制的动态剪枝5.2基于稀疏化的动态剪枝5.3基于强化学习的动态剪枝动态剪枝的优缺点动态剪枝的应用实例代码示例8.1代码......