当前位置:AIGC资讯 > AIGC > 正文

精调训练中文LLaMA模型实战教程,民间羊驼模型

羊驼实战系列索引

博文1:本地部署中文LLaMA模型实战教程,民间羊驼模型
博文2:本地训练中文LLaMA模型实战教程,民间羊驼模型
博文3:精调训练中文LLaMA模型实战教程,民间羊驼模型(本博客)

简介

在学习完上篇【博文2:本地训练中文LLaMA模型实战教程,民间羊驼模型】后,我们已经学会了使用无监督的语料预训练LLaMA模型,无监督的语料能让模型学会预测下一个字符是什么,但是还不能让模型理解人类的对话意图,经过指令精调之后模型就可以具备对话能力了。
本博客主要包含以下内容:
1训练数据准备,精调指令.json。
2训练脚本编写,主要参数讲解,消耗显存控制在24GB以内
3训练实战,测评。

系统配置

系统:Ubuntu 20.10
CUDA Version: 11.8
GPU: RTX3090 24G
内存: 64 G
anaconda(python版本管理)
RTX3090 24G显存刚好够用,设置合理的参数可以正常训练!

项目下载

GitHub地址
v3.2版本代码 https://github.com/ymcui/Chinese-LLaMA-Alpaca/archive/refs/tags/v3.2.zip

环境安装

requirements.txt

torch==1.13.1
peft==0.3.0dev
transformers==4.28.1
sentencepiece==0.1.97
wandb
datasets

这个我写的比作者仓库的多了wandb、datasets,亲测这个是需要安装的。

1 torch大家可以去官网寻找安装命令 https://pytorch.org/
我的cuda是11.8,使用官方教程的cu117安装,也是可以使用的

pip install torch==1.13.1+cu117 torchvision==0.14.1+cu117 torchaudio==0.13.1 --extra-index-url https://download.pytorch.org/whl/cu117

2 peft可能提示找不到包,选择手动安装,下载代码peft 0.3.0 zip 解压后,进入代码目录,然后安装

cd peft-0.3.0
python setup.py install

3 其余的使用pip install 命令安装

pip install transformers==4.28.1
pip install sentencepiece==0.1.97
pip install wandb
pip install datasets

词表参数冻结

词表无需训练,一个3090 24g一方面显存会不够用,另一方面词表训练需要很大训练量。![在这里插入图片描述](https://img-blog.csdnimg.cn/faa05cbe172c4e01b6dfca43ba977c62.png

在scripts/run_clm_sft_with_peft.py文件365行新增一行代码

modules_to_save=None

torchrun.sh

lr=1e-4
lora_rank=8
lora_alpha=32
lora_trainable="q_proj,v_proj,k_proj,o_proj,gate_proj,down_proj,up_proj"
modules_to_save="embed_tokens,lm_head"
lora_dropout=0.05
RANDOM=0
pretrained_model=/home/zhaoxin/workspace/chatGPT/model/llama_hf_chinese
chinese_tokenizer_path=/home/zhaoxin/workspace/chatGPT/model/llama_hf_chinese/tokenizer.model
dataset_dir=/home/zhaoxin/workspace/chatGPT/datas/alpaca/train
per_device_train_batch_size=1
per_device_eval_batch_size=1
training_steps=100
gradient_accumulation_steps=1
output_dir=/home/zhaoxin/workspace/chatGPT/model/buddy_alphca
validation_file=/home/zhaoxin/workspace/chatGPT/datas/alpaca/val/alpaca_data_val.json
deepspeed_config_file=ds_zero2_no_offload.json
torchrun --nnodes 1 --nproc_per_node 1 run_clm_sft_with_peft.py \
--deepspeed ${deepspeed_config_file} \
--model_name_or_path ${pretrained_model} \
--tokenizer_name_or_path ${chinese_tokenizer_path} \
--dataset_dir ${dataset_dir} \
--validation_split_percentage 0.001 \
--per_device_train_batch_size ${per_device_train_batch_size} \
--per_device_eval_batch_size ${per_device_eval_batch_size} \
--do_train \
--do_eval \
--seed $RANDOM \
--fp16 \
--max_steps ${training_steps} \
--lr_scheduler_type cosine \
--learning_rate ${lr} \
--warmup_ratio 0.03 \
--weight_decay 0 \
--logging_strategy steps \
--logging_steps 10 \
--save_strategy steps \
--save_total_limit 3 \
--evaluation_strategy steps \
--eval_steps 250 \
--save_steps 500 \
--gradient_accumulation_steps ${gradient_accumulation_steps} \
--preprocessing_num_workers 8 \
--max_seq_length 500 \
--output_dir ${output_dir} \
--overwrite_output_dir \
--ddp_timeout 30000 \
--logging_first_step True \
--lora_rank ${lora_rank} \
--lora_alpha ${lora_alpha} \
--trainable ${lora_trainable} \
--lora_dropout ${lora_dropout} \
--torch_dtype float16 \
--validation_file ${validation_file} \
--ddp_find_unused_parameters False

validation_file是从项目下的data/alpaca_data_zh_51k.json取了部分数据,大家可根据实际情况制作验证集。

ds_zero2_no_offload.json在项目的scripts/下面

精调指令.json

项目目录下data/alpaca_data_zh_51k.json是一份精调训练数据

每一条训练数据包含三个部分:instruction、input、output
其中input可以没有,这样就相当于是一个问答数据集。数据集可以通过调用gpt3.5turbo接口来制作。

测评

稍后发布哦

更新时间 2024-01-06