首页 > 其他分享 >Langchain-Chatchat项目:1.2-Baichuan2项目整体介绍

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

时间:2023-10-07 23:45:48浏览次数:47  
标签:baichuan 1.2 -- Langchain Chatchat model True Baichuan2 inc

  由百川智能推出的新一代开源大语言模型,采用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

标签:baichuan,1.2,--,Langchain,Chatchat,model,True,Baichuan2,inc
From: https://www.cnblogs.com/shengshengwang/p/17747781.html

相关文章

  • Langchain-Chatchat项目:2.1-通过GPT2模型来检索NebulaGraph
      在官方例子中给出了通过chain=NebulaGraphQAChain.from_llm(ChatOpenAI(temperature=0),graph=graph,verbose=True)来检索NebulaGraph图数据库。本文介绍了通过GPT2替换ChatOpenAI的思路和实现,暂时不考虑效果。之所以没用ChatGLM2是因为加载模型太慢,调试不方便,不过将GPT2......
  • Langchain-Chatchat项目:3-Langchain计算器工具Agent思路和实现
      本文主要讨论Langchain-Chatchat项目中自定义Agent问答的思路和实现。以"计算器工具"为例,简单理解就是通过LLM识别应该使用的工具类型,然后交给相应的工具(也是LLM模型)来解决问题。一个LLM模型可以充当不同的角色,要把结构化的Prompt模板写好,充分利用LLM的Zero/One/Few-Shot能力......
  • KubeSphere 社区双周报 | OpenFunction v1.2.0 发布 | 2023.09.15-09.28
    KubeSphere社区双周报主要整理展示新增的贡献者名单和证书、新增的讲师证书以及两周内提交过commit的贡献者,并对近期重要的PR进行解析,同时还包含了线上/线下活动和布道推广等一系列社区动态。本次双周报涵盖时间为:2023.09.15-2023.09.28。贡献者名单新晋KubeSphereCon......
  • GPT之路(九) LangChain - Memory
          记忆封装-Memory(langchainmemory)         Memory:这里不是物理内存,从文本的角度,可以理解为“上文”、“历史记录”或者说“记忆力”的管理          ConversationBufferMemory可也用来保留会话信息 ......
  • k8s1.25安装
    环境初始化yuminstallbash-completionvimntpdateiptableslrzszepel-release-y&&execbashsystemctlstopfirewalldsystemctldisabledfirewalldsetenforce0sed-i's/=enforcing/=disabled/g'/etc/selinux/configdocker#step1:安......
  • 文章《Semantic Kernel -- LangChain 的替代品?》的错误和疑问 探讨
    微信公众号文章SemanticKernel——LangChain的替代品?[1],它使用的示例代码是Python,他却发了这么一个疑问:支持的语言对比(因为SemanticKernel是用C#开发的,所以它对C#比较支持)如上所示。不清楚SemanticKernel为什么要用C#来开发,C#相比Python和JavaScript来说使用......
  • 「高等数学」1.2 数列的极限
    数列极限的定义数列概念:如果按照某一法则,对每个\(n\in\mathbf{N_{+}}\),对应着一个确定的实数\(x_n\),这些实数按照下标\(n\)从小到大排列得到的一个序列\[x_1,x_2,x_3,\dots,x_n,\dots\]就叫做数列,简记为数列\(\left\{x_n\right\}\).数列中的每一个数......
  • LangChain大模型应用开发指南-传统编程范式思维的应用
    LangChain大模型应用开发指南-传统编程范式思维的应用上节课,我带领小伙伴们完成了baichuan2量化模型的OpenAI标准接口封装,并完成LangChain对大模型的调用与测试。没有看过的小伙伴可以点击链接查看:AI课程合集今天我们将正式开始LangChain大模型应用开发课程。组件总览上图......
  • LangChain大模型应用开发指南-AI大模型衍生的新能力
    LangChain大模型应用开发指南-AI大模型衍生的新能力上节课,我以传统应用编程设计模式和思维为入口和对比对象,介绍了LangcChain中的Chain、Agent、Callback三大核心概念,并整理了LangcChain为众多开发者内置的能力与工具。没有看过的小伙伴可以点击链接查看:大模型OpenAI标准接口封......
  • 《从0到1的CTF成长之路》1.1.2 粗心的小李 解题过程
    解题试试书里教的工具scrabblegitclonehttps://github.com/denny0223/scrabble.git./scrabble127.0.0.1得到结果:找到Flag:n1book{git_looks_s0_easyfun}......