基础岛 - 使用XTuner微调internLM1.8B模型的实践

先写实践体会:

  • 基础岛课程中最难一课,不再是应用层面,而是深入模型内部。
  • 微调流程:
    • 目标模型准备
    • 微调数据准备
    • 微调配置文件
    • 微调实施
    • 格式转换
    • 模型合并
    • 测试
  • 微调时间,在10%的A100GPU下,3000条指令数据下,本文所用的纯微调时间大约为:
    • 微调:40min、转换:15m、合并:5m,合计1H左右
  • 微调结果准确!和预设数据完全相同,而且能结合LLM自身能力去分解。详见文末测试。
  • XTuner支持4090消费级GPU的微调
  • XTuner的参数很多,微调的设定很多、掌握需要更深入的学习和理解LLM模型知识
  • 指令微调相对简单
  • 合理的微调数据是关键之一

一、XTuner介绍

https://xtuner.readthedocs.io/zh-cn/latest/index.html
XTuner是低成本大模型训练工具箱,也是internLM全链条工具链中,微调工具的一环。XTuner支持与书生·浦语(InternLM)、Llama等多款开源大模型的适配,可执行增量预训练、指令微调、工具类指令微调等任务类型。硬件要求上,开发者最低使用消费级显卡便可进行训练,实现大模型特定需求能力。

二、模型微调流程

  • 模型准备
  • 微调数据准备
  • 配置文件准备
  • 微调实施
  • 模型格式转换
  • 模型合并
  • 微调结果测试

三、模型微调的种类

  • 指令微调
  • 传统微调
  • 对齐微调

在传统微调中,语言模型预测样本的标签,而在指令微调中,语言模型回答指令集中的问题。两者之间的差别:

  • 目标
    • 传统微调:在特定任务或数据集上进一步优化预训练模型的性能。
    • 指令微调:使模型能够更好地理解和执行自然语言指令。
  • 数据集
    • 传统微调:通常使用单一任务的专用数据集,例如情感分析、命名实体识别等。数据量可能较小,但高度特定于目标任务。
    • 指令微调:使用包含各种任务和指令的大规模多任务数据集。这些数据集涵盖了多个领域和任务类型。数据量通常非常大,涵盖广泛的指令和任务示例。
  • 应用场景
    • 传统微调:适用于需要在特定任务上获得最佳性能的应用,例如医学影像分析、语音识别等。
    • 指令微调:适用于需要处理多种任务和指令的自然语言处理应用,例如智能助理、聊天机器人等

指令微调侧重于让模型学会遵循特定指令,生成符合要求的输出,适用于需要模型执行特定任务的场景。
此外,还有对齐微调
对齐微调侧重于使模型的行为与人类价值观和期望一致,适用于需要生成内容符合特定价值观或标准的场景。

本次是进行指令微调:
指令跟随微调(Instruction Following Fine-Tuning)是指在大型语言模型(LLM)的训练过程中,通过提供明确的指令或任务描述,对模型进行有针对性的微调,使其能够更好地理解和执行特定任务。这种方式旨在让模型学习如何根据给定的指令生成符合要求的输出。

四、微调实践

(一)xtuner安装

# 创建虚拟环境
conda create -n xtuner0121 python=3.10 -y

# 激活虚拟环境(注意:后续的所有操作都需要在这个虚拟环境中进行)
conda activate xtuner0121

# 安装一些必要的库
conda install pytorch==2.1.2 torchvision==0.16.2 torchaudio==2.1.2 pytorch-cuda=12.1 -c pytorch -c nvidia -y
# 安装其他依赖
pip install transformers==4.39.3
pip install streamlit==1.36.0

# 创建一个目录,用来存放源代码
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
# 执行安装
pip install -e '.[deepspeed]'

安装确认

xtuner version
08/08 17:28:22 - mmengine - INFO - 0.1.21

帮助查看

xtuner help
08/08 17:29:02 - mmengine - INFO -
    Arguments received: ['xtuner', 'help']. xtuner commands use the following syntax:

        xtuner MODE MODE_ARGS ARGS

        Where   MODE (required) is one of ('list-cfg', 'copy-cfg', 'log-dataset', 'check-custom-dataset', 'train', 'test', 'chat', 'convert', 'preprocess', 'mmbench', 'eval_refcoco')
                MODE_ARG (optional) is the argument for specific mode
                ARGS (optional) are the arguments for specific command

    Some usages for xtuner commands: (See more by using -h for specific command!)

        1. List all predefined configs:
            xtuner list-cfg
        2. Copy a predefined config to a given path:
            xtuner copy-cfg $CONFIG $SAVE_FILE
        3-1. Fine-tune LLMs by a single GPU:
            xtuner train $CONFIG
        3-2. Fine-tune LLMs by multiple GPUs:
            NPROC_PER_NODE=$NGPUS NNODES=$NNODES NODE_RANK=$NODE_RANK PORT=$PORT ADDR=$ADDR xtuner dist_train $CONFIG $GPUS
        4-1. Convert the pth model to HuggingFace's model:
            xtuner convert pth_to_hf $CONFIG $PATH_TO_PTH_MODEL $SAVE_PATH_TO_HF_MODEL
        4-2. Merge the HuggingFace's adapter to the pretrained base model:
            xtuner convert merge $LLM $ADAPTER $SAVE_PATH
            xtuner convert merge $CLIP $ADAPTER $SAVE_PATH --is-clip
        4-3. Split HuggingFace's LLM to the smallest sharded one:
            xtuner convert split $LLM $SAVE_PATH
        5-1. Chat with LLMs with HuggingFace's model and adapter:
            xtuner chat $LLM --adapter $ADAPTER --prompt-template $PROMPT_TEMPLATE --system-template $SYSTEM_TEMPLATE
        5-2. Chat with VLMs with HuggingFace's model and LLaVA:
            xtuner chat $LLM --llava $LLAVA --visual-encoder $VISUAL_ENCODER --image $IMAGE --prompt-template $PROMPT_TEMPLATE --system-template $SYSTEM_TEMPLATE
        6-1. Preprocess arxiv dataset:
            xtuner preprocess arxiv $SRC_FILE $DST_FILE --start-date $START_DATE --categories $CATEGORIES
        6-2. Preprocess refcoco dataset:
            xtuner preprocess refcoco --ann-path $Ref
### Qwen 1.8B 大模型微调方法 对于 Qwen 1.8B 的微调过程,主要通过 LoRA(Low-Rank Adaptation)技术实现高效调整。以下是具体操作说明: #### 修改脚本路径 在 `finetune/finetune_lora_single_gpu.sh` 文件中,需指定模型路径和数据路径。这一步骤确保程序能够找到预训练权重以及用于微调的数据集[^1]。 ```bash MODEL_PATH="/path/to/qwen-1.8b" DATA_PATH="/path/to/dataset.jsonl" ``` 上述代码片段展示了如何定义变量来存储模型文件夹位置与输入数据的位置。 #### 自定义参数配置 除了基本的路径设定外,还可以依据实际需求自定义其他超参。例如学习率 (`--learning_rate`)、批量大小 (`--per_device_train_batch_size`) 和最大序列长度 (`--max_seq_length`) 等重要选项均可以在同一脚本内完成设置。 ```bash --learning_rate=2e-5 \ --per_device_train_batch_size=4 \ --max_seq_length=512 \ ``` 这些参数直接影响到最终效果及收敛速度的选择应基于实验结果反复优化。 #### 启动训练任务 当所有前期准备工作完成后即可执行如下命令启动单卡上的LoRA微调流程: ```bash bash finetune_lora_single_gpu.sh ``` 此指令会加载之前编辑好的shell script并按照其中所设条件运行整个训练周期直到结束或者达到预定的最大步数为止。 ### 注意事项 在整个过程中需要注意保持环境一致性避免版本冲突;另外也要合理规划GPU资源分配以免因显存不足而导致失败等问题发生。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值