微信扫码
添加专属顾问
我要投稿
“ 在当今的人工智能领域,开源基座大模型的角色日益重要 。本文会对主流开源大模型进行对比分析,并尝试探讨开源基座大模型选型的因素。给领域落地一些参考。”
Key Takeaways:
1、从数据、Tokenizer、模型架构对比不同qwen、deepseek、llama、yi等模型
2、尝试思考存在哪些开源大模型选型因素供读者参考
01
—
开源的时代
作为一线的开源模型追逐者,时刻关注着业内开源的一些模型以及做些尝试,昨天直接有 阿里云 和 GLM大模型 (刚发现文章被删除了)都发布了即将有新开源模型待发布,引起了不少的关注和评论,接这个机会刚好捋一下已有的开源模型情况,在新模型到来之际梳理一下开源大模型的不同内容,为后面更多新模型的出现做一些准备。
即本文对比的模型仅截至2024-06-01(因为估计下周就有qwen2啦)。后续新模型内容会更新至:
02
—
开源大模型对比之:Data&Tokenizer
对于开源大模型的数据和预处理来说,一般我们会关注如下的一些维度;
预训练数据:训练数据的数量、质量与多样性,是模型泛化能力的保障,唯有“吃得好”,模型方能“长得壮”;一般我们需要关注基座模型的数据量有几个T、数据来源、数据处理方式等;除了数据本身的处理之外,预训练的策略也很重要,arxiv/2309.14316 Physics of Language Models: Part 3.1, Knowledge Storage and Extraction这篇论文关于提升预训练基座模型效果中建议在预训练阶段就引入更多的指令微调数据,而不是将所有问答数据推迟到微调阶段。这有助于模型更有效地编码知识,能够获得更好的模型泛化能力。这个做法在Qwen技术报告中就有提及。
多语言支持:数据本身的训练语言决定了其所能投入使用的应用边界。对于我们来说,一般会考虑中文及多语言的应用场景效果
词表大小:模型的词汇表大小是其语言理解的基石,一个丰富的词汇库,会极大地扩展模型的表达能力,同时能减少推理时所需token数。
Tokenizer算法: 主流基本都采用BBPE,工具使用google的SentencePiece或Openai的tiktoken
BBPE算法介绍
基础知识:
Unicode: Unicode 是一种字符集,将世界上所有的符号都纳入其中。每一个符号都给予一个独一无二的编码, 但没有规定这个二进制代码应该如何存储。所以会有问题在,英文一般一个字节表示就够了,如果Unicode规定每个符号用三个字节,那英文会有2个字节浪费,所以会有很多二进制格式也就是字符存储规则来实现Unicode的存储,UTF-8就是其中一种。
UTF-8: UTF-8 是 Unicode 的一种实现方式 。可以使用1~4个字节表示一个符号,根据不同的符号而变化字节长度。英文字符一般占据1个字节(8 bit),中文一般占据3个字节(24 bit)。
由utf-8到unicode的过程为decode解码,由Unicode到utf-8的过程为encode编码。
实现简单的BBPE:
1、初始化词表:构建初始词表,包含一个字节的所有表示(256)。2、构建频率统计:统计所有子词单元对(两个连续的子词)在文本中的出现频率。3、合并频率最高的子词对:选择出现频率最高的子词对,将它们合并成一个新的子词单元,并更新词汇表。4、重复合并步骤:不断重复步骤 2 和步骤 3,直到达到预定的词汇表大小、合并次数,或者直到不再有有意义的合并。5、分词:使用最终得到的词汇表对文本进行分词。
既然是针对字节的BPE算法,就不会出现OOV问题,但会把不在词表中的一些中文切的非常碎,这样对于自回归生成任务来说是会非常影响效率的,所以一般我们需要去观察分析基座模型的词表大小。
最大训练长度:能处理的最大序列长度,直接关系到模型处理长文本的能力,对于需要处理长文本的任务尤为重要。
这里将Qwen、LlaMa、Baichuan、Deepseek、Yi等各参数的模型结果进行了对比汇总。
明细及后续更新见:
03
—
开源大模型对比之:Architecture
一、Transformer decoder整体结构如下,以LLaMa3-8B为例
二、模型架构的重要性
由于很多模型如qwen、llama、mistral、yi等开源基座都是相互借鉴,考虑到大模型的巨大预训练成本,大家基本都会采用类似的架构,真正能在架构上进行创新的公司,都会被大家所追捧点赞!比如LLaMa2 70B第一次使用GQA,Deepseek对MHA到MLA的改进
有篇研究大模型知识容量的论文arxiv/2404.05405 Physics of Language Models: Part 3.3, Knowledge Capacity Scaling Laws比较了GPT-2、LLaMA和Mistral等不同模型架构,发现在充分训练下,它们都接近于2比特/参数的容量比率。论文通过对比实验发现,在1000次曝光的条件下,所有模型(包括使用GatedMLP的LLaMA/Mistral和使用标准MLP的GPT-2)都能达到大约2比特/参数的知识存储比率。然而,在训练次数较少(如100次曝光)的情况下,GatedMLP的性能下降更为明显。进一步说明网络架构的重要性。
三、重要元素
对于开源大模型的架构来说,一般我们会关注如下的一些维度;
位置编码:
现在基本清一色的Rope了 ,建议查阅 https://kexue.fm/archives/8265
注意力机制:MHA、MQA、GQA、MLA
https://kexue.fm/archives/10091 从标准多头注意力到更大尺寸模型的GQA和MLA,这一部分基本是为了不丢效果情况下的性能优化
Pre-RMSNorm
Pre和Post的区别在于归一化是在残差之前还是在残差之后。
https://kexue.fm/archives/9009 中对pre推导发现pre其实是在增加模型的宽度,会损失效果,Post增加深度效果会更好。但《On Layer Normalization in the Transformer Architecture》这篇文章又显示了PreNorm更加容易训练。目前业内的各种模型如qwen、llama、mistral、deepseek等大厂又无一例外的都是PreRMSNorm,也很难得出结论说在更较大模型下的norm方式选择的差异性。所以这个问题上可以先了解其原理再观望分析看看。
RMSNorm移除了Mean的计算:
简化计算的同时减少了模型的计算量。
激活函数swiglu
Activation Function:这关系到模型对于信息的筛选,选择ReLU、GELU、Swish等不同的激活函数,会对模型产生不小影响。
import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import norm
def gelu(x):
return x * norm.cdf(x)
def relu(x):
return np.maximum(0, x)
def swish(x, beta=1):
return x * (1 / (1 + np.exp(-beta * x)))
x_values = np.linspace(-5, 5, 500)
gelu_values = gelu(x_values)
relu_values = relu(x_values)
swish_values = swish(x_values)
swish_values2 = swish(x_values, beta=0.5)
swish_values3 = swish(x_values, beta=1)
plt.plot(x_values, gelu_values, label='GELU')
plt.plot(x_values, relu_values, label='ReLU')
plt.plot(x_values, swish_values, label='Swish')
plt.plot(x_values, swish_values2, label='Swish (beta=0.5)')
plt.plot(x_values, swish_values3, label='Swish (beta=1)')
plt.title("GELU, ReLU, and Swish Activation Functions")
plt.xlabel("x")
plt.ylabel("Activation")
plt.grid()
plt.legend()
plt.show()
注意力隐藏层维度、全连接隐藏层维度 :
Intermediate Size:中间层的大小影响模型的学习和复杂度,一个恰到好处的中间层,能够使模型既不过于简单,也能较为高效。
Hidden size决定了模型内部表示的丰富程度。更大的hidden size可以捕获更复杂的特征和模式,但同时也会增加模型的参数量和计算负担。
这里将Qwen、LlaMa、Baichuan、Deepseek、Yi等各参数的模型结果进行了对比汇总。
明细及后续更新见:
04
—
开源大模型对比之:领域落地选型因素
一、Base版本、Instruct版本和Chat版本的不同
base版本只是做了next token prediction的预测,相当于纯粹是学习下一个词。instruct会遵循特定的指令,代表听话能力。chat版本会对齐helpful、harmnless、honest, 会有alignment tax问题。为什么会有对齐税的问题呢,个人浅显理解为这几个本身是会冲突的,有用的东西可能会有害,这其中的边界无法完全界定开,如果涉及到不同政治立场,可能更会对知识本身的纯粹性施加影响。所以这种对齐会影响到大模型本身的知识体系是不难理解的,只不过大家都在优化对齐技术,确保这种影响更小,或者提供一些instruct的版本供一些落地文本任务使用。
另一方面,chat版本大部分都会做多轮对话,所以对于很多的上下文问题如指代消解,信息省略等场景chat版本应该会处理的更好,如果期望构建类似的agent或者多轮对话场景,这无疑是个比较好的选型。
二、领域落地选型的探讨
大致理了一些选型因素如下:
特定领域的适应性:模型需要能够适应专业领域的数据。直接关系到模型在特定任务上的表现,是选型时的首要考量。
成本效益分析:衡量模型训练与部署成本,以及预期回报。
部署成本 需要几张卡
比如moe虽然激活参数少, 但占用的显存可一点没少
社区与生态:充满活力的社区,成熟的生态系统,可以为模型使用者提供丰富的资源。
伦理与合规:确保模型选择和使用遵循伦理和法规,坚守道德高地。
基座本身 - 了解基座模型本身的网络设计
架构的领先和深度
基座本身 - 了解基座模型的预训练数据量是否 overtrainned
基座本身 - 看模型时效性和大厂背书
meta
mistral
baichuan
qwen
deepseek
基座本身 - 覆盖面:各个规模各个类型的都有。dense和moe都有
qwen
deepseek
效果指标 - 看相关榜单?相关榜单和指标能够直观地展示模型的性能,是评估模型效果的重要参考。
mmlu、math 分别对应文科任务 还是理科任务
大模型竞技场、lmsys排名
功能覆盖,包括上下文长度和是否支持tool调用等,功能覆盖的广度和深度影响模型的适用性。
看上下文长度
是否支持tool调用
任务匹配程度 - 看任务类型:
文本理解:比如分类匹配信息抽取,这些任务是相对确定性的,
文本生成?这些任务是不确定的
任务匹配程度 - 微调后在领域任务上的效果对比,需要进行实践
理解任务看F1
生成任务看 GPT4 win rate
性能指标 - 速度
是否满足实时处理需求
多语言和多模态
是否支持多种语言
是否支持多种模态
虽然写出了这么多条条框框,但实际去观察最新最热的模型来看一般都没啥问题,比如Meta的LLaMa3系列,Qwen的Qwen1.5全系列,包含qwen-vl和qwen-audio,都是活跃度很高很靠谱的选择。只是我们在选择的时候,需要较全面的盘点是否没有考虑到的地方,即这些选型因素可以没用,但不能没有。
By the way,是不是马上又可以换换qwen2-72b-instruct了。
05
—
总结
总而言之,选择合适的基座大模型绝非易事,它需要综合考量众多因素。但在深入理解各种模型及其特点后,每一位选择者都能够找到最适合自己的那把钥匙。希望本文能帮你更加了解不同的大模型,为您在选型之路上提供指引,让每一次的决策都成为成功的铺路石。
53AI,企业落地大模型首选服务商
产品:场景落地咨询+大模型应用平台+行业解决方案
承诺:免费场景POC验证,效果验证后签署服务协议。零风险落地应用大模型,已交付160+中大型企业
2025-04-18
“开源版coze”爆火,融资超 4.6 亿!如今 Docker 拉取量超 1 亿,斩获 77.5k star
2025-04-18
【开源看AI】GitDiagram:AI帮你理解任意代码库的架构
2025-04-18
The Second Half:一位 OpenAI 科学家的 AI 下半场启示录
2025-04-17
OpenAI Codex CLI: 终端中的智能编码助手
2025-04-17
无需运维!Dify+Ollama 点选式搭建DeepSeek大模型,太绝了!!!
2025-04-17
OpenAI发布o3与o4-mini,还开源两个项目
2025-04-17
OpenAI开源的Codex CLI是什么?
2025-04-17
社区供稿 | 3700 次预训练总结超参规律,开源海量实验,告别盲猜
2025-01-01
2024-07-25
2025-01-21
2024-05-06
2024-09-20
2024-07-20
2024-06-12
2024-07-11
2024-08-13
2024-12-26
2025-04-17
2025-04-15
2025-04-13
2025-04-10
2025-04-07
2025-04-03
2025-04-03
2025-04-03