Baichuan2大模型本地部署

2023-09-21 22:50:08

作为今年九月份开源的一个中午大语言模型,Baichuan2已经在各个维度上取得了亮眼的结果,效果已经超过了当前火热的ChatGLM2-6B,可以通过自然语言交互的方式为你提供以下服务:

  1. 提供知识:我可以回答各领域的问题,并提供准确的信息和知识,帮你解决问题或获取所需要的信息
  2. 文本生成:我可以创作不同体裁的内容,激发你的灵感
  3. 语言翻译:如果需要将一种语言翻译成另外一种语言,我可以为你提供翻译服务
  4. 语言理解:我可以用于语言理解相关的任务,例如文本分析、情感分析、摘要抽取、分类、聚类等
  5. 代码编写和解释:我还可以生成相关问题的代码或者解释相关代码的问题 请问你需要什么帮助吗?

目录

一、模型介绍

二、模型结果

通用领域

7B 模型结果

13B 模型结果

三、推理和部署

安装依赖

Python 代码方式

Chat 模型推理方法示范

Base 模型推理方法示范

命令行工具方式

网页 demo 方式

四、接入📃 LangChain-Chatchat

五、项目地址


一、模型介绍

  • Baichuan 2 是百川智能推出的新一代开源大语言模型,采用 2.6 万亿 Tokens 的高质量语料训练。
  • Baichuan 2 在多个权威的中文、英文和多语言的通用、领域 benchmark 上取得同尺寸最佳的效果。
  • 本次发布包含有 7B13B 的 Base 和 Chat 版本,并提供了 Chat 版本的 4bits 量化
  • 所有版本对学术研究完全开放。同时,开发者通过邮件申请并获得官方商用许可后,即可免费商用,请参考协议章节。
  • 欢迎阅读我们的技术报告 Baichuan 2: Open Large-scale Language Models 获取更多信息。

本次发布版本和下载链接见下表:

基座模型对齐模型对齐模型 4bits 量化
7B🤗 Baichuan2-7B-Base🤗 Baichuan2-7B-Chat🤗 Baichuan2-7B-Chat-4bits
13B🤗 Baichuan2-13B-Base🤗 Baichuan2-13B-Chat🤗 Baichuan2-13B-Chat-4bits

二、模型结果

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

通用领域

在通用领域我们在以下数据集上进行了 5-shot 测试。

  • C-Eval 是一个全面的中文基础模型评测数据集,涵盖了 52 个学科和四个难度的级别。我们使用该数据集的 dev 集作为 few-shot 的来源,在 test 集上进行测试。我们采用了 Baichuan-7B 的评测方案。
  • MMLU 是包含 57 个任务的英文评测数据集,涵盖了初等数学、美国历史、计算机科学、法律等,难度覆盖高中水平到专家水平,是目前主流的 LLM 评测数据集。我们采用了开源的评测方案。
  • CMMLU 是一个包含 67 个主题的综合性性中文评估基准,专门用于评估语言模型在中文语境下的知识和推理能力。我们采用了其官方的评测方案。
  • Gaokao 是一个以中国高考题作为评测大语言模型能力的数据集,用以评估模型的语言能力和逻辑推理能力。 我们只保留了其中的单项选择题,并进行了随机划分。我们采用了与 C-Eval 类似的评测方案。
  • AGIEval 旨在评估模型的认知和解决问题相关的任务中的一般能力。 我们只保留了其中的四选一单项选择题,并进行了随机划分。我们采用了与 C-Eval 类似的评测方案。
  • BBH 是一个挑战性任务 Big-Bench 的子集。Big-Bench 目前包括 204 项任务。任务主题涉及语言学、儿童发展、数学、常识推理、生物学、物理学、社会偏见、软件开发等方面。BBH 是从 204 项 Big-Bench 评测基准任务中大模型表现不好的任务单独拿出来形成的评测基准。

7B 模型结果

C-EvalMMLUCMMLUGaokaoAGIEvalBBH
5-shot5-shot5-shot5-shot5-shot3-shot
GPT-468.4083.9370.3366.1563.2775.12
GPT-3.5 Turbo51.1068.5454.0647.0746.1361.59
LLaMA-7B27.1035.1026.7527.8128.1732.38
LLaMA2-7B28.9045.7331.3825.9726.5339.16
MPT-7B27.1527.9326.0026.5424.8335.20
Falcon-7B24.2326.0325.6624.2424.1028.77
ChatGLM2-6B50.2045.9049.0049.4445.2831.65
Baichuan-7B42.8042.3044.0236.3434.4432.48
Baichuan2-7B-Base54.0054.1657.0747.4742.7341.56

13B 模型结果

C-EvalMMLUCMMLUGaokaoAGIEvalBBH
5-shot5-shot5-shot5-shot5-shot3-shot
GPT-468.4083.9370.3366.1563.2775.12
GPT-3.5 Turbo51.1068.5454.0647.0746.1361.59
LLaMA-13B28.5046.3031.1528.2328.2237.89
LLaMA2-13B35.8055.0937.9930.8332.2946.98
Vicuna-13B32.8052.0036.2830.1131.5543.04
Chinese-Alpaca-Plus-13B38.8043.9033.4334.7835.4628.94
XVERSE-13B53.7055.2158.4444.6942.5438.06
Baichuan-13B-Base52.4051.6055.3049.6943.2043.01
Baichuan2-13B-Base58.1059.1761.9754.3348.1748.78

三、推理和部署

推理所需的模型权重、源码、配置已发布在 Hugging Face,下载链接见本文档最开始的表格。我们在此示范多种推理方式。程序会自动从 Hugging Face 下载所需资源。

安装依赖

pip install -r requirements.txt

Python 代码方式

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

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

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

在上述两段代码中,模型加载指定 device_map='auto',会使用所有可用显卡。如需指定使用的设备,可以使用类似 export CUDA_VISIBLE_DEVICES=0,1(使用了0、1号显卡)的方式控制。

命令行工具方式

python cli_demo.py

本命令行工具是为 Chat 场景设计,因此我们不支持使用该工具调用 Base 模型。

网页 demo 方式

依靠 streamlit 运行以下命令,会在本地启动一个 web 服务,把控制台给出的地址放入浏览器即可访问。本网页 demo 工具是为 Chat 场景设计,因此我们不支持使用该工具调用 Base 模型。

streamlit run web_demo.py

运行效果 

 

注意事项:

Baichuan2部署使用的 Pytorch 版本是2.0

四、接入📃 LangChain-Chatchat

接入📃 LangChain-Chatchat (原 Langchain-ChatGLM): 基于 Langchain 与 ChatGLM 等大语言模型的本地知识库问答应用实现。只需在项目model_config.py 中修改 llm_model_dict 中代码,加入:

    "Baichuan2": {
        "local_model_path": "E:\\baichuan-incBaichuan2-13B-Chat",  # "THUDM/chatglm2-6b-32k",
        "api_base_url": "http://localhost:8888/v1",  # "URL需要与运行fastchat服务端的server_config.FSCHAT_OPENAI_API一致
        "api_key": "EMPTY"
    },

并且修改:

# LLM 名称
LLM_MODEL = "Baichuan2"

实现效果如下:

 

五、项目地址

Baichuan2

GitHub - baichuan-inc/Baichuan2: A series of large language models developed by Baichuan Intelligent Technology 

LangChain-Chatchat :

GitHub - chatchat-space/Langchain-Chatchat: Langchain-Chatchat(原Langchain-ChatGLM)基于 Langchain 与 ChatGLM 等语言模型的本地知识库问答 | Langchain-Chatchat (formerly langchain-ChatGLM), local knowledge based LLM (like ChatGLM) QA app with langchain

更多推荐

计算机基础协议/概念:推送数据— —WebSocket与SSE;前端Blob/URL下载文件

计算机基础协议/概念:推送数据——WebSocket与SSE1WebSocket:双向通信1.1概念:通信过程①Upgrade:浏览器告知服务器升级为WebSocket协议②Switch:服务器升级成功后会返回101状态码③Communicate:浏览器和服务器就可以以WebSocket格式发送数据1.2实战:实现简易

GitHub上标星23K+的Redis进阶笔记(应用+原理+集群+拓展+源码)

先来看几道Redis面试题:redis为什么是key,value的,为什么不是支持SQL的?redis是多线程还是单线程?(回答单线程的请回吧,为什么请回,请往下看)redis的持久化开启了RDB和AOF下重启服务是如何加载的?(10个人9个回答错误)redis如果做集群该如何规划?AKF/CAP如何实现和设计?10万

Android gradle dependency tree change(依赖树变化)监控实现

文章目录前言基本原理执行流程diff报告不同分支merge过来的diff报告同个分支产生的merge报告同个分支提交的diff报告具体实现原理我们需要监控怎样的Dendenpency变化怎样获取dependencyTree`project.configurations`方式./gradlewdependenciesAs

Git常用命令diff和mv

Git常用命令diff和mv1、diff#查看工作区和暂存区所有文件的对比#该命令可以显示尚未添加到stage的文件的变更$gitdiff#查看工作区和暂存区单个文件的对比$gitdifffile#显示暂存区和上一个commit的差异#查看暂存区与指定提交版本的不同,版本可缺省为HEAD$gitdiff--cached

Spring常考知识点(IOC、事务、容器等)

Spring需要理解的问题谈谈你对IOC的理解单例Bean和单例模式Spring事务传播机制Spring事务什么时候会失效Spring中的Bean创建的⽣命周期有哪些步骤Spring中Bean是线程安全的吗ApplicationContext和BeanFactory有什么区别Spring中的事务是如何实现的Spring

iOS自动化测试方案(一):MacOS虚拟机保姆级安装Xcode教程

文章目录一、环境准备二、基础软件三、扩展:usb拓展插件一、环境准备1、下载VMware虚拟机的壳子,安装并注册软件(可以百度注册码),最新版本:v172、下MacOS系统iOS镜像文件,用于vmware虚拟机安装,当前镜像最新版本:v11.6二、基础软件1、MacOS系统找到AppStore,这点同iphone操作,

.NET的CancellationTokenSource和ManualResetEvent结合使用

一、CancellationTokenSource是C#中的一个类,用于取消异步操作。它提供了一种机制,可以取消一个或多个异步操作。CancellationTokenSource包含以下主要方法:Cancel():该方法会取消所有挂起的操作,并引发OperationCanceledException异常。如果在调用Ca

Linux系统编程6(线程互斥,锁,同步,生产消费模型)

上篇文章介绍完线程的概念后,我们将在这篇文章中初步探讨线程编程以及线程应用中的问题,这篇文章将以抢票系统为例,贯穿整篇文章。笔者将介绍在多线程编程中会出现的问题,什么是同步?什么是互斥?为什么多线程编程常有加锁的概念,什么又是生产者和消费者模型,读完这篇文章,你会得到相应的答案,笔者这里强烈建议各位把文中给出的demo

App Store上线规范及流程

上线一个应用到AppStore需要遵循苹果的规范和流程,以确保应用的质量和安全性。以下是上线应用到AppStore的一般规范和流程,希望对大家有所帮助。北京木奇移动技术有限公司,专业的软件外包开发公司,欢迎交流合作。1.开发和测试:在上线应用之前,确保应用已经经过了充分的开发和测试阶段。这包括功能测试、性能测试、兼容性

Python学习之——str/unicode/bytes

Python学习之——str/unicode/bytes参考字符串和字节串区分Unicode和Encodingspython2python3一个典型的问题参考Pythonstrvsunicodetypes谈谈python2,3中的str、unicodeUnicode编码及UTF-32,UTF-16和UTF-8https

【Oracle】Oracle系列之二--Oracle数据字典

文章目录往期回顾前言1.什么是Oracle数据字典2.数据字典的内容(1)X$表(2)数据字典表、数据字典视图(3)动态性能视图3.数据字典应用示例(1)查询表的信息(2)查询索引的信息(3)查询用户的信息(4)查询表空间的信息(5)查询数据文件的信息(6)查询数据库的性能数据往期回顾【Oracle】Oracle系列–

热文推荐