作者: Ian Xu@Foresight Ventures
我们在讨论分布式算力在训练时的应用,一般聚焦在大语言模型的训练,主要原因是小模型的训练对算力的需求并不大,为了做分布式去搞数据隐私和一堆工程问题不划算,不如直接中心化解决。而大语言模型对算力的需求巨大,并且现在在爆发的最初阶段,2012-2018,AI 的计算需求大约每 4 个月就翻一倍,现在更是对算力需求的集中点,可以预判未来 5-8 年仍然会是巨大的增量需求。
在巨大机遇的同时,也需要清晰的看到问题。大家都知道场景很大,但是具体的挑战在哪里?谁能 target 这些问题而不是盲目入局,才是判断这个赛道优秀项目的核心。
(NVIDIA NeMo Megatron Framework)
以训练一个具有 1750 亿参数的大模型为例。由于模型规模巨大,需要在很多个 GPU 设备上进行并行训练。假设有一个中心化的机房,有 100 个 GPU,每个设备具有 32GB 的内存。
这个过程涉及到大量的数据传输和同步,这可能会成为训练效率的瓶颈。因此,优化网络带宽和延迟,以及使用高效的并行和同步策略,对于大规模模型训练非常重要。
需要注意的是,通信的瓶颈也是导致现在分布式算力网络做不了大语言模型训练的原因。
各个节点需要频繁地交换信息以协同工作,这就产生了通信开销。对于大语言模型,由于模型的参数数量巨大这个问题尤为严重。通信开销分这几个方面:
虽然有一些方法可以减少通信开销,比如参数和梯度的压缩、高效并行策略等,但是这些方法可能会引入额外的计算负担,或者对模型的训练效果产生负面影响。并且,这些方法也不能完全解决通信开销问题,特别是在网络条件差或计算节点之间的距离较大的情况下。
举一个例子:
去中心化分布式算力网络
GPT-3 模型有 1750 亿个参数,如果我们使用单精度浮点数(每个参数 4 字节)来表示这些参数,那存储这些参数就需要~700GB 的内存。而在分布式训练中,这些参数需要在各个计算节点之间频繁地传输和更新。
假设有 100 个计算节点,每个节点每个步骤都需要更新所有的参数,那么每个步骤都需要传输约 70TB(700GB*100)的数据。如果我们假设一个步骤需要 1s(非常乐观的假设),那么每秒钟就需要传输 70TB 的数据。这种对带宽的需求已经远超过了大多数网络,也是一个可行性的问题。
实际情况下,由于通信延迟和网络拥堵,数据传输的时间可能会远超 1s。这意味着计算节点可能需要花费大量的时间等待数据的传输,而不是进行实际的计算。这会大大降低训练的效率,而这种效率上的降低不是等一等就能解决的,而是可行和不可行的差别,会让整个训练过程不可行。
中心化机房
就算是在中心化的机房环境下,大模型的训练仍然需要很重的通信优化。
在中心化的机房环境中,高性能计算设备作为集群,通过高速网络进行连接来共享计算任务。然而,即使在这种高速网络环境中训练参数数量极大的模型,通信开销仍然是一个瓶颈,因为模型的参数和梯度需要在各计算设备之间进行频繁的传输和更新。
就像开始提到的,假设有 100 个计算节点,每个服务器具有 25Gbps 的网络带宽。如果每个服务器每个训练步骤都需要更新所有的参数,那每个训练步骤需要传输约 700GB 的数据需要~224 秒。通过中心化机房的优势,开发者可以在数据中心内部优化网络拓扑,并使用模型并行等技术,显著地减少这个时间。
相比之下,如果在一个分布式环境中进行相同的训练,假设还是 100 个计算节点,分布在全球各地,每个节点的网络带宽平均只有 1Gbps。在这种情况下,传输同样的 700GB 数据需要~5600 秒,比在中心化机房需要的时间长得多。并且,由于网络延迟和拥塞,实际所需的时间可能会更长。
不过相比于在分布式算力网络中的情况,优化中心化机房环境下的通信开销相对容易。因为在中心化的机房环境中,计算设备通常会连接到同一个高速网络,网络的带宽和延迟都相对较好。而在分布式算力网络中,计算节点可能分布在全球各地,网络条件可能会相对较差,这使得通信开销问题更为严重。
OpenAI 训练 GPT-3 的过程中采用了一种叫 Megatron 的模型并行框架来解决通信开销的问题。Megatron 通过将模型的参数分割并在多个 GPU 之间并行处理,每个设备只负责存储和更新一部分参数,从而减少每个设备需要处理的参数量,降低通信开销。同时,训练时也采用了高速的互连网络,并通过优化网络拓扑结构来减少通信路径长度。
(Data used to train LLM models)
要做也是能做的,但相比中心化的机房,这些优化的效果很受限。
几乎所有涉及数据处理和传输的环节都可能影响到数据安全和隐私:
对于数据隐私问题有哪些解决方案?
小结一下
以上每种方法都有其适应的场景和局限性,没有一种方法可以在分布式算力网络的大模型训练中完全解决数据隐私问题。
寄予厚望的 ZK 是否能解决大模型训练时的数据隐私问题?
理论上 ZKP 可以用于确保分布式计算中的数据隐私,让一个节点证明其已经按照规定进行了计算,但不需要透露实际的输入和输出数据。
但实际上将 ZKP 用于大规模分布式算力网络训练大模型的场景中面临以下瓶颈:
小结一下
要将 ZKP 用于大规模分布式算力网络训练大模型,还需要长达数年的研究和开发,同时也需要学术界有更多的精力和资源放在这个方向。
分布式算力另外一个比较大的场景在模型推理上,按照我们对于大模型发展路径的判断,模型训练的需求会在经过一个高点后随着大模型的成熟而逐步放缓,但模型的推理需求会相应地随着大模型和 AIGC 的成熟而指数级上升。
推理任务相较于训练任务,通常计算复杂度较低,数据交互性较弱,更适合在分布式环境中进行。
(Power LLM inference with NVIDIA Triton)
通信延迟:
在分布式环境中,节点间的通信是必不可少的。在去中心化的分布式算力网络中,节点可能遍布全球,因此网络延迟会是一个问题,特别是对于需要实时响应的推理任务。
模型部署和更新:
模型需要部署到各个节点上。如果模型进行了更新,那么每个节点都需要更新其模型,需要消耗大量的网络带宽和时间。
数据隐私:
虽然推理任务通常只需要输入数据和模型,不需要回传大量的中间数据和参数,但是输入数据仍然可能包含敏感信息,如用户的个人信息。
模型安全:
在去中心化的网络中,模型需要部署到不受信任的节点上,会导致模型的泄漏导致模型产权和滥用问题。这也可能引发安全和隐私问题,如果一个模型被用于处理敏感数据,节点可以通过分析模型行为来推断出敏感信息。
质量控制:
去中心化的分布式算力网络中的每个节点可能具有不同的计算能力和资源,这可能导致推理任务的性能和质量难以保证。
计算复杂度:
在训练阶段,模型需要反复迭代,训练过程中需要对每一层计算前向传播和反向传播,包括激活函数的计算、损失函数的计算、梯度的计算和权重的更新。因此,模型训练的计算复杂度较高。
在推理阶段,只需要一次前向传播计算预测结果。例如,在 GPT-3 中,需要将输入的文本转化为向量,然后通过模型的各层(通常为 Transformer 层)进行前向传播,最后得到输出的概率分布,并根据这个分布生成下一个词。在 GANs 中,模型需要根据输入的噪声向量生成一张图片。这些操作只涉及模型的前向传播,不需要计算梯度或更新参数,计算复杂度较低。
数据交互性:
在推理阶段,模型通常处理的是单个输入,而不是训练时的大批量的数据。每次推理的结果也只依赖于当前的输入,而不依赖于其它的输入或输出,因此无需进行大量的数据交互,通信压力也就更小。
以生成式图片模型为例,假设我们使用 GANs 生成图片,我们只需要向模型输入一个噪声向量,然后模型会生成一张对应的图片。这个过程中,每个输入只会生成一个输出,输出之间没有依赖关系,因此无需进行数据交互。
以 GPT-3 为例,每次生成下一个词只需要当前的文本输入和模型的状态,不需要和其他输入或输出进行交互,因此数据交互性的要求也弱。
小结一下
不管是大语言模型还是生成式图片模型,推理任务的计算复杂度和数据交互性都相对较低,更适合在去中心化的分布式算力网络中进行,这也是现在我们看到大多数项目在发力的一个方向。
去中心化的分布式算力网络的技术门槛和技术广度都非常高,并且也需要硬件资源的支撑,因此现在我们并没有看到太多尝试。以 Together 和 Gensyn.ai 举例:
(RedPajama from Together)
Together 是一家专注于大模型的开源,致力于去中心化的 AI 算力方案的公司,希望任何人在任何地方都能接触和使用 AI。Together 刚完成了 Lux Capital 领投的 20m USD 的种子轮融资。
Together 由 Chris、Percy、Ce 联合创立,初衷是由于大模型训练需要大量高端的 GPU 集群和昂贵的支出,并且这些资源和模型训练的能力也集中在少数大公司。
从我的角度看,一个比较合理的分布式算力的创业规划是:
Step1. 开源模型
要在去中心化的分布式算力网络中实现模型推理,先决条件是节点必须能低成本地获取模型,也就是说使用去中心化算力网络的模型需要开源(如果模型需要在相应的许可下使用,就会增加实现的复杂性和成本)。比如 chatgpt 作为一个非开源的模型,就不适合在去中心化算力网络上执行。
因此,可以推测出一个提供去中心化算力网络的公司的隐形壁垒是需要具备强大的大模型开发和维护能力。自研并开源一个强大的 base model 能够一定程度上摆脱对第三方模型开源的依赖,解决去中心化算力网络最基本的问题。同时也更有利于证明算力网络能够有效地进行大模型的训练和推理。
而 Together 也是这么做的。最近发布的基于 LLaMA 的 RedPajama 是由 Together, Ontocord.ai, ETH DS3Lab, Stanford CRFM 和 Hazy Research 等团队联合启动的,目标是研发一系列完全开源的大语言模型。
Step2. 分布式算力在模型推理上落地
就像上面两节提到的,和模型训练相比,模型推理的计算复杂度和数据交互性较低,更适合在去中心化的分布式环境中进行。
在开源模型的基础上,Together 的研发团队针对 RedPajama-INCITE-3B 模型现做了一系列更新,比如利用 LoRA 实现低成本的微调,使模型在 CPU(特别是使用 M2 Pro 处理器的 MacBook Pro)上运行模型更加丝滑。同时,尽管这个模型的规模较小,但它的能力却超过了相同规模的其他模型,并且在法律、社交等场景得到了实际应用。
Step3. 分布式算力在模型训练上落地
(Overcoming Communication Bottlenecks for Decentralized Training 的算力网络示意图)
从中长期来看,虽然面临很大的挑战和技术瓶颈,承接 AI 大模型训练上的算力需求一定是最诱人的。Together 在建立之初就开始布局如何克服去中心化训练中的通信瓶颈方面的工作。他们也在 NeurIPS 2022 上发布了相关的论文:Overcoming Communication Bottlenecks for Decentralized Training。我们可以主要归纳出以下方向:
调度优化
在去中心化环境中进行训练时,由于各节点之间的连接具有不同的延迟和带宽,因此,将需要重度通信的任务分配给拥有较快连接的设备是很重要的。Together 通过建立模型来描述特定调度策略的成本,更好地优化调度策略,以最小化通信成本,最大化训练吞吐量。Together 团队还发现,即使网络慢 100 倍,端到端的训练吞吐量也只慢了 1.7 至 2.3 倍。因此,通过调度优化来追赶分布式网络和中心化集群之间的差距很有戏。
通信压缩优化
Together 提出了对于前向激活和反向梯度进行通信压缩,引入了 AQ-SGD 算法,该算法提供了对随机梯度下降收敛的严格保证。AQ-SGD 能够在慢速网络(比如 500 Mbps)上微调大型基础模型,与在中心化算力网络(比如 10 Gbps)无压缩情况下的端到端训练性能相比,只慢了 31%。此外,AQ-SGD 还可以与最先进的梯度压缩技术(比如 QuantizedAdam)结合使用,实现 10% 的端到端速度提升。
项目总结
Together 团队配置非常全面,成员都有非常强的学术背景,从大模型开发、云计算到硬件优化都有行业专家支撑。并且 Together 在路径规划上确实展现出了一种长期有耐心的架势,从研发开源大模型到测试闲置算力(比如 mac)在分布式算力网络用语模型推理,再到分布式算力在大模型训练上的布局。— 有那种厚积薄发的感觉了:)
但是目前并没有看到 Together 在激励层过多的研究成果,我认为这和技术研发具有相同的重要性,是确保去中心化算力网络发展的关键因素。
(Gensyn.ai)
从 Together 的技术路径我们可以大致理解去中心化算力网络在模型训练和推理上的落地过程以及相应的研发重点。
另一个不能忽视的重点是算力网络激励层 / 共识算法的设计,比如一个优秀的网络需要具备:
……
看看 Gensyn.ai 是怎么做的:
首先,算力网络中的 solver 通过 bid 的方式竞争处理 user 提交的任务的权利,并且根据任务的规模和被发现作弊的风险,solver 需要抵押一定的金额。
Solver 在更新 parameters 的同时生成多个 checkpoints(保证工作的透明性和可追溯性),并且会定期生成关于任务的密码学加密推理 proofs(工作进度的证明);
Solver 完成工作并产生了一部分计算结果时,协议会选择一个 verifier,verifier 也会质押一定金额(确保 verifier 诚实地执行验证),并且根据上述提供的 proofs 来决定需要验证哪一部分的计算结果。
通过基于 Merkle tree 的数据结构,定位到计算结果存在分歧的确切位置。整个验证的操作都会上链,作弊者会被扣除质押的金额。
项目总结
激励和验证算法的设计使得 Gensyn.ai 不需要在验证过程中去重放整个计算任务的所有结果,而只需要根据提供的证明对一部分结果进行复制和验证,这极大地提高了验证的效率。同时,节点只需要存储部分计算结果,这也降低了存储空间和计算资源的消耗。另外,潜在的作弊节点无法预测哪些部分会被选中进行验证,所以这也降低了作弊风险;
这种验证分歧并发现作弊者的方式也可以在不需要比较整个计算结果的情况下(从 Merkle tree 的根节点开始,逐步向下遍历),可以快速找到计算过程中出错的地方,这在处理大规模计算任务时非常有效。
总之 Gensyn.ai 的激励 / 验证层设计目标就是:简洁高效。但目前仅限于理论层面,具体实现可能还会面临以下挑战:
谁需要去中心化算力网络这个问题其实一直没有得到验证。闲置算力应用在对算力资源需求巨大的大模型训练上显然是最 make sense,也是想象空间最大的。但事实上通信、隐私等瓶颈不得不让我们重新思考:
去中心化地训练大模型是不是真的能看到希望?
如果跳出这种大家共识的,“最合理的落地场景”,是不是把去中心化算力应用在小型 AI 模型的训练也是一个很大的场景。从技术角度看,目前的限制因素都由于模型的规模和架构得到了解决,同时,从市场上看,我们一直觉得大模型的训练从当下到未来都会是巨大的,但小型 AI 模型的市场就没有吸引力了吗?
我觉得未必。相比大模型小型 AI 模型更便于部署和管理,而且在处理速度和内存使用方面更有效率,在大量的应用场景中,用户或者公司并不需要大语言模型更通用的推理能力,而是只关注在一个非常细化的预测目标。因此,在大多数场景中,小型 AI 模型仍然是更可行的选择,不应该在 fomo 大模型的潮水中被过早地忽视。
https://www.together.xyz/blog/neurips-2022-overcoming-communication-bottlenecks-for-decentralized-training-12
https://www.together.xyz/blog/redpajama
https://docs.gensyn.ai/litepaper/
https://www.nvidia.com/en-in/deep-learning-ai/solutions/large-language-models/
https://indiaai.gov.in/article/training-data-used-to-train-llm-models
免责声明: Foresight Ventures 所有文章均不作为投资建议。投资有风险,请评估个人风险承受能力,审慎做出投资决策。
【免责声明】市场有风险,投资需谨慎。本文不构成投资建议,用户应考虑本文中的任何意见、观点或结论是否符合其特定状况。据此投资,责任自负。