\

在IPU上构建大模型

作者:

分享  

Share on weixin
Share on weibo
Share on linkedin

订阅

Graphcore IPU-POD系统目前正在被客户部署用于大模型的训练和微调。我们对自然语言处理有巨大的需求,银行、医疗、保险、政府、制造业和其他人工智能优先的企业中那些具有前瞻性的组织对生成性预训练转化器(GPT)模型的兴趣越来越大。

我们在MLPerf中的结果显示,我们有能力在当今模型的成本效率方面超过其他解决方案。在我们的旗舰大型IPU-POD128和IPU-POD256系统上,我们在分享MLPerf结果的同时,也分享了GPT和ViT(Transformer视觉模型)等创新的、新兴的Transformer模型的计算扩展(如下图所示),显示了IPU-Link和IPU-Fabric的带宽和容量。我们还展示了我们的软件栈——Poplar的成熟度,它在所有机器学习模型中始终提供令人印象深刻的性能优化。

这些大型IPU-POD系统的性能确实令人印象深刻。没有其他的创新AI系统可以通过如此多的独立程序和这种提供PB/秒存储带宽的存储容量来提供如此强大的计算能力。

这种新的性能水平允许客户在IPU-POD128和IPU-POD256系统上试验和构建新的大模型。IPU-POD256有着将具有数百亿个参数的模型全部保留在IPU的处理器内存储中的潜力,这些存储可以以数十PB/秒的存储带宽被访问。这种模型尺寸与如此高带宽的结合使创新者能够探索新的大模型,这些模型正在释放稀疏计算的潜力,并为AI的新方法打开大门。我们现在可以开始开发模型,其中只有相关的训练数据被定向到正确的参数,以实现更有效的模型训练。我们得以摆脱当今大模型方法下传统处理器要求的指数级计算增长。

但您并不会仅限于数十亿个参数,因为Graphcore的IPU Exchange Memory通过附加的流存储和Poplar软件SDK得到支持,可以轻松支持更大的模型。IPU-POD256系统中16TB的IPU Exchange Memory容量开启了支持具有数万亿参数的模型的可能性。这些大脑规模的模型也可以从IPU处理器实现的新计算方法中受益。

在本博客中,我们将展示一些高级示例,说明开发人员如何将这些大模型映射到IPU-POD系统,所有这些都由成熟而易于使用的软件栈——Poplar支持。

Graphcore IPU存储系统

我们开发IPU时专注于构建高度可扩展的存储系统。这是我们的IPU处理器最令人兴奋和前瞻性的方面之一。我们开发了一种全新的存储组织方法。

首先,我们专注于拥有大量的处理器内存储。每个 Colossus GC200 IPU在处理器内部都有近1GB的存储,可以以处理器的全计算速度进行访问,这是前所未有的。其次,我们确保IPU可以访问其他存储源,我们称之为流存储。IPU-Machine M2000系统包含专门用于此目的的插入式DDR-DIMM模块。这些通常配置有256GB的流存储,但也可以配置更大的DIMM模块以获得更大容量的存储。在Poplar SDK软件控制下,数据和程序可以从外部存储源流传输到IPU处理器内存储。我们的Poplar软件可以协调内部存储和外部流存储之间的数据交换。这个精巧的存储系统的围绕着两个关键原则进行了设计:

  • 硬件中没有内置关于存储访问行为的假设。
  • 我们允许对所有存储访问进行完全、明确的软件控制。

每个IPU处理器中内置的高速IPU-Link和每个IPU-Machine M2000系统中内置的 IPU-Fabric,不仅使我们能够构建更大的横向扩展的IPU-POD系统,而且还允许处理器内存储和流存储在整个IPU-POD系统范围内共享。从IPU-Machine中的本地DDR-DIMM流传输存储的相同原则也适用于通过IPU-Link从其他IPU和其他IPU-Machine存储流传输数据。这可以从IPU-POD系统的任何部分协调到任何其他部分。所有存储使用都由Poplar SDK软件指导,这使我们能够为应用程序提供一个平台,实现最大的灵活性和高效的存储访问。

Exchange Memory是我们用于这些Poplar SDK 功能的术语,这些功能管理 IPU 内部、单个IPU-Machine内部以及IPU-POD系统中 IPU-Machine之间的处理器内存储和流媒体存储的使用。Poplar支持的Exchange Memory功能非常广泛,并且经过精心设计并不断添加。与任何存储层次结构一样,这些工具必须在快速本地存储(IPU的本地存储比大多数处理器多得多)和流存储(提供更大容量)之间有效平衡。

优化的数据通信

流存储可用于优化将数据移入和移出本地IPU或移至跨IPU-POD的其他IPU-Machine中的IPU所需的时间。可以复制数据并将访问分片以支持不同的计算方法。流存储还可以充当与主机通信的中间缓冲区。Poplar SDK支持这些优化,新的优化可帮助用户轻松地流水线化和分片模型。这些优化的一个重要方面是它们可以自动与您的应用程序一起工作,而不需要对定义模型的高级框架代码进行更改。

IPU内部、IPU之间和IPU-Machine之间的数据移动都在IPU批量同步通信(BSP)方案下得到支持。

这种强劲的并行处理方法确保对于高度并行的操作,没有竞争条件,没有活锁,也没有死锁。所有其他处理器都缺少这种级别的显式并行执行控制,而这种级别的显式并行执行控制对于使大模型的执行在大型横向扩展机器上具有强劲性和可扩展性至关重要。

除了此BSP执行之外,Poplar SDK还管理不同处理器内核之间以及不同独立并行程序之间的所有通信。Poplar SDK还协调流存储访问,以便它们发生在后台,隐藏在计算之后。这确保了接下来需要的数据和代码在整个程序执行开始需要这些数据和代码之前就已可用。

这种精巧的控制使得在完整的IPU-POD128或IPU-POD256系统中协调大型计算任务成为可能。甚至可以将IPU-POD256系统连接在一起以构建更大的系统,并且Poplar SDK工具也可以支持这些系统。开发人员可以轻松探索不同的流水线模型并行和张量模型并行方法,以确保实现最高性能。模型训练周期后期所需的激活或权重可以被卸载到流存储,并在计算周期后期由Poplar恢复。有时最好只存储一小部分激活样本,然后在训练模型时重新计算反向传播的中间激活。这可以节省存储带宽,并允许高效地使用IPU上可用的非常高水平的计算。这种权衡可用于平衡计算与带宽。有些模型可能需要较大的状态和较少的计算,而其他模型可能需要较小的状态和较大的计算活动。这种权衡在模型训练周期中有所变化,因此可以对计算和I/O带宽的平衡保持高度控制。

分阶段执行

Poplar SDK软件从TensorFlow或Pytorch等AI框架中获取高级模型描述,并将这种高度抽象的计算图表示映射到低级计算图,然后可以编译该图以便在IPU内部或一组IPU内运行。

Poplar SDK系统不仅构建计算,而且还协调每个IPU处理器内的IPU交换结构之间的所有通信,以及连接IPU-POD系统内独立IPU的IPU-Link和IPU-Fabric之间的通信。Poplar还管理所有数据存储,并确保正确的数据在正确的时间出现在正确的位置,以支持下一阶段的计算。这种高度精巧的方法使得在IPU-POD系统中的所有IPU处理器上扩展大模型成为可能,甚至可以将计算分布在多个IPU-POD系统中。

然而,Poplar生成的计算图也可以划分为更小的子计算图,然后可以在IPU上分阶段执行。当计算通过整个计算图时,子计算图状态在后台模式下从流存储移入和移出。我们称之为分阶段执行。分阶段执行中使用的子计算图的一个非常简单的示例,显示了ResNet-50模型层上的单独阶段,如下所示。热图显示了每个计算阶段计算图的执行部分:

跨ResNet-50模型层分阶段执行的简单示例

通过控制子计算图的大小,开发人员能够充分利用大型处理器存储。与必须不断地从其连接的存储向前和向后移动数据的GPU不同,IPU能够在处理器内部保存大量状态,这种方法显著降低了外部存储带宽要求,使IPU能够利用更大容量的DDR-DIMM模块。我们的CTO Simon Knowles在最近的Hot Chips Conference演讲中很好地描述了IPU的处理器内存储的优势。

分阶段执行有效地为将大模型映射到IPU处理器阵列提供了额外的灵活性。

大模型映射

IPU-POD128和IPU-POD256系统提供了丰富的资源集,可以支持具有非常大参数计数、大激活状态和复杂优化器状态的大模型。Poplar SDK中广泛的软件功能集允许开发人员将大模型映射到这些强大的计算平台。

模型可以跨大量IPU被分解以支持快速训练(见下图)。可以在p轴上连接的IPU之间流水线化深度学习模型的各个阶段。还可以在t轴上连接的多个IPU上对模型张量进行分片。然后可以将训练数据拆分为也常用于GPU的常规数据并行路径。这是数据副本维度,r轴。与数据副本维度相关联,我们可以使用流存储来访问模型权重数据。整个模型的权重可以在副本之间拆分,以更有效地使用存储,然后仅在每个执行阶段复制。我们将此称为复制张量分片(rts)。优化器状态(动量项等)的访问频率低于主要权重,因此我们可以将它们分布在与权重(rts’)不同数量的副本上。除了在子计算图上并行执行之外,我们还可以实施跨模型层的分阶段执行,优化子计算图的尺寸,以实现高水平的计算。子计算图计算所需的所有状态都保留在大型IPU处理器内存储中。

IPU-POD范围内的模型分解

任何特定模型分解中的IPU总数计算为t*p*r。通过改变模型流水线、张量分片和数据并行维度的级别,可以构建高效使用IPU-POD128或IPU-POD256系统中所有可用计算和存储资源的大模型。

每个IPU将使用由1/ (t * p)给出的权重比例,但在给定复制张量分片的情况下,保存在每个IPU处理器存储中的权重比例可以计算为1 / (t * p * rts)。然后可以使用分阶段执行来优化每个子计算图中可用的权重比例,并针IPU处理器内存储的最佳使用进行优化,以实现计算效率的最大化。

全局批尺寸计算为b * r,其中b是副本批量大小。开发人员可以选择合适的副本批尺寸,以实现其模型所需的全局批尺寸。

为了更好地理解这一点,来看一个映射到较小IPU-POD16系统的BERT-Large模型的简单示例:

在这个示例中,我们选择在4个IPU处理器上对模型进行流水线处理,而不是对张量进行分片。选择数据并行维度为4,以最大限度地利用IPU-POD16系统中的所有16个IPU 处理器。如果我们将流水线深度扩展到8维,我们就能够在这个单一的IPU-POD16系统上拟合整个模型,包括IPU处理器内存储里的所有优化器状态,并且可以获得一流的训练性能和微调结果,正如我们的MLPerf性能结果所证明的那样。

下面显示了一个更复杂的示例,其中一个1750亿参数的GPT-3 NLP模型映射到IPU-POD256系统上。

1750亿参数的GPT-3映射到IPU-POD256上的示例

在这个例子中,我们有一个更大的模型,它现在被映射到单个IPU-POD256系统上。在这种情况下,我们选择了8的流水线模型深度,并且为每个流水线阶段将张量分片到8个IPU。这为数据并行轴上的每个数据副本提供了总共64个IPU,并且在数据并行轴宽度设置为4的情况下,我们可以使用系统中的所有256个IPU处理器。使用较小的GPT类模型,我们可以在IPU处理器内存储中拟合所有权重,但使用1750亿个参数,我们可以利用分阶段执行将这个较大的模型拆分为少量子计算图。GPT-3模型中有96个层,我们仍然可以有效地使用所有可用的处理器内存储和所有计算资源。通过扩展到使用分阶段执行实施的更多子计算图,我们可以支持具有数万亿个参数的更大模型。为了进一步减少训练时间,我们还可以跨多个联网的IPU-POD256系统进行扩展。

总结

我们可以看到IPU-POD系统可以轻松支持当今的大型AI模型,包括GPT和更多。IPU-POD系统可以扩展以支持最大的模型,然而,极其丰富的处理器内存储和高度并行的IPU处理器为探索更丰富的下一代大模型提供了机会。人们已经开始在围绕稀疏模型和计算图神经网络的IPU上研究有趣的领域。我们期待看到创新者能够使用先进的IPU-POD128和IPU-POD256系统实现令人惊叹的新突破。

More Posts

ChatGPT开源平替:OpenAssistant OASST1微调版Pythia-12B

Flan-T5:用更小且更高效的LLM实现出色效果

详细攻略:在IPU上以float16精度运行FLAN-T5-XL推理

较小模型,超高性能:DeBERTa和自然语言理解的未来

PackedBert:如何用打包的方式加速Transformer的自然语言处理任务

Pienso为企业提供由云上IPU支持的高效大型语言模型访问

获取最新的GRAPHCORE资讯

在下方注册以获取最新的资讯和更新:




    获取最新的GRAPHCORE资讯

    在下方注册以获取最新的资讯和更新: