文章目录
- Baichuan-13B介绍
- Baichuan-13B特点
- Baichuan-13B效果
- Baichuan-13B模型参数
- 推理和部署
- 模型下载
- 模型推理
- 微调和部署
- 下载仓库
- 配置环境
- 微调数据
- 微调过程
Baichuan-13B介绍
2023年7月11日,百川智能发布Baichuan-13B!
github地址:https://github.com/baichuan-inc/Baichuan-13B
Baichuan-13B特点
Baichuan-13B 是由百川智能继 Baichuan-7B 之后开发的包含 130 亿参数的开源可商用的大规模语言模型,在权威的中文和英文 benchmark 上均取得同尺寸最好的效果。本次发布包含有预训练 (Baichuan-13B-Base) 和对齐 (Baichuan-13B-Chat) 两个版本。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 不仅对学术研究完全开放,开发者也仅需邮件申请并获得官方商用许可后,即可以免费商用。
Baichuan-13B效果
Baichuan-13B在 C-Eval 上排名Rank10!
CMMLU 榜单上Baichuan-13B模型在 five-shot 和 zero-shot 下的表现如下:
Five-shot
模型 | STEM | 人文学科 | 社会科学 | 其他 | 中国特定主题 | 平均分 |
---|---|---|---|---|---|---|
Baichuan-13B | 42.38 | 61.61 | 60.44 | 59.26 | 56.62 | 55.82 |
ChatGLM2-6B | 42.55 | 50.98 | 50.99 | 50.80 | 48.37 | 48.80 |
Baichuan-7B | 35.25 | 48.07 | 47.88 | 46.61 | 44.14 | 44.43 |
ChatGLM-6B | 32.35 | 39.22 | 39.65 | 38.62 | 37.70 | 37.48 |
BatGPT-15B | 34.96 | 35.45 | 36.31 | 42.14 | 37.89 | 37.16 |
Chinese-LLaMA-13B | 27.12 | 33.18 | 34.87 | 35.10 | 32.97 | 32.63 |
MOSS-SFT-16B | 27.23 | 30.41 | 28.84 | 32.56 | 28.68 | 29.57 |
Chinese-GLM-10B | 25.49 | 27.05 | 27.42 | 29.21 | 28.05 | 27.26 |
Zero-shot
模型 | STEM | 人文学科 | 社会科学 | 其他 | 中国特定主题 | 平均分 |
---|---|---|---|---|---|---|
Baichuan-13B | 42.04 | 60.49 | 59.55 | 56.60 | 55.72 | 54.63 |
ChatGLM2-6B | 41.28 | 52.85 | 53.37 | 52.24 | 50.58 | 49.95 |
Baichuan-7B | 32.79 | 44.43 | 46.78 | 44.79 | 43.11 | 42.33 |
ChatGLM-6B | 32.22 | 42.91 | 44.81 | 42.60 | 41.93 | 40.79 |
BatGPT-15B | 33.72 | 36.53 | 38.07 | 46.94 | 38.32 | 38.51 |
Chinese-LLaMA-13B | 26.76 | 26.57 | 27.42 | 28.33 | 26.73 | 27.34 |
MOSS-SFT-16B | 25.68 | 26.35 | 27.21 | 27.92 | 26.70 | 26.88 |
Chinese-GLM-10B | 25.57 | 25.01 | 26.33 | 25.94 | 25.81 | 25.80 |
可见,Baichuan-13B模型在中文上的表现还是非常好的。
Baichuan-13B模型参数
模型名称 | 隐藏层维度 | 层数 | 注意力头数 | 词表大小 | 总参数量 | 训练数据(tokens) | 位置编码 | 最大长度 |
---|---|---|---|---|---|---|---|---|
Baichuan-7B | 4,096 | 32 | 32 | 64,000 | 7,000,559,616 | 1.2 万亿 | RoPE | 4,096 |
Baichuan-13B | 5,120 | 40 | 40 | 64,000 | 13,264,901,120 | 1.4 万亿 | ALiBi | 4,096 |
推理和部署
模型下载
推理所需的模型权重、源码、配置已发布在 Hugging Face:Baichuan-13B-Base 和 Baichuan-13B-Chat。
可以使用下面命令将模型下载到本地,方便使用时直接加载(/data/sim_chatgpt/)。
git clone https://huggingface.co/baichuan-inc/Baichuan-13B-Base
git clone https://huggingface.co/baichuan-inc/Baichuan-13B-Chat
模型推理
这里直接用 LLaMA-Efficient-Tuning 仓库中的环境
conda activate baichuan-7b
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
from transformers.generation.utils import GenerationConfig
tokenizer = AutoTokenizer.from_pretrained("/data/sim_chatgpt/Baichuan-13B-Chat", use_fast=False, trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained("/data/sim_chatgpt/Baichuan-13B-Chat", torch_dtype=torch.float16, trust_remote_code=True)
model = model.quantize(4).cuda()
model.generation_config = GenerationConfig.from_pretrained("/data/sim_chatgpt/Baichuan-13B-Chat")
messages = []
messages.append({"role": "user", "content": "世界上第二高的山峰是哪座"})
response = model.chat(tokenizer, messages)
print(response)
由于GPU显存只有16G,因此我们直接使用 int4 量化,但由于取消了device_map=‘auto’,模型加载到了CPU上,所以速度非常慢,而且还出现报错。
RuntimeError: CUDA Error: no kernel image is available for execution
on the device
这个报错应该是和GPU型号有关系,待解决,参考
https://github.com/baichuan-inc/Baichuan-13B/issues/56
如果上面是硬件的问题,我们可以考虑直接加载Baichuan-13B的量化版:Baichuan-13B-Chat-8bit,并用git clone命令下载。
git clone https://huggingface.co/trillionmonster/Baichuan-13B-Chat-8bit
使用 int8 推理代码如下:
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
from transformers.generation.utils import GenerationConfig
tokenizer = AutoTokenizer.from_pretrained("/data/sim_chatgpt/Baichuan-13B-Chat-8bit", use_fast=False, trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained("/data/sim_chatgpt/Baichuan-13B-Chat-8bit", device_map="auto", trust_remote_code=True)
model.generation_config = GenerationConfig.from_pretrained("/data/sim_chatgpt/Baichuan-13B-Chat-8bit")
messages = []
messages.append({"role": "user", "content": "世界上第二高的山峰是哪座"})
response = model.chat(tokenizer, messages)
print(response)
使用 int4 推理只需修改一行代码如下:
(区别在于加上 load_in_4bit=True)
model = AutoModelForCausalLM.from_pretrained("/data/sim_chatgpt/Baichuan-13B-Chat-8bit", device_map="auto",load_in_4bit=True,trust_remote_code=True)
微调和部署
本次微调参考:LLaMA-Efficient-Tuning
下载仓库
git clone https://github.com/hiyouga/LLaMA-Efficient-Tuning.git
配置环境
# 这里使用和 baichuan-7b 相同的环境
conda create -n baichuan-7b python=3.10
conda activate baichuan-7b
cd LLaMA-Efficient-Tuning
pip install -r requirements.txt
微调数据
这里直接使用 alpaca_gpt4_zh,也就是由GPT24生成的中文alpaca数据,在仓库的data目录下。
微调过程
微调方法采用 LoRA 方法。
CUDA_VISIBLE_DEVICES=0 python src/train_bash.py \--stage sft \--model_name_or_path /data/sim_chatgpt/Baichuan-13B-Base \--do_train \--dataset alpaca_gpt4_zh \--finetuning_type lora \--output_dir path_to_sft_checkpoint \--overwrite_cache \--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 3.0 \--plot_loss \--fp16
参考:https://zhuanlan.zhihu.com/p/643950663
https://github.com/yangjianxin1/Firefly