用于记录chatglm3的过程,防止忘记
需要注意的
可以使用xtuner -h查看有哪些功能可以使用。
[2023-10-31 11:40:18,643] [INFO] [real_accelerator.py:158:get_accelerator] Setting ds_accelerator to cuda (auto detect)
10/31 11:40:22 - mmengine - INFO - Arguments received: ['xtuner', '-h']. xtuner commands use the following syntax:xtuner MODE MODE_ARGS ARGSWhere MODE (required) is one of ('list-cfg', 'copy-cfg', 'log-dataset', 'check-custom-dataset', 'train', 'test', 'chat', 'convert', 'preprocess')MODE_ARG (optional) is the argument for specific modeARGS (optional) are the arguments for specific commandSome usages for xtuner commands: (See more by using -h for specific command!)1. List all predefined configs:xtuner list-cfg2. Copy a predefined config to a given path:xtuner copy-cfg $CONFIG $SAVE_FILE3-1. Fine-tune LLMs by a single GPU:xtuner train $CONFIG3-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 $GPUS4-1. Convert the pth model to HuggingFace's model:xtuner convert pth_to_hf $CONFIG $PATH_TO_PTH_MODEL $SAVE_PATH_TO_HF_MODEL4-2. Merge the HuggingFace's adapter to the pretrained LLM:xtuner convert merge $NAME_OR_PATH_TO_LLM $NAME_OR_PATH_TO_ADAPTER $SAVE_PATH4-3. Split HuggingFace's LLM to the smallest sharded one:xtuner convert split $NAME_OR_PATH_TO_LLM $SAVE_PATH5. Chat with LLMs with HuggingFace's model and adapter:xtuner chat $NAME_OR_PATH_TO_LLM --adapter $NAME_OR_PATH_TO_ADAPTER --prompt-template $PROMPT_TEMPLATE --system-template $SYSTEM_TEMPLATE6-1. Preprocess arxiv dataset:xtuner preprocess arxiv $SRC_FILE $DST_FILE --start-date $START_DATE --categories $CATEGORIES7-1. Log processed dataset:xtuner log-dataset $CONFIG7-2. Verify the correctness of the config file for the custom dataset.xtuner check-custom-datasetRun special commands:xtuner helpxtuner versionGitHub: https://github.com/InternLM/xtuner
xtuner命令都有对应的python文件,可以在源码的xtuner/tools下找到,方便了解我们在运行命令时可以选择哪些参数
下载模型
这是我下载模型的地址。
上传到网盘上了
环境
主要是安装xtuner,使用xtuner工具继续微调。
pip install 'xtuner[deepspeed]'
也可以git上下载源码安装,就是使用命令方便一点
git clone https://github.com/InternLM/xtuner.git
cd xtuner
pip install -e '.[all]'
数据处理
之前微调Atom模型的时候使用自己收集的数据做了一个问答的csv文件,格式如下
需要把数据转为json格式,格式如下:
[{"conversation":[{"system": "xxx","input": "xxx","output": "xxx"}]
},
{"conversation":[{"system": "xxx","input": "xxx","output": "xxx"}]
}]
转换的代码如下:
import csv
import jsoncsv_file = 'data.csv'
json_file = 'output.json'data = [] # 存储转换后的数据# 读取CSV文件
with open(csv_file, 'r', encoding="utf-8") as file:reader = csv.DictReader(file)for row in reader:instruction = row['question']output = row['answer']item = {"conversation":[{# system需要填入你认为合适的语句'system': '你是一个***专家。请回答我下面的问题。','input': instruction,'output': output}]}data.append(item)# 将转换后的数据写入JSON文件
with open(json_file, 'w', encoding="utf-8") as file:json.dump(data, file, indent=4, ensure_ascii=False)print("转换完成!")
微调
XTuner 提供多个开箱即用的配置文件,用户可以通过下列命令查看:
xtuner list-cfg
通过xtuner copy-cfg 下载chatglm3的配置文件
xtuner copy-cfg chatglm3_6b_base_qlora_alpaca_zh_e3 .
这行命令会下载一个chatglm3_6b_base_qlora_alpaca_zh_e3_copy.py,接下来我们需要更改这个文件。
- pretrained_model_name_or_path:改为chatglm3模型路径
- alpaca_zh_path:改为json文件路径
- max_epochs:改为你需要的训练轮数
- evaluation_inputs:(可选)改成自己的问题
微调启动!!
NPROC_PER_NODE=2 xtuner train chatglm3_6b_base_qlora_alpaca_zh_e3_copy.py --work-dir 保存路径
pt转hf
xtuner convert pth_to_hf chatglm3_6b_base_qlora_alpaca_zh_e3_copy.py 训练保存的pth模型路径 hf模型保存路径
合并模型
xtuner convert merge chatglm3模型路径 上面的hf模型保存路径 合并模型保存路径
测试
使用xtuner的chat进行测试,注意一定要填–prompt-template,不然他默认选择的是PROMPT_TEMPLATE的default的值,会报错,原因如下:
如果你是源码运行的话也可以把default的值改为’default’。
运行chat代码测试模型
xtuner chat 合并模型路径 --prompt-template default
参考
https://github.com/InternLM/xtuner/blob/151917720c7d57d02b78d9972e4b6ff755de93a0/README_zh-CN.md