AIGC:【LLM(七)】——Baichuan2:真开源可商用的中文大模型

这篇具有很好参考价值的文章主要介绍了AIGC:【LLM(七)】——Baichuan2:真开源可商用的中文大模型。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一.模型介绍

Baichuan 2 是百川智能推出的新一代开源大语言模型,采用 2.6 万亿 Tokens 的高质量语料训练。其在多个权威的中文、英文和多语言的通用、领域 benchmark 上取得同尺寸最佳的效果。
AIGC:【LLM(七)】——Baichuan2:真开源可商用的中文大模型,LLMs,自然语言处理,AIGC,开源
AIGC:【LLM(七)】——Baichuan2:真开源可商用的中文大模型,LLMs,自然语言处理,AIGC,开源

目前开源发布的包含有 7B、13B 的 Base 和 Chat 版本,并提供了 Chat 版本的 4bits 量化。所有版本对学术研究完全开放。同时,开发者通过邮件申请并获得官方商用许可后,即可免费商用。
AIGC:【LLM(七)】——Baichuan2:真开源可商用的中文大模型,LLMs,自然语言处理,AIGC,开源
下载链接
【Baichuan2-7B-Base】:https://huggingface.co/baichuan-inc/Baichuan2-7B-Base
【Baichuan2-13B-Base】:https://huggingface.co/baichuan-inc/Baichuan2-13B-Base
【Baichuan2-7B-Chat】:https://huggingface.co/baichuan-inc/Baichuan2-7B-Chat
【Baichuan2-13B-Chat】:https://huggingface.co/baichuan-inc/Baichuan2-13B-Chat
【Baichuan2-7B-Chat-4bits】:https://huggingface.co/baichuan-inc/Baichuan2-7B-Chat-4bits
【Baichuan2-13B-Chat-4bits】:https://huggingface.co/baichuan-inc/Baichuan2-13B-Chat-4bits

除了模型的全面公开之外,百川智能还开源了模型训练的 Check Point,并公开了 Baichuan 2 技术报告,详细介绍了模型的训练细节。
【代码仓库】:https://github.com/baichuan-inc/Baichuan2
【技术报告】:https://cdn.baichuan-ai.com/paper/Baichuan2-technical-report.pdf
AIGC:【LLM(七)】——Baichuan2:真开源可商用的中文大模型,LLMs,自然语言处理,AIGC,开源

二.模型部署

2.1 CPU部署

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

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

2.2 GPU部署

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

streamlit run web_demo.py

三.模型推理

3.1 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)
"温故而知新"是一句中国古代的成语,出自《论语·为政》篇。这句话的意思是:通过回顾过去,我们可以发现新的知识和理解。换句话说,学习历史和经验可以让我们更好地理解现在和未来。
这句话鼓励我们在学习和生活中不断地回顾和反思过去的经验,从而获得新的启示和成长。通过重温旧的知识和经历,我们可以发现新的观点和理解,从而更好地应对不断变化的世界和挑战。

3.2 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))
登鹳雀楼->王之涣
夜雨寄北->李商隐

四.模型量化

为了让不同的用户以及不同的平台都能运行 Baichuan 2 模型,百川智能针对 Baichuan 2 模型做了相应地量化工作(包括 Baichuan2-7B-Chat 和 Baichuan2-13B-Chat),方便用户快速高效地在自己的平台部署 Baichuan 2 模型。

4.1 量化方法

Baichuan 2 的采用社区主流的量化方法:BitsAndBytes。该方法可以保证量化后的效果基本不掉点,目前已经集成到 transformers 库里,并在社区得到了广泛应用。BitsAndBytes 支持 8bits 和 4bits 两种量化,其中 4bits 支持 FP4 和 NF4 两种格式,Baichuan 2 选用 NF4 作为 4bits 量化的数据类型。基于该量化方法,Baichuan 2 支持在线量化和离线量化两种模式。

4.2 在线量化

对于在线量化, Baichuan 2支持 8bits 和 4bits 量化,使用只需要先加载模型到 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”,在使用在线量化时,需要去掉这个参数,否则会报错。

4.3 离线量化

为了方便用户的使用,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 离线量化,Hugging Face transformers 库提供了相应的 API 接口,可以很方便的实现 8bits 量化模型的保存和加载。用户可以自行按照如下方式实现 8bits 的模型保存和加载:

# Model saving: model_id is the original model directory, and quant8_saved_dir is the directory where the 8bits quantized model is saved.
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)

4.4 量化效果

量化前后显存占用对比 (GPU Mem in GB):
AIGC:【LLM(七)】——Baichuan2:真开源可商用的中文大模型,LLMs,自然语言处理,AIGC,开源

量化后在各个 benchmark 上的结果和原始版本对比如下:
AIGC:【LLM(七)】——Baichuan2:真开源可商用的中文大模型,LLMs,自然语言处理,AIGC,开源

五.模型微调

5.1 依赖安装

git clone https://github.com/baichuan-inc/Baichuan2.git
cd Baichuan2/fine-tune
pip install -r requirements.txt
  • 如需使用 LoRA 等轻量级微调方法需额外安装 peft
  • 如需使用 xFormers 进行训练加速需额外安装 xFormers

5.2 单机训练

下面是一个微调 Baichuan2-7B-Base 的单机训练例子。
训练数据:data/belle_chat_ramdon_10k.json,该样例数据是从 multiturn_chat_0.8M 采样出 1 万条,并且做了格式转换。主要是展示多轮数据怎么训练,不保证效果。

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

5.3 多机训练

多机训练只需要给一下 hostfile ,内容类似如下:

ip1 slots=8
ip2 slots=8
ip3 slots=8
ip4 slots=8
....

同时在训练脚本里面指定 hosftfile 的路径:

hostfile="/path/to/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

5.4 轻量化微调

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

--use_lora True

LoRA 具体的配置可见 fine-tune.py 脚本。使用 LoRA 微调后可以使用下面的命令加载模型:文章来源地址https://www.toymoban.com/news/detail-706977.html

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

到了这里,关于AIGC:【LLM(七)】——Baichuan2:真开源可商用的中文大模型的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Baichuan2百川模型部署的bug汇总

    1.4bit的量化版本最好不要在Windows系统中运行,大概原因报错原因是bitsandbytes不支持window,bitsandbytes-windows目前仅支持8bit量化。 2. 报错原因是机器没有足够的内存和显存,offload_folder设置一个文件夹来保存那些离线加载到硬盘的权重。 ag:需要再cli_demo.py的文件中增加 offload_

    2024年01月18日
    浏览(37)
  • 全球最强长文本大模型,一次可读35万汉字:Baichuan2-192K上线

    大模型看书,从来没有这么快过。 国内大模型创业公司,正在技术前沿创造新的记录。 10 月 30 日,百川智能正式发布 Baichuan2-192K 长窗口大模型,将大语言模型(LLM)上下文窗口的长度一举提升到了  192K token 。 这相当于让大模型一次处理约  35 万个汉字 ,长度达到了 GPT

    2024年02月06日
    浏览(41)
  • 【AIGC】BaiChuan7B开源大模型介绍、部署以及创建接口服务

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

    2024年02月09日
    浏览(43)
  • Baichuan-13B:130亿参数的开源语言模型,引领中文和英文benchmark

    Baichuan-13B: 一个强大的开源大规模语言模型 标题:Baichuan-13B:130亿参数的开源语言模型,引领中文和英文benchmark Baichuan-13B是由百川智能开发的一个开源大规模语言模型项目,包含了130亿参数。该模型在中文和英文的权威benchmark上达到了同尺寸模型的最佳效果。这个项目发布了

    2024年02月16日
    浏览(50)
  • 中文大模型 Chinese-LLaMA-Alpaca-2 开源且可以商用

    “  Meta 开源 LLAMA2 后,国内出现了不少以此为基座模型训练的中文模型,这次我们来看看其中一个不错的中文模型:Chinese-LLaMA-Alpaca-2 。 ” 01 — 目前在开源大模型中,比较有名的是Meta的LLAMA模型系列和清华的ChatGLM模型。 特别是在中文领域上,ChatGLM模型经过中文问答和对

    2024年02月06日
    浏览(44)
  • 中文版开源Llama 2同时有了语言、多模态大模型,完全可商用

    可以说,AI 初创公司 LinkSoul.Al 的这些开源项目让海外开源大模型在国内的普及和推广速度与国际几乎保持了一致。 7 月 19 日,Meta 终于发布了免费可商用版本 Llama 2,让开源大模型领域的格局发生了巨大变化。 Llama 2 模型系列包含 70 亿、130 亿和 700 亿三种参数变体,相比上

    2024年02月14日
    浏览(36)
  • 【AI人工智能】LLM 开源中文大语言模型集合

    整理开源的中文大语言模型,以规模较小、可私有化部署、训练成本较低的模型为主,包括底座模型,垂直领域微调及应用,数据集与教程等。 目录 1. Model 2. Application 3. Dataset 4. Evaluation 5. Tutorial 6. R

    2024年02月09日
    浏览(56)
  • Llama-Factory的baichuan2微调

    Llama-Factory:https://github.com/hiyouga/LLaMA-Factory/tree/main 请使用   来启用 QLoRA 训练。 (1)奖励模型训练 (2)PPO训练(PPO训练需要先进行上一步RM的训练,然后导入微调后模型和RM进行训练输出)        大规模无监督语言模型(LMs)虽然可以学习广泛的世界知识和一些推理技能

    2024年02月05日
    浏览(40)
  • ChatGLM-6B第二代模型开源,拿下LLM模型中文能力评估榜单第一名

    ChatGLM-6B 自3月14日发布以来,深受广大开发者喜爱。截至 6 月24日,来自 Huggingface 上的下载量已经超过 300w。 为了更进一步促进大模型开源社区的发展,我们再次升级 ChatGLM-6B,发布 ChatGLM2-6B 。在主要评估LLM模型中文能力的 C-Eval 榜单中,截至6月25日 ChatGLM2 模型以 71.1 的分数

    2024年02月11日
    浏览(46)
  • AIGC:【LLM(二)】——LangChain:由LLMs驱动的应用开发框架

    在过去几年中,大型语言模型 (LLM) 席卷了人工智能世界。随着 OpenAI 的 GPT-3 在 2020 年的突破性发布,我们见证了 LLM 的受欢迎程度稳步上升,并且随着该领域最近的进步而愈演愈烈。这些强大的 AI 模型为自然语言处理应用开辟了新的可能性,使开发人员能够在聊天机器人、问

    2024年02月06日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包