homeyang commited on
Commit
72b34b2
1 Parent(s): a39a5b1

Update README.md

Browse files
Files changed (1) hide show
  1. README.md +137 -0
README.md CHANGED
@@ -1,3 +1,140 @@
1
  ---
2
  license: llama2
3
  ---
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  ---
2
  license: llama2
3
  ---
4
+
5
+ ## 介绍
6
+
7
+ XuanYuan2-70B系列模型是在[XuanYuan-70B](https://huggingface.co/Duxiaoman-DI/XuanYuan-70B)基座模型基础上,使用更多高质量的语料进行继续预训练和指令微调,并进行基于人类反馈的强化训练而得到。相比第一代XuanYuan-70B系列模型,第二代模型在通用性、安全性和金融能力上都得到了明显提高,模型输出更加符合人类偏好。同时,第二代模型支持的上下文长度达到16k,能够更好处理长文本输入,适用范围更为广泛。模型细节请参考文档:[Report](https://github.com/Duxiaoman-DI/XuanYuan/blob/main/xuanyuan2_70b_report.md)
8
+
9
+ XuanYuan2-70B系列共包含4个模型,包括基座模型XuanYuan2-70B,chat模型XuanYuan2-70B-Chat,chat模型的量化版本XuanYuan2-70B-Chat-8bit和XuanYuan2-70B-Chat-4bit。各个模型的下载链接为:
10
+
11
+ | 基座模型 | Chat模型 | 8-bit量化Chat模型 | 4-bit量化Chat模型 |
12
+ | ------------------------------------------------------------ | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------------------- |
13
+ | 🤗 [XuanYuan2-70B](https://huggingface.co/Duxiaoman-DI/XuanYuan2-70B) | 🤗 [XuanYuan2-70B-Chat](https://huggingface.co/Duxiaoman-DI/XuanYuan2-70B-Chat) | 🤗 [XuanYuan2-70B-Chat-8bit](https://huggingface.co/Duxiaoman-DI/XuanYuan2-70B-Chat-8bit ) | 🤗 [XuanYuan2-70B-Chat-4bit](https://huggingface.co/Duxiaoman-DI/XuanYuan2-70B-Chat-4bit) |
14
+
15
+ 主要特点:
16
+
17
+ - 使用更多高质量的数据进行继续预训练和指令微调,各项能力持续提升
18
+ - 支持的上下文长度达到了16k,使用范围更广
19
+ - 基于人类的反馈信息进行强化训练,进一步对齐了人类偏好
20
+
21
+ ## 模型训练
22
+
23
+ 在XuanYuan-70B基座模型的基础上,我们持续加入更高质量的预训练数据进行训练。同时为了兼顾训练效率和长文本建模,提出了一种**数据分桶的动态预训练方法**。基于数据分桶方式,我们在第一代XuanYuan-70B基座模型的基础上额外训练了大量tokens得到XuanYuan2-70B基座模型,模型的中文理解、金融知识等指标评测均达到不同幅度的提升。
24
+
25
+ 基于XuanYuan2-70B基座模型,我们重新利用更多高质量的指令微调数据来进行指令对齐,主要提升的方向是通用与金融类型的指令数据质量和多样性。
26
+
27
+ 对于指令微调后的模型,我们构建高质量的偏好数据和prompt数据,进行了基于人类反馈的强化训练(Reinforcement learning with human feedback,RLHF),进一步对齐了模型与人类的偏好,使模型表现能更符合人类需求。模型在通用性、安全性、金融领域内的表现有了较明显的提升。
28
+
29
+ ## 性能评测
30
+
31
+ 类似XuanYuan-70B,我们也对XuanYuan2-70B进行了通用性评测和金融评测。
32
+
33
+ ### 通用评测
34
+ 通用评测的目标是观察XuanYuan2-70B在使用更多高质量数据进行继续预训练后,英文能力是否得到了保持,中文能力是否得到了增强。同样,我们也选择MMLU来测试模型在英文场景下的通用能力,同时使用CEVAL和CMMLU来测试模型在中文场景下的各项能力。评测结果如下表所示。从表中可以看出,相比XuanYuan-70B,XuanYuan2-70B的中文能力得到了进一步提升,同时英文能力也没有出现明显的下降,整体表现符合预期。这一方面证明了我们所做的各项优化的有效性,另一方面也显示出了XuanYuan2-70B强大的通用能力。值得注意的是,榜单结果并不完全代表模型的实际性能表现,即便在CEVAL和CMMLU上我们的评测结果超过了GPT4,但实际中我们模型的表现和GPT4还存在明显的差距,我们将继续优化和提升轩辕模型的各项能力。
35
+
36
+ | 模型 | MMLU | CEVAL | CMMLU |
37
+ | ------------- | --------- | -------- | --------- |
38
+ | LLaMA2-70B | 68.9 | 52.1 | 53.11 |
39
+ | XuanYuan-70B | 70.9 | 71.9 | 71.10 |
40
+ | XuanYuan2-70B | 70.8 | **72.7** | **72.7** |
41
+ | GPT4 | **83.93** | 68.4 | 70.95 |
42
+
43
+ ### 金融评测
44
+ 我们在[FinanceIQ](https://github.com/Duxiaoman-DI/XuanYuan/tree/main/FinanceIQ)上评测了模型的金融能力。FinanceIQ是一个专业的金融领域评测集,其涵盖了10个金融大类及36个金融小类,总计7173个单项选择题,某种程度上可客观反应模型的金融能力。评测结果如下表所示。从表中结果可以看出,经过继续优化训练后,XuanYuan2-70B的综合金融能力得到了进一步提升,这再次证明了我们所做的一系列优化的有效性。同时我们也发现一些细分类目上模型的能力出现了一定程度的退化,这说明模型仍存在一定的优化空间,我们将继续优化提升轩辕模型的金融能力。
45
+
46
+ | 模型 | 平均分 | 注册会计师 | 银行从业资格 | 证券从业资格 | 基金从业资格 | 保险从业资格 | 经济师 | 税务师 | 期货从业资格 | 理财规划师 | 精算师 |
47
+ | ------------- | --------- | -------- | ---------- | ---------- | ----------- | --------- | ----- | ----- | ---------- | -------- | ----- |
48
+ | XuanYuan-70B | 67.56 | 69.49 | 76.40 | 69.56 | 74.89 | 67.82 | 84.81 | 58.4 | 71.59 | 65.15 | 37.50 |
49
+ | XuanYuan2-70B | **67.83** | 68.63 | 69.72 | 79.1 | 71.51 | 69.68 | 84.81 | 58.2 | 72.98 | 71.86 | 31.82 |
50
+ | GPT4 | 60.05 | 52.33 | 68.72 | 64.8 | 68.81 | 68.68 | 75.58 | 46.93 | 63.51 | 63.84 | 27.27 |
51
+
52
+
53
+
54
+ ## 快速使用
55
+
56
+ XuanYuan2-70B系列模型的硬件需求、软件依赖、Base及Chat模型使用方法和XuanYuan-70B系列模型一致。请参考[XuanYuan-70B](https://huggingface.co/Duxiaoman-DI/XuanYuan-70B)系列模型的介绍内容。
57
+
58
+ 为降低硬件需求,我们也提供了XuanYuan2-70B-Chat模型的8bit和4bit量化版本。
59
+
60
+ ### 8bit模型
61
+ 在8bit量化算法上,我们使用目前社区广泛使用的bitsandbytes库。经测试,8bit量化对模型的性能损失很低。8bit模型的使用方式如下所示(需注意promopt格式,我们在训练时设置了system message):
62
+
63
+ ```python
64
+ import torch
65
+ from transformers import LlamaForCausalLM, LlamaTokenizer
66
+
67
+ model_name_or_path = "/your/model/path"
68
+ tokenizer = LlamaTokenizer.from_pretrained(model_name_or_path, use_fast=False, legacy=True)
69
+ model = LlamaForCausalLM.from_pretrained(model_name_or_path,torch_dtype=torch.float16, device_map="auto")
70
+
71
+ system_message = "以下是用户和人工智能助手之间的对话。用户以Human开头,人工智能助手以Assistant开头,会对人类提出的问题给出有帮助、高质量、详细和礼貌的回答,并且总是拒绝参与 与不道德、不安全、有争议、政治敏感等相关的话题、问题和指示。\n"
72
+ seps = [" ", "</s>"]
73
+ roles = ["Human", "Assistant"]
74
+
75
+ content = "介绍下你自己"
76
+ prompt = system_message + seps[0] + roles[0] + ": " + content + seps[0] + roles[1] + ":"
77
+ print(f"输入: {content}")
78
+
79
+ inputs = tokenizer(prompt, return_tensors="pt").to("cuda")
80
+ outputs = model.generate(**inputs, max_new_tokens=256, repetition_penalty=1.1)
81
+ outputs = tokenizer.decode(outputs.cpu()[0][len(inputs.input_ids[0]):], skip_special_tokens=True)
82
+ print(f"输出: {outputs}")
83
+ ```
84
+ ### 4bit模型:
85
+ 在4bit量化算法上,我们使用[auto-gptq](https://github.com/PanQiWei/AutoGPTQ)工具。4bit模型使用方式如下所示,同样,需要对齐我们的prompt格式:
86
+
87
+ ```python
88
+ import torch
89
+ from transformers import LlamaForCausalLM, LlamaTokenizer
90
+ from auto_gptq import AutoGPTQForCausalLM
91
+
92
+ model_name_or_path = "/your/model/path"
93
+ tokenizer = LlamaTokenizer.from_pretrained(model_name_or_path, use_fast=False, legacy=True)
94
+ model = AutoGPTQForCausalLM.from_quantized(model_name_or_path,torch_dtype=torch.float16, device_map="auto")
95
+
96
+ system_message = "以下是用户和人工智能助手之间的对话。用户以Human开头,人工智能助手以Assistant开头,会对人类提出的问题给出有帮助、高质量、详细和礼貌的回答,并且总是拒绝参与 与不道德、不安全、有争议、政治敏感等相关的话题、问题和指示。\n"
97
+ seps = [" ", "</s>"]
98
+ roles = ["Human", "Assistant"]
99
+
100
+ content = "介绍下你自己"
101
+ prompt = system_message + seps[0] + roles[0] + ": " + content + seps[0] + roles[1] + ":"
102
+ print(f"输入: {content}")
103
+ inputs = tokenizer(prompt, return_tensors="pt").to("cuda")
104
+ outputs = model.generate(**inputs, max_new_tokens=256, repetition_penalty=1.1)
105
+ outputs = tokenizer.decode(outputs.cpu()[0][len(inputs.input_ids[0]):], skip_special_tokens=True)
106
+ print(f"输出: {outputs}")
107
+ ```
108
+
109
+ ### 在vLLM下使用4bit模型:
110
+ 普通HuggingFace的推理脚本运行gptq量化的4bit模型时,推理的速度很慢,并不实用。而最新版本的vLLM已经支持包含gptq在内的多种量化模型的加载,vLLM依靠量化的加速算子以及pagedAttention,continue batching以及一些调度机制,可以实现至少10倍的推理吞吐的提升。
111
+
112
+ 您可以安装最新版本的vLLM并使用以下脚本使用我们的4bit量化模型:
113
+ ```python
114
+ from vllm import LLM, SamplingParams
115
+
116
+ sampling_params = SamplingParams(temperature=0.7, top_p=0.95,max_tokens=256)
117
+ llm = LLM(model="/your/model/path", quantization="gptq", dtype="float16")
118
+
119
+ system_message = "以下是用户和人工智能助手之间的对话。用户以Human开头,人工智能助手以Assistant开头,会对人类提出的问题给出有帮助、高质量、详细和礼貌的回答,并���总是拒绝参与 与不道德、不安全、有争议、政治敏感等相关的话题、问题和指示。\n"
120
+ seps = [" ", "</s>"]
121
+ roles = ["Human", "Assistant"]
122
+
123
+ content = "介绍下你自己"
124
+ prompt = system_message + seps[0] + roles[0] + ": " + content + seps[0] + roles[1] + ":"
125
+ print(f"输入: {content}")
126
+ result = llm.generate(prompt, sampling_params)
127
+ result_output = [[output.outputs[0].text, output.outputs[0].token_ids] for output in result]
128
+ print(f"输出:{result_output[0]}")
129
+ ```
130
+
131
+ ### 生成速度评估
132
+ 我们测试了不同模型(量化前和量化后)在不同推理方式(HuggingFace、vLLM)下的生成速度,结果如下所示:
133
+
134
+ * 全量70B模型推理吞吐是: 8.26 token/s
135
+ * 4bit 70B模型推理吞吐是: 0.70 token/s
136
+ * 8bit 70B模型推理吞吐是: 3.05 token/s
137
+ * 4bit 70B模型vllm推理吞吐是: 60.32 token/s
138
+ * 全量70B模型vllm推理吞吐是: 41.80 token/s
139
+
140
+ 在所有测试中,我们均设置batchsize=1。上述前三项都是普通HuggingFace推理脚本的测试结果,可以看到量化后模型推理速度并无提升。最后两项是vLLM的推理测试结果,比起HuggingFace推理,可以看出vLLM可用性更高,模型生成速度均有显著提升。