Baichuan-13B学习与实战
发布日期:2023/7/28 9:47:10 浏览量:
-
Baichuan-13B学习与实战
- Baichuan
- 论文地址:
- Github 代码:
- baichuan-inc/Baichuan-13B:https://github.com/baichuan-inc/Baichuan-13B
- mark1879/Baichuan-13B-Finetuning:https://github.com/mark1879/Baichuan-13B-Finetuning
- 模型:
- 官方微调过(指令对齐):https://huggingface.co/baichuan-inc/Baichuan-13B-Chat
- 预训练大模型(未经过微调):https://huggingface.co/baichuan-inc/Baichuan-13B-Base
- 体验网站:
一、前言
1.1 Baichuan 介绍
Baichuan-13B 是由百川智能继 Baichuan-7B 之后开发的包含 130 亿参数的开源可商用的大规模语言模型,在权威的中文和英文 benchmark 上均取得同尺寸最好的效果。Baichuan-13B 有如下几个特点:
- 更大尺寸、更多数据:Baichuan-13B 在 Baichuan-7B 的基础上进一步扩大参数量到 130 亿,并且在高质量的语料上训练了 1.4 万亿 tokens,超过 LLaMA-13B 40%,是当前开源 13B 尺寸下训练数据量最多的模型。支持中英双语,使用 ALiBi 位置编码,上下文窗口长度为 4096。
- 同时开源预训练和对齐模型:预训练模型是适用开发者的“基座”,而广大普通用户对有对话功能的对齐模型具有更强的需求。因此本次开源同时发布了对齐模型(Baichuan-13B-Chat),具有很强的对话能力,开箱即用,几行代码即可简单的部署。
- 更高效的推理:为了支持更广大用户的使用,本次同时开源了 int8 和 int4 的量化版本,相对非量化版本在几乎没有效果损失的情况下大大降低了部署的机器资源门槛,可以部署在如 Nvidia 3090 这样的消费级显卡上。
- 开源免费可商用:Baichuan-13B 不仅对学术研究完全开放,开发者也仅需邮件申请并获得官方商用许可后,即可以免费商用。
1.2 软件资源
- CUDA 11.7
- Python 3.10
- pytorch 1.13.1+cu117
1.3 硬件要求
- LoRA 显存:>= 32G
- QLoRA 显存:>= 12G
二、环境搭建
2.1 下载代码
$ git clone https://github.com/mark1879/Baichuan-13B-Finetuning.git
$ cd Baichuan-13B-Finetuning
2.2 构建环境
$ conda create -n py310_chat python=3.10 # 创建新环境
$ source activate py310_chat # 激活环境
2.3 安装依赖
$ pip install -r requirements.txt
三、Baichuan-13B 大模型
3.1 Baichuan-13B 大模型 介绍
baichuan-13B 大模型 包含 两种:
- 第一种:Baichuan-13B-Chat 官方微调过(指令对齐)
- 第二种:Baichuan-13B-Base 预训练大模型(未经过微调)
3.2 Baichuan-13B 大模型 下载
# 在根目录 /data 下 保存大模型
cd /data
git lfs install
# 官方微调过(指令对齐)
git clone https://huggingface.co/baichuan-inc/Baichuan-13B-Chat
# 预训练大模型(未经过微调)
#git clone https://huggingface.co/baichuan-inc/Baichuan-13B-Base
四、Baichuan-13B 模型 LoRA 微调
4.1 准备训练数据
data 目录下存储了训练数据,可根据业务需要自行准备数据,数据格式如下:
- instruction:任务指令,不能为空。
- input:任务输入,可为空。如果不为空,项目内部处理训练数据时,会将 instruction、input 拼接在一起作为任务的输入。
- output:任务输出,不能为空。
[
{
"instruction": "什么是三原色?",
"input": "",
"output": [
"三原色是红、蓝、黄。这些颜色被称为原色,因为它们不能通过混合其他颜色来创建,所有其他颜色都可以通过将它们按不同比例组合而成。在用于光的加色系统中,原色是红色、绿色和蓝色 (RGB)。",
"红色、黄色和绿色。"
]
},
{
"instruction": "写一段关于一个人特点的描述",
"input": "姓名:阿比盖尔\n喜欢的东西:动作电影、法国菜、热衷于商业",
"output": "阿比盖尔是一个冒险的灵魂,喜欢看动作电影和吃法国美食。她对商业充满热情,并努力培养。她阅读投资新闻,密切关注股市。每当有机会出现,阿比盖尔总是迅速行动,不会犹豫利用她的商业知识。她是那种喜欢经历商业起伏、善于追求交易并与志同道合的人交流的人。"
}
]
4.2 Baichuan-13B 模型 LoRA 微调
运行命令
CUDA_VISIBLE_DEVICES=0 python finetune_lora.py
--do_train
--model_name_or_path /data/Baichuan-13B-Chat
--dataset_dir data
--dataset alpaca_gpt4_zh
--output_dir baichuan_lora_checkpoint
--source_prefix ""
--max_source_length 256
--max_target_length 512
--per_device_train_batch_size 1
--gradient_accumulation_steps 1
--lr_scheduler_type cosine
--logging_steps 10
--save_steps 1000
--learning_rate 5e-5
--num_train_epochs 1.0
--plot_loss
--fp16
--lora_target W_pack
--lora_rank 8
- 参数介绍:
- CUDA_VISIBLE_DEVICES=0: 单卡运行;
- do_train: 是否执行训练。
- model_name_or_path: 预训练模型路径。
- dataset_dir: 训练数据存储目录。
- dataset: 训练数据集名称,可在 data/dataset_info.json 中增加自定义数据集。
- output_dir: 微调后的模型保存路径。
- source_prefix: 训练时每个输入序列添加的前缀,可为空。
- max_source_length: 输入序列的最大长度,即 source_prefix + instruction + input 的长度。
- max_target_length: 输出序列的最大长度,即 output 的长度。
- per_device_train_batch_size: 用于训练的批处理大小。可根据 GPU 显存大小自行设置。
- gradient_accumulation_steps: 梯度累加次数。
- logging_steps: 多少步输出一次 log。
- save_steps: 多少步保存一次参数。
- learning_rate: AdamW 优化器的初始学习率。
- num_train_epochs: 训练轮数(若非整数,则最后一轮只训练部分数据)
- plot_loss: 微调后绘制损失函数曲线,图片保存在 output_dir 中 。
- fp16: 使用半精度(混合精度)训练。
- lora_target: 大模型内将要进行 LoRA 微调的模块名称。
- lora_rank: LoRA 微调中的秩大小。
五、Baichuan-13B 模型 LoRA 微调后模型测试
运行命令
CUDA_VISIBLE_DEVICES=0 python finetune_lora.py
--do_eval
--model_name_or_path /data/Baichuan-13B-Chat
--checkpoint_dir baichuan_lora_checkpoint
--dataset_dir data
--dataset alpaca_gpt4_zh_test
--output_dir baichuan_lora_eval_result
--per_device_eval_batch_size 4
--predict_with_generate
- 参数介绍:
- CUDA_VISIBLE_DEVICES=0: 单卡运行。
- do_eval: 是否执行测试。
- model_name_or_path: 预训练模型路径。
- checkpoint_dir: 微调模型路径。
- dataset_dir: 测试数据存储目录。
- dataset: 测试数据集名称,可在 data/dataset_info.json 中增加自定义数据集。
- output_dir: 测试结果保存路径。
- per_device_eval_batch_size: 测试数据的批处理大小。可根据 GPU 显存大小,自行设置。
- predict_with_generate: 是否生成序列用于计算 ROUGE 或 BLEU 分数。
六、Baichuan-13B 模型 部署
python cli_demo.py
--model_name_or_path baichuan-inc/Baichuan-13B-Chat
--checkpoint_dir baichuan_lora_checkpoint
- 参数介绍:
- model_name_or_path: 预训练模型路径。
- checkpoint_dir: 微调模型路径。
填坑笔记
参考
- baichuan-inc/Baichuan-13B:https://github.com/baichuan-inc/Baichuan-13B
- mark1879/Baichuan-13B-Finetuning:https://github.com/mark1879/
- 官方微调过(指令对齐):https://huggingface.co/baichuan-inc/Baichuan-13B-Chat
- 预训练大模型(未经过微调):https://huggingface.co/baichuan-inc/Baichuan-13B-Base
业务实施流程
马上咨询: 如果您有业务方面的问题或者需求,欢迎您咨询!我们带来的不仅仅是技术,还有行业经验积累。
QQ: 39764417/308460098 Phone: 13 9800 1 9844 / 135 6887 9550 联系人:石先生/雷先生