书生基础5L1-XTuner 微调个人小助手认知

基础任务

使用 XTuner 微调 InternLM2-Chat-7B 实现自己的小助手认知,如下图所示(图中的需替换成自己的昵称),记录复现过程并截图。

XTuner

一、主要特点

  1. 高效性

    • 支持在8GB显存上微调7B大小的模型,以及大尺度模型(70B+)的跨设备微调。
    • 提供自动优化加速功能,开发者无需关注复杂的显存优化与计算加速细节。
  2. 灵活性

    • 兼容多种大语言模型和多模态图文模型的预训练与微调。
    • 支持各种数据格式和微调算法,如JSON、CSV等。
    • 支持加载HuggingFace、ModelScope模型或者数据集。
  3. 全能性

    • 提供增量预训练、指令微调与Agent微调等多种微调模式。
    • 无缝接入部署和评测工具库。

二、功能支持

  1. 模型支持:支持多种大模型,如InternLM2、Llama2、ChatGLM2等。
  2. 数据集支持:支持多种开源数据集,如MSAgent-Bench、MOSS-003-SFT、Open-Platypus等。
  3. 微调算法:提供QLoRA、LoRA、全量参数微调等多种微调算法。

三、使用流程

  1. 安装XTuner

    • 支持从GitHub或Gitee克隆代码,并提供详细的安装步骤。
    • 安装完成后,可以通过简单的命令来启动XTuner。
  2. 准备数据集

    • 根据微调模式(增量预训练或指令微调)准备符合XTuner要求的数据集。
    • 增量预训练可以使用无监督的文章、书籍、代码等自然语言数据;指令微调需要准备包含高质量对话和问答数据的数据集。
  3. 微调模型

    • 指定微调模式、选择预训练模型和数据集。
    • 启动微调过程,XTuner会自动处理数据加载、模型训练、参数优化等过程。
    • 训练完成后,输出微调后的模型。

四、优化技巧

  1. Flash Attention:通过将Attention计算并行化来降低显存消耗。
  2. DeepSpeedZeRO:通过将训练过程中的参数、梯度和优化器状态切片保存来节省显存。

五、应用场景

XTuner广泛应用于各种AI应用场景,如智能内容创作、AI数字人、AI数据分析、智能客服、智能办公、行业智能应用等。通过微调大模型,可以使其更好地适应特定任务,提升模型性能,从而为用户提供更优质的AI服务。

综上所述,XTuner是一款功能强大、易于使用的大模型微调工具库,它以其高效的数据引擎、训练引擎和优化技术,为开发者提供了单卡低成本微调的解决方案。无论是希望快速上手大模型微调的开发者,还是希望提升模型性能的NLP研究人员,XTuner都将是其不二选择。

过程及结果

先使用 conda 先构建一个 Python-3.10 的虚拟环境,再安装xtuner,然后新建一个文件,并向其中放入以下代码,然后用python运行一下(注意:要将我用红色圈出来的地方的名字改成自己的名字

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)

用python运行之后再查看一下数据,就会看见里面出现了我刚刚设置的小凌的名字。

然后再复制模型,修改config,主要修改我标记出来的部分,修改成下图那样就可以了。

启动微调就会出现如下内容

然后再进行权重转换和模型合并,最后修改xtuner_streamlit_demo.py里面的一行代码,如下图

最后运行这句代码streamlit run/root/Tutorial/tools/L1_XTuner_code/xtuner_streamlit_demo.py会出现下图的结果,用win+R输入powershell,输入 ssh -p 开发机端口号 root@ssh.intern-ai.org.cn -CNg -L 8501:127.0.0.1:8501 -o StrictHostKeyChecking=no进行镜像操作,若未配置密钥还需输入对应开发机的密码,然后点击下图中横线标出来的链接。

就会出现如下的界面

接下来就可以进行对话了,如下图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值