基于llama模型进行增量预训练

[复制链接]
查看447 | 回复0 | 2023-8-10 12:47:22 | 显示全部楼层 |阅读模式
目录
1、llama模型转换(pytorch格式转换为HuggingFace格式)
1.1、拉取Chinese-LLaMA-Alpaca项目
1.2、准备文件夹
1.3、下载llama官方原始模型
1.4、移动文件到指定位置
1.5、执行转换脚本
2、合并模型
2.1、下载Chinese-LLaMA-Plus-7B模型
2.2、下载chinese_alpaca_plus_lora_7b模型
2.3、执行合并脚本
3、准备数据集
4、进行二次预训练
4.1、修改run_pt.sh文件
4.1、运行run_pt.sh文件
4.2、训练后文件整理
4.3、合并模型
5、推理模型
5.1、命令行方式推理合并后的模型
5.2、Web图形界面方式推理合并后的模型

大家知道AI模型是怎么训练出来的吗?
AI模型的训练训练过程分为如下三个阶段
第一个阶段叫做无监督学习(PreTraining),就是输入大量的文本语料让GPT自己寻找语言的规律, 这样一个巨大的词向量空间就形成了,但是话说的漂亮并不一定正确。
第二个阶段叫做监督学习(Supervised Fine-Tuning,也叫微调),就是人工标注一些语料,教会GPT什 么该说,什么不该说。(训练数据集)
第三个阶段叫做强化学习(RM,也叫奖励模型训练),就是给GPT的回答进行打分,告诉他在他 的一众回答中,哪些回答更好。(验证数据集)

第一个阶段(无监督学习),又分为了底座模型预训练,及增量预训练,它们都属于无监督学习,基座模型预训练可以查看上篇文章:使用数据预训练一个AI语言模型
本文主要来聊聊有了一个底座模型之后,如何继续使用大量文本进行增量预训练。
1、llama模型转换(pytorch格式转换为HuggingFace格式)

由于使用的底座模型是llama,官方公布的是PyTorch版本,为了方便后续使用,需转换为HuggingFace格式
1.1、拉取Chinese-LLaMA-Alpaca项目

  1.  # 我的文件路径为如下
  2.  cd /root/autodl-fs
  3.  git clone https://github.com/ymcui/Chinese-LLaMA-Alpaca.git
复制代码
1.2、准备文件夹

以下命令依次执行!
  1.  cd Chinese-LLaMA-Alpaca
  2.  mkdir model
  3.  cd model
  4.  mkdir llama
  5.  mkdir output
  6.  mkdir llama/7B
复制代码

1.3、下载llama官方原始模型

  1.  wget https://agi.gpt4.org/llama/LLaMA/tokenizer.model -O ./tokenizer.model
  2.  wget https://agi.gpt4.org/llama/LLaMA/tokenizer_checklist.chk -O ./tokenizer_checklist.chk
  3.  wget https://agi.gpt4.org/llama/LLaMA/7B/consolidated.00.pth -O ./7B/consolidated.00.pth
  4.  wget https://agi.gpt4.org/llama/LLaMA/7B/params.json -O ./7B/params.json
复制代码
1.4、移动文件到指定位置

  1.  mv tokenizer.model llama
  2.  mv tokenizer_checklist.chk consolidated.00.pth params.json llama/7B
复制代码
1.5、拉取transformers项目并安装依赖
  1.  cd /root/autodl-fs
  2.  git clone https://github.com/huggingface/transformers.git
  3.  pip install torch==1.13.1 -i https://pypi.mirrors.ustc.edu.cn/simple/
  4.  pip install sentencepiece==0.1.97 -i https://pypi.mirrors.ustc.edu.cn/simple/
  5.  pip install peft==0.3.0 -i https://pypi.mirrors.ustc.edu.cn/simple/
  6.  pip uninstall tokenizers
  7.  pip install tokenizers==0.13.3 -i https://pypi.mirrors.ustc.edu.cn/simple/
  8.  pip install transformers==4.28.1 -i https://pypi.mirrors.ustc.edu.cn/simple/
复制代码
1.5、执行转换脚本

  1.  cd /root/autodl-fs/transformers
  2.  ​
  3.  python src/transformers/models/llama/convert_llama_weights_to_hf.py \
  4.  --input_dir /root/autodl-fs/Chinese-LLaMA-Alpaca/model/llama/ \
  5.  --model_size 7B \
  6.  --output_dir /root/autodl-fs/Chinese-LLaMA-Alpaca/model/output
复制代码
参数说明:


  • --input_dir:tokenizer.model存放路径
  • --model_size:其余llama文件存放路径
  • --output_dir:存放转换好的HF版权重路径
2、合并模型

由于原始llama模型对中文的支持不是很优秀,所以需合并一个Chinese-LLaMA-Plus-7B模型和chinese_llama_plus_lora_7b模型​
2.1、下载Chinese-LLaMA-Plus-7B模型

链接:百度网盘 请输入提取码 提取码:082w
上传到/root/autodl-fs/llama_7b目录下并解压缩
  1.  cd /root/autodl-fs/llama_7b
  2.  mkdir chinese_llama_plus_lora_7b
  3.  unzip chinese_llama_plus_lora_7b.zip chinese_llama_plus_lora_7b
复制代码
2.2、下载chinese_alpaca_plus_lora_7b模型

链接:百度网盘 请输入提取码 提取码:yr3q
上传到/root/autodl-fs/llama_7b目录下并解压缩
  1.  cd /root/autodl-fs/llama_7b
  2.  mkdir chinese_alpaca_plus_lora_7b
  3.  unzip chinese_alpaca_plus_lora_7b.zip chinese_alpaca_plus_lora_7b
复制代码

2.3、执行合并脚本

  1.  cd /root/autodl-fs/Chinese-LLaMA-Alpaca/
  2.  # 合并后的模型存放位置
  3.  mkdir model/firstmergemodel
  4.  ​
  5.  python scripts/merge_llama_with_chinese_lora.py \
  6.  --base_model /root/autodl-fs/Chinese-LLaMA-Alpaca/model/output \
  7.  --lora_model /root/autodl-fs/llama_7b/chinese_llama_plus_lora_7b,/root/autodl-fs/llama_7b/chinese_alpaca_plus_lora_7b \
  8.  --output_type huggingface \
  9.  --output_dir /root/autodl-fs/Chinese-LLaMA-Alpaca/model/firstmergemodels
复制代码
参数说明:


  • --base_model:存放HF格式的LLaMA模型权重和配置文件的目录
  • --lora_model:中文LLaMA/Alpaca LoRA解压后文件所在目录,也可使用Model Hub模型调用名称,提供两个lora_model的地址,用逗号分隔。⚠️ 两个LoRA模型的顺序很重要,不能颠倒。先写LLaMA-Plus-LoRA然后写Alpaca-Plus-LoRA
  • --output_type: 指定输出格式,可为pth或huggingface。若不指定,默认为pth
  • --output_dir:指定保存全量模型权重的目录,默认为./
  • (可选)--offload_dir:对于低内存用户需要指定一个offload缓存路径

3、准备数据集

  1.  mkdir /root/autodl-fs/Chinese-LLaMA-Alpaca/txt
复制代码
txt文件上传到该文件夹下
4、进行二次预训练

4.1、修改run_pt.sh文件

  1.  cd /root/autodl-fs/Chinese-LLaMA-Alpaca/scripts/training
  2.  vi run_pt.sh
复制代码
run_pt.sh文件如下
  1. lr=2e-4
  2. lora_rank=8
  3. lora_alpha=32
  4. lora_trainable="q_proj,v_proj,k_proj,o_proj,gate_proj,down_proj,up_proj"
  5. modules_to_save="embed_tokens,lm_head"
  6. lora_dropout=0.05
  7. ### 对原版llama的hf文件与chinese_llama_plus_lora_7b及chinese_Alpaca_plus_lora_7b合并后结果
  8. pretrained_model=/root/autodl-fs/Chinese-LLaMA-Alpaca/model/firstmergemodels
  9. ### Chinese-Alpaca tokenizer所在的目录
  10. chinese_tokenizer_path=/root/autodl-fs/llama_7b/chinese_alpaca_plus_lora_7b
  11. ### 预训练数据的目录,可包含多个以txt结尾的纯文本文件
  12. dataset_dir=/root/autodl-fs/Chinese-LLaMA-Alpaca/txt
  13. ### 指定一个存放数据缓存文件的目录
  14. data_cache=/root/autodl-fs/Chinese-LLaMA-Alpaca/cache
  15. per_device_train_batch_size=1
  16. per_device_eval_batch_size=1
  17. training_steps=100
  18. gradient_accumulation_steps=1
  19. ### 模型输出的路径
  20. output_dir=/root/autodl-fs/Chinese-LLaMA-Alpaca/model/pt_output
  21. deepspeed_config_file=ds_zero2_no_offload.json
  22. torchrun --nnodes 1 --nproc_per_node 1 run_clm_pt_with_peft.py \
  23.     --deepspeed ${deepspeed_config_file} \
  24.     --model_name_or_path ${pretrained_model} \
  25.     --tokenizer_name_or_path ${chinese_tokenizer_path} \
  26.     --dataset_dir ${dataset_dir} \
  27.     --data_cache_dir ${data_cache} \
  28.     --validation_split_percentage 0.001 \
  29.     --per_device_train_batch_size ${per_device_train_batch_size} \
  30.     --per_device_eval_batch_size ${per_device_eval_batch_size} \
  31.     --do_train \
  32.     --seed 1 \
  33.     --fp16 \
  34.     --max_steps ${training_steps} \
  35.     --lr_scheduler_type cosine \
  36.     --learning_rate ${lr} \
  37.     --warmup_ratio 0.05 \
  38.     --weight_decay 0.01 \
  39.     --logging_strategy steps \
  40.     --logging_steps 10 \
  41.     --save_strategy steps \
  42.     --save_total_limit 3 \
  43.     --save_steps 500 \
  44.     --gradient_accumulation_steps ${gradient_accumulation_steps} \
  45.     --preprocessing_num_workers 8 \
  46.     --block_size 512 \
  47.     --output_dir ${output_dir} \
  48.     --overwrite_output_dir \
  49.     --ddp_timeout 30000 \
  50.     --logging_first_step True \
  51.     --lora_rank ${lora_rank} \
  52.     --lora_alpha ${lora_alpha} \
  53.     --trainable ${lora_trainable} \
  54.     --modules_to_save ${modules_to_save} \
  55.     --lora_dropout ${lora_dropout} \
  56.     --torch_dtype float16 \
  57.     --gradient_checkpointing \
  58.     --ddp_find_unused_parameters False
复制代码
4.1、运行run_pt.sh文件

  1. sh run_pt.sh
复制代码

4.2、训练后文件整理

训练后的LoRA权重和配置存放于
/root/autodl-fs/Chinese-LLaMA-Alpaca/model/pt_output/pt_lora_model,可用于后续的合并流程。

  • 创建一个文件夹${lora_model},用于存放LoRA模型
    1.  cd /root/autodl-fs/Chinese-LLaMA-Alpaca/model/pt_output/pt_lora_model
    2.  mkdir lora_model
    复制代码
  • 将${output_dir}中训练好的adapter_model.bin移动到${lora_model}
    1.  cp adapter_model.bin lora_model
    2.  cd lora_model
    复制代码
  • 将Chinese-Alpaca-LoRA 中的tokenizer相关文件复制到${lora_model}
    1.  cp /root/autodl-fs/llama_7b/chinese_alpaca_plus_lora_7b/*token* .
    复制代码
  • 将Chinese-Alpaca-LoRA中的adapter_config.json复制到${lora_model}
    1.  cp /root/autodl-fs/llama_7b/chinese_alpaca_plus_lora_7b/adapter_config.json .
    复制代码
  • 编辑${lora_model}/adapter_config.json文件,修改其中的参数,确认其中的lora_alpha, r, modules_to_save, target_modules等参数与实际训练用的参数一致。
4.3、合并模型

  1.  cd /root/autodl-fs/Chinese-LLaMA-Alpaca/model
  2.  mkdir ptmerge_model
  3.  cd /root/autodl-fs/Chinese-LLaMA-Alpaca
  4.  ​
  5.  python scripts/merge_llama_with_chinese_lora.py \
  6.  --base_model /root/autodl-fs/Chinese-LLaMA-Alpaca/model/firstmergemodels \
  7.  --lora_model /root/autodl-fs/Chinese-LLaMA-Alpaca/model/pt_output/pt_lora_model/lora_model \
  8.  --output_type huggingface \
  9.  --output_dir /root/autodl-fs/Chinese-LLaMA-Alpaca/model/ptmerge_model
复制代码

5、推理模型

5.1、命令行方式推理合并后的模型

  1.  cd /root/autodl-fs/Chinese-LLaMA-Alpaca
  2.  python scripts/inference/inference_hf.py --base_model model/ptmerge_model --with_prompt --interactive
复制代码

5.2、Web图形界面方式推理合并后的模型

  1.  cd /root/autodl-fs/Chinese-LLaMA-Alpaca
  2.  python scripts/inference/gradio_demo.py --base_model model/ptmerge_model
复制代码



来源:https://blog.csdn.net/yuyangchenhao/article/details/131290469
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则