赞
踩
Baichuan2是百川智能推出的新一代开源大语言模型,采用 2.6 万亿 Tokens 的高质量语料训练。在多个权威的中文、英文和多语言的通用、领域 benchmark 上取得同尺寸最佳的效果。包含有 7B、13B 的 Base 和 Chat 版本,并提供了 Chat 版本的 4bits 量化。
Baichuan2-7B-Base
https://huggingface.co/baichuan-inc/Baichuan2-7B-Basehttps://huggingface.co/baichuan-inc/Baichuan2-7B-BaseBaichuan2-13B-Base
Baichuan2-7B-Chat
https://huggingface.co/baichuan-inc/Baichuan2-7B-Chathttps://huggingface.co/baichuan-inc/Baichuan2-7B-ChatBaichuan2-13B-Chat
Baichuan2-7B-Chat-4bits
https://huggingface.co/baichuan-inc/Baichuan2-7B-Chat-4bitshttps://huggingface.co/baichuan-inc/Baichuan2-7B-Chat-4bitsBaichuan2-13B-Chat-4bits
git clone https://github.com/baichuan-inc/Baichuan2
pip install -r requirements.txt
Chat 模型推理方法示例:
- import torch
- from transformers import AutoModelForCausalLM, AutoTokenizer
- from transformers.generation.utils import GenerationConfig
- tokenizer = AutoTokenizer.from_pretrained("baichuan-inc/Baichuan2-13B-Chat", use_fast=False, trust_remote_code=True)
- model = AutoModelForCausalLM.from_pretrained("baichuan-inc/Baichuan2-13B-Chat", device_map="auto", torch_dtype=torch.bfloat16, trust_remote_code=True)
- model.generation_config = GenerationConfig.from_pretrained("baichuan-inc/Baichuan2-13B-Chat")
- messages = []
- messages.append({"role": "user", "content": "解释一下“温故而知新”"})
- response = model.chat(tokenizer, messages)
- print(response)
Base 模型推理方法示范
- from transformers import AutoModelForCausalLM, AutoTokenizer
- tokenizer = AutoTokenizer.from_pretrained("baichuan-inc/Baichuan2-13B-Base", trust_remote_code=True)
- model = AutoModelForCausalLM.from_pretrained("baichuan-inc/Baichuan2-13B-Base", device_map="auto", trust_remote_code=True)
- inputs = tokenizer('登鹳雀楼->王之涣\n夜雨寄北->', return_tensors='pt')
- inputs = inputs.to('cuda:0')
- pred = model.generate(**inputs, max_new_tokens=64, repetition_penalty=1.1)
- print(tokenizer.decode(pred.cpu()[0], skip_special_tokens=True))
模型加载指定 device_map='auto',会使用所有可用显卡。
如需指定使用的设备,可以使用类似 export CUDA_VISIBLE_DEVICES=0,1(使用了0、1号显卡)的方式控制。
python cli_demo.py
本命令行工具是为 Chat 场景设计,不支持使用该工具调用 Base 模型。
依靠 streamlit 运行以下命令,会在本地启动一个 web 服务,把控制台给出的地址放入浏览器即可访问。
streamlit run web_demo.py
本网页demo工具是为 Chat 场景设计,不支持使用该工具调用 Base 模型。
Baichuan2支持在线量化和离线量化两种模式。
- conda create -n baichuan2 python=3.10
- condo activate baichuan2
- pip install bitsandbytes --prefer-binary --extra-index-url=https://jllllll.github.io/bitsandbytes-windows-webui
- #或者
- pip install https://github.com/jllllll/bitsandbytes-windows-webui/releases/download/wheels/bitsandbytes-0.41.2.post2-py3-none-win_amd64.whl
设置环境变量
- LD_LIBRARY_PATH=C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.8\lib\x64
- BNB_CUDA_VERSION=18
CUDA Toolkit 11.8下载地址:
对于在线量化,baichuan2支持 8bits 和 4bits 量化,使用方式和 Baichuan-13B 项目中的方式类似,只需要先加载模型到 CPU 的内存里,再调用quantize()接口量化,最后调用 cuda()函数,将量化后的权重拷贝到 GPU 显存中。实现整个模型加载的代码非常简单,以 Baichuan2-7B-Chat 为例:
8bits 在线量化:
- model = AutoModelForCausalLM.from_pretrained("baichuan-inc/Baichuan2-7B-Chat", torch_dtype=torch.float16, trust_remote_code=True)
- model = model.quantize(8).cuda()
4bits 在线量化:
- model = AutoModelForCausalLM.from_pretrained("baichuan-inc/Baichuan2-7B-Chat", torch_dtype=torch.float16, trust_remote_code=True)
- model = model.quantize(4).cuda()
需要注意的是,在用 from_pretrained 接口的时候,用户一般会加上 device_map="auto",在使用在线量化时,需要去掉这个参数,否则会报错。
为了方便用户的使用,baichuan2提供了离线量化好的 4bits 的版本 Baichuan2-7B-Chat-4bits,供用户下载。 用户加载 Baichuan2-7B-Chat-4bits 模型很简单,只需要执行:
model = AutoModelForCausalLM.from_pretrained("baichuan-inc/Baichuan2-7B-Chat-4bits", device_map="auto", trust_remote_code=True)
对于 8bits 离线量化,baichuan2没有提供相应的版本,因为 Hugging Face transformers 库提供了相应的 API 接口,可以很方便的实现 8bits 量化模型的保存和加载。用户可以自行按照如下方式实现 8bits 的模型保存和加载:
- model = AutoModelForCausalLM.from_pretrained(model_id, load_in_8bit=True, device_map="auto", trust_remote_code=True)
- model.save_pretrained(quant8_saved_dir)
- model = AutoModelForCausalLM.from_pretrained(quant8_saved_dir, device_map="auto", trust_remote_code=True)
Baichuan2 模型支持 CPU 推理,但需要强调的是,CPU 的推理速度相对较慢。需按如下方式修改模型加载的方式:
model = AutoModelForCausalLM.from_pretrained("baichuan-inc/Baichuan2-7B-Chat", torch_dtype=torch.float32, trust_remote_code=True)
需要安装支持CUDA的torch
conda install pytorch==2.1.2 torchvision==0.16.2 torchaudio==2.1.2 pytorch-cuda=11.8 -c pytorch -c nvidia
- git clone https://github.com/baichuan-inc/Baichuan2.git
- cd Baichuan2/fine-tune
- pip install -r requirements.txt
如需使用 LoRA 等轻量级微调方法需额外安装 peft
如需使用 xFormers 进行训练加速需额外安装 xFormers
- hostfile=""
- deepspeed --hostfile=$hostfile fine-tune.py \
- --report_to "none" \
- --data_path "data/belle_chat_ramdon_10k.json" \
- --model_name_or_path "baichuan-inc/Baichuan2-7B-Base" \
- --output_dir "output" \
- --model_max_length 512 \
- --num_train_epochs 4 \
- --per_device_train_batch_size 16 \
- --gradient_accumulation_steps 1 \
- --save_strategy epoch \
- --learning_rate 2e-5 \
- --lr_scheduler_type constant \
- --adam_beta1 0.9 \
- --adam_beta2 0.98 \
- --adam_epsilon 1e-8 \
- --max_grad_norm 1.0 \
- --weight_decay 1e-4 \
- --warmup_ratio 0.0 \
- --logging_steps 1 \
- --gradient_checkpointing True \
- --deepspeed ds_config.json \
- --bf16 True \
- --tf32 True
代码已经支持轻量化微调如 LoRA,如需使用仅需在上面的脚本中加入以下参数:
--use_lora True
LoRA 具体的配置可见 fine-tune.py 脚本。
使用 LoRA 微调后可以使用下面的命令加载模型:
- from peft import AutoPeftModelForCausalLM
- model = AutoPeftModelForCausalLM.from_pretrained("output", trust_remote_code=True)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。