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

news2024/11/29 14:53:21

目录

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项目

 # 我的文件路径为如下
 cd /root/autodl-fs
 git clone https://github.com/ymcui/Chinese-LLaMA-Alpaca.git

1.2、准备文件夹

以下命令依次执行!

 cd Chinese-LLaMA-Alpaca
 mkdir model
 cd model
 mkdir llama
 mkdir output
 mkdir llama/7B

1.3、下载llama官方原始模型

 wget https://agi.gpt4.org/llama/LLaMA/tokenizer.model -O ./tokenizer.model
 wget https://agi.gpt4.org/llama/LLaMA/tokenizer_checklist.chk -O ./tokenizer_checklist.chk
 wget https://agi.gpt4.org/llama/LLaMA/7B/consolidated.00.pth -O ./7B/consolidated.00.pth
 wget https://agi.gpt4.org/llama/LLaMA/7B/params.json -O ./7B/params.json

1.4、移动文件到指定位置

 mv tokenizer.model llama
 mv tokenizer_checklist.chk consolidated.00.pth params.json llama/7B

1.5、拉取transformers项目并安装依赖

 cd /root/autodl-fs
 git clone https://github.com/huggingface/transformers.git
 pip install torch==1.13.1 -i https://pypi.mirrors.ustc.edu.cn/simple/
 pip install sentencepiece==0.1.97 -i https://pypi.mirrors.ustc.edu.cn/simple/
 pip install peft==0.3.0 -i https://pypi.mirrors.ustc.edu.cn/simple/
 pip uninstall tokenizers
 pip install tokenizers==0.13.3 -i https://pypi.mirrors.ustc.edu.cn/simple/
 pip install transformers==4.28.1 -i https://pypi.mirrors.ustc.edu.cn/simple/

1.5、执行转换脚本

 cd /root/autodl-fs/transformers
 ​
 python src/transformers/models/llama/convert_llama_weights_to_hf.py \
 --input_dir /root/autodl-fs/Chinese-LLaMA-Alpaca/model/llama/ \
 --model_size 7B \
 --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目录下并解压缩

 cd /root/autodl-fs/llama_7b
 mkdir chinese_llama_plus_lora_7b
 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目录下并解压缩

 cd /root/autodl-fs/llama_7b
 mkdir chinese_alpaca_plus_lora_7b
 unzip chinese_alpaca_plus_lora_7b.zip chinese_alpaca_plus_lora_7b

2.3、执行合并脚本

 cd /root/autodl-fs/Chinese-LLaMA-Alpaca/
 # 合并后的模型存放位置
 mkdir model/firstmergemodel
 ​
 python scripts/merge_llama_with_chinese_lora.py \
 --base_model /root/autodl-fs/Chinese-LLaMA-Alpaca/model/output \
 --lora_model /root/autodl-fs/llama_7b/chinese_llama_plus_lora_7b,/root/autodl-fs/llama_7b/chinese_alpaca_plus_lora_7b \
 --output_type huggingface \
 --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: 指定输出格式,可为pthhuggingface。若不指定,默认为pth

  • --output_dir:指定保存全量模型权重的目录,默认为./

  • (可选)--offload_dir:对于低内存用户需要指定一个offload缓存路径

3、准备数据集

 mkdir /root/autodl-fs/Chinese-LLaMA-Alpaca/txt

txt文件上传到该文件夹下

4、进行二次预训练

4.1、修改run_pt.sh文件

 cd /root/autodl-fs/Chinese-LLaMA-Alpaca/scripts/training
 vi run_pt.sh

run_pt.sh文件如下

lr=2e-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

### 对原版llama的hf文件与chinese_llama_plus_lora_7b及chinese_Alpaca_plus_lora_7b合并后结果
pretrained_model=/root/autodl-fs/Chinese-LLaMA-Alpaca/model/firstmergemodels 
### Chinese-Alpaca tokenizer所在的目录
chinese_tokenizer_path=/root/autodl-fs/llama_7b/chinese_alpaca_plus_lora_7b
### 预训练数据的目录,可包含多个以txt结尾的纯文本文件
dataset_dir=/root/autodl-fs/Chinese-LLaMA-Alpaca/txt
### 指定一个存放数据缓存文件的目录
data_cache=/root/autodl-fs/Chinese-LLaMA-Alpaca/cache
per_device_train_batch_size=1
per_device_eval_batch_size=1
training_steps=100
gradient_accumulation_steps=1
### 模型输出的路径
output_dir=/root/autodl-fs/Chinese-LLaMA-Alpaca/model/pt_output

deepspeed_config_file=ds_zero2_no_offload.json

torchrun --nnodes 1 --nproc_per_node 1 run_clm_pt_with_peft.py \
    --deepspeed ${deepspeed_config_file} \
    --model_name_or_path ${pretrained_model} \
    --tokenizer_name_or_path ${chinese_tokenizer_path} \
    --dataset_dir ${dataset_dir} \
    --data_cache_dir ${data_cache} \
    --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 \
    --seed 1 \
    --fp16 \
    --max_steps ${training_steps} \
    --lr_scheduler_type cosine \
    --learning_rate ${lr} \
    --warmup_ratio 0.05 \
    --weight_decay 0.01 \
    --logging_strategy steps \
    --logging_steps 10 \
    --save_strategy steps \
    --save_total_limit 3 \
    --save_steps 500 \
    --gradient_accumulation_steps ${gradient_accumulation_steps} \
    --preprocessing_num_workers 8 \
    --block_size 512 \
    --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} \
    --modules_to_save ${modules_to_save} \
    --lora_dropout ${lora_dropout} \
    --torch_dtype float16 \
    --gradient_checkpointing \
    --ddp_find_unused_parameters False

4.1、运行run_pt.sh文件

sh run_pt.sh

4.2、训练后文件整理

训练后的LoRA权重和配置存放于

/root/autodl-fs/Chinese-LLaMA-Alpaca/model/pt_output/pt_lora_model,可用于后续的合并流程。

  1. 创建一个文件夹${lora_model},用于存放LoRA模型

     cd /root/autodl-fs/Chinese-LLaMA-Alpaca/model/pt_output/pt_lora_model
     mkdir lora_model
  2. ${output_dir}中训练好的adapter_model.bin移动到${lora_model}

     cp adapter_model.bin lora_model
     cd lora_model
  3. 将Chinese-Alpaca-LoRA 中的tokenizer相关文件复制到${lora_model}

     cp /root/autodl-fs/llama_7b/chinese_alpaca_plus_lora_7b/*token* .
  4. 将Chinese-Alpaca-LoRA中的adapter_config.json复制到${lora_model}

     cp /root/autodl-fs/llama_7b/chinese_alpaca_plus_lora_7b/adapter_config.json .
  5. 编辑${lora_model}/adapter_config.json文件,修改其中的参数,确认其中的lora_alpha, r, modules_to_save, target_modules等参数与实际训练用的参数一致。

4.3、合并模型

 cd /root/autodl-fs/Chinese-LLaMA-Alpaca/model
 mkdir ptmerge_model
 cd /root/autodl-fs/Chinese-LLaMA-Alpaca
 ​
 python scripts/merge_llama_with_chinese_lora.py \
 --base_model /root/autodl-fs/Chinese-LLaMA-Alpaca/model/firstmergemodels \
 --lora_model /root/autodl-fs/Chinese-LLaMA-Alpaca/model/pt_output/pt_lora_model/lora_model \
 --output_type huggingface \
 --output_dir /root/autodl-fs/Chinese-LLaMA-Alpaca/model/ptmerge_model

5、推理模型

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

 cd /root/autodl-fs/Chinese-LLaMA-Alpaca
 python scripts/inference/inference_hf.py --base_model model/ptmerge_model --with_prompt --interactive

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

 cd /root/autodl-fs/Chinese-LLaMA-Alpaca
 python scripts/inference/gradio_demo.py --base_model model/ptmerge_model

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/663905.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Leetcode60天带刷】day16二叉树—— 104.二叉树的最大深度 , 111.二叉树的最小深度,222.完全二叉树的节点个数

题目: 104. 二叉树的最大深度 给定一个二叉树,找出其最大深度。 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。 说明: 叶子节点是指没有子节点的节点。 示例: 给定二叉树 [3,9,20,null,null,15,7], 3/ \9 20/ …

数字电路基础---寄存器

目录 数字电路基础---寄存器 1、寄存器简介 1.1、寄存器是如何工作的 2、实验任务 3、程序设计 3.1、模块设计 3.2、绘制波形图 4、编写代码 5、仿真验证 5.1、编写 TB 文件 5.2、仿真验证 6、总结 7、拓展训练 数字电路基础---寄存器 寄存器是构成时序逻辑最重要…

理解安卓的视图体系结构

原文链接 理解安卓的视图体系结构 当我们想要写一个页面的时候,通过一个Activity,然后调用其setContentView方法,把一个布局文件当作一个参数传递过去,然后一个页面就好了,但是除此之外,我们还需要与一些组…

【MySql】MySql索引的作用索引的理解

【MySql】MySql索引的作用&&索引的理解 文章目录 索引的作用认识磁盘MySql 与磁盘交互基本单位Page共识索引的理解主键有序问题理解单个Page理解多个Page页目录单页情况多页情况 索引的作用 索引是与效率挂钩的,所以没有索引,可能会存在问题 索…

从0到1搭建属于自己的Gitlab CI/CD平台

文章目录 持续集成(CI)持续交付(CD)Gitlab CI/CD功能和架构本地搭建GitLab CI/CD平台 MCNU云原生,文章首发地,欢迎微信搜索关注,更多干货,第一时间掌握! CI和CD是软件开发中常用的缩写,分别代表持续集成&am…

【Unity】 HTFramework框架(四十五)【进阶篇】指令系统-自定义指令

更新日期:2023年6月19日。 Github源码:[点我获取源码] Gitee源码:[点我获取源码] 索引 指令系统1.使用指令系统2.自定义指令1.新建类 MyInstruction2.标记 CustomInstruction 特性3.编写指令的逻辑4.执行自定义指令5.自定义指令的参数6.结尾 …

C进阶 - 数组和指针

Declare an array manually VS malloc or calloc an array 用英文是因为有些东西得用他们的语言才能表达不失真 栈和堆 In C, a heap is a region of memory that is dynamically allocated during runtime. It is used to store variables and data structures that have a …

学习HCIP的day.14

目录 STP生成树协议 生成树协议 一、802.1D 1、根网桥 2、根端口 3、指定端口 4、非指定端口 5、接口状态 802.1D的收敛时间 802.1D算法的缺点 以上cost值的解释 二、PVST 三、PVST 四、快速生成树 五、MSTP/MST/802.1S STP生成树协议 网络三层架构…

南京企业所得税高怎么办?

南京企业所得税高怎么办? 《税筹顾问》专注于园区招商,您的贴身节税小能手,合理合规节税! 众所周知,企业所得税是按利润来计算的,按照不同的利润阶梯计算适用的税率也会有所不同,那么当企业利润…

launch文件的编写及ROS配置文件的详细介绍

launch文件的编写及ROS配置文件的详细介绍 1 launch文件介绍及简单应用1.1 launch文件介绍1.2 launch文件简单应用 2 package.xml文件介绍及配置3 CMakeLists.txt文件介绍及配置 1 launch文件介绍及简单应用 1.1 launch文件介绍 根据ROS的架构和通信机制来看,ROS的…

讯飞星火大模型详细内测体验:它能否应对这些挑战?

名人说:一花独放不是春,百花齐放花满园。——《增广贤文》 作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 目录 一、简要介绍二、分类问题测试0️⃣自我介绍1️⃣语言理解2️⃣知识问答3️⃣逻辑推…

Vue中如何进行文件转换与格式转换

Vue中如何进行文件转换与格式转换 在Web应用程序中,经常需要进行文件转换和格式转换。例如,将PDF文件转换为图像文件、将音频文件转换为不同的格式或将视频文件转换为不同的分辨率和编解码格式。Vue作为一种流行的前端框架,提供了许多实用工…

网络管理与维护(二)网络用户设置管理

网络用户设置管理 2.1 用户帐户安全管理 用户账户的分类 管理员帐户。拥有管理本台计算机的所有权限和权利。系统内置的Administrator用户帐户 和Administrators组帐户的成员就属于管理员帐户 标准帐户。通常分配给最终用户使用,适用于日常工作,对操作…

GeoServer中地图可视化提升利器之SLD知识简介

目录 前言 一、SLD简介 1、介绍 2、SLD的版本 3、SLD的Schema说明 二、SLD中相关知识解析 1、Scheme简要说明 2、一个SLD实例 总结 前言 在互联网上有很多精美的地图,在地图从shp或者gdb等矢量文件,经过设计人员的加工,配色&#xff0…

【论文阅读】Graph-less Collaborative Filtering

【论文阅读】Graph-less Collaborative Filtering 文章目录 【论文阅读】Graph-less Collaborative Filtering1. 来源2. 介绍3. 模型解读3.1 协同过滤3.2 模型3.2.1 对比知识精馏 3.2.2 自适应对比正则化3.2.3 SimRec的参数学习 4. 实验5. 总结 1. 来源 2023WWW CCFA原文地址co…

【Linux】linux | 服务响应慢、问题排查 | 带宽问题导致 | 网速

一、说明 1、项目使用云服务器,服务器配置:5M带宽、4核、32G,1T,CentOS7 2、CPU、内存、磁盘IO都没有达到瓶颈,猜测是带宽问题 3、应用比较多,应用中间件,十几个差不多 4、同时在线人数30 5、已…

“暗网议会”如今已成为现实

图片来源:Marcin Balcerzak 最近,“暗网议会”已经成为了网络犯罪分子试图证明自己影响力的最新流行语,安全内部人士对这个词也很感兴趣。 上周五,臭名昭著的亲俄黑客组织Killnet在其电报威胁帖子中使用了这个词语。随后,twitte…

d2l_第五章学习_Multilayer Perceptrons多层感知机

x.1 Hidden Layers 线性模型的基本假设是单调,即任何特征的增大都会导致模型的输出增大(权重正时,负值时亦)。但是现实中很多的关系并不仅仅是简单的线性关系,这个时候就需要引入非线性关系,而非线性关系由…

Verilog基础之七、译码器实现

目录 一、前言 二、工程实现 2.1 工程代码 2.2 仿真结果 2.3 参考 一、前言 ​译码器的实现为编码器的逆过程,以3-8译码器为例,真值表如下。 二、工程实现 ​实现同时使用for循环和case两种方式。 2.1 工程代码 module Decoder(in,out,out_case )…

【菜单折叠效果】这菜单效果千万别让领导看了,一不小心就升职加薪(附源码)

【写在前面】 上周想着冲一波粉丝量(周冲700),但是事与愿违,没办法我只能不断的督促自己多分享,多总结了,那么今天晚上我就好好整理了一篇常见后台管理系统的菜单收缩动态效果,主要是用于后台管…