HuggingFace镜像/baichuan_7b
模型介绍文件和版本分析
下载使用量0

BaiChuan

概述

Baichuan-7B是由百川智能开发的一个开源的大规模预训练模型。基于Transformer结构,在大约1.2万亿tokens上训练的70亿参数模型,支持中英双语,上下文窗口长度为4096。在标准的中文和英文权威benchmark(C-EVAL/MMLU)上均取得同尺寸最好的效果。

  • 在同尺寸模型中Baichuan-7B达到了目前SOTA的水平。
  • Baichuan-7B使用自有的中英文双语语料进行训练,在中文上进行优化,在C-Eval达到SOTA水平。
  • 不同于LLaMA完全禁止商业使用,Baichuan-7B使用更宽松的开源协议,允许用于商业目的。

准备训练环境

准备环境

  • 当前模型支持的 PyTorch 版本和已知三方库依赖如下表所示。

    Torch_Version三方库依赖版本
    PyTorch 2.1transformers==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_parameters7000559616
n_layers32
n_heads32
d_model4096
vocab size64000
sequence length4096