通义千问-7B:大模型系列中的70亿参数规模AI助手

通义千问11mos agoupdate lida
203 0 0

文章标签:通义千问-7B(Qwen-7B),阿里云,大模型,Transformer,预训练数据,自建大规模预训练数据集,语言模型,预训练语料,优秀模型性能,自然语言理解与生成,数学运算解题,代码生成,常识推理,翻译,多语言,词表,8K上下文长度,插件调用,预训练语言模型,Untied Embedding,RoPE,RMSNorm,SwiGLU,Flash Attention

blog地址:https://github.com/QwenLM/Qwen-7B/blob/main/tech_memo.md 北方的郎:通义千问开源大模型Qwen-7B技术报告

code地址:https://github.com/QwenLM/Qwen-7B https://github.com/QwenLM/Qwen-7B/blob/main/README_CN.md https://github.com/Dao-AILab/flash-attention

模型下载Hugging Face:Qwen/Qwen-7B · Hugging Face https://huggingface.co/Qwen/Qwen-7B-Chat

魔搭展示ModelScope:直接在modelscope平台使用Qwen-7B-Chat模型创空间链接::Qwen-7B-Chat-Demo==https://modelscope.cn/studios/qwen/Qwen-7B-Chat-Demo/summary

魔搭ModelScope: https://modelscope.cn/models/qwen/Qwen-7B/summary—-https://modelscope.cn/models/qwen/Qwen-7B-Chat/summary

魔搭modelscope: https://github.com/modelscope/m 视频:阿里云宣布开源通义千问70亿参数大模型,将对国内大模型行业产生哪些影响?

无需环境配置-阿里通义千问-7B-Chat本地一键体验无需环境配置,通义千问-7B-Chat本地一键体验—- DragGAN Windows离线整合包B站介绍:https://www.bilibili.com/video/BV1fP411v77Y—-https://github.com/search?q=DragGAN&type=repositories—-基于https://github.com/XingangPan/DragGAN####GitHub – zhaoyun0071/DragGAN-Windows-GUI—-软件下载方式(仅支持Windows 10、Windows 11) (1)百度网盘链接:https://pan.baidu.com/s/1AIVBa6FLu1IH0Saxs7mHMg 提取码:qba7 (2)天翼网盘链接:https://cloud.189.cn/t/u6r2EnJR3qMn (访问码:iv5c) (3)夸克网盘链接:https://pan.quark.cn/s/273be7b9add4 提取码:yrCu

0 介绍优势

通义千问-7B(Qwen-7B)是阿里巴巴云计算平台研发的通义千问大模型系列中的一个成员,其拥有700亿个参数规模。作为一个基于Transformer的大语言模型,Qwen-7B是在大量的预训练数据上进行训练而得到的,这些数据类型丰富,覆盖面广,包括网络文本、专业书籍以及代码等等。基于Qwen-7B的大语言模型,我们还打造出了一个名为Qwen-7B-Chat的AI助手,它采用了对齐机制来构建。Qwen-7B系列模型具有以下几个显著的特点:

在本研究中,我们采用了自建的大规模预训练数据集,其包含超过2.2万亿个token,以对语言模型进行预训练。该预训练数据集的上下文长度为2048,涵盖了多种数据类型,包括文本、代码以及数学等,从而确保了其能够充分覆盖通用领域和专业领域。此外,我们的数据集中还包含了高质量的中、英、多语言版本,以便更好地满足不同用户的需求。为了优化预训练语料的分布,我们进行了大量的对比实验。

在对比同规模的开源模型时,Qwen-7B的表现卓越,其性能在多个评测数据集上都展现出明显的优势,甚至超过了规模更大的12-13B模型。这种卓越的性能表现不仅体现在自然语言理解和生成的能力上,也体现在数学运算解题、代码生成、常识推理以及翻译等方面。这使得Qwen-7B成为了一款兼具广泛应用潜力和出色性能的的人工智能助手。

在提升对多语言的支持度方面,基于更大词表的分词器展现出了更高的效率,与此同时,其对于其他语言的表现也更为友好。这使得用户能够更便捷地在Qwen-7B的基础之上,针对特定的语言进行7B语言模型的训练。此外,Qwen-7B所使用的词表覆盖范围也更全面,相较于目前主要针对中英语言的词表,其词表规模扩大了约15万,从而使得词表对多语言的支持更为友好,为用户提供了在不扩展词表的前提下,对部分语种进行能力增强和扩展的可能性。

Qwen-7B和Qwen-7B-Chat两款工具都具备强大的上下文长度支持,达到了8K的长度限制,为用户提供更为丰富的输入空间,使得用户可以输入更长的提示信息。

Qwen-7B-Chat是一款针对插件调用的特殊优化工具,能够有效地支持插件的调用和升级为Agent。通过对插件调用相关数据的特定优化,该模型可以实现高效、稳定的插件调用,并且能够顺利地升级为Agent,从而为用户提供更加优质的服务。

1 模型结构-基本信息

QWen-7B是一款基于Transformer的预训练语言模型,其结构设计与LLaMA类似。在预训练过程中,该模型利用了源自公共数据集超过2.2万亿个token以及2048个上下文长度的信息,涵盖了普通和专业领域的广泛语言场景,尤其注重英语和中文的语言处理。QWen-7B在结构上与标准Transformer存在一些显著的区别。首先,它采用了 untied embedding 嵌入方式,而非传统的 tied embedding。其次,QWen-7B引入了旋转位置嵌入(RoPE)技术,这是一种相对于位置的编码方式。第三,QWen-7B使用了RMSNorm替代LayerNorm来实现归一化。第四,FFN激活函数被取代了ReLU,变成了SwiGLU。最后,在注意力机制中,除了QKV之外,其它部分都消除了bias,采用了flash attention加速训练的方式。这款模型的深度为32层,每个嵌入维度的值为4096,注意力头的数量为32。

#

Qwen-7B-Chat是一款人工智能助手,它能够通过对齐机制进行微调,从而更好地理解和满足人类的需求。这种调整不仅适用于面向特定任务的数据,还可以应用于那些以安全和服务为目标的数据。

2 数据

Pretraining data:预训练数据包括来自公开来源的混合数据,主要由网络文档和代码文件组成。此外,这些数据是多语种的,其中大部分是英文和中文。我们努力并采用了一系列模型-以排除低质量或不适合预训练的数据-如 NSFW 内容,最终数据经过了全局模糊重复数据删除。通过多次消减实验我们优化了预训练语料的组合。一方面利用了部分开源通用语料, 另一方面也积累了海量全网语料以及高质量文本内容,去重及过滤后的语料超过2.2T tokens。 囊括全网文本、百科、书籍、代码、数学及各个领域垂类。

Tokenization:与目前主流的基于中英文词库的开放模型相比,我们使用了 151,851 个词库。它首先考虑了中、英、code数据的高效编码,同时对多语言也更加友好,用户可以在不扩充词汇量的情况下直接增强某些语言的能力。它按个位数分割数字,并调用 tiktoken tokenizer 库进行高效的标记化。tokenize后的数据超过 2.2 万亿个token。—-我们随机选取了每种语言的100万文档语料库来测试和比较不同模型的编码压缩率(以支持 100 种语言的 XLM-R 为基值 1,图中未显示)。可以看出Qwen-7B在确保对中文、英文和代码进行高效解码的同时,还对其他多种语言(如 th、he、ar、ko、vi、ja、tr、id、pl、ru、nl、pt、it、de、es、fr 等)实现了较高的压缩率,使模型在这些语言中具有较强的可扩展性以及较高的训练和推理效率。

在分词器方面,相比目前主流开源模型以中英词表为主,Qwen-7B使用了超过15万token大小的词表。 该词表在GPT-4使用的BPE词表cl100k_base基础上,对中文、多语言进行了优化,在对中、英、代码数据的高效编解码的基础上,对部分多语言更加友好,方便用户在不扩展词表的情况下对部分语种进行能力增强。 词表对数字按单个数字位切分。调用较为高效的tiktoken分词库进行分词。—-从部分语种各随机抽取100万个文档语料,以对比不同模型的编码压缩率(以支持100语种的XLM-R为基准值1,越低越好)。可以看到Qwen-7B在保持中英代码高效解码的前提下,对部分使用人群较多的语种(泰语th、希伯来语he、阿拉伯语ar、韩语ko、越南语vi、日语ja、土耳其语tr、印尼语id、波兰语pl、俄语ru、荷兰语nl、葡萄牙语pt、意大利语it、德语de、西班牙语es、法语fr等)上也实现了较高的压缩率,使得模型在这些语种上也具备较强的可扩展性和较高的训练和推理效率。

通义千问-7B:大模型系列中的70亿参数规模AI助手

3 模型训练细节

使用AdamW优化器训练模型, β1=0.9,β2=0.95,ϵ=10−6\beta_1=0.9,\beta_2 = 0.95,\epsilon=10^{-6}

,,,,序列长度为2048,批大小batch_size是2048,意味着每次优化步骤累积超过400万个tokens。采用余弦学习率scheduler,预热2000步,峰值学习率为3e-4,及峰值学习率的10%的最小学习率-最小值为峰值的10%,使用0.1的权重衰减和1.0的梯度裁剪参数。训练采用bfloat16混合精度训练。

通义千问-7B:大模型系列中的70亿参数规模AI助手

4 模型评估

Qwen-7B在多个全面评估自然语言理解与生成、数学运算解题、代码生成等能力的评测数据集上,包括MMLU、C-Eval、GSM8K、HumanEval、WMT22等,均超出了同规模大语言模型的表现,甚至超出了如12-13B参数等更大规模的语言模型。提示:由于硬件和框架造成的舍入误差,复现结果如有波动属于正常现象。。

通义千问-7B:大模型系列中的70亿参数规模AI助手

对于数学能力和代码能力,也分别在GSM8K和HumanEval数据集上做了评估。效果分别如下:

通义千问-7B:大模型系列中的70亿参数规模AI助手

Qwen-7B-Chat

通义千问-7B:大模型系列中的70亿参数规模AI助手

长文本理解评测(Long-Context Understanding)

我们引入了NTK插值、窗口注意力、LogN注意力缩放 等技术来提升模型的上下文长度并突破训练序列长度的限制,将模型的上下文长度扩展到8K以上。。通过arXiv数据集上使用PPL指标测试的语言模型实验,我们发现Qwen-7B能够在长序列的设置下取得不错的表现。(若要启用NTK和LogN注意力缩放,请将config.json里的use_dynamc_ntk和use_logn_attn设置为true)

通义千问-7B:大模型系列中的70亿参数规模AI助手

我们在arXiv上使用ntk-aware插值、LogN注意力缩放和局部窗口注意力实现了无需训练的长上下文推理支持。上下文长度可以从2048扩展到超过8192。以下是以困惑度(PPL)为指标的测试结果。

在长文本摘要数据集VCSUM上(文本平均长度在15K左右),Qwen-7B-Chat的Rouge-L结果如下:

通义千问-7B:大模型系列中的70亿参数规模AI助手

编码

Qwen-7B-Chat在HumanEval上的zero-shot Pass@1如下所示。

ModelPass@1LLaMA2-7B-Chat12.2InternLM-7B-Chat14.0Baichuan-13B-Chat16.5LLaMA2-13B-Chat18.9Qwen-7B-Chat21.3

5 快速使用

在开始前,请确保你已经配置好环境并安装好相关的代码包。最重要的是,确保你的pytorch版本高于1.12,然后安装相关的依赖库-执行以下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 .
pip install csrc/layer_norm
pip install csrc/rotary

使用Qwen-7B进行推理

from transformers import AutoModelForCausalLM, AutoTokenizer
from transformers.generation import GenerationConfig

tokenizer = AutoTokenizer.from_pretrained(“Qwen/Qwen-7B”, trust_remote_code=True)
## 打开bf16精度,A100、H100、RTX3060、RTX3070等显卡建议启用以节省显存
# model = AutoModelForCausalLM.from_pretrained(“Qwen/Qwen-7B”, device_map=”auto”, trust_remote_code=True, bf16=True).eval()
## 打开fp16精度,V100、P100、T4等显卡建议启用以节省显存
# model = AutoModelForCausalLM.from_pretrained(“Qwen/Qwen-7B”, device_map=”auto”, trust_remote_code=True, fp16=True).eval()
# 默认使用fp32精度
model = AutoModelForCausalLM.from_pretrained(“Qwen/Qwen-7B”, device_map=”auto”, trust_remote_code=True).eval()
model.generation_config = GenerationConfig.from_pretrained(“Qwen/Qwen-7B”, trust_remote_code=True) # 可指定不同的生成长度、top_p等相关超参

inputs = tokenizer(蒙古国的首都是乌兰巴托(Ulaanbaatar)\n冰岛的首都是雷克雅未克(Reykjavik)\n埃塞俄比亚的首都是, return_tensors=pt)
inputs = inputs.to(cuda:0)

pred = model.generate(**inputs)
print(tokenizer.decode(pred.cpu()[0], skip_special_tokens=True))
# 蒙古国的首都是乌兰巴托(Ulaanbaatar)\n冰岛的首都是雷克雅未克(Reykjavik)\n埃塞俄比亚的首都是亚的斯亚贝巴(Addis Ababa)…

使用Qwen-7B-chat进行推理

from transformers import AutoModelForCausalLM, AutoTokenizer
from transformers.generation import GenerationConfig

tokenizer = AutoTokenizer.from_pretrained(“Qwen/Qwen-7B-Chat”, trust_remote_code=True)
## 打开bf16精度,A100、H100、RTX3060、RTX3070等显卡建议启用以节省显存
# model = AutoModelForCausalLM.from_pretrained(“Qwen/Qwen-7B-Chat”, device_map=”auto”, trust_remote_code=True, bf16=True).eval()
## 打开fp16精度,V100、P100、T4等显卡建议启用以节省显存
# model = AutoModelForCausalLM.from_pretrained(“Qwen/Qwen-7B-Chat”, device_map=”auto”, trust_remote_code=True, fp16=True).eval()
# 默认使用fp32精度
model = AutoModelForCausalLM.from_pretrained(“Qwen/Qwen-7B-Chat”, device_map=”auto”, trust_remote_code=True).eval()
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)
# 《奋斗创业:一个年轻人的成功之路》

量化(Quantization)

QWen-7B模型默认精度是bfloat16,这种情况下显存开销是16.2G。同时官方提供了更低精度的量化模型Int8和NF4,按照上述两种精度量化后,模型的现存开销分别是10.1G和7.4G。当然量化意味着模型效果的损失。可以让我们将模型量化成NF4和Int8精度的模型进行读取,帮助我们节省显存开销。我们也提供了相关性能数据。我们发现尽管模型在效果上存在损失,但模型的显存开销大幅降低。

在开始前,确保你已经安装了bitsandbytes。你只需要在AutoModelForCausalLM.from_pretrained中添加你的量化配置,即可使用量化模型。

PrecisionMMLUMemoryBF1656.716.2GInt852.810.1GNF448.97.4G

插件调用 工具调用Tool Usage外部系统集成-能力的评测–LLM在协调多个外部系统以实现给定指令方面展示了能力,这为传统在线服务带来了新机遇,最引人注目的是网络搜索。

Qwen-7B-Chat经过针对API、数据库、模型等工具的优化,使得用户可以开发基于Qwen-7B的LangChain、Agent甚至Code Interpreter等应用。在即将开源的内部评测数据集上测试了Qwen-7B-Chat的工具调用能力,发现其表现稳定可靠。

通义千问-7B:大模型系列中的70亿参数规模AI助手

评测基准中出现的插件均没有出现在千问的训练集中。该基准评估了模型在多个候选插件中选择正确插件的准确率、传入插件的参数的合理性、以及假阳率。假阳率(False Positive)定义:在处理不该调用插件的请求时,错误地调用了插件。

自己部署的Qwen-7B-Chat,可以支持通过ReAct Prompting调用插件/工具/API,这样模型能完成更复杂和特定的任务。比如可以通过调用插件使用夸克搜索和文生图等功能。具体实现方法可以参考这里。。–ReAct也是 LangChain框架采用的主要方式之一。在即将开源的、用于评估工具使用能力的自建评测基准上,千问的表现如上:关于ReAct Prompting的prompt提示怎么写、怎么使用,请参考ReAct 样例说明。使用工具能使模型更好地完成任务。

Huggingface Agent

此外,实验结果还显示了模型在扮演Agent角色方面的能力,具备作为 HuggingFace Agent 的能力。有关更多信息,请查阅相关文档链接。在Hugging Face提供的run模式评测基准数据集上,在工具选择、工具使用和代码方面表现如下:

通义千问-7B:大模型系列中的70亿参数规模AI助手

评测复现(Reproduction)

我们提供了评测脚本以供复现我们的实验结果,详见链接。注意,由于内部代码和开源代码存在少许差异,评测结果可能与汇报结果存在细微的结果不一致。请阅读eval/EVALUATION.md了解更多信息。由于硬件和框架造成的舍入误差,复现结果如有小幅波动属于正常现象。

####

6 微调finetune

通义千问7B模型开源,魔搭最佳实践来了—-ModelScope小助理:通义千问7B模型开源,魔搭最佳实践来了

开源代码:https://github.com/modelscope/swift/blob/main/examples/pytorch/llm/llm_sft.py
git clone swift后,运行sft代码:
##获取示例代码
git clone https://github.com/modelscope/swift.git
cd swift/examples/pytorch/llm
# sft
bash run_sft.sh
####
####
运行infer脚本:代码链接:https://github.com/modelscope/swift/blob/main/examples/pytorch/llm/llm_infer.py
# infer
bash run_infer.sh
通义千问-7B:大模型系列中的70亿参数规模AI助手

红雨瓢泼:通义千问Qwen-7B效果如何?Firefly微调实践,效果出色

#

参考文献:

阿里云通义千问开源!70亿参数模型上线魔搭社区,免费可商用_央广网

阿里云宣布开源通义千问70亿参数大模型,将对国内大模型行业产生哪些影响?

#

莫笑傅立叶:[LLM] QWen-7b 通义千问开源啦 莫笑傅立叶:[LLM结构对比] Llama/Llama2/ChatGLM/ChatGLM2/Baichuan/QWen

北方的郎:通义千问开源大模型Qwen-7B技术报告

#

通义千问-7B(Qwen-7B),阿里云,大模型,Transformer,预训练数据,自建大规模预训练数据集,语言模型,预训练语料,优秀模型性能,自然语言理解与生成,数学运算解题,代码生成,常识推理,翻译,多语言,词表,8K上下文长度,插件调用,预训练语言模型,Untied Embedding,RoPE,RMSNorm,SwiGLU,Flash Attention

© Copyright notes

Related posts

No comments

No comments...