前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >模型训练过程和国产算力面临的挑战

模型训练过程和国产算力面临的挑战

作者头像
刘盼
发布2024-04-02 17:13:38
710
发布2024-04-02 17:13:38
举报
文章被收录于专栏:人人都是极客人人都是极客

典型模型训练流程

典型的模型训练流程可以从计算的角度分为三个关键步骤:前向计算、反向计算和参数更新。这些步骤构成了模型在训练中的核心计算过程。

前向计算 在前向计算阶段,模型使用输入数据和当前的模型参数进行计算,生成预测的结果。系统会将这些预测的结果与标注后的数据进行比较,计算出当前预测的损失(loss)。

反向计算 在反向计算阶段,系统会使用前向计算得到的损失,计算所有参数的梯度(即损失对参数的导数)。这些梯度指示了如何调整模型参数,以减小损失。这个过程也被称为反向传播。

参数更新 所有梯度计算完成后,模型使用这些梯度更新参数,以提高模型端到端的正确率。通常使用梯度下降等优化算法实现参数的更新。这个过程在训练中不断迭代,直到模型收敛到满意的状态。

在此基础上,大模型的发展需要更多的计算资源与存储资源,随着模型规模的扩展,单个机器或单个计算卡很难满足大模型训练的需求。采用多机多卡并行已是大模型训练中必不可少的一环,以下是常见的四种并行策略:数据并行、张量并行、流水线并行和专家并行。

数据并行 该策略将输入数据分配到不同的计算节点,每个节点保存一份完整的模型。在前向和反向计算过程中,各个节点独立进行计算,无须通信。在参数更新时,需要进行全局通信(All-Reduce)来汇总不同节点的梯度。数据并行允许扩展模型的训练吞吐量,但是不能有效提高参数量。

张量并行 该策略将模型参数分配到不同的计算节点上。计算过程中通过通信操作(All-Reduce或All-Gather)协同使用多个计算节点计算同一组数据。张量并行允许扩展模型的参数数量,但不能有效提高训练吞吐量。

流水线并行 该策略将模型的不同层分配到不同的计算节点上。计算过程中各层的计算结果会被传输。流水线并行也可以扩展模型的参数数量,但不能有效提升吞吐量。张量并行和流水线并行也被统称为模型并行。

专家并行 为了满足大模型训练对参数量和吞吐量的要求,近年来出现了一种新的预训练模型,称为混合专家(MoE)模型[7],MoE将大模型划分为多个小模型。在MoE模型中,数据划分和专家划分同时存在,导致全局All-to-All通信,但能有效满足大模型的参数规模和训练吞吐量需求,这种并行模式被称为专家并行。专家并行同时具有高性能和参数规模扩展的特点。MoE是一种适用于新一代大模型的并行策略,谷歌的Switch Transformer[8]、GPT-4均采用了MoE架构。

在应对大模型日益复杂的计算需求时,一方面,模型本身的复杂架构使开发人员难以直接编写人工智能应用,需要更多的抽象和支持;另一方面,单一的并行模式已无法满足不断扩展的模型结构、参数量以及训练吞吐量的需求,因此混合多种并行策略成为了常见的使用策略。这表明,为了支撑人工智能应用的发展,系统软件的重要性不可忽视,而这也给国产算力系统带来了更多挑战。

国产算力面临的挑战

国产算力面临的挑战主要集中在系统软件方面。学术界和工业界普遍认为,系统软件是影响国产硬件平台使用的关键因素。对于人工智能应用开发者来说,使用英伟达等GPU提供的软件栈非常方便,这些软件易于快速部署,可靠性高、可用性好,而且有大量用户群体。相比之下,国产硬件平台的软件系统不够全面,对有些模型的支持不完善,有些模型甚至需要额外的工作才能支持。此外,不同的硬件平台使用不同的系统软件,用户群体分散,学习资料少,这无疑增加了用户的学习使用成本。要成功训练大模型,需要一系列系统软件的协同支持,包括编程语言、编程框架、并行加速库、通信库、算子库、AI编译器等,如图1所示。这些软件为大模型的开发和训练提供了必要的基础。

编程语言 编程语言提供了在硬件上编写并行程序的接口。为了发挥硬件性能,编程语言一般要求覆盖硬件的全部功能。在此基础上,研究人员可利用编程语言编写人工智能模型的基本算子的高效实现。目前流行的编程语言包括英伟达的CUDA、英特尔的oneAPI、寒武纪的BANGC等。

编程框架 随着AI模型越来越复杂,使用编程语言直接开发AI模型也变得愈发困难。为了降低开发复杂度,出现了一系列编程框架,它们为开发人员提供了一种更方便、更高效的方式构建AI模型。通常,这些框架将AI程序描述为不同的算子组成的复杂程序,通过依次调用算子库的形式实现计算。常见的编程框架包括PyTorch[9]、TensorFlow[10]等。

并行加速系统 随着大模型的参数数量的增加,单个芯片的内存不足以满足模型训练的需求。因此,多机多卡协同分布式训练成为必要。并行加速库可以为多机多卡环境下的人工智能模型提供高效的并行训练能力,使其能充分利用计算资源。通过对并行训练方法进行抽象,并行加速库允许用户快速地将模型在一个集群上并行训练部署,从而降低开发难度。流行的并行加速系统包括微软的DeepSpeed[11]、英伟达的Megatron-LM[12]、清华的FastMoE[13]等。

上述系统软件直接面向用户提供计算能力,以及实现模型训练部署的能力。此外,为了支撑这些软件,算力系统还需要其他的系统软件。

通信库 为了支持多机多卡训练,机器之间需要时刻传输数据,导致通信成为训练过程中的重要性能瓶颈。通信库提供了跨机跨卡的通信能力,以及能够满足大模型训练所需的各种复杂通信模式。通信库需要针对系统的网络特征,充分利用通信带宽,实现高效的数据通信。常见的通信库有MPI[14]、英伟达的NCCL库[15]、华为HCCL等。

算子库 算子库提供了人工智能模型高性能实现所需的基本操作,如矩阵乘法、卷积、池化等。这些操作构建了复杂神经网络模型的基础。目前常见的算子库有英伟达的cuDNN[16]、cuBLAS[17]等。

AI编译器 AI编译器的主要目的是在异构处理器上提供高效的目标代码,以加速人工智能模型的执行。通常来说,AI编译器的设计目标是为当前算子库无法支持的计算负载生成代码。近年来,AI编译器得到了进一步发展,支持更大范围的代码生成以及多个算子实现更高性能的合并。代表性的AI编译器有TensorFlow XLA[18]、TVM[19]等。

其他支撑软件 除了上述软件外,大模型训练还需要其他一系列支撑软件,例如调度系统、内存管理系统、容错系统、存储系统等。这些软件在确保训练过程高效运行方面起着重要作用。

总的来说,大模型的训练是一个复杂任务,需要多个系统软件协同工作。更加完整、易用、高效的系统软件对国产平台至关重要。系统软件的发展和优化也有助于推动人工智能研究和应用领域的进步,为开发人员提供更多灵活性和性能优势。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2024-03-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 人人都是极客 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 典型模型训练流程
  • 国产算力面临的挑战
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档