模型简介
模型特点
模型能力
使用案例
🚀 通义千问-7B-Chat(Qwen-7B-Chat)
通义千问-7B-Chat 是基于阿里云研发的通义千问大模型系列中70亿参数规模的Qwen-7B模型,使用对齐机制打造的基于大语言模型的AI助手。它在多种权威任务评测中表现出色,还具备较强的外部系统调用能力。
Qwen-7B 🤖 | 🤗  | Qwen-7B-Chat 🤖 | 🤗  |  Demo  |  Report
🚀 快速开始
要求
- python 3.8及以上版本
- pytorch 1.12及以上版本,推荐2.0及以上版本
- 建议使用CUDA 11.4及以上(GPU用户、flash-attention用户等需考虑此选项)
依赖项
运行Qwen-7B-Chat,请确保满足上述要求,再执行以下pip命令安装依赖库:
pip install transformers==4.31.0 accelerate tiktoken einops
另外,推荐安装flash-attention
库,以实现更高的效率和更低的显存占用:
git clone -b v1.0.8 https://github.com/Dao-AILab/flash-attention
cd flash-attention && pip install .
# 下方安装可选,安装可能比较缓慢。
# Below are optional. Installing them might be slow.
pip install csrc/layer_norm
pip install csrc/rotary
快速使用示例
下面展示了一个使用Qwen-7B-Chat模型,进行多轮对话交互的样例:
from transformers import AutoModelForCausalLM, AutoTokenizer
from transformers.generation import GenerationConfig
# Note: The default behavior now has injection attack prevention off.
tokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen-7B-Chat", trust_remote_code=True)
# use bf16
# model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen-7B-Chat", device_map="auto", trust_remote_code=True, bf16=True).eval()
# use fp16
# model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen-7B-Chat", device_map="auto", trust_remote_code=True, fp16=True).eval()
# use cpu only
# model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen-7B-Chat", device_map="cpu", trust_remote_code=True).eval()
# use auto mode, automatically select precision based on the device.
model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen-7B-Chat", device_map="auto", trust_remote_code=True).eval()
# Specify hyperparameters for generation
model.generation_config = GenerationConfig.from_pretrained("Qwen/Qwen-7B-Chat", trust_remote_code=True) # 可指定不同的生成长度、top_p等相关超参
# 第一轮对话 1st dialogue turn
response, history = model.chat(tokenizer, "你好", history=None)
print(response)
# 你好!很高兴为你提供帮助。
# 第二轮对话 2nd dialogue turn
response, history = model.chat(tokenizer, "给我讲一个年轻人奋斗创业最终取得成功的故事。", history=history)
print(response)
# 这是一个关于一个年轻人奋斗创业最终取得成功的故事。
# 故事的主人公叫李明,他来自一个普通的家庭,父母都是普通的工人。从小,李明就立下了一个目标:要成为一名成功的企业家。
# 为了实现这个目标,李明勤奋学习,考上了大学。在大学期间,他积极参加各种创业比赛,获得了不少奖项。他还利用课余时间去实习,积累了宝贵的经验。
# 毕业后,李明决定开始自己的创业之路。他开始寻找投资机会,但多次都被拒绝了。然而,他并没有放弃。他继续努力,不断改进自己的创业计划,并寻找新的投资机会。
# 最终,李明成功地获得了一笔投资,开始了自己的创业之路。他成立了一家科技公司,专注于开发新型软件。在他的领导下,公司迅速发展起来,成为了一家成功的科技企业。
# 李明的成功并不是偶然的。他勤奋、坚韧、勇于冒险,不断学习和改进自己。他的成功也证明了,只要努力奋斗,任何人都有可能取得成功。
# 第三轮对话 3rd dialogue turn
response, history = model.chat(tokenizer, "给这个故事起一个标题", history=history)
print(response)
# 《奋斗创业:一个年轻人的成功之路》
关于更多的使用说明,请参考我们的Github repo获取更多信息。
✨ 主要特性
- 强大的语言理解能力:在中文理解(C-Eval)、英文理解(MMLU)等权威任务评测中表现出色。
- 优秀的代码和数学能力:在代码(HumanEval)和数学(GSM8K)等任务中展现出较高的准确率。
- 长序列处理能力:通过NTK插值和LogN注意力缩放,可扩展上下文长度,在长文本摘要数据集上有良好表现。
- 工具使用能力:支持通过ReAct Prompting调用插件/工具/API,在工具使用能力评测中表现优异。
📚 详细文档
Tokenizer
注:作为术语的“tokenization”在中文中尚无共识的概念对应,本文档采用英文表达以利说明。
基于tiktoken的分词器有别于其他分词器,比如sentencepiece分词器。尤其在微调阶段,需要特别注意特殊token的使用。关于tokenizer的更多信息,以及微调时涉及的相关使用,请参阅文档。
模型细节
与Qwen-7B预训练模型相同,Qwen-7B-Chat模型规模基本情况如下所示:
属性 | 详情 |
---|---|
n_layers | 32 |
n_heads | 32 |
d_model | 4096 |
词表大小 | 151851 |
序列长度 | 2048 |
在位置编码、FFN激活函数和normalization的实现方式上,采用了目前最流行的做法,即RoPE相对位置编码、SwiGLU激活函数、RMSNorm(可选安装flash-attention加速)。
在分词器方面,相比目前主流开源模型以中英词表为主,Qwen-7B-Chat使用了约15万token大小的词表。该词表在GPT-4使用的BPE词表cl100k_base
基础上,对中文、多语言进行了优化,在对中、英、代码数据的高效编解码的基础上,对部分多语言更加友好,方便用户在不扩展词表的情况下对部分语种进行能力增强。词表对数字按单个数字位切分,调用较为高效的tiktoken分词库进行分词。
🔧 技术细节
评测效果
对于Qwen-7B-Chat模型,评测了常规的中文理解(C-Eval)、英文理解(MMLU)、代码(HumanEval)和数学(GSM8K)等权威任务,同时包含了长序列任务的评测结果。由于Qwen-7B-Chat模型经过对齐后,激发了较强的外部系统调用能力,还进行了工具使用能力方面的评测。
提示:由于硬件和框架造成的舍入误差,复现结果如有波动属于正常现象。
中文评测(C-Eval)
在C-Eval验证集上,Qwen-7B-Chat模型的zero-shot准确率如下:
Model | Avg. Acc. |
---|---|
LLaMA2-7B-Chat | 31.9 |
LLaMA2-13B-Chat | 40.6 |
Chinese-Alpaca-2-7B | 41.3 |
Chinese-Alpaca-Plus-13B | 43.3 |
Baichuan-13B-Chat | 50.4 |
ChatGLM2-6B-Chat | 50.7 |
InternLM-7B-Chat | 53.2 |
Qwen-7B-Chat | 54.2 |
C-Eval测试集上,Qwen-7B-Chat模型的zero-shot准确率结果如下:
Model | Avg. | STEM | Social Sciences | Humanities | Others |
---|---|---|---|---|---|
Chinese-Alpaca-Plus-13B | 41.5 | 36.6 | 49.7 | 43.1 | 41.2 |
Chinese-Alpaca-2-7B | 40.3 | - | - | - | - |
ChatGLM2-6B-Chat | 50.1 | 46.4 | 60.4 | 50.6 | 46.9 |
Baichuan-13B-Chat | 51.5 | 43.7 | 64.6 | 56.2 | 49.2 |
Qwen-7B-Chat | 54.6 | 47.8 | 67.6 | 59.3 | 50.6 |
在7B规模模型上,经过人类指令对齐的Qwen-7B-Chat模型,准确率在同类相近规模模型中仍然处于前列。
英文评测(MMLU)
MMLU评测集上,Qwen-7B-Chat模型的zero-shot准确率如下,效果同样在同类对齐模型中同样表现较优:
Model | Avg. Acc. |
---|---|
ChatGLM2-6B-Chat | 45.5 |
LLaMA2-7B-Chat | 47.0 |
InternLM-7B-Chat | 50.8 |
Baichuan-13B-Chat | 52.1 |
ChatGLM2-12B-Chat | 52.1 |
Qwen-7B-Chat | 53.9 |
代码评测(Coding Evaluation)
Qwen-7B-Chat在HumanEval的zero-shot Pass@1效果如下:
Model | Pass@1 |
---|---|
LLaMA2-7B-Chat | 12.2 |
InternLM-7B-Chat | 14.0 |
Baichuan-13B-Chat | 16.5 |
LLaMA2-13B-Chat | 18.9 |
Qwen-7B-Chat | 24.4 |
数学评测
在评测数学能力的GSM8K上,Qwen-7B-Chat的准确率结果如下:
Model | Zero-shot Acc. | 4-shot Acc. |
---|---|---|
ChatGLM2-6B-Chat | - | 28.0 |
LLaMA2-7B-Chat | 20.4 | 28.2 |
LLaMA2-13B-Chat | 29.4 | 36.7 |
InternLM-7B-Chat | 32.6 | 34.5 |
Baichuan-13B-Chat | - | 36.3 |
ChatGLM2-12B-Chat | - | 38.1 |
Qwen-7B-Chat | 41.1 | 43.5 |
长序列评测(Long-Context Understanding)
通过NTK插值,LogN注意力缩放可以扩展Qwen-7B-Chat的上下文长度。在长文本摘要数据集VCSUM上(文本平均长度在15K左右),Qwen-7B-Chat的Rouge-L结果如下:
(若要启用这些技巧,请将config.json里的use_dynamc_ntk
和use_logn_attn
设置为true)
Model | VCSUM (zh) |
---|---|
GPT-3.5-Turbo-16k | 16.0 |
LLama2-7B-Chat | 0.2 |
InternLM-7B-Chat | 13.0 |
ChatGLM2-6B-Chat | 16.3 |
Qwen-7B-Chat | 16.6 |
工具使用能力的评测(Tool Usage)
ReAct Prompting
千问支持通过 ReAct Prompting 调用插件/工具/API。ReAct 也是 LangChain 框架采用的主要方式之一。在我们开源的、用于评估工具使用能力的评测基准上,千问的表现如下:
Model | Tool Selection (Acc.↑) | Tool Input (Rouge-L↑) | False Positive Error↓ |
---|---|---|---|
GPT-4 | 95% | 0.90 | 15% |
GPT-3.5 | 85% | 0.88 | 75% |
Qwen-7B-Chat | 99% | 0.89 | 9.7% |
评测基准中出现的插件均没有出现在千问的训练集中。该基准评估了模型在多个候选插件中选择正确插件的准确率、传入插件的参数的合理性、以及假阳率。假阳率(False Positive)定义:在处理不该调用插件的请求时,错误地调用了插件。
关于 ReAct Prompting 的 prompt 怎么写、怎么使用,请参考 ReAct 样例说明。使用工具能使模型更好地完成任务。基于千问的工具使用能力,能实现下图所展示的效果:
Huggingface Agent
千问还具备作为 HuggingFace Agent 的能力。它在 Huggingface 提供的run模式评测基准上的表现如下:
Model | Tool Selection↑ | Tool Used↑ | Code↑ |
---|---|---|---|
GPT-4 | 100 | 100 | 97.41 |
GPT-3.5 | 95.37 | 96.30 | 87.04 |
StarCoder-15.5B | 87.04 | 87.96 | 68.89 |
Qwen-7B | 90.74 | 92.59 | 74.07 |
量化
如希望使用更低精度的量化模型,如4比特和8比特的模型,我们提供了简单的示例来说明如何快速使用量化模型。在开始前,确保你已经安装了bitsandbytes
。请注意,bitsandbytes
的安装要求是:
**Requirements** Python >=3.8. Linux distribution (Ubuntu, MacOS, etc.) + CUDA > 10.0.
Windows用户需安装特定版本的bitsandbytes
,可选项包括bitsandbytes-windows-webui。
你只需要在AutoModelForCausalLM.from_pretrained
中添加你的量化配置,即可使用量化模型。如下所示:
from transformers import AutoModelForCausalLM, BitsAndBytesConfig
# quantization configuration for NF4 (4 bits)
quantization_config = BitsAndBytesConfig(
load_in_4bit=True,
bnb_4bit_quant_type='nf4',
bnb_4bit_compute_dtype=torch.bfloat16
)
# quantization configuration for Int8 (8 bits)
quantization_config = BitsAndBytesConfig(load_in_8bit=True)
model = AutoModelForCausalLM.from_pretrained(
"Qwen/Qwen-7B-Chat",
device_map="cuda:0",
quantization_config=quantization_config,
max_memory=max_memory,
trust_remote_code=True,
).eval()
上述方法可以让我们将模型量化成NF4
和Int8
精度的模型进行读取,帮助我们节省显存开销。我们也提供了相关性能数据。我们发现尽管模型在效果上存在损失,但模型的显存开销大幅降低。
Precision | MMLU | Memory |
---|---|---|
BF16 | 56.7 | 16.2G |
Int8 | 52.8 | 10.1G |
NF4 | 48.9 | 7.4G |
📄 许可证
我们的代码和模型权重对学术研究完全开放,并支持商用。请查看LICENSE了解具体的开源协议细节。
📞 联系我们
如果你想给我们的研发团队和产品团队留言,请通过邮件(qianwen_opensource@alibabacloud.com)联系我们。



