• 部署百川大语言模型Baichuan2


    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支持在线量化和离线量化两种模式。

    在线量化

    对于在线量化,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)

    模型微调

    依赖安装

    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)


     

  • 相关阅读:
    大模型与知识图谱如何相互助力
    附录5-本地生活案例(上拉触底,下拉刷新)
    【基于Tansformer的融合方法:感知损失:传递-感知损失】
    FastAdmin框架实现数据表的增删改查
    【Flutter组件】Dialog使用说明
    windows如何查看电脑IP地址
    《windows核心编程》第2章 UNICODE字符
    基于ffmpeg开发的多音频文件音量均衡程序
    计算机毕业设计 基于SpringBoot笔记记录分享网站的设计与实现 Javaweb项目 Java实战项目 前后端分离 文档报告 代码讲解 安装调试
    PyCharm配置及使用Git教程
  • 原文地址:https://blog.csdn.net/watson2017/article/details/134398511