🤗 Hugging Face | 🤖 ModelScope | 📑 论文 | 🖥️ 演示
介绍
通义千问-72B(Qwen-72B)是阿里云研发的通义千问大模型系列中参数规模为 720 亿的模型。Qwen-72B 是基于 Transformer 的大语言模型,在超大规模的预训练数据上进行训练得到。预训练数据类型多样,覆盖广泛,包括大量网络文本、专业书籍、代码等。同时,在 Qwen-72B 的基础上,我们使用对齐机制打造了基于大语言模型的 AI 助手 Qwen-72B-Chat。
通义千问-72B(Qwen-72B)主要有以下特点:
- 大规模高质量训练语料:使用超过 3 万亿 tokens 的数据进行预训练,包含高质量中、英、多语言、代码、数学等数据,涵盖通用及专业领域的训练语料。通过大量对比实验对预训练语料分布进行了优化。
- 强大的性能:Qwen-72B 在多个中英文下游评测任务上(涵盖常识推理、代码、数学、翻译等),效果显著超越现有的开源模型。
- 覆盖更全面的词表:相比目前以中英词表为主的开源模型,Qwen-72B 使用了约 15 万大小的词表。该词表对多语言更加友好,方便用户在不扩展词表的情况下对部分语种进行能力增强和扩展。
- 较长的上下文支持:Qwen-72B 支持 32k 的上下文长度。
模型细节
Qwen-72B 模型规模基本情况如下所示:
| Hyperparameter | Value |
|---|---|
| n_layers | 80 |
| n_heads | 64 |
| d_model | 8192 |
| vocab size | 151851 |
| sequence length | 32768 |
在位置编码、FFN 激活函数和 normalization 的实现方式上,我们也采用了目前最流行的做法,即 RoPE 相对位置编码、SwiGLU 激活函数、RMSNorm(可选安装 flash-attention 加速)。
Tokenizer
基于 tiktoken 的分词器有别于其他分词器,比如 sentencepiece 分词器。尤其在微调阶段,需要特别注意特殊 token 的使用。
在分词器方面,相比目前主流开源模型以中英词表为主,Qwen-72B 使用了超过 15 万 token 大小的词表。该词表在 GPT-4 使用的 BPE 词表 cl100k_base 基础上,对中文、多语言进行了优化,在对中、英、代码数据的高效编解码的基础上,对部分多语言更加友好,方便用户在不扩展词表的情况下对部分语种进行能力增强。词表对数字按单个数字位切分。调用较为高效的 tiktoken 分词库进行分词。
我们从部分语种各随机抽取 100 万个文档语料,以对比不同模型的编码压缩率(以支持 100 语种的 XLM-R 为基准值 1,越低越好)。可以看到 Qwen-72B 在保持中英代码高效解码的前提下,对部分使用人群较多的语种(泰语 th、希伯来语 he、阿拉伯语 ar、韩语 ko、越南语 vi、日语 ja、土耳其语 tr、印尼语 id、波兰语 pl、俄语 ru、荷兰语 nl、葡萄牙语 pt、意大利语 it、德语 de、西班牙语 es、法语 fr 等)上也实现了较高的压缩率,使得模型在这些语种上也具备较强的可扩展性和较高的训练和推理效率。
在预训练数据方面,Qwen-72B 模型一方面利用了部分开源通用语料,另一方面也积累了海量全网语料以及高质量文本内容,去重及过滤后的语料超过 3T tokens。囊括全网文本、百科、书籍、代码、数学及各个领域垂类。
评测效果
我们选取了 MMLU,C-Eval,GSM8K, MATH, HumanEval, MBPP, BBH, CMMLU 等目前较流行的 benchmark,对模型的中英知识能力、翻译、数学推理、代码等能力进行综合评测。Qwen-72B 模型在所有 benchmark 上均取得了开源模型中的最优表现。
| 模型 | 平均 | MMLU (5-shot) | C-Eval (5-shot) | GSM8K (8-shot) | MATH (4-shot) | HumanEval (0-shot) | MBPP (3-shot) | BBH (3-shot) | AGIEval (0-shot) | GaokaoBench (0-shot) | CMMLU (5-shot) |
|---|---|---|---|---|---|---|---|---|---|---|---|
| LLaMA2-7B | 24.4 | 46.8 | 32.5 | 16.7 | 3.3 | 12.8 | 20.8 | 38.2 | 21.8 | 18.9 | 31.8 |
| LLaMA2-13B | 31.3 | 55.0 | 41.4 | 29.6 | 5.0 | 18.9 | 30.3 | 45.6 | 30.9 | 18.2 | 38.4 |
| LLaMA2-70B | 45.7 | 69.7 | 50.1 | 63.5 | 12.0 | 26.2 | 39.6 | 64.9 | 54.2 | 23.3 | 53.6 |
| InternLM-20B | 47.2 | 62.1 | 58.8 | 52.6 | 7.9 | 25.6 | 35.6 | 52.5 | 59.0 | 59.0 | 59.0 |
| Yi-34B | 58.0 | 76.3 | 81.8 | 67.9 | 15.9 | 26.2 | 38.2 | 66.4 | 56.5 | 68.3 | 82.6 |
| XVERSE-65B | - | 70.8 | 68.6 | 60.3 | - | 26.3 | - | - | - | - | - |
| Qwen-7B | 46.2 | 58.2 | 63.5 | 51.7 | 11.6 | 29.9 | 31.6 | 45.0 | 45.3 | 62.5 | 62.2 |
| Qwen-14B | 52.7 | 66.3 | 72.1 | 61.3 | 24.8 | 32.3 | 40.8 | 53.4 | 51.9 | 52.7 | 71.0 |
| Qwen-72B | 66.4 | 77.4 | 83.3 | 78.9 | 35.2 | 35.4 | 52.2 | 67.7 | 62.5 | 87.6 | 83.6 |
长序列评测
Qwen-72B 采用扩展 RoPE base 的训练方法,支持 32k 的外推长度,我们使用 arXiv 数据进行语言建模评测,PPL(越低越好)结果如下:
| 模型 | 8192 | 16384 | 32768 |
|---|---|---|---|
| Qwen-72B | 2.828 | 2.734 | 2.717 |
快速使用
python
from modelscope import AutoModelForCausalLM, AutoTokenizer
from transformers.generation import GenerationConfig
tokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen-72B", trust_remote_code=True)
use bf16
model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen-72B", device_map="auto", trust_remote_code=True, bf16=True).eval()
use fp16
model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen-72B", device_map="auto", trust_remote_code=True, fp16=True).eval()
use cpu only
model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen-72B", device_map="cpu", trust_remote_code=True).eval()
use auto mode, automatically select precision based on the device.
model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen-72B", device_map="auto", trust_remote_code=True).eval()
inputs = tokenizer('蒙古国的首都是乌兰巴托(Ulaanbaatar)\n冰岛的首都是雷克雅未克(Reykjavik)\n埃塞俄比亚的首都是', return_tensors='pt')
inputs = inputs.to(model.device)
pred = model.generate(inputs)
print(tokenizer.decode(pred.cpu()[0], skip_special_tokens=True))
蒙古国的首都是乌兰巴托(Ulaanbaatar)
冰岛的首都是雷克雅未克(Reykjavik)
埃塞俄比亚的首都是亚的斯亚贝巴(Addis Ababa)...
要求
- python 3.8 及以上版本
- pytorch 1.12 及以上版本,推荐 2.0 及以上版本
- 建议使用 CUDA 11.4 及以上
- 运行 BF16/FP16 模型需要至少 144GB 显存(如 2xA100-80G 或 5xV100-32G)
- 运行 Int4 模型至少需要 48GB 显存(如 1xA100-80G 或 2xV100-32G)
依赖项
bash
pip install transformers==4.32.0 accelerate tiktoken einops scipy transformers_stream_generator==0.0.4 peft deepspeed
另外,推荐安装 flash-attention 库(当前已支持 flash attention 2),以实现更高的效率和更低的显存占用。
引用
bibtex
@article{qwen,
title={Qwen Technical Report},
author={Jinze Bai and Shuai Bai and Yunfei Chu and Zeyu Cui and Kai Dang and Xiaodong Deng and Yang Fan and Wenbin Ge and Yu Han and Fei Huang and Binyuan Hui and Luo Ji and Mei Li and Junyang Lin and Runji Lin and Dayiheng Liu and Gao Liu and Chengqiang Lu and Keming Lu and Jianxin Ma and Rui Men and Xingzhang Ren and Xuancheng Ren and Chuanqi Tan and Sinan Tan and Jianhong Tu and Peng Wang and Shijie Wang and Wei Wang and Shengguang Wu and Benfeng Xu and Jin Xu and An Yang and Hao Yang and Jian Yang and Shusheng Yang and Yang Yao and Bowen Yu and Hongyi Yuan and Zheng Yuan and Jianwei Zhang and Xingxuan Zhang and Yichang Zhang and Zhenru Zhang and Chang Zhou and Jingren Zhou and Xiaohuan Zhou and Tianhang Zhu},
journal={arXiv preprint arXiv:2309.16609},
year={2023}
}