Baichuan-7B是由百川智能开发的一个开源的大规模预训练模型。基于Transformer结构,在大约1.2万亿tokens上训练的70亿参数模型,支持中英双语,上下文窗口长度为4096。在标准的中文和英文权威benchmark(C-EVAL/MMLU)上均取得同尺寸最好的效果。
当前模型支持的 PyTorch 版本和已知三方库依赖如下表所示。
| Torch_Version | 三方库依赖版本 |
|---|---|
| PyTorch 2.1 | transformers==4.37.0 accelerate==0.27.0 |
环境准备指导。
参考快速入门准备环境。
Baichuan模型使用alpaca.json作为训练的数据集。
如下是使用alpaca.json数据集对此模型进行训练的样例:
torchrun --nproc_per_node=8 --master_port=27500 examples/alpaca_sft/train_sft.py \
--model_name_or_path "PyTorch-NPU/baichuan_7b" \
--data_path ./alpaca_data.json \
--bf16 True \
--output_dir ./test/output \
--max_steps 2000 \
--per_device_train_batch_size 2 \
--per_device_eval_batch_size 2 \
--gradient_accumulation_steps 8 \
--evaluation_strategy "no" \
--save_strategy "steps" \
--save_steps 2000 \
--save_total_limit 1 \
--learning_rate 2e-5 \
--weight_decay 0. \
--warmup_ratio 0.03 \
--lr_scheduler_type "cosine" \
--logging_steps 1 \
--fsdp "full_shard auto_wrap" \
--fsdp_transformer_layer_cls_to_wrap 'DecoderLayer' 模型训练脚本参数说明如下:
--model_name_or_path //模型路径或名称
--data_path //数据集路径
--output_dir //训练输出路径
--max_steps //训练步数如下是一个使用Baichuan进行1-shot推理的任务,根据作品给出作者名,正确输出为"夜雨寄北->李商隐"。
import torch
from openmind import AutoModelForCausalLM, AutoTokenizer
from openmind.utils.import_utils import is_torch_npu_available
tokenizer = AutoTokenizer.from_pretrained("PyTorch-NPU/baichuan_7b", trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained("PyTorch-NPU/baichuan_7b", device_map="npu:0", trust_remote_code=True)
inputs = tokenizer('登鹳雀楼->王之涣\n夜雨寄北->', return_tensors='pt')
inputs = inputs.to(device)
pred = model.generate(**inputs, max_new_tokens=64, repetition_penalty=1.1)
print(tokenizer.decode(pred.cpu()[0], skip_special_tokens=True))整体模型基于标准的Transformer结构,采用了和LLaMA一样的模型设计。
Position Embedding:采用rotary-embedding,是现阶段被大多数模型采用的位置编码方案,具有很好的外推性。
Feedforward Layer:采用SwiGLU,Feedforward变化为(8/3)倍的隐含层大小,即11008。
Layer Normalization: 基于RMSNorm的Pre-Normalization。
具体参数见下表:
| 超参 | 数值 |
|---|---|
| n_parameters | 7000559616 |
| n_layers | 32 |
| n_heads | 32 |
| d_model | 4096 |
| vocab size | 64000 |
| sequence length | 4096 |