Langchain-Chatchat项目:1.2-Baichuan2项目整体介绍

news2024/11/24 11:43:54

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

一.Baichuan2模型
  Baichuan2模型在通用、法律、医疗、数学、代码和多语言翻译六个领域的中英文和多语言权威数据集上对模型进行了广泛测试。

二.模型推理
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)
"温故而知新"是一句中国古代的成语,出自《论语·为政》篇。这句话的意思是:通过回顾过去,我们可以发现新的知识和理解。换句话说,学习历史和经验可以让我们更好地理解现在和未来。

这句话鼓励我们在学习和生活中不断地回顾和反思过去的经验,从而获得新的启示和成长。通过重温旧的知识和经历,我们可以发现新的观点和理解,从而更好地应对不断变化的世界和挑战。

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

3.命令行工具方式和网页demo方式

python cli_demo.py
streamlit run web_demo.py

三.模型微调
1.依赖安装
  如需使用LoRA等轻量级微调方法需额外安装peft,如需使用xFormers进行训练加速需额外安装xFormers,如下所示:

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

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

3.多机训练
  多机训练只需要给一下hostfile,同时在训练脚本里面指定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

  其中,hostfile内容如下所示:

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

4.轻量化微调
  如需使用仅需在上面的脚本中加入参数--use_lora True,LoRA具体的配置可见fine-tune.py脚本。使用LoRA微调后可以使用下面的命令加载模型:

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

四.其它
1.对Baichuan1的推理优化迁移到Baichuan2
  用户只需要利用以下脚本离线对Baichuan2模型的最后一层lm_head做归一化,并替换掉lm_head.weight即可。替换完后,就可以像对Baichuan1模型一样对转换后的模型做编译优化等工作:

import torch
import os
ori_model_dir = 'your Baichuan 2 model directory'
# To avoid overwriting the original model, it's best to save the converted model to another directory before replacing it
new_model_dir = 'your normalized lm_head weight Baichuan 2 model directory'
model = torch.load(os.path.join(ori_model_dir, 'pytorch_model.bin'))
lm_head_w = model['lm_head.weight']
lm_head_w = torch.nn.functional.normalize(lm_head_w)
model['lm_head.weight'] = lm_head_w
torch.save(model, os.path.join(new_model_dir, 'pytorch_model.bin'))

2.中间Checkpoints
  下图给出了这些checkpoints在C-Eval、MMLU、CMMLU三个benchmark上的效果变化:


参考文献:
[1]https://github.com/baichuan-inc/Baichuan2
[2]baichuan-inc:https://huggingface.co/baichuan-inc
[3]https://huggingface.co/baichuan-inc/Baichuan2-7B-Intermediate-Checkpoints
[4]Baichuan 2: Open Large-scale Language Models:https://arxiv.org/abs/2309.10305

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1071456.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【重拾C语言】六、批量数据组织(四)线性表—栈和队列

目录 前言 六、批量数据组织——数组 6.1~3 数组基础知识 6.4 线性表——分类与检索 6.5~7 数组初值;字符串、字符数组、字符串数组;类型定义 typedef 6.8 线性表—栈和队列 6.8.1 栈(Stack) 全局变量 isEmpty() isFull…

TCP原理特性详解

文章目录 可靠传输机制1.确认应答2.超时重传2.连接管理1.三次握手2.四次挥手 传输效率1.滑动窗口2.流量控制3.拥塞控制4.延时应答5.捎带应答 面向字节流粘包问题 TCP异常情况 可靠传输机制 可靠性:即发送方知道数据是发送成功了,还是失败了。 1.确认应答…

Github-使用2FA验证:使用python实现TOTP验证,python实现github的2FA验证

github新增了2FA验证了, 1、扫描二维码,获取对应字符串 或点击setup key ,获取字符串 2、使用python来生成校验码 安装: pip install pytop import pyotp key XKDRR4WH3LY2WXPH print(pyotp.TOTP(key).now()) 3、将生成的6个验证码&…

第一章 概述 | 计算机网络(谢希仁 第八版)

文章目录 第一章 概述重要内容计算机网络的一些相关知识互联网概述因特网的标准化工作互联网的组成计算机网络的类别计算机网络的性能指标计算机网络的体系结构——-分层次的体系结构 第一章 概述 重要内容 互联网边缘部分和核心部分的作用,以及分组交换的概念 计…

学习记忆——宫殿篇——记忆宫殿——记忆桩——身体——记忆星座

我们在与人攀谈的时候,可以从以下几个维度入手,如:年龄、星座、爱好、工作等。 两点记忆的技巧以及一点知识延伸 两点记忆技巧: 1、第一次见面时要创建回忆线索 2、脑中回忆交流画面,加深线索 一点知识延伸&#xff1…

NoSQL之Redis 主从复制配置详解及哨兵模式

目录 1 Redis 主从复制 1.1 主从复制的作用 1.2 主从复制流程 2 搭建Redis 主从复制 2.1 安装 Redis 2.2 修改 Redis 配置文件(Master节点操作) 2.3 修改 Redis 配置文件(Slave节点操作) 2.4 验证主从效果 3 Redis 哨兵模…

自动拟人对话机器人在客户服务方面起了什么作用?

在当今数字时代,企业不断寻求创新的方法来提升客户服务体验。随着科技的不断进步和消费者期望的提升,传统的客户服务方式逐渐无法满足现代消费者的需求。因此,许多企业正在积极探索利用新兴技术来改进客户服务,自动拟人对话机器人…

javaScript关于闭包的理解

首先在了解闭包之前,我们要了解一下环境和作用域 1.环境和作用域 日常生活中我们生活的环境由周边建设如公园,小区,超市构成的。这就构成了环境 在计算机当中环境就是一块内存的数据。 环境是有作用范围的,eg:武汉周边的建设一…

YOLOv8 Tensorrt部署详细介绍(小白从0到1,不会你砍我)

下载YOLOv8项目和Tensorrt部署项目 git clone https://github.com/xiaocao-tian/yolov8_tensorrt.git git clone https://github.com/ultralytics/ultralytics.git 下载yolov8s模型 在YOLOv8项目中新建weights文件夹,将yolov8s.pt放入 运行tensorrt项目中gen_wts…

RabbitMQ 介绍与 SpringBootAMQP使用

一、MQ概述 异步通信的优点: 耦合度低吞吐量提升故障隔离流量削峰 异步通信的缺点: 依赖于Broker的可靠性、安全性、吞吐能力架构复杂,业务么有明显的流程线,不方便追踪管理 什么是的MQ MQ(Message Queue&#xf…

选择适合建筑公司的企业网盘平台

随着城市化进程的加速,越来越多的人开始关注乡村生活品质。Z公司以其标准化产品和优质资源整合,为回乡建房人群提供了一种全新的、高品质的整体解决方案。 Z公司深入调研了10W的回乡建房人群需求,组建了设计、工艺、供应链方面的专家团队&…

KUKA机器人通过直接输入法设定负载数据和附加负载数据的具体操作

KUKA机器人通过直接输入法设定负载数据和附加负载数据的具体操作 设置背景色: 工具负载数据 工具负载的定义: 工具负载数据是指所有装在机器人法兰上的负载。它是另外装在机器人上并由机器人一起移动的质量。需要输入的值有质量、重心位置、质量转动惯量以及所属的主惯性轴。…

边坡安全监测系统:守护边坡稳定的重要工具

在工程建设中,边坡安全监测系统一直被认为是掌握边坡安全及其支护结构维护决策系统的关键支撑条件。这一系统的主要目的在于确定边坡结构的稳定性,监控支护结构的承载能力、运营状态和耐久性能,并对边坡稳定性进行实时监控。 一、边坡安全监测…

CTF学习笔记——PWN(入门)

文章目录 [toc] CTF学习笔记——PWN(入门)PWN基础概念NC题[HGAME 2023 week1]test_nc 栈溢出[HNCTF 2022 Week1]easyoverflow 伪随机数[SWPUCTF 2022 新生赛]Darling 待补充待补充 CTF学习笔记——PWN(入门) 🚀&#x…

python常用库之数据库orm框架之SQLAlchemy

文章目录 python常用库之数据库orm框架之SQLAlchemy一、什么是SQLAlchemySQLAlchemy 使用场景 二、SQLAlchemy使用SQLAlchemy根据模型查询SQLAlchemy SQL 格式化的方式db_session.query和 db_session.execute区别实测demo 总结:让我们留意一下SQLAlchemy 的 lazy lo…

电流,功率监控芯片INA226应用(基于STM32工程)

一芯片介绍 INA226是具有I2C™或SMBUS兼容接口的电流分流器和功率监控器。该设备同时监视并联电压降和总线电源电压。可编程的校准值,转换时间和平均值与内部乘法器结合使用,可以直接读取以安培为单位的电流和以瓦特为单位的功率。INA226感应共模总线电…

Spring【@Resource、@Autowired+lombook+Bean的生命周期】

Resource 和 Autowired 的区别 在Spring中找Bean的两种方式:①先根据类型查找②再根据名称查找 Autowired先根据类型查找,再根据名称查找【根据上述查找结果不唯一,再添加一个 Qualifier(value“”),就可以查找】 Resource先根据名…

Spring Cloud Gateway2之断言Predicate详解

文章目录 1. 前言2. Spring Cloud Gateway断言的种类及各自功能2.1. Path断言 PathRoutePredicateFactory2.2.Method断言 MethodRoutePredicateFactory2.3.Header断言 HeaderRoutePredicateFactory2.4.Host断言 HostRoutePredicateFactory2.5.Query断言 QueryRoutePredicateFac…

【C++】unordered_set和unordered_map介绍及使用【附OJ题】

目录 一、unordered_set和unordered_map的介绍和使用 1、介绍 2、使用及与set和map的区别 3、O(logN)和 O(1)的效率对比 二、力扣OJ题 1、重复N次的元素 2、两个数组的交集 一、unordered_set和unordered_map的介绍和使用…

AI+Social Power,开创营销新纪元 | 2023数说故事年度社媒营销盛会,10月13日邀您共同见证

尊敬的嘉宾: AIGC成为2023年最热门的关键词之一,且以惊人的速度赢得了“圈层共识”,各行业都在探索如何利用AI技术创造更多可能性。尤其在社媒营销领域,AIGC的应用已成为势不可挡的趋势:品牌们用AI造新品,…