当前位置:   article > 正文

部署百川大语言模型Baichuan2_win11 部署百川

win11 部署百川

Baichuan2是百川智能推出的新一代开源大语言模型,采用 2.6 万亿 Tokens 的高质量语料训练。在多个权威的中文、英文和多语言的通用、领域 benchmark 上取得同尺寸最佳的效果。包含有 7B、13B 的 Base 和 Chat 版本,并提供了 Chat 版本的 4bits 量化。

模型下载

基座模型

Baichuan2-7B-Base

https://huggingface.co/baichuan-inc/Baichuan2-7B-Baseicon-default.png?t=N7T8https://huggingface.co/baichuan-inc/Baichuan2-7B-BaseBaichuan2-13B-Base

https://huggingface.co/baichuan-inc/Baichuan2-13B-Baseicon-default.png?t=N7T8https://huggingface.co/baichuan-inc/Baichuan2-13B-Base

对齐模型

Baichuan2-7B-Chat

https://huggingface.co/baichuan-inc/Baichuan2-7B-Chaticon-default.png?t=N7T8https://huggingface.co/baichuan-inc/Baichuan2-7B-ChatBaichuan2-13B-Chat

https://huggingface.co/baichuan-inc/Baichuan2-13B-Chaticon-default.png?t=N7T8https://huggingface.co/baichuan-inc/Baichuan2-13B-Chat

对齐模型 4bits 量化

Baichuan2-7B-Chat-4bits

https://huggingface.co/baichuan-inc/Baichuan2-7B-Chat-4bitsicon-default.png?t=N7T8https://huggingface.co/baichuan-inc/Baichuan2-7B-Chat-4bitsBaichuan2-13B-Chat-4bits

https://huggingface.co/baichuan-inc/Baichuan2-13B-Chat-4bitsicon-default.png?t=N7T8https://huggingface.co/baichuan-inc/Baichuan2-13B-Chat-4bits

拉取代码

git clone https://github.com/baichuan-inc/Baichuan2

安装依赖

pip install -r requirements.txt

调用方式

Python代码调用

Chat 模型推理方法示例:

  1. import torch
  2. from transformers import AutoModelForCausalLM, AutoTokenizer
  3. from transformers.generation.utils import GenerationConfig
  4. tokenizer = AutoTokenizer.from_pretrained("baichuan-inc/Baichuan2-13B-Chat", use_fast=False, trust_remote_code=True)
  5. model = AutoModelForCausalLM.from_pretrained("baichuan-inc/Baichuan2-13B-Chat", device_map="auto", torch_dtype=torch.bfloat16, trust_remote_code=True)
  6. model.generation_config = GenerationConfig.from_pretrained("baichuan-inc/Baichuan2-13B-Chat")
  7. messages = []
  8. messages.append({"role": "user", "content": "解释一下“温故而知新”"})
  9. response = model.chat(tokenizer, messages)
  10. print(response)

Base 模型推理方法示范

  1. from transformers import AutoModelForCausalLM, AutoTokenizer
  2. tokenizer = AutoTokenizer.from_pretrained("baichuan-inc/Baichuan2-13B-Base", trust_remote_code=True)
  3. model = AutoModelForCausalLM.from_pretrained("baichuan-inc/Baichuan2-13B-Base", device_map="auto", trust_remote_code=True)
  4. inputs = tokenizer('登鹳雀楼->王之涣\n夜雨寄北->', return_tensors='pt')
  5. inputs = inputs.to('cuda:0')
  6. pred = model.generate(**inputs, max_new_tokens=64, repetition_penalty=1.1)
  7. 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 模型。

网页 demo 方式

依靠 streamlit 运行以下命令,会在本地启动一个 web 服务,把控制台给出的地址放入浏览器即可访问。

streamlit run web_demo.py

本网页demo工具是为 Chat 场景设计,不支持使用该工具调用 Base 模型。

量化方法

Baichuan2支持在线量化和离线量化两种模式。

安装量化包

  1. conda create -n baichuan2 python=3.10
  2. condo activate baichuan2
  3. pip install bitsandbytes --prefer-binary --extra-index-url=https://jllllll.github.io/bitsandbytes-windows-webui
  4. #或者
  5. pip install https://github.com/jllllll/bitsandbytes-windows-webui/releases/download/wheels/bitsandbytes-0.41.2.post2-py3-none-win_amd64.whl

设置环境变量

  1. LD_LIBRARY_PATH=C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.8\lib\x64
  2. BNB_CUDA_VERSION=18

CUDA Toolkit 11.8下载地址:

CUDA Toolkit 11.8 Downloads | NVIDIA Developericon-default.png?t=N7T8https://developer.nvidia.com/cuda-11-8-0-download-archive

在线量化

对于在线量化,baichuan2支持 8bits 和 4bits 量化,使用方式和 Baichuan-13B 项目中的方式类似,只需要先加载模型到 CPU 的内存里,再调用quantize()接口量化,最后调用 cuda()函数,将量化后的权重拷贝到 GPU 显存中。实现整个模型加载的代码非常简单,以 Baichuan2-7B-Chat 为例:

8bits 在线量化:

  1. model = AutoModelForCausalLM.from_pretrained("baichuan-inc/Baichuan2-7B-Chat", torch_dtype=torch.float16, trust_remote_code=True)
  2. model = model.quantize(8).cuda() 

4bits 在线量化:

  1. model = AutoModelForCausalLM.from_pretrained("baichuan-inc/Baichuan2-7B-Chat", torch_dtype=torch.float16, trust_remote_code=True)
  2. 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 的模型保存和加载:

  1. model = AutoModelForCausalLM.from_pretrained(model_id, load_in_8bit=True, device_map="auto", trust_remote_code=True)
  2. model.save_pretrained(quant8_saved_dir)
  3. model = AutoModelForCausalLM.from_pretrained(quant8_saved_dir, device_map="auto", trust_remote_code=True)

CPU 部署

Baichuan2 模型支持 CPU 推理,但需要强调的是,CPU 的推理速度相对较慢。需按如下方式修改模型加载的方式:

model = AutoModelForCausalLM.from_pretrained("baichuan-inc/Baichuan2-7B-Chat", torch_dtype=torch.float32, trust_remote_code=True)

N卡GPU部署

需要安装支持CUDA的torch

conda install pytorch==2.1.2 torchvision==0.16.2 torchaudio==2.1.2 pytorch-cuda=11.8 -c pytorch -c nvidia

模型微调

依赖安装

  1. git clone https://github.com/baichuan-inc/Baichuan2.git
  2. cd Baichuan2/fine-tune
  3. pip install -r requirements.txt

如需使用 LoRA 等轻量级微调方法需额外安装 peft

如需使用 xFormers 进行训练加速需额外安装 xFormers

单机训练

  1. hostfile=""
  2. deepspeed --hostfile=$hostfile fine-tune.py  \
  3.     --report_to "none" \
  4.     --data_path "data/belle_chat_ramdon_10k.json" \
  5.     --model_name_or_path "baichuan-inc/Baichuan2-7B-Base" \
  6.     --output_dir "output" \
  7.     --model_max_length 512 \
  8.     --num_train_epochs 4 \
  9.     --per_device_train_batch_size 16 \
  10.     --gradient_accumulation_steps 1 \
  11.     --save_strategy epoch \
  12.     --learning_rate 2e-5 \
  13.     --lr_scheduler_type constant \
  14.     --adam_beta1 0.9 \
  15.     --adam_beta2 0.98 \
  16.     --adam_epsilon 1e-8 \
  17.     --max_grad_norm 1.0 \
  18.     --weight_decay 1e-4 \
  19.     --warmup_ratio 0.0 \
  20.     --logging_steps 1 \
  21.     --gradient_checkpointing True \
  22.     --deepspeed ds_config.json \
  23.     --bf16 True \
  24.     --tf32 True

轻量化微调

代码已经支持轻量化微调如 LoRA,如需使用仅需在上面的脚本中加入以下参数:

--use_lora True

LoRA 具体的配置可见 fine-tune.py 脚本。

使用 LoRA 微调后可以使用下面的命令加载模型:

  1. from peft import AutoPeftModelForCausalLM
  2. model = AutoPeftModelForCausalLM.from_pretrained("output", trust_remote_code=True)


 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/77145
推荐阅读
相关标签
  

闽ICP备14008679号