AI免费开源语言模型百川Baichuan2代下载安装部署教程
Baichuan2是百川智能推出的新一代开源大语言模型,采用 2.6 万亿 Tokens 的高质量语料训练。在多个权威的中文、英文和多语言的通用、领域 benchmark 上取得同尺寸最佳的效果。本次发布包含有 7B、13B 的 Base 和 Chat 版本,并提供了 Chat 版本的 4bits 量化。所有版本对学术研究完全开放。同时,开发者通过邮件申请并获得官方商用许可后,即可免费商用。
项目仓库
GitHub:baichuan-inc/Baichuan2
环境警告
本项目必须使用Linux系统安装部署,暂不支持Windows系统安装使用,但Windows内置WSL子系统功能,通过该功能可以快速部署一个支持本机GPU运算的Linux子系统。
Ubuntu属于Linux系统的一个分支,你可以理解为安卓系统中被各个手机厂商高度定制的UI系统,而Ubuntu是Linux较为成熟的一个分支。
为方便大家自行搭建或快速使用,本站提供两种方式给大家。
- 根据教程,自行搭建Linux的Ubuntu系统,自行安装项目的相应环境依赖以及模型,需要魔法网络。
- 根据教程,快速倒入本店所提供的WSL子系统镜像,可以免安装各种依赖,方便快捷,无网络要求。
以上两种方式任选其一即可,无需两个全部安装。
自行部署
此部分教程需要自己掌握关于Linux的基础知识,需要魔法网络环境正常,否则困难重重。
系统安装
在安装项目之前,我们需要一个Windows的子系统,用来运行Ubuntu,如果你还未安装部署Ubuntu,可以参阅如下文章。
CUDA
在安装项目之前,我们需要安装Ubutun版本的CUDA,否则N卡无法正常加速,关于CUDA的安装教程可以参阅如下文章。
Conda
在你已经安装Ubuntu系统后,我们还需要安装Conda,用来管理Python多版本等功能,关于Conda的安装可参考如下文章。
基础准备
为保持与本站命令的一致性,现在关闭所有你之前所有CMD窗口,重新打开一个CMD窗口,执行如下命令。
首先,在CMD中执行如下命令进入WSL子系统。
wsl
为保证Conda
可以正常使用,所以我们还需要切换
用户为你的实际用户名
。
su 用户名
默认情况下你所进入的可能并不是用户的主目录,可能是root用户的根目录,建议将项目安装在用户的主目录下,执行如下命令进入用户主目录。
cd ~
执行如上代码后可能需要输入密码,完成用户切换操作。
项目部署|推理环境
此时我们终于可以进行项目安装啦,执行如下命令,拉取
该项目的Github仓库
文件,将其下载至用户主目录
文件夹内。
git clone https://github.com/baichuan-inc/Baichuan2.git
在终端
中执行如下命令,强制切换至Baichuan2
的项目目录。
cd Baichuan2
执行如下命令,创建Conda虚拟环境
,方便后续Python环境的安装。
conda create -y -n Baichuan2 python=3.10
激活
已创建的Conda环境
,这样可以将我们后续所需要的所有环境依赖都安装至此环境下。
conda activate Baichuan2
执行如下命令,安装
该项目的相关模块
依赖库。
pip install -r requirements.txt
至此,手动安装部署Ubutun环境下的开源项目教程完成,请直接跳转至模型下载
部分。
项目部署|训练环境
关于训练|微调的环境,与以上的安装方式不同。此时你需要在完成上述代码之后,通过以下命令切换工作目录。
cd Baichuan2/fine-tune/
执行如下命令,安装
该项目用于训练
的相关模块
依赖库。
pip install -r requirements.txt
执行以上代码之后,等待安装自动完成即可。
自动部署
此部分教程需要自己掌握关于Linux的基础知识,无需魔法网络环境,可以让你快速运行开源项目。
镜像下载
本站已经将该项目除模型文件的所有依赖全部打包,为什么不将模型文件一起打包?
因为开源AI项目的模型文件较大,如果将模型文件一起打包,可能整个系统镜像的文件尺寸高达几十上百个GB,而且自行部署
和自动部署
需要的模型都是一样的,站长的电脑上传两遍模型会造成严重的带宽占用,网盘空间占用等问题。故此,模型需要大家单独下载,然后手动放置在项目内,大家可以放心,模型安装部分非常简单,和Windows是一样的。
系统安装
在你已经下载完成本站所提供的系统镜向之后,你需要根据下面这篇文章,准备WSL的相关组件,了解Liunx的相关知识。
在完成上面文章内容操作之后,请关闭
你当前的所有已打开的CMD
窗口,然后按下键盘上的Win键+R键
后,在弹出的新窗口内输入CMD
并按下回车
键,在CMD窗口
中按顺序执行
如下的每一条命令
。
如果你的系统镜像文件路径与教程中的一致,可以执行如下命令,自动导入Ubuntu系统镜像。
wsl --import Baichuan2 D:\openai.wiki\WSL D:\openai.wiki\WSL\Baichuan2.tar
在CMD中执行如下命令,进入WSL子系统。
wsl -d Baichuan2
为保证Conda
可以正常使用,所以我们还需要切换用户为你的实际用户名
。
su openai_wiki
执行如上代码后可能需要输入密码,密码输入openai_wiki
即可完成用户切换操作。
注意:本站所提供的所有Ubuntu系统镜像,用户名
|用户密码
|root密码
全部为openai_wiki
。
激活
已创建的Conda环境
,否则无法运行项目。
conda activate Baichuan2
默认情况下你所进入的可能并不是用户的主目录,而是root目录,执行如下命令进入用户主目录下的项目目录。
cd ~/Baichuan2
模型下载
官方下载
模型 | 类型 | 地址 |
---|---|---|
BaiChuan-7B | Base | 点击下载 |
BaiChuan-7B | Chat | 点击下载 |
BaiChuan-7B | Chat-4bits | 点击下载 |
BaiChuan-13B | Base | 点击下载 |
BaiChuan-13B | Chat | 点击下载 |
BaiChuan-13B | Chat-4bits | 点击下载 |
网盘下载
关于此项目的模型,本站已为您下载并整理好。如果你不方便通过官网下载,可以使用本站所提供的网盘下载地址。
注意:因模型过多过大,本站仅为大家提供常用的BaiChuan-7B-Chat
和BaiChuan-13B-Chat
模型下载,如果你需要其它模型,请自行前往官网下载。
模型安装
WSL系统目录
我们是可以直接在Windows
的资源管理器
中查看的,在CMD
中执行如下命令,这将会自动弹出WSL系统的文件目录,
start \\wsl$
这将会自动弹出Windows的资源管理器,你将会看到如下内容:
- 如果你是通过
自行安装
方式部署,那么可以访问名为Ubuntu
的文件夹。- 将你下载后的模型移动至
.\home\你的用户名\Baichuan2
目录下
- 将你下载后的模型移动至
- 如果你是通过
自动安装
方式导入的系统,那么可访问名为Baichuan2
的文件夹。- 将你下载后的模型移动至
.\home\openai_wiki\Baichuan2
目录下
- 将你下载后的模型移动至
运行方式
在以后每次运行该项目时,只需要先进入WSL系统,切换用户,切换目录,然后激活我们所创建的Conda虚拟Python环境,最后运行启动文件即可。
运行一个CMD窗口,执行如下命令进入WSL系统。
wsl
为保证Conda
可以正常使用,所以我们还需要切换用户为你的实际用户名
。(如果是自行部署,请将openai_wiki
修改为你自己所设置的用户名。)
su openai_wiki
在终端中执行如下命令,强制切换至项目目录文件夹。
cd ~/Baichuan2
激活已创建的Conda环境,这样才可以正常使用该项目,否则将会自动调用系统中的默认Python。
conda activate Baichuan2
执行如下代码,运行程序的GUI界面。
python run.py
推理教程
在完成上面的所有操作之后,我们此时已经可以正常使用该项目啦。
自行部署|CLI
CLI是一种以命令行为界面的交互方式,你可以理解为在CMD中进行对话。
如果你是自行部署的,执行如下命令,启动CLI交互时,默认使用的模型是BaiChuan2-13B-Chat
去启动的。
python cli_demo.py
如果你想修改默认加载的模型为BaiChuan2-7B-Chat
版本,那么需要打开~\Baichuan2\cli_demo.py
文件,你将看到如下内容。
import os import torch import platform import subprocess from colorama import Fore, Style from tempfile import NamedTemporaryFile from transformers import AutoModelForCausalLM, AutoTokenizer from transformers.generation.utils import GenerationConfig def init_model(): print("init model ...") model = AutoModelForCausalLM.from_pretrained( "baichuan-inc/Baichuan2-13B-Chat", torch_dtype=torch.float16, device_map="auto", trust_remote_code=True ) model.generation_config = GenerationConfig.from_pretrained( "baichuan-inc/Baichuan2-13B-Chat" ) tokenizer = AutoTokenizer.from_pretrained( "baichuan-inc/Baichuan2-13B-Chat", use_fast=False, trust_remote_code=True ) return model, tokenizer # 后面内容不需要修改,所以省略。
我们在这里可以看到一些关于Baichuan2-13B-Chat
的内容,分别在第14
|20
|23
行,我们只需要将这三行
的内容修改为7B
即可,修改后的内容如下。
import os import torch import platform import subprocess from colorama import Fore, Style from tempfile import NamedTemporaryFile from transformers import AutoModelForCausalLM, AutoTokenizer from transformers.generation.utils import GenerationConfig def init_model(): print("init model ...") model = AutoModelForCausalLM.from_pretrained( "baichuan-inc/Baichuan2-7B-Chat", torch_dtype=torch.float16, device_map="auto", trust_remote_code=True ) model.generation_config = GenerationConfig.from_pretrained( "baichuan-inc/Baichuan2-7B-Chat" ) tokenizer = AutoTokenizer.from_pretrained( "baichuan-inc/Baichuan2-7B-Chat", use_fast=False, trust_remote_code=True ) return model, tokenizer
修改完成后重新执行如下代码即可开始正常推理。
python cli_demo.py
自动部署|CLI
如果你使用本站所下载的WSL镜像,那么推理模型的切换将会非常简单,因为站长已经为你修改好了相关内容。
如果你想启动7B模型,那么执行如下代码。
python cli_demo_7B.py
如果你想启动13B模型,那么执行如下代码。
python cli_demo_13B.py
自行部署|WebUI
关于此项目,官方还提供了WebUI的交互方式,默认情况下你可以通过执行如下代码,自动启动13B模型的推理界面。
streamlit run web_demo.py
执行完成后,你将会看到如下内容,我们随便复制其中一个URL到浏览器中打开。
(Baichuan2) openai_wiki@openAI:~/Baichuan2$ streamlit run web_demo.py You can now view your Streamlit app in your browser. Local URL: http://localhost:8502 Network URL: http://172.28.20.155:8502
打开后可以看到如下界面,加载模型需要一些时间。
等待模型加载完成即可正常推理使用。
如果你想修改默认加载的模型为BaiChuan2-7B-Chat
版本,那么需要打开~\Baichuan2\web_demo.py
文件,你将看到如下内容。
import json import torch import streamlit as st from transformers import AutoModelForCausalLM, AutoTokenizer from transformers.generation.utils import GenerationConfig st.set_page_config(page_title="Baichuan 2") st.title("Baichuan 2") @st.cache_resource def init_model(): model = AutoModelForCausalLM.from_pretrained( "baichuan-inc/Baichuan2-13B-Chat", torch_dtype=torch.float16, device_map="auto", trust_remote_code=True ) model.generation_config = GenerationConfig.from_pretrained( "baichuan-inc/Baichuan2-13B-Chat" ) tokenizer = AutoTokenizer.from_pretrained( "baichuan-inc/Baichuan2-13B-Chat", use_fast=False, trust_remote_code=True ) return model, tokenizer # 后面内容不需要修改,所以省略。
我们在这里可以看到一些关于Baichuan2-13B-Chat
的内容,分别在第15
|21
|24
行,我们只需要将这三行
的内容修改为7B
即可,修改后的内容如下。
import json import torch import streamlit as st from transformers import AutoModelForCausalLM, AutoTokenizer from transformers.generation.utils import GenerationConfig st.set_page_config(page_title="Baichuan 2") st.title("Baichuan 2") @st.cache_resource def init_model(): model = AutoModelForCausalLM.from_pretrained( "baichuan-inc/Baichuan2-7B-Chat", torch_dtype=torch.float16, device_map="auto", trust_remote_code=True ) model.generation_config = GenerationConfig.from_pretrained( "baichuan-inc/Baichuan2-7B-Chat" ) tokenizer = AutoTokenizer.from_pretrained( "baichuan-inc/Baichuan2-7B-Chat", use_fast=False, trust_remote_code=True ) return model, tokenizer
修改完成后重新执行如下代码即可开始使用7B模型正常推理。
streamlit run web_demo.py
自动部署|WebUI
如果你使用本站所下载的WSL镜像,那么推理模型的切换将会非常简单,因为站长已经为你修改好了相关内容。
如果你想启动7B模型,那么执行如下代码。
streamlit run web_demo_7b.py
如果你想启动13B模型,那么执行如下代码。
streamlit run web_demo_13b.py
代码推理
如果你想通过Python代码方式进行推理,那么可以通过执行如下代码进行模型的推理。
import torch from modelscope import snapshot_download, AutoModelForCausalLM, AutoTokenizer,GenerationConfig model_dir = snapshot_download("baichuan-inc/Baichuan2-7B-Chat", revision='v1.0.1') tokenizer = AutoTokenizer.from_pretrained(model_dir, device_map="auto", trust_remote_code=True, torch_dtype=torch.float16) model = AutoModelForCausalLM.from_pretrained(model_dir, device_map="auto", trust_remote_code=True, torch_dtype=torch.float16) model.generation_config = GenerationConfig.from_pretrained(model_dir) messages = [] messages.append({"role": "user", "content": "讲解一下“温故而知新”"}) response = model.chat(tokenizer, messages) print(response) messages.append({'role': 'assistant', 'content': response}) messages.append({"role": "user", "content": "背诵一下将进酒"}) response = model.chat(tokenizer, messages) print(response)
量化部署
为了让不同的用户以及不同的平台都能运行 Baichuan 2 模型,我们针对 Baichuan 2 模型做了相应地量化工作(包括 Baichuan2-7B-Chat 和 Baichuan2-13B-Chat),方便用户快速高效地在自己的平台部署 Baichuan 2 模型。
量化方法
Baichuan 2 的采用社区主流的量化方法:BitsAndBytes。该方法可以保证量化后的效果基本不掉点,目前已经集成到 transformers 库里,并在社区得到了广泛应用。BitsAndBytes 支持 8bits 和 4bits 两种量化,其中 4bits 支持 FP4 和 NF4 两种格式,Baichuan 2 选用 NF4 作为 4bits 量化的数据类型。
基于该量化方法,Baichuan 2 支持在线量化和离线量化两种模式。
在线量化
对于在线量化,我们支持 8bits 和 4bits 量化,使用方式和 Baichuan-13B 项目中的方式类似,只需要先加载模型到 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"
,在使用在线量化时,需要去掉这个参数,否则会报错。
离线量化
为了方便用户的使用,我们提供了离线量化好的 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)
量化效果
量化前后显存占用对比 (GPU Mem in GB):
Precision | Baichuan2-7B | Baichuan2-13B |
---|---|---|
bf16 / fp16 | 15.3 | 27.5 |
8bits | 8.0 | 16.1 |
4bits | 5.1 | 8.6 |
量化后在各个 benchmark 上的结果和原始版本对比如下:
Model 5-shot | C-Eval | MMLU | CMMLU |
---|---|---|---|
Baichuan2-13B-Chat | 56.74 | 57.32 | 59.68 |
Baichuan2-13B-Chat-4bits | 56.05 | 56.24 | 58.82 |
Baichuan2-7B-Chat | 54.35 | 52.93 | 54.99 |
Baichuan2-7B-Chat-4bits | 53.04 | 51.72 | 52.84 |
C-Eval 是在其 val set 上进行的评测
可以看到,4bits 相对 bfloat16 精度损失在 1 – 2 个百分点左右。
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)
效果展示
代码
用户:找到下列数组的中位数[3.1,6.2,1.3,8.4,10.5,11.6,2.1],请用python代码完成以上功能 Baichuan 2:def find_median(numbers): numbers.sort() length = len(numbers) if length % 2 == 0: return (numbers[length // 2 - 1] + numbers[length // 2]) / 2 else: return numbers[length // 2] numbers = [3.1, 6.2, 1.3, 8.4, 10.5, 11.6, 2.1] print(find_median(numbers))
数学
用户:鸡和兔在一个笼子里,共有26个头,68只脚,那么鸡有多少只,兔有多少只? Baichuan 2:我们可以用代数方法来解决这个问题。假设鸡的数量为x,兔子的数量为y。根据题目给出的信息,我们可以得到以下两个方程: 1. x + y = 26 (头的总数) 2. 2x + 4y = 68 (脚的总数) 现在我们需要解这个二元一次方程组。首先从第一个方程中解出x: x = 26 - y 然后将x的表达式代入第二个方程: 2(26 - y) + 4y = 68 52 - 2y + 4y = 68 2y = 16 接下来我们求解y的值: y = 16 / 2 y = 8 现在我们得到了兔子的数量是8只。将y的值代入x的表达式求得鸡的数量: x = 26 - 8 x = 18 所以鸡有18只,兔子有8只。
指令跟随
用户:从现在开始,请你将我接下来说的每一句话翻译成英语,准备好了吗? Baichuan 2:I'm ready to translate every word you say next into English. 用户:你好 Baichuan 2:Hello 用户:我是Baichuan 2,很高兴认识大家 Baichuan 2:I am Baichuan 2, and I am very happy to meet everyone. 用户:希望通过大家的共同努力,早日迎接AGI时代的到来 Baichuan 2:I hope through the joint efforts of all of us, we can welcome the arrival of the AGI era as soon as possible.
解题
用户:以下物理常识题目,哪一个是错误的?A.在自然环境下,声音在固体中传播速度最快。B.牛顿第一定律:一个物体如果不受力作用,将保持静止或匀速直线运动的状态。C.牛顿第三定律:对于每个作用力,都有一个相等而反向的反作用力。D.声音在空气中的传播速度为1000m/s。 Baichuan 2:本题考查物理基本概念和原理的理解和应用能力。 A项:声音的传播需要介质,在固体、液体和气体的三种介质中,声音在固体中的传播速度是最快的,故A正确; B项:牛顿第一定律是惯性定律,其内容是:一个物体如果没有受到外力的作用,要么保持静止状态,要么保持匀速直线运动状态,直到有外力迫使它改变运动状态为止,故B正确; C项:牛顿第三定律的内容是:对于每一个作用力,都有一个大小相等、方向相反的反作用力,这两个力分别作用在两个相互作用的物体上,故C错误; D项:声音在空气中以波的形式传播,其传播速度与介质的温度、湿度等因素有关,一般情况下,声音在空气中的传播速度约为340m/s左右,而不是1000m/s,故D错误。 因此,本题的正确答案是 D 。
用户:I'm Mike 。I am going to have a busy weekend。On Saturday,I am going to learn how to swim。I will go with my father。Then we are going to have lunch in the restaurant。In the afternoon,we are going to the zoo。We are going to see the pandas。On Sunday,I will finish my homework in the morning。In the afternoon,my parents and I are going to visit my grandparents。We will have dinner together。 阅读短文,判断正确和错误!正确请写T,错误请写F: 1.Mike is going to have a busy weekend() 2.Mike is going to learn how to swim with his father() 3.They are going to have lunch at home() Baichuan 2:1. T(正确的) 2. T(正确的) 3. F(错误的)
训练过程模型
除了训练了 2.6 万亿 Tokens 的Baichuan2-7B-Base
模型,我们还提供了在此之前的另外 11 个中间过程的模型(分别对应训练了约 0.2 ~ 2.4 万亿 Tokens)供社区研究使用(训练过程heckpoint下载)。下图给出了这些 checkpoints 在 C-Eval、MMLU、CMMLU 三个 benchmark 上的效果变化:
Benchmark 结果
我们在通用、法律、医疗、数学、代码和多语言翻译六个领域的中英文和多语言权威数据集上对模型进行了广泛测试。
通用领域
在通用领域我们在以下数据集上进行了 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-Eval | MMLU | CMMLU | Gaokao | AGIEval | BBH | |
---|---|---|---|---|---|---|
5-shot | 5-shot | 5-shot | 5-shot | 5-shot | 3-shot | |
GPT-4 | 68.40 | 83.93 | 70.33 | 66.15 | 63.27 | 75.12 |
GPT-3.5 Turbo | 51.10 | 68.54 | 54.06 | 47.07 | 46.13 | 61.59 |
LLaMA-7B | 27.10 | 35.10 | 26.75 | 27.81 | 28.17 | 32.38 |
LLaMA2-7B | 28.90 | 45.73 | 31.38 | 25.97 | 26.53 | 39.16 |
MPT-7B | 27.15 | 27.93 | 26.00 | 26.54 | 24.83 | 35.20 |
Falcon-7B | 24.23 | 26.03 | 25.66 | 24.24 | 24.10 | 28.77 |
ChatGLM2-6B | 50.20 | 45.90 | 49.00 | 49.44 | 45.28 | 31.65 |
Baichuan-7B | 42.80 | 42.30 | 44.02 | 36.34 | 34.44 | 32.48 |
Baichuan2-7B-Base | 54.00 | 54.16 | 57.07 | 47.47 | 42.73 | 41.56 |
13B 模型结果
C-Eval | MMLU | CMMLU | Gaokao | AGIEval | BBH | |
---|---|---|---|---|---|---|
5-shot | 5-shot | 5-shot | 5-shot | 5-shot | 3-shot | |
GPT-4 | 68.40 | 83.93 | 70.33 | 66.15 | 63.27 | 75.12 |
GPT-3.5 Turbo | 51.10 | 68.54 | 54.06 | 47.07 | 46.13 | 61.59 |
LLaMA-13B | 28.50 | 46.30 | 31.15 | 28.23 | 28.22 | 37.89 |
LLaMA2-13B | 35.80 | 55.09 | 37.99 | 30.83 | 32.29 | 46.98 |
Vicuna-13B | 32.80 | 52.00 | 36.28 | 30.11 | 31.55 | 43.04 |
Chinese-Alpaca-Plus-13B | 38.80 | 43.90 | 33.43 | 34.78 | 35.46 | 28.94 |
XVERSE-13B | 53.70 | 55.21 | 58.44 | 44.69 | 42.54 | 38.06 |
Baichuan-13B-Base | 52.40 | 51.60 | 55.30 | 49.69 | 43.20 | 43.01 |
Baichuan2-13B-Base | 58.10 | 59.17 | 61.97 | 54.33 | 48.17 | 48.78 |
法律、医疗
法律领域我们使用了 JEC-QA 数据集。JEC-QA 数据集来源于中国国家司法考试。我们只保留了其中的单选题。我们采用了与 C-Eval 类似的评测方案。
医疗领域则使用通用领域数据集(C-Eval、MMLU、CMMLU)中的医学相关学科、MedQA 和 MedMCQA。我们采用了与 C-Eval 类似的评测方案。
- 为了测试方便,我们使用了 C-Eval 的 val 集进行测试。
- MedQA 数据集来源于美国、中国的医学考试。我们测试了 MedQA数据集 中的 USMLE 和 MCMLE 两个子集,并采用了五个候选的版本。
- MedMCQA 数据集来源于印度医学院的入学考试。我们只保留了其中的单选题。由于 test 集没有答案,我们使用 dev 集进行测试。
- 通用领域数据集包含的医学相关学科如下:
- C-Eval: clinical_medicine, basic_medicine
- MMLU: clinical_knowledge, anatomy, college_medicine, college_biology, nutrition, virology, medical_genetics, professional_medicine
- CMMLU: anatomy, clinical_knowledge, college_medicine, genetics, nutrition, traditional_chinese_medicine, virology
我们对以上数据集进行了 5-shot 测试。
7B 模型结果
JEC-QA | CEval-MMLU-CMMLU | MedQA-USMLE | MedQA-MCMLE | MedMCQA | |
---|---|---|---|---|---|
5-shot | 5-shot | 5-shot | 5-shot | 5-shot | |
GPT-4 | 59.32 | 77.16 | 80.28 | 74.58 | 72.51 |
GPT-3.5 Turbo | 42.31 | 61.17 | 53.81 | 52.92 | 56.25 |
LLaMA-7B | 27.45 | 33.34 | 24.12 | 21.72 | 27.45 |
LLaMA2-7B | 29.20 | 36.75 | 27.49 | 24.78 | 37.93 |
MPT-7B | 27.45 | 26.67 | 16.97 | 19.79 | 31.96 |
Falcon-7B | 23.66 | 25.33 | 21.29 | 18.07 | 33.88 |
ChatGLM2-6B | 40.76 | 44.54 | 26.24 | 45.53 | 30.22 |
Baichuan-7B | 34.64 | 42.37 | 27.42 | 39.46 | 31.39 |
Baichuan2-7B-Base | 44.46 | 56.39 | 32.68 | 54.93 | 41.73 |
13B 模型结果
JEC-QA | CEval-MMLU-CMMLU | MedQA-USMLE | MedQA-MCMLE | MedMCQA | |
---|---|---|---|---|---|
5-shot | 5-shot | 5-shot | 5-shot | 5-shot | |
GPT-4 | 59.32 | 77.16 | 80.28 | 74.58 | 72.51 |
GPT-3.5 Turbo | 42.31 | 61.17 | 53.81 | 52.92 | 56.25 |
LLaMA-13B | 27.54 | 35.14 | 28.83 | 23.38 | 39.52 |
LLaMA2-13B | 34.08 | 47.42 | 35.04 | 29.74 | 42.12 |
Vicuna-13B | 28.38 | 40.99 | 34.80 | 27.67 | 40.66 |
Chinese-Alpaca-Plus-13B | 35.32 | 46.31 | 27.49 | 32.66 | 35.87 |
XVERSE-13B | 46.42 | 58.08 | 32.99 | 58.76 | 41.34 |
Baichuan-13B-Base | 41.34 | 51.77 | 29.07 | 43.67 | 39.60 |
Baichuan2-13B-Base | 47.40 | 59.33 | 40.38 | 61.62 | 42.86 |
数学、代码
数学领域我们使用 OpenCompass 评估框架,对 GSM8K 和 MATH 数据集进行了 4-shot 测试。
- GSM8K 是由 OpenAI 发布的一个由 8.5K 高质量的语言多样化的小学数学应用题组成的数据集,要求根据给定的场景和两个可能的解决方案,选择最合理的方案。
- MATH 数据集包含 12,500 个数学问题(其中 7500 个属于训练集,5000 个属于测试集),这些问题收集自 AMC 10、AMC 12、AIME 等数学竞赛。
代码领域则采用了 HumanEval 和 MBPP 数据集。我们使用 OpenCompass,对 HumanEval 进行了 0-shot 测试,MBPP 数据集进行了 3-shot 测试。
- HumanEval 中的编程任务包括模型语言理解、推理、算法和简单数学,以评估模型功能正确性,并衡量模型的问题解决能力。
- MBPP 包括 974 个 Python 短函数、程序的文字描述以及用于检查功能正确性的测试用例的数据集。
7B 模型结果
GSM8K | MATH | HumanEval | MBPP | |
---|---|---|---|---|
4-shot | 4-shot | 0-shot | 3-shot | |
GPT-4 | 89.99 | 40.20 | 69.51 | 63.60 |
GPT-3.5 Turbo | 57.77 | 13.96 | 52.44 | 61.40 |
LLaMA-7B | 9.78 | 3.02 | 11.59 | 14.00 |
LLaMA2-7B | 16.22 | 3.24 | 12.80 | 14.80 |
MPT-7B | 8.64 | 2.90 | 14.02 | 23.40 |
Falcon-7B | 5.46 | 1.68 | – | 10.20 |
ChatGLM2-6B | 28.89 | 6.40 | 9.15 | 9.00 |
Baichuan-7B | 9.17 | 2.54 | 9.20 | 6.60 |
Baichuan2-7B-Base | 24.49 | 5.58 | 18.29 | 24.20 |
13B 模型结果
GSM8K | MATH | HumanEval | MBPP | |
---|---|---|---|---|
4-shot | 4-shot | 0-shot | 3-shot | |
GPT-4 | 89.99 | 40.20 | 69.51 | 63.60 |
GPT-3.5 Turbo | 57.77 | 13.96 | 52.44 | 61.40 |
LLaMA-13B | 20.55 | 3.68 | 15.24 | 21.40 |
LLaMA2-13B | 28.89 | 4.96 | 15.24 | 27.00 |
Vicuna-13B | 28.13 | 4.36 | 16.46 | 15.00 |
Chinese-Alpaca-Plus-13B | 11.98 | 2.50 | 16.46 | 20.00 |
XVERSE-13B | 18.20 | 2.18 | 15.85 | 16.80 |
Baichuan-13B-Base | 26.76 | 4.84 | 11.59 | 22.80 |
Baichuan2-13B-Base | 52.77 | 10.08 | 17.07 | 30.20 |
多语言翻译
我们采用了 Flores-101 数据集来评估模型的多语言能力。Flores-101 涵盖了世界各地的 101 种语言。它的数据来源于新闻、旅游指南和书籍等多个不同领域。我们选择了联合国官方语言(阿拉伯文、中文、英文、法文、俄文和西班牙文)以及德文和日文作为测试语种。我们使用 OpenCompass 对 Flores-101 中的中-英、中-法、中-西班牙、中-阿拉伯、中-俄、中-日、中-德等七个子任务分别进行了 8-shot 测试。
7B 模型结果
CN-EN | CN-FR | CN-ES | CN-AR | CN-RU | CN-JP | CN-DE | Average | |
---|---|---|---|---|---|---|---|---|
GPT-4 | 29.94 | 29.56 | 20.01 | 10.76 | 18.62 | 13.26 | 20.83 | 20.43 |
GPT-3.5 Turbo | 27.67 | 26.15 | 19.58 | 10.73 | 17.45 | 1.82 | 19.70 | 17.59 |
LLaMA-7B | 17.27 | 12.02 | 9.54 | 0.00 | 4.47 | 1.41 | 8.73 | 7.63 |
LLaMA2-7B | 25.76 | 15.14 | 11.92 | 0.79 | 4.99 | 2.20 | 10.15 | 10.14 |
MPT-7B | 20.77 | 9.53 | 8.96 | 0.10 | 3.54 | 2.91 | 6.54 | 7.48 |
Falcon-7B | 22.13 | 15.67 | 9.28 | 0.11 | 1.35 | 0.41 | 6.41 | 7.91 |
ChatGLM2-6B | 22.28 | 9.42 | 7.77 | 0.64 | 1.78 | 0.26 | 4.61 | 6.68 |
Baichuan-7B | 25.07 | 16.51 | 12.72 | 0.41 | 6.66 | 2.24 | 9.86 | 10.50 |
Baichuan2-7B-Base | 27.27 | 20.87 | 16.17 | 1.39 | 11.21 | 3.11 | 12.76 | 13.25 |
13B 模型结果
CN-EN | CN-FR | CN-ES | CN-AR | CN-RU | CN-JP | CN-DE | Average | |
---|---|---|---|---|---|---|---|---|
GPT-4 | 29.94 | 29.56 | 20.01 | 10.76 | 18.62 | 13.26 | 20.83 | 20.43 |
GPT-3.5 Turbo | 27.67 | 26.15 | 19.58 | 10.73 | 17.45 | 1.82 | 19.70 | 17.59 |
LLaMA-13B | 21.75 | 16.16 | 13.29 | 0.58 | 7.61 | 0.41 | 10.66 | 10.07 |
LLaMA2-13B | 25.44 | 19.25 | 17.49 | 1.38 | 10.34 | 0.13 | 11.13 | 12.17 |
Vicuna-13B | 22.63 | 18.04 | 14.67 | 0.70 | 9.27 | 3.59 | 10.25 | 11.31 |
Chinese-Alpaca-Plus-13B | 22.53 | 13.82 | 11.29 | 0.28 | 1.52 | 0.31 | 8.13 | 8.27 |
XVERSE-13B | 29.26 | 24.03 | 16.67 | 2.78 | 11.61 | 3.08 | 14.26 | 14.53 |
Baichuan-13B-Base | 30.24 | 20.90 | 15.92 | 0.98 | 9.65 | 2.64 | 12.00 | 13.19 |
Baichuan2-13B-Base | 30.61 | 22.11 | 17.27 | 2.39 | 14.17 | 11.58 | 14.53 | 16.09 |
模型微调
依赖安装
git clone https://github.com/baichuan-inc/Baichuan2.git cd Baichuan2/fine-tune pip install -r requirements.txt
单机训练
下面我们给一个微调 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
多机训练
多机训练只需要给一下 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
轻量化微调
代码已经支持轻量化微调如 LoRA,如需使用仅需在上面的脚本中加入以下参数:
--use_lora True
LoRA 具体的配置可见 fine-tune.py
脚本。
使用 LoRA 微调后可以使用下面的命令加载模型:
from peft import AutoPeftModelForCausalLM model = AutoPeftModelForCausalLM.from_pretrained("output", trust_remote_code=True)
声明与协议
声明
我们在此声明,我们的开发团队并未基于 Baichuan 2 模型开发任何应用,无论是在 iOS、Android、网页或任何其他平台。我们强烈呼吁所有使用者,不要利用 Baichuan 2 模型进行任何危害国家社会安全或违法的活动。另外,我们也要求使用者不要将 Baichuan 2 模型用于未经适当安全审查和备案的互联网服务。我们希望所有的使用者都能遵守这个原则,确保科技的发展能在规范和合法的环境下进行。
我们已经尽我们所能,来确保模型训练过程中使用的数据的合规性。然而,尽管我们已经做出了巨大的努力,但由于模型和数据的复杂性,仍有可能存在一些无法预见的问题。因此,如果由于使用 Baichuan 2 开源模型而导致的任何问题,包括但不限于数据安全问题、公共舆论风险,或模型被误导、滥用、传播或不当利用所带来的任何风险和问题,我们将不承担任何责任。
协议
对本仓库源码的使用遵循开源许可协议 Apache 2.0。对 Baichuan 2 模型的社区使用需遵循《Baichuan 2 模型社区许可协议》。Baichuan 2 支持商用。如果将 Baichuan 2 模型或其衍生品用作商业用途,请您通过邮箱 opensource@baichuan-inc.com 联系许可方,申请书面授权。
总结
没啥可总结的,因为站长的电脑没跑起来,内存不足,导致进程被强制杀死,以下是站长在使用过程中的报错。
(Baichuan2) openai_wiki@openAI:~/Baichuan2$ dmesg | tail [ 841.217501] [ 845] 0 845 10803 3789 122880 3090 0 python3 [ 841.217503] [ 1006] 0 1006 1193 132 49152 7 0 snapfuse [ 841.217505] [ 1014] 0 1014 570172 4623 356352 2259 -900 snapd [ 841.217507] [ 1127] 0 1127 1906 93 57344 41 0 su [ 841.217508] [ 1132] 1000 1132 4226 347 77824 17 0 systemd [ 841.217510] [ 1136] 1000 1136 42455 740 94208 359 0 (sd-pam) [ 841.217512] [ 1143] 1000 1143 1553 1 49152 445 0 bash [ 841.217513] [ 1275] 1000 1275 15747950 3872081 43196416 1030121 0 python [ 841.217515] oom-kill:constraint=CONSTRAINT_NONE,nodemask=(null),cpuset=/,mems_allowed=0,global_oom,task_memcg=/user.slice/user-1000.slice/session-c2.scope,task=python,pid=1275,uid=1000 [ 841.217641] Out of memory: Killed process 1275 (python) total-vm:62991800kB, anon-rss:15488032kB, file-rss:0kB, shmem-rss:292kB, UID:1000 pgtables:42184kB oom_score_adj:0
dmesg
命令的输出显示了内核日志,其中oom-kill
条目表明操作系统的Out-Of-Memory Killer已经因为内存不足而终止了一个Python进程。
以下是关键信息:
task=python,pid=1275
: 这是被杀死的进程信息。这表示python
进程,其进程ID为1275,被系统因为内存不足而杀死。Out of memory: Killed process 1275 (python)
: 这说明了Python进程因为系统内存不足而被杀死。total-vm:62991800kB
: 这是进程试图使用的虚拟内存总量。anon-rss:15488032kB
: 这是进程实际使用的物理RAM的量。
这通常发生在处理大量数据或运行需要大量内存的任务时,如训练大型深度学习模型。
理论上如果你的电脑硬件情况没有问题,是可以正常推理的。
评论 (0)