XTuner 微调个人小助手认知任务

1.前期准备

首先我们创建虚拟机,选择Cuda12.2-conda,其他可按需选择,如下图:

之后我们使用下述命令将Tutorial仓库资料克隆到本地:

mkdir -p /root/InternLM/Tutorial
git clone -b camp3  https://github.com/InternLM/Tutorial /root/InternLM/Tutorial

2.创建虚拟环境

使用下述命令及Anaconda创建一个xtuner0121的虚拟环境:

# 创建虚拟环境
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

使用下述命令安装XTuner:

# 创建一个目录,用来存放源代码
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
conda activate xtuner0121

# 执行安装
pip install -e '.[deepspeed]'

最后可以使用下述命令验证一下安装结果:

xtuner version

也可通过xtuner help,查看相关帮助。

3.模型准备:

对于在 InternStudio 上运行的小伙伴们,可以不用通过 HuggingFace、OpenXLab 或者 Modelscope 进行模型的下载,在开发机中已经为我们提供了模型的本地文件,直接使用就可以了。

通过以下代码一键通过符号链接的方式链接到模型文件,这样既节省了空间,也便于管理。

# 创建一个目录,用来存放微调的所有资料,后续的所有操作都在该路径中进行
mkdir -p /root/InternLM/XTuner

cd /root/InternLM/XTuner

mkdir -p Shanghai_AI_Laboratory

ln -s /root/share/new_models/Shanghai_AI_Laboratory/internlm2-chat-1_8b Shanghai_AI_Laboratory/internlm2-chat-1_8b

模型文件准备好后,我们可以使用下述命令来观察目录结构。

apt-get install -y tree

tree -l

目录结构如图所示:

而后,我们开始查看微调前的效果(启用环境,并启动):

conda activate xtuner0121

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

按照之前的教程进行端口映射,

之后我们进行微调,首先准备数据集文件:

cd /root/InternLM/XTuner
mkdir -p datas
touch datas/assistant.json

为简化数据文件,我们使用脚本生成方式来准备数据:

cd /root/InternLM/XTuner
touch xtuner_generate_assistant.py

将下述内容粘贴到xtuner_generate_assistant.py文件中,也可使用命令直接复制tools/xtuner_generate_assistant.py的内容

为体现自己的训练,将其中name字段改为自己的名称

然后执行:

cd /root/InternLM/XTuner
conda activate xtuner0121

python xtuner_generate_assistant.py

我们查看一下目录结构:

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

conda activate xtuner0121

xtuner list-cfg -p internlm2

复制一个预设的配置文件:

cd /root/InternLM/XTuner
conda activate xtuner0121

xtuner copy-cfg internlm2_chat_1_8b_qlora_alpaca_e3 .

我们对配置文件进行修改:

#######################################################################
#                          PART 1  Settings                           #
#######################################################################
- pretrained_model_name_or_path = 'internlm/internlm2-chat-1_8b'
+ pretrained_model_name_or_path = '/root/InternLM/XTuner/Shanghai_AI_Laboratory/internlm2-chat-1_8b'

- alpaca_en_path = 'tatsu-lab/alpaca'
+ alpaca_en_path = 'datas/assistant.json'

evaluation_inputs = [
-    '请给我介绍五个上海的景点', 'Please tell me five scenic spots in Shanghai'
+    '请介绍一下你自己', 'Please introduce yourself'
]

#######################################################################
#                      PART 3  Dataset & Dataloader                   #
#######################################################################
alpaca_en = dict(
    type=process_hf_dataset,
-   dataset=dict(type=load_dataset, path=alpaca_en_path),
+   dataset=dict(type=load_dataset, path='json', data_files=dict(train=alpaca_en_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,
    use_varlen_attn=use_varlen_attn)

也可以使用如下命令直接复制修改后的文件:

cd /root/InternLM/XTuner
cp /root/InternLM/Tutorial/configs/internlm2_chat_1_8b_qlora_alpaca_e3_copy.py ./

使用xtuner train启动微调:

cd /root/InternLM/XTuner
conda activate xtuner0121

xtuner train ./internlm2_chat_1_8b_qlora_alpaca_e3_copy.py

训练完成后界面如下图所示:

完成后,使用下述命令完成模型格式转换:

cd /root/InternLM/XTuner
conda activate xtuner0121

# 先获取最后保存的一个pth文件
pth_file=`ls -t ./work_dirs/internlm2_chat_1_8b_qlora_alpaca_e3_copy/*.pth | head -n 1`
export MKL_SERVICE_FORCE_INTEL=1
export MKL_THREADING_LAYER=GNU
xtuner convert pth_to_hf ./internlm2_chat_1_8b_qlora_alpaca_e3_copy.py ${pth_file} ./hf

之后完成模型合并:

cd /root/InternLM/XTuner
conda activate xtuner0121

export MKL_SERVICE_FORCE_INTEL=1
export MKL_THREADING_LAYER=GNU
xtuner convert merge /root/InternLM/XTuner/Shanghai_AI_Laboratory/internlm2-chat-1_8b ./hf ./merged --max-shard-size 2GB

最后启用可视化界面进行测试,测试之前将脚本文件的模型路径按照下述方式进行更改:

# 直接修改脚本文件第18行
- model_name_or_path = "/root/InternLM/XTuner/Shanghai_AI_Laboratory/internlm2-chat-1_8b"
+ model_name_or_path = "/root/InternLM/XTuner/merged"

启动应用:

conda activate xtuner0121

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

仍旧按照之前的方法完成映射,效果如下图:

查看过拟合情况:

可以看到并没有过拟合,试验成功!

 可以

### 使用 XTuner 进行大模型微调的方法教程 #### 1. 构建数据集 为了使模型能够学习特定的任务或行为,首先需要准备高质量的数据集。根据需求,可以创建一个对话形式的数据集,其中包含提问和对应的理想回答。这些数据将用于指导模型的学习方向[^1]。 ```bash # 数据集应保存为 JSONL 文件格式,每条记录是一个独立的对话样本。 { "instruction": "解释什么是机器学习", "input": "", "output": "机器学习是一种通过算法让计算机从经验中自动改进的技术..." } ``` #### 2. 配置文件编写 XTuner 的配置文件定义了训练的具体参数以及使用的模型架构等信息。以 `internlm_chat_7b` 模型为例,可以通过修改现有的 `.py` 配置模板来适配自己的任务场景[^3]。 以下是简化版配置文件的一个片段: ```python from xtuner.engine import Config model = dict( type='InternLM', version='chat-7b' ) train_dataset_type = 'CustomDataset' data_root = '/path/to/dataset' max_epochs = 3 per_device_train_batch_size = 4 gradient_accumulation_steps = 8 learning_rate = 5e-5 weight_decay = 0.01 warmup_ratio = 0.05 lr_scheduler_type = 'cosine' logging_dir = './logs' save_total_limit = 3 checkpointing_steps = 1000 fp16 = True bf16 = False deepspeed_config_path = "/root/deepspeed_zero2.json" work_dir = "./work_dirs/assistTuner" cfg = Config(locals()) ``` #### 3. 开始微调过程 利用 XTuner 提供的命令行工具可以直接运行指定配置下的微调流程。下面展示了一个典型的执行指令案例: ```bash xtuner train ./config/internlm2_5_chat_7b_qlora_alpaca_e3_copy.py \ --deepspeed deepspeed_zero2 \ --work-dir ./work_dirs/assistTuner ``` 此命令会加载预设好的超参设置并基于 DeepSpeed 技术加速计算效率,在工作目录下逐步存储中间结果与最终完成后的权重文件。 #### 4. 转换至 Hugging Face 格式 当微调完成后如果希望分享成果或者进一步部署应用,则可能需要用到标准框架支持的形式。XTuner 支持把内部生成的结果导出成兼容 Hugging Face Transformers 库的标准结构化存档[^2]。 转换操作如下所示: ```bash xtuner convert-to-hf-model \ ./work_dirs/assistTuner/best_model.pth \ /root/output/huggingface_model/ ``` 这样就可以轻松地与其他依赖该生态系统的项目集成起来了。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值