🤗 HuggingFace • 🤖 ModelScope • 💬 WeChat

News

[3/11/2024] 🔥开源XuanYuan-6B、XuanYuan-13B、XuanYuan2-70B系列模型

[1/19/2023] 🔥开源XuanYuan-13B-Chat模型

[11/1/2023] 🔥开源XuanYuan-70B-Chat模型及8-bit和4bit量化模型

[9/22/2023] 🔥开源XuanYuan-70B Base模型

[9/22/2023] 🔥开源60G高质量中文金融数据。Hugging Face

[9/22/2023] 🔥开源中文金融领域知识评估数据集 FinanceIQGitHub | HuggingFace

[5/21/2023] 开源度小满轩辕-176B大模型,在BLOOM-176B的基础上针对中文通用领域和金融领域进行了针对性的预训练与微调。是国内首个开源的千亿级中文对话大模型

目前发布的模型和下载链接如下:

基座模型Chat模型8-bit量化Chat模型4-bit量化Chat模型
XuanYuan-6B🤗 🤖🤗 🤖🤗 🤖🤗 🤖
XuanYuan-13B🤗 🤖🤗 🤖🤗 🤖🤗 🤖
XuanYuan2-70B🤗 🤖🤗 🤖🤗 🤖🤗 🤖
XuanYuan-70B🤗 🤖🤗 🤖🤗 🤖🤗 🤖
XuanYuan-176B🤗

技术文档: XuanYuan-6B XuanYuan-13B XuanYuan2-70B XuanYuan-70B

XuanYuan-6B

介绍

在轩辕系列大模型研发过程中,我们积累了大量的高质量数据和模型训练经验,构建了完善的训练平台,搭建了合理的评估流水线。在此基础上,为丰富轩辕系列模型矩阵,降低轩辕大模型使用门槛,我们进一步推出了XuanYuan-6B系列大模型。不同于XuanYuan-13B和XuanYuan-70B系列模型在LLaMA2上继续预训练的范式,XuanYuan-6B是我们从零开始进行预训练的大模型。当然,XuanYuan-6B仍采用类LLaMA的模型架构。在预训练基础上,我们构建了丰富、高质量的问答数据和人类偏好数据,并通过指令微调和强化学习进一步对齐了模型表现和人类偏好,显著提升了模型在对话场景中的表现。XuanYuan6B系列模型在多个评测榜单和人工评估中均获得了亮眼的结果。模型训练细节请参考我们的技术报告:Report

本次开源的XuanYuan-6B系列模型包含基座模型XuanYuan-6B,经指令微调和强化对齐的chat模型XuanYuan-6B-Chat,以及chat模型的量化版本XuanYuan-6B-Chat-4bit和XuanYuan-6B-Chat-8bit。

主要特点:

  • 收集多个领域大量的训练语料,进行了多维度数据清洗和去重,保证数据的量级和质量
  • 从零开始预训练,预训练中动态调整数据配比,模型基座能力较强
  • 结合Self-QA方法构建高质量问答数据,采用混合训练方式进行监督微调
  • 构建高质量人类偏好数据训练奖励模型并进行强化训练,对齐模型表现和人类偏好
  • 模型尺寸小并包含量化版本,硬件要求低,适用性更强
  • 在多个榜单和人工评估中均展现出良好的性能,具备领先的金融能力

性能评测

基础评测

金融一直是轩辕大模型重点关注的领域和主要应用目标,因此我们首先在金融场景评测了XuanYuan-6B模型。我们使用自己构建并开源的FinanceIQ数据集,该数据集是一份专业的大模型金融能力评估数据集,涵盖了10个金融大类,36个金融小类,总计7173题。评估结果如下表所示。从表中可以看出,XuanYuan-6B模型在该评估数据中的性能甚至超越了GPT4,显示出了其强大的金融能力。

模型平均分注册会计师银行从业资格证券从业资格基金从业资格保险从业资格经济师税务师期货从业资格理财规划师精算师
XuanYuan-13B74.0275.2983.5277.3880.575.8687.3162.0976.4475.2546.59
XuanYuan-6B68.8771.6277.6574.8377.5273.5686.5459.0270.6771.1926.14
GPT460.0552.3368.7264.868.8168.6875.5846.9363.5163.8427.27

除金融外,我们也注重轩辕大模型的通用能力,因此我们也在多个主流评测集上进行了模型评测,观察轩辕大模型在知识、逻辑、代码等通用能力上的表现。评测结果如下表所示。

模型C-EvalCMMLUMMLUGSM8KHumanEval
LLaMA2-70B50.153.669.854.423.7
LLaMA2-13B41.438.45529.618.9
LLaMA2-7B32.531.846.816.712.8
XuanYuan-13B827870.349.329.3
XuanYuan-6B81.275.864.532.922.6

从表中结果可以看出,在五个评测集上,XuanYuan-6B的表现均超越了类似尺寸的LLaMA2-7B和LLaMA2-13B模型,展现出了强大的通用能力。在中文相关场景下,XuanYuan-6B甚至可超越更大尺寸的LLaMA2-70B模型。

值得注意的是,在上述所有评测中,XuanYuan-6B均进行了考试场景增强,具体细节可见我们的技术报告。另外榜单结果也不代表模型在真实场景中的实际能力。为进一步验证模型的实际能力,我们对模型进行了人工评测。

人工评测

除在各榜单进行评测外,我们进一步对XuanYuan-6B-Chat模型进行了人工评估,来公正客观地评估chat模型在对话场景中的真实能力。评估集包含一定量级的问题且对研发人员完全封闭,每个问题均由三个不同的人员进行评估来减轻偏见。评估对比对象为业界开源的类似尺寸的主流大模型,我们并采用GSB(Good,Same,Bad)指标来展示评估结果,具体结果如下图所示。从图中可以看出,在通用性(安全性在评估时被纳入了通用性)和金融能力上,XuanYuan-6B-Chat模型均超过了对比对象,显示出更强的模型能力。

推理部署

XuanYuan-6B系列模型均已上传到HuggingFace和modelscope网站,请点击上述链接进行下载。XuanYuan-6B基座模型、chat模型及其量化模型的使用方法和XuanYuan-70BXuanYuan2-70B类似,但是tokenizer加载方式和在对话场景中使用的prompt格式不同(不包含system message)。下面以XuanYuan-6B-Chat模型为例,来展示XuanYuan-6B系列模型的使用方法。

import torch
from transformers import LlamaForCausalLM, AutoTokenizer

model_name_or_path = "Duxiaoman-DI/XuanYuan-70B-Chat"

tokenizer = AutoTokenizer.from_pretrained(model_name_or_path)
model = LlamaForCausalLM.from_pretrained(model_name_or_path, device_map="auto")
model.eval()

seps = [" ", "</s>"]
roles = ["Human", "Assistant"]

content = "介绍下你自己"
prompt = seps[0] + roles[0] + ": " + content + seps[0] + roles[1] + ":"
print(f"输入: {content}")
inputs = tokenizer(prompt, return_tensors="pt").to("cuda")
outputs = model.generate(**inputs, max_new_tokens=256, do_sample=True, temperature=0.7, top_p=0.95)
outputs = tokenizer.decode(outputs.cpu()[0][len(inputs.input_ids[0]):], skip_special_tokens=True)
print(f"输出: {outputs}")

XuanYuan-13B

介绍

最懂金融领域的开源大模型“轩辕”系列,继176B、70B之后推出更小参数版本——XuanYuan-13B。这一版本在保持强大功能的同时,采用了更小的参数配置,专注于提升在不同场景下的应用效果。同时,我们也开源了XuanYuan-13B-Chat模型的4bit和8bit量化版本,降低了硬件需求,方便在不同的设备上部署。

主要特点:

  • “以小搏大”的对话能力:在知识理解、创造、分析和对话能力上,可与千亿级别的模型相媲美
  • 金融领域专家:在预训练和微调阶段均融入大量金融数据,大幅提升金融领域专业能力。在金融知识理解、金融业务分析、金融内容创作、金融客服对话几大方面展示出远超一般通用模型的优异表现
  • 人类偏好对齐:通过人类反馈的强化学习(RLHF)训练,在通用领域和金融领域均与人类偏好进行对齐

模型训练与创新

在模型训练中,团队在模型预训练阶段动态调整不同语种与领域知识的比例,融入了大量的专业金融语料,并在指令微调中灵活运用之前提出的Self-QA和混合训练方法,显著提升了模型在对话中的性能表现。此外,本次“轩辕13B”还通过强化学习训练,与人类偏好进行对齐。相比于原始模型,RLHF对齐后的模型,在文本创作、内容生成 、指令理解与遵循、安全性等方面都有较大的提升。模型细节请参考文档:Report

通用评测

XuanYuan-13B在各评测集(通用评测、金融评测)上的结果已在XuanYuan-6B的评测内容中给出,请参考。从评测结果来看,XuanYuan-13B具备很强的通用能力和金融能力,其性能甚至可比肩更大尺寸的模型,做到了以小搏大。和XuanYuan-6B类似,XuanYuan-13B在评测中也进行了考试场景优化。此外,由于评测集是固定且有限的,因此相关评测结果并不完全代表模型的真实能力。

除在固定测试集进行评估外,我们非常关注模型在实际对话中的能力,组建专业的人工评测团队将XuanYuan-13B与其他开源系列的70B左右参数模型进行GSB比较,结果显示:在通用评测中的绝大部分指标,XuanYuan-13B都可以与其他开源系列的70B左右参数模型相媲美,主要评测指标如下(轩辕vs其他):

金融评测

XuanYuan-13B在金融评测也表现出极高的水平,以小博大获得了很好的表现。金融的主要评测指标如下(轩辕vs其他):

推理部署

XuanYuan-13B的Chat模型已发布在Hugging Face,请根据上述的链接进行下载。下面我们给出Chat模型的推理部署使用方法。

import torch
from transformers import LlamaForCausalLM, LlamaTokenizer
model_name_or_path = "Duxiaoman-DI/XuanYuan-13B-Chat" 
tokenizer = LlamaTokenizer.from_pretrained(model_name_or_path, use_fast=False, legacy=True)
model = LlamaForCausalLM.from_pretrained(model_name_or_path, device_map="auto")
model.eval()
seps = [" ", "</s>"]
roles = ["Human", "Assistant"]
content = "你是谁"
prompt = "Human: " + content + " Assistant:"
print(f"输入: {content}")
inputs = tokenizer(prompt, return_tensors="pt").to("cuda")
outputs = model.generate(**inputs, max_new_tokens=256, do_sample=True, temperature=0.7, top_p=0.95)
outputs = tokenizer.decode(outputs.cpu()[0][len(inputs.input_ids[0]):], skip_special_tokens=True)
print(f"输出: {outputs}")

介绍

XuanYuan2-70B系列模型是在XuanYuan-70B基座模型基础上,使用更多高质量的语料进行继续预训练和指令微调,并进行基于人类反馈的强化训练而得到。相比第一代XuanYuan-70B系列模型,第二代模型在通用性、安全性和金融能力上都得到了明显提高,模型输出更加符合人类偏好。同时,第二代模型支持的上下文长度达到16k,能够更好处理长文本输入,适用范围更为广泛。模型细节请参考文档:Report

XuanYuan2-70B系列共包含4个模型,包括基座模型XuanYuan2-70B,chat模型XuanYuan2-70B-Chat,chat模型的量化版本XuanYuan2-70B-Chat-8bit和XuanYuan2-70B-Chat-4bit。

主要特点:

  • 使用更多高质量的数据进行继续预训练和指令微调,各项能力持续提升
  • 支持的上下文长度达到了16k,使用范围更广
  • 基于人类的反馈信息进行强化训练,进一步对齐了人类偏好

性能评测

类似XuanYuan-70B,我们也对XuanYuan2-70B进行了通用性评测和金融评测。

通用评测

通用评测的目标是观察XuanYuan2-70B在使用更多高质量数据进行继续预训练后,英文能力是否得到了保持,中文能力是否得到了增强。同样,我们也选择MMLU来测试模型在英文场景下的通用能力,同时使用CEVAL和CMMLU来测试模型在中文场景下的各项能力。评测结果如下表所示。从表中可以看出,相比XuanYuan-70B,XuanYuan2-70B的中文能力得到了进一步提升,同时英文能力也没有出现明显的下降,整体表现符合预期。这一方面证明了我们所做的各项优化的有效性,另一方面也显示出了XuanYuan2-70B强大的通用能力。值得注意的是,榜单结果并不完全代表模型的实际性能表现,即便在CEVAL和CMMLU上我们的评测结果超过了GPT4,但实际中我们模型的表现和GPT4还存在明显的差距,我们将继续优化和提升轩辕模型的各项能力。

模型MMLUCEVALCMMLU
LLaMA2-70B68.952.153.11
XuanYuan-70B70.971.971.10
XuanYuan2-70B70.872.772.7
GPT483.9368.470.95

金融评测

我们在FinanceIQ上评测了模型的金融能力。FinanceIQ是一个专业的金融领域评测集,其涵盖了10个金融大类及36个金融小类,总计7173个单项选择题,某种程度上可客观反应模型的金融能力。评测结果如下表所示。从表中结果可以看出,经过继续优化训练后,XuanYuan2-70B的综合金融能力得到了进一步提升,这再次证明了我们所做的一系列优化的有效性。同时我们也发现一些细分类目上模型的能力出现了一定程度的退化,这说明模型仍存在一定的优化空间,我们将继续优化提升轩辕模型的金融能力。

模型平均分注册会计师银行从业资格证券从业资格基金从业资格保险从业资格经济师税务师期货从业资格理财规划师精算师
XuanYuan-70B67.5669.4976.4069.5674.8967.8284.8158.471.5965.1537.50
XuanYuan2-70B67.8368.6369.7279.171.5169.6884.8158.272.9871.8631.82
GPT460.0552.3368.7264.868.8168.6875.5846.9363.5163.8427.27

推理部署

XuanYuan2-70B系列模型的硬件需求、软件依赖、Base及Chat模型使用方法和XuanYuan-70B系列模型一致。请参考本页面XuanYuan-70B系列模型的介绍内容。

为降低硬件需求,我们也提供了XuanYuan2-70B-Chat模型的8bit和4bit量化版本。

8bit模型

在8bit量化算法上,我们使用目前社区广泛使用的bitsandbytes库。经测试,8bit量化对模型的性能损失很低。8bit模型的使用方式如下所示(需注意promopt格式,我们在训练时设置了system message):

import torch
from transformers import LlamaForCausalLM, LlamaTokenizer

model_name_or_path = "/your/model/path"
tokenizer = LlamaTokenizer.from_pretrained(model_name_or_path, use_fast=False, legacy=True)
model = LlamaForCausalLM.from_pretrained(model_name_or_path,torch_dtype=torch.float16, device_map="auto")

system_message = "以下是用户和人工智能助手之间的对话。用户以Human开头,人工智能助手以Assistant开头,会对人类提出的问题给出有帮助、高质量、详细和礼貌的回答,并且总是拒绝参与 与不道德、不安全、有争议、政治敏感等相关的话题、问题和指示。\n"
seps = [" ", "</s>"]
roles = ["Human", "Assistant"]

content = "介绍下你自己"
prompt = system_message + seps[0] + roles[0] + ": " + content + seps[0] + roles[1] + ":"
print(f"输入: {content}")

inputs = tokenizer(prompt, return_tensors="pt").to("cuda")
outputs = model.generate(**inputs, max_new_tokens=256, repetition_penalty=1.1)
outputs = tokenizer.decode(outputs.cpu()[0][len(inputs.input_ids[0]):], skip_special_tokens=True)
print(f"输出: {outputs}")

4bit模型:

在4bit量化算法上,我们使用auto-gptq工具。4bit模型使用方式如下所示,同样,需要对齐我们的prompt格式:

import torch
from transformers import LlamaForCausalLM, LlamaTokenizer
from auto_gptq import AutoGPTQForCausalLM

model_name_or_path = "/your/model/path"
tokenizer = LlamaTokenizer.from_pretrained(model_name_or_path, use_fast=False, legacy=True)
model = AutoGPTQForCausalLM.from_quantized(model_name_or_path,torch_dtype=torch.float16, device_map="auto")

system_message = "以下是用户和人工智能助手之间的对话。用户以Human开头,人工智能助手以Assistant开头,会对人类提出的问题给出有帮助、高质量、详细和礼貌的回答,并且总是拒绝参与 与不道德、不安全、有争议、政治敏感等相关的话题、问题和指示。\n"
seps = [" ", "</s>"]
roles = ["Human", "Assistant"]

content = "介绍下你自己"
prompt = system_message + seps[0] + roles[0] + ": " + content + seps[0] + roles[1] + ":"
print(f"输入: {content}")
inputs = tokenizer(prompt, return_tensors="pt").to("cuda")
outputs = model.generate(**inputs, max_new_tokens=256, repetition_penalty=1.1)
outputs = tokenizer.decode(outputs.cpu()[0][len(inputs.input_ids[0]):], skip_special_tokens=True)
print(f"输出: {outputs}")

在vLLM下使用4bit模型:

普通HuggingFace的推理脚本运行gptq量化的4bit模型时,推理的速度很慢,并不实用。而最新版本的vLLM已经支持包含gptq在内的多种量化模型的加载,vLLM依靠量化的加速算子以及pagedAttention,continue batching以及一些调度机制,可以实现至少10倍的推理吞吐的提升。

您可以安装最新版本的vLLM并使用以下脚本使用我们的4bit量化模型:

from vllm import LLM, SamplingParams

sampling_params = SamplingParams(temperature=0.7, top_p=0.95,max_tokens=256)
llm = LLM(model="/your/model/path", quantization="gptq", dtype="float16")

system_message = "以下是用户和人工智能助手之间的对话。用户以Human开头,人工智能助手以Assistant开头,会对人类提出的问题给出有帮助、高质量、详细和礼貌的回答,并且总是拒绝参与 与不道德、不安全、有争议、政治敏感等相关的话题、问题和指示。\n"
seps = [" ", "</s>"]
roles = ["Human", "Assistant"]

content = "介绍下你自己"
prompt = system_message + seps[0] + roles[0] + ": " + content + seps[0] + roles[1] + ":"
print(f"输入: {content}")
result = llm.generate(prompt, sampling_params)
result_output = [[output.outputs[0].text, output.outputs[0].token_ids] for output in result]
print(f"输出:{result_output[0]}")

生成速度评估

我们测试了不同模型(量化前和量化后)在不同推理方式(HuggingFace、vLLM)下的生成速度,结果如下所示:

  • 全量70B模型推理吞吐是: 8.26 token/s
  • 4bit 70B模型推理吞吐是: 0.70 token/s
  • 8bit 70B模型推理吞吐是: 3.05 token/s
  • 4bit 70B模型vllm推理吞吐是: 60.32 token/s
  • 全量70B模型vllm推理吞吐是: 41.80 token/s

在所有测试中,我们均设置batchsize=1。上述前三项都是普通HuggingFace推理脚本的测试结果,可以看到量化后模型推理速度并无提升。最后两项是vLLM的推理测试结果,比起HuggingFace推理,可以看出vLLM可用性更高,模型生成速度均有显著提升。

XuanYuan-70B

介绍

XuanYuan-70B 是基于Llama2-70B模型进行中文增强的一系列金融大模型,包含大量中英文语料增量预训练之后的底座模型以及使用高质量指令数据进行对齐的chat模型。考虑到金融场景下存在较多长文本的业务,因此基于高效的分布式训练框架,我们将模型的上下文长度在预训练阶段从4k扩充到了8k和16k,这也是首个在70B参数量级上达到8k及以上上下文长度的开源大模型,模型细节请参考文档:Report

主要特点:

  • 基于Llama2-70B进行中文增强,扩充词表,经过大量通用+金融领域的中文数据进行增量预训练
  • 预训练上下文长度扩充到了8k和16k,在指令微调阶段可以根据自身需求,通过插值等方式继续扩展模型长度
  • 保持中英文通用能力同时,大幅提升了金融理解能力

性能评测

本部分包括通用能力评测和金融领域评测。 我们模型训练的目标是通用能力尽可能保持的同时,金融领域能力可以得到明显提升。

需要说明的是,对于客观类评测,我们统一采用基座模型进行测试,而对于主观对话,我们使用Chat模型进行测试。

通用评测

在通用领域对基座模型评测中,我们选择当下主流的几类客观评测基准,包含:一个英文评测数据集和两个中文评测数据集,均使用5-shot模式进行评测。

  • MMLU 是一个综合的英文评测基准,涵盖了STEM,人文学科,社会科学等领域的57个主题。它的难度从初级水平到高级专业水平,它考验世界知识和解决问题的能力。
  • C-Eval 是一个全面的中文基础模型评估基准。它包含了13948个多项选择题,涵盖了52个不同的学科和四个难度级别
  • CMMLU 是一个综合性的中文评估基准,专门用于评估语言模型在中文语境下的知识和推理能力。CMMLU涵盖了从基础学科到高级专业水平的67个主题。

我们选择了几种主流的大模型来进行对比:

模型MMLUCEVALCMMLU
XuanYuan-70B70.971.971.10
Llama2-70B68.952.1053.11
GPT483.9368.4070.95
InternLM-20B62.0558.8*
Baichun2-13B-base59.1758.1061.97
XVERSE-13B-base55.154.758.4
Qwen-7B56.759.658.66
ChatGLM2-6B45.9051.7048.80
  • XuanYuan-70B在中英文客观评测集方面均有着出色的表现,
  • XuanYuan-70B模型相比原始Llama2-70B,保留了其出色的英文能力,且有一定的提升;在中文能力评测方面,得到了显著的增强。
  • 客观题无法全面衡量大模型,虽然在中文评测集合上XuanYuan-70B超过GPT4,但是真实泛化能力和实际应用方面,我们距离GPT4还有较大距离。

附:我们也提供了随着增量预训练的进行,模型在C-EVAL上的效果的变化: 

金融评测

为了有效评估模型在金融环境中的表现,我们同时开源了FinanceIQ:中文金融领域知识评估数据集 ,涵盖了10个金融大类及36个金融小类,总计7173个单项选择题,且为了尽可能缓解“数据泄漏”的现象,将所有模型放在“同一起跑线”上进行客观公正地评估,我们对题目都进行了改写和人工校对,从而可以验证模型的泛化能力。

我们选择了当前具备代表性的多个开源和可访问模型进行评测, 其中基座模型使用5-shot来测试,Chat模型使用0-shot来测试,结果如下:

模型平均分注册会计师银行从业资格证券从业资格基金从业资格保险从业资格经济师税务师期货从业资格理财规划师精算师
XuanYuan-70B67.5669.4976.4069.5674.8967.8284.8158.4071.5965.1537.50
XuanYuan-70B-Chat63.7865.4573.8471.0973.9759.7767.3147.7573.6767.4337.50
GPT4 (0-shot)60.0552.3368.7264.868.8168.6875.5846.9363.5163.8427.27
ErnieBot (0-shot)55.4450.864.7256.3860.8959.4874.4244.2656.1256.6830.68
Qwen-14B53.2946.7663.256.3858.8357.7669.2342.6256.5857.6523.86
Baichuan2-13B-Base51.245.4658.8850.9457.854.4564.8142.8350.8153.0932.95
Baichuan2-7B-Base47.3539.3654.5645.5852.6451.0160.5838.5249.4251.1430.68
Baichuan-13B-Base44.4939.7452.843.3752.2948.9958.8533.6143.6553.4218.18
ChatGPT (0-shot)44.234.3253.1244.8155.0549.7155.1931.9745.2749.8422.73
Qwen-7B41.4735.749.9242.3548.3943.157.8830.1242.4944.320.45
ErnieBot-Turbo (0-shot)40.6935.4948.3237.7644.6143.535032.1743.8844.9526.14
Chinese-LLaMA-2-13B38.6532.0443.3640.8242.0945.1150.3831.3540.6539.0921.59
Baichuan-7B37.1430.8941.1239.1241.5141.2445.3828.8939.9541.6921.59
LLaMA-2-13B35.0932.7237.637.5939.6837.9341.1527.0536.0338.4422.73
InternLM-7B33.9127.614035.1233.1434.3436.3529.7134.6437.4630.68
LLaMA-2-7B31.4928.331.634.4432.3434.6335.5825.8230.2526.7135.23
Chinese-LLaMA-2-7B30.8228.7632.6436.0532.832.7638.0822.9535.3328.3420.45

推理部署

XuanYuan-70B的基座模型、Chat模型以及8-bit和4bit量化模型均已发布在Hugging Face,请根据上述的链接进行下载。下面我们给出基座模型和Chat模型的推理部署使用方法。

依赖安装

CUDA >= 11.8 
torch >= 2.0
transformers >= 4.33.1
accelerate
sentencepiece
bitsandbytes(8bit量化所需)
optimum(4bit量化所需)
auto-gptq(4bit量化所需)
vllm(推理加速所需)

资源需求:

  • 对于基座模型和Chat模型,部署至少需要2张80G的显卡进行加载模型
  • 对于8bit量化版本,推理部署至少需要1张80G的显卡进行加载模型
  • 对于4bit量化版本,,推理部署至少需要1张40G的显卡进行加载模型

Base模型使用方法

因为XuanYuan-70B系列模型均是基于Llama2-70B进行增量预训练而来,因此基座模型的使用方法与Llama2基座模型保持一致。

import torch
from transformers import LlamaForCausalLM, LlamaTokenizer

model_name_or_path = "Duxiaoman-DI/XuanYuan-70B"
tokenizer = LlamaTokenizer.from_pretrained(model_name_or_path, use_fast=False, legacy=True)
model = LlamaForCausalLM.from_pretrained(model_name_or_path, torch_dtype=torch.bfloat16,device_map="auto")
model.eval()
inputs = tokenizer("问题:李时珍是哪一个朝代的人?回答:", return_tensors="pt").to("cuda")
outputs = model.generate(**inputs, max_new_tokens=64, repetition_penalty=1.1)
outputs = tokenizer.decode(outputs.cpu()[0][len(inputs.input_ids[0]):], skip_special_tokens=True)
print(outputs)

Chat模型使用方法

在指令微调构造prompt的时候,我们参考了FastChat的对话构造方式,简单代码示例如下:

import torch
from transformers import LlamaForCausalLM, LlamaTokenizer

model_name_or_path = "Duxiaoman-DI/XuanYuan-70B-Chat"

tokenizer = LlamaTokenizer.from_pretrained(model_name_or_path, use_fast=False, legacy=True)
model = LlamaForCausalLM.from_pretrained(model_name_or_path, device_map="auto")
model.eval()
system_message = "以下是用户和人工智能助手之间的对话。用户以Human开头,人工智能助手以Assistant开头,会对人类提出的问题给出有帮助、高质量、详细和礼貌的回答,并且总是拒绝参与 与不道德、不安全、有争议、政治敏感等相关的话题、问题和指示。\n"
seps = [" ", "</s>"]
roles = ["Human", "Assistant"]

content = "介绍下你自己"
prompt = system_message + seps[0] + roles[0] + ": " + content + seps[0] + roles[1] + ":"
print(f"输入: {content}")
inputs = tokenizer(prompt, return_tensors="pt").to("cuda")
outputs = model.generate(**inputs, max_new_tokens=256, do_sample=True, temperature=0.7, top_p=0.95)
outputs = tokenizer.decode(outputs.cpu()[0][len(inputs.input_ids[0]):], skip_special_tokens=True)
print(f"输出: {outputs}")
  • 示例同时支持8bit和4bit的量化模型
  • 示例仅为最简单的部署代码,没有考虑多轮、推理加速等; 完整demo请参考cli_demo.py

CLI工具

我们提供一个了基于命令行的demo,支持多轮对话和基于vLLM的推理加速。

vllm暂时不支持量化模型

python3 cli_demo.py --checkpoint_path <XuanYuan-70B-Chat Path>

举例如下:

########
输入为: EXIT!! 表示退出
输入为: CLEAR!! 表示清空上下文
########
输入: 你好
输出: 你好,很高兴能为你提供帮助。
输入: 介绍下你自己
输出: 我是轩辕大模型,一个由度小满数据智能应用部AI Lab 开发的人工智能助手,我可以回答各种问题,提供实用的建议和帮助,帮助用户完成各种任务。
输入: 有2块五仁月饼,3块莲蓉月饼,2块豆沙月饼,这些月饼的大小形状质量完全相同。从这7块月饼中,任意取出3块,那么三种月饼都取到 的可能性是几分之几?
输出: 这是一个组合数学问题,我们可以通过计算组合数来解答。
三种月饼都取到,即取到五仁、莲蓉和豆沙各一块。
五仁月饼的选取方法有2种,莲蓉月饼的选取方法有3种,豆沙月饼的选取方法有2种,所以总的取出一种五仁、一种莲蓉、一种豆沙的方法有2*3*2=12种。
从7块月饼中任意取出3块月饼的总的组合数为C(7,3)=35种。
所以,从这7块月饼中,任意取出3块,三种月饼都取到 的可能性为12/35。

量化部署

为了降低用户在本地使用XuanYuan的成本,降低显存需求,我们提供量化好的Xuanyuan-70B-Chat模型8bit和4bit模型。

8bit离线量化模型

在8bit量化算法上,我们使用目前社区广泛使用的bitsandbytes库。该库包含LLM.int8()量化算法的实现以及一系列量化的工具, 同时该方法已在transformers库里做了集成,使用较为容易。经过我们的测试,8bit量化可以近乎无损。

4bit离线量化模型

在4bit量化算法上,我们使用auto-gptq工具。该库实现的GPTQ算法是目前4bit量化最受欢迎的方法, 同时该方法在transformers库和optimum库里做了集成,使用较为容易。4bit量化损失很低,基本可以正常使用。

量化效果

下表给出了不同模型所需显存,以及在三个评测基准上CEVAL,CMMLU和MMLU上效果:

模型显存CEVALCMMLUMMLU
XuanYuan-70B-Chat129G62.1560.4165.3
XuanYuan-70B-Chat-8bit65G62.2559.9965.0
XuanYuan-70B-Chat-4bit35G60.9458.7663.0

可以看出:

  • 8bit和4bit的量化模型相比原始float16的模型,空间分别降低为原来的1/2和1/4。能够显著降低硬件需求。
  • 8bit的量化模型相原始float16的模型,效果近乎无损,4bit的量化模型,大概下降2个点左右。
  • Chat模型相比Base模型在指标上有所下降,我们认为是符合预期的,SFT阶段我们更加重视指令遵循能力和内容生成方面的能力。
  • 我们也对量化版本的Chat模型进行对话人工评测,结论与评测基准类似。

使用量化模请参考上面的Chat模型使用方法的示例代码。

开源金融数据集

本次开源高质量中文金融数据集FinCorpus,语料大小约60G,主要构成如下:

文件名数据类别大小
announcement_data.jsonl上市公司公告20G
fin_news_data.jsonl金融资讯/新闻30G
fin_articles_data.jsonl金融资讯/新闻10G
fin_exam.jsonl金融试题370M

数据格式:

{
  "text": <文本内容>,
  "meta": {
     "source": <数据来源>
  }
}

轩辕-176B:首个千亿级中文金融对话模型

XuanYuan: A Large Chinese Financial Chat Model with Hundreds of Billions Parameters

1. 模型简介

轩辕是国内首个开源的千亿级中文对话大模型,同时也是首个针对中文金融领域优化的千亿级开源对话大模型。轩辕在BLOOM-176B的基础上针对中文通用领域和金融领域进行了针对性的预训练与微调,它不仅可以应对通用领域的问题,也可以解答与金融相关的各类问题,为用户提供准确、全面的金融信息和建议。

2. 模型下载

千亿级的轩辕模型已可以在Huggingface中申请下载。

3. 模型评测

3.1. 金融领域效果评测

为了深入评估轩辕对话大模型在金融领域的专业性,我们构建了一套针对金融领域的详细评测体系。该评测体系涉及金融名词理解、金融市场评论、金融数据分析和金融新闻理解等四大领域,从多角度全面考察模型的金融处理能力。评测结果表明,轩辕在主流的四种开源大模型的比较中,赢得了150次回答中63.33%的胜率,凸显出其在金融领域的显著优势。

f119d2cf76493fc383aef1e45

点击显示轩辕回答示例

3.2. 通用领域效果评测

除了在金融领域的突出表现,轩辕还在通用处理能力方面表现优秀。我们利用由200道多元化问题构成的通用评测集,对轩辕在数学计算、场景写作、逻辑推理、文本摘要等13个主要维度的表现进行了评估,并将其与ChatGPT进行了对比。结果显示,轩辕在这个评测集上,有71%的问题表现不亚于ChatGPT,验证了其全方面能力。

9038f05c34b82b3eae00603f6

4. 相关论文

如果有用到轩辕相关方法和模型,请引用以下论文:

XuanYuan 2.0: A Large Chinese Financial Chat Model with Hundreds of Billions Parameters

Self-QA: Unsupervised Knowledge Guided Language Model Alignment

CGCE: A Chinese Generative Chat Evaluation Benchmark for General and Financial Domains

5.使用说明

本模型推荐运行在8卡A100 GPU或同等配置下以获得最佳性能。

可以通过以下代码调用本模型:

from transformers import AutoTokenizer, AutoModel
tokenizer = AutoTokenizer.from_pretrained("MODEL_NAME", trust_remote_code=True)
model = AutoModel.from_pretrained("MODEL_NAME", trust_remote_code=True)

【热门问题】如何调用轩辕模型?

由于本模型较大并不支持线上API测试,请下载模型后使用transformers库的AutoTokenizer和AutoModel进行调用。 轩辕对话模型的输入示例:

BOS_TOKEN + "Human: " + query + "\n\nAssistant: "

轩辕对话模型的生成示例:

output = model.generate(**input, do_sample=True, temperature=0.8, top_k=50, top_p=0.9, early_stopping=True, repetition_penalty=1.1, min_new_tokens=1, max_new_tokens=256)

免责声明与许可协议

对于轩辕模型生成的言论,我们不承担任何责任。使用者在将轩辕模型时,需要自行承担潜在的风险,并始终保持审慎。我们建议用户在使用模型输出的信息时,进行独立的验证和判断,并根据个人的需求和情境进行决策。我们希望通过轩辕的开源发布,为学术界和工业界提供一个有益的工具,并推动对话系统和金融技术的发展。 我们鼓励大家积极探索和创新,以进一步拓展和应用轩辕的潜力,并共同促进人工智能在金融领域的研究和实践。

总结

我们鼓励使用者在相关工作中引用轩辕,以促进知识的交流和分享,并推动中文金融对话系统的发展。轩辕的发布将为金融领域的应用和研究提供强大的支持,并为中文金融对话系统的发展做出重要贡献。我们期待看到更多的创新和应用,以提升金融服务和用户体验,并进一步推动人工智能技术在金融领域的发展。


发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注