OpenAI的AGI(通用人工智能)路线图:
L1:聊天机器人,具有对话能力的AI。
L2:推理者,像人类一样能够解决问题的AI。
L3:智能体,不仅能思考,还可以采取行动的AI系统。
L4:创新者,能够协助发明创造的AI。
L5:组织者,可以完成组织工作的AI。
当前 GPT-4 这类模型的智能所处的阶段可能类似于一个高中生,或者刚上大学的本科生的水平;18 个月之后,他们希望GPT-5达到博士生的水平,这中间可能还有哪些方面需要突破呢?
规划的能力、深度推理能力,面对一个很复杂的任务,模型需要首先把它拆分成若干个子问题,每一个子问题可能还需要联网、需要计算、需要判断,然后再串行起来,这样已经非常像人在解决一个复杂问题时的表现。这些背后我们看到的是,OpenAI 如何把模型能力跟人类解决复杂问题的分析、推理工作相结合,这也体现了 OpenAI 现在思考的一些问题的方向。
在资源相对有限的情况下,怎么预判,比如说数据分布是怎么样的,MoE 的专家数怎么设置,激活参数怎么设置,包括路由,每一个 token 到底路由到哪个专家,怎么样才是合理的,这个事情很复杂,可能中间我们要考虑的因素有大几十个,这种情况下,不可能一次做一个实验,用很多卡去做,时间也来不及。
一定是先在很小的模型上,比如刚开始可能是 10M,然后 30M,1B、3B,这样一些不同 size 的模型上探索,最后预测出来我们要做一个万亿的 MoE 怎么样选择中间的设置,以及预测最后训练了多少 token,我们的 lost 会收敛到什么样的点,这样的一个过程,就是我们在探索 MoE 的 Scaling Law。
现实来讲,做大模型就是一个在约束条件下怎么样高效地把工程、算法、数据以及业务应用整个串联起来的工作,它对组织能力的要求是非常高的。
dense 模型,参数的选择、激活函数的选择,包括 tokenizer 等等,要做的实验会比 MoE 少很多。因为 MoE 有很多个专家,每层的专家数量是否相同也不确定,激活个数也不一定每层都是一样的。
今时今日和去年相比,你会看到今年小的模型要比去年的一些大模型要好,为什么?数据是很重要的原因。在很多公司里,数据是一条研发线,数据质量持续提升,数据的分布足够多,数据的配比足够好之后,即便是一个小的模型,什么都不干,可能在新的数据集上训练出来的效果,也会比去年一个相对更大的模型要好。
是增大资源、增加数据,这样做效率很低的。在实践中,我们看到的是数据变得更好了,模型的算法做了一些优化之后,它能够带来的价值是更大的,然后再配合上 Scaling Law,整个的发展就会非常好。
越往上层的专家彼此间的差异性越大,就像人一样,最上面毕竟是要干交付的,工种还是不一样的,有的比较擅长数学,有的比较擅长英语,但底层的这些,可能相对来讲更多学习到一些语言的表征、语法等等这样一些比较粗的特征。
接下来 MoE 需要优化和提升的地方还有很多,其中有一点,MoE 存在训练效率的问题,它比 dense 模型训练效率的提升要难很多。理论上讲也是这样的,MoE 有很多个专家,专家数相对来说越多越好,但是我们又希望模型要高效,高效的话每次就只能激活少量的专家,只激活少量专家的话,算力利用率就不会很高,这样在整个过程中,计算和通信之间的配比如何设置,才能让训练更加高效,这里面就有很多的讲究,比如说怎么样在保证效果的情况下,让训练变得更快,比如说 batch size 变得更大,但是 batch size 变大后梯度同步就会变少,效果就会变差,这种情况下怎么办。
我们最近在元宝上跟《长相思》合作,有一个相柳 AI bot,我看到我们的用户每天跟它交流有高达几千轮的,那这几千轮下来,用户会觉得已经把相柳 bot 变成自己心目中的相柳了,希望它能记住所有的对话,但这对技术要求是极其高的,怎么样在每一次回复的时候,让模型能把之前几千轮的内容自动从里边筛选出来,然后回复跟这次相关的一些东西。
输入是文本、图片、视频、音频,输出也是这样的 4 种模态。
但不管是 OpenAI 还是 Google,现在对视频生成这块还是用相对独立的 model 去演进和发展。
我们认为未来一定会走向一个统一的 model,但还需要一定的时间,包括是基于 diffusion 还是说基于自回归的 model,现在图像和视频生成领域可能 diffusion 的多一点,尤其在工业界,但是学术上也有全自回归的 model,各有优劣,我觉得还是需要一定的时间去验证它的效果和利弊。
到底基于自回归还是 diffusion,未来终局怎么样等等,这些地方我的看法是,它们本身不能孤立去看,算法怎么样、模型怎么样,一定要跟工程、平台一起去看。
很多的业务其实已经不再只是把混元大模型用来解决单点的业务需求,不是像去年或者更早的时候,需要做一个摘要、做一个总结这样的单点,现在更多是全链路的一些接入。
比如腾讯广告的场景,从去写一个广告开始,到审核、入库、对用户的理解,再到在线广告的匹配,整个广告体系里所有能够使用大模型去提高效果的、提升效率的,比如说通过妙思平台的文生图功能,让广告主创作广告时有更多的创意,创造出的广告更加适合最后用户的体验等等,它是一个全链路接入混元的过程。
第一,我们做大模型的目的是什么?就是为了一个模型去解决很多不同的问题,通用性很重要。因此,很多需求默认是首先去看通用的 API 能不能解决问题,当你模型足够好的时候,绝大部分的问题是能直接解决的。这样相对来讲,绝大部分需求用 API 就直接搞定了。
模型当前阶段在很多的垂直业务场景还没有那么好,公司业务的团队,拿到这些模型之后,可以针对业务场景做一些自己的精调,之后很快就满足业务需求了。比较少的情况是还需要下沉到预训练去做一些优化,大部分是 post-training 阶段做一些优化后,这些数据很快就会在独立的垂直业务场景满足业务需求了,业务那边很快就能上线了。
但事情并没有结束,这部分独立的优化数据,我们在征得业务场景同意,进行相关处理,比如去掉敏感信息之后,会把这些数据反哺到我们底座的模型。因为我们的底座模型有一个周期性迭代的节奏,在下一个版本,甚至下下个版本,我们整个底座就会很好地支持这个垂直场景的需求,那么这个垂直场景就不需要专门的优化了,专门的模型都不需要了。
解决方案有时候太多了,怎么去从中选择,聚焦到最后决策,这个时候是需要内部充分讨论,甚至经常有一些比较激烈的争论,这都是很正常的,最后确实直觉很重要,但这个直觉怎么来呢?我觉得一定是有过往的经历。我为什么说 knowhow 很重要,因为只有刚开始做过那些觉得很傻的一些事情之后,你才能知道怎么去训练一个千亿模型,你只有做了没有那么干净的数据才知道,不干净的数据到底会带来什么,所以这个过程很重要。
当前我们在做大模型的过程中,有很多地方需要去提效的,比如我遇到 bad case,不可能所有的 bad case 全部都人标,第一耗时耗力,其次有很多问题,比如说 AI 搜索,标注本身就会非常难,你怎么办?
这一类问题的解决上,制造工具很重要,怎么样让模型自动地去评价我们自己的模型好不好,这些能力我们叫 critic model(评价模型)
训练一个万亿的 MoE 模型,怎么样能让训练的过程变得更加稳定,很多时候是整个基础设施的团队密切配合,像我们公司服务器的团队,针对我们的算力需求重新做了设计,服务器也是自研的。第二个星脉 2.0 高速互联的网络,也是为大模型定制的,非常好的网络设备,包括整个的解决方案。还有我们的 AngelPTM 训练框架,这三者是非常好地紧密在协作。
整个集群在运维层面,从卡到网络,再到运行过程中所有网络的通信拥塞,包括说资源利用率,甚至最早的时候也发生过因为利用率过高,使得整个卡的温度太高而发生问题等等。我们去年是做了大量的基础设施和运维能力方面的工作,因为出现故障是不可避免的,我们要提前做好预测和防范,现在我们已经可以做到通过对网络流量的监控,预判是否有一些卡出现拥塞,包括对卡的温度做监控等等,提前预判它是否有可能会出问题。
最后,出了故障,这是很正常的,我们过往也出过故障,因为本身 AI 芯片就有一定的坏卡率,包括说网络设备,上万张卡总有坏的时候,那坏了之后,第一个怎么能快速地定位是哪张卡出了问题,然后快速把它踢掉,再快速重新拉起训练服务,这过程中涉及到比如怎么样快速把 checkpoint 写到磁盘上,再重新 load 进来,这个过程如果是两个小时和五分钟,那是有天壤之别,等等这些问题吧。做过大规模集群管理的团队,应该都是有相关经验的。
至于训练过程中模型的鲁棒性,我们过往也确实发现一些问题,就是你发现流程都没有问题,但最后突然模型到某一个阶段的时候效果不好,这就很麻烦,所有地方都没发现错误,最后出错了,怎么去找问题?我们去年就遇到过这个问题,最后定位是在某一张卡的某一个时间,它的梯度出现了溢出。
于是,我们就把这些东西全部做到监控里,对这种梯度、范围、阈值等等做了很多监控,然后我们还定期有 checkpoint,每隔一定的训练时间之后有一个固定的 checkpoint,每一个 checkpoint 要去走我们标准的测试流程,保证比如每训练 200B、300B 之后,模型是否还在正常运行。基本上我们内部会去看标准的 benchmark 上的一些指标,比如说 MMLU、MATH、HumanEval 这种常规的,当然也会有我们自建的很多 benchmark 去评估。
模型怎样可以足够快,模型结构 Transformer 是否就是终局了,我们还有更好的模型架构吗?
包括幻觉的问题,现在其实并没有被很好地解决,还有模型的评价问题,长窗口的问题,现在很多还是用所谓大海捞针的方法,但当用户真正用的时候,对长窗口的要求是更高的,等等这些都值得学术界、研究机构和我们一起研究和探索
我们正在做并且非常看好的一件事是构建异构卡的集群,用不同厂家的卡,以及同一个厂家不同算力单位的卡、不同型号的卡,能不能在一起训练同一个任务?
这个潜力是非常大的,背后需要几方面的工作,首先一定要有统一的卡间互联、机间互联的解决方案,这一块正好腾讯有星脉高性能计算网络 2.0,不同的卡都可以用同样的互联协议联起来,性能也很好。
第二点,也很有挑战的,不同的卡之间怎么样去训练同一个任务,这件事本身在以前是没有遇到过的,现在一定要做,主要还是解决两个核心问题,第一个是不同卡需要统一的编译环境,这样代码才是统一的,不然英伟达的卡或者各种国产的卡,各家对编程接口的要求是不一样的,在腾讯内部是有一个叫 ABO 的统一编译层去适配不同的编译和接口。
第三点更为关键,不同的卡算力不一样,过往的机器学习训练,尽管我们有 5 种并行策略,但卡是一样的,训练框架写起来就比较简单,但现在高算力的卡和低算力的卡放在一起,我们就需要把 5D 并行的策略本身,基于卡的算力水平以及训练任务的特点,比如说模型并行和数据并行应该怎么样区分,序列并行、流水线并行和专家并行怎么样根据现在的资源情况自动化设计好,能让大家相对不要等待,这是非常核心也是非常有挑战的,也是我们 AngelPTM 训练框架正在做的。
大模型整个过程,链条还是很长的,越是底层的变化,对上层的影响越大,所以不管哪一家,对芯片级别的变化都是慎之又慎。我们可能有一个新的卡,它的能力很强,但这张卡本身的生态链、运营运维体系,还需要花很多时间适应,把整体契合起来,需要一定的时间。
我们现在在看另外一件事,叫训推一体化。当前推理确实在不停地上量,提升速度也很快,但推理本身对资源的要求没有那么高,为什么?因为我们有很多的方法,把一个模型在推理的时候让它变得更小,一个推理的实例需要多台机器互联的需求是比较小的,这样就会大大降低新卡或者异构卡本身出问题对整个平台的影响,所以我们认为推理对大规模互联这方面的风险,容忍度就会更高一些。
另外,当前核心的矛盾还是在训练,大规模的训练,万卡、甚至数万卡训练一个更大的模型,还是一个核心的矛盾。但资源又是有限的,所以我们内部使用一种叫做潮汐调度的方法,比如说白天的量很大,需要很多的推理卡,但晚上量小了,就通过太极平台,把这些卡晚上调度给训练去用,提高卡的利用率。