Auto Byte

专注未来出行及智能汽车科技

微信扫一扫获取更多资讯

Science AI

关注人工智能与其他前沿技术、基础学科的交叉研究与融合发展

微信扫一扫获取更多资讯

无缝支持Hugging Face社区,Colossal-AI低成本轻松加速大模型

大模型已成为 AI 圈的一种潮流,不仅横扫各大性能榜单,更产生了诸多有趣应用。

例如,微软和 OpenAI 开发的自动代码建议补全神器 Copilot,化身程序员最佳助手,提升工作效率。

图片

OpenAI 刚刚发布能以假乱真的文本生成图像模型 DALL-E 2,Google 便紧接着发布了 Imagen,在大模型上,大公司也是相当的卷,丝毫不比 CV 刷榜差。

图片

文本到图像生成样例“一个被猫绊倒的希腊人雕像”(左侧两列为 Imagen,右侧两列为 DALL·E 2)

模型增大带来的神奇表现,使得近几年预训练模型规模呈现爆炸式增长。然而,训练甚至微调大模型都需要非常高的硬件成本,动辄几十、上百张 GPU。此外,PyTorch、TensorFlow 等现有深度学习框架也难以有效处理超大模型,通常需要专业的 AI 系统工程师做针对具体模型做适配和优化。

更重要的是,不是每一个实验室以及研发团队都具备 “钞” 能力,能够随时调用大规模 GPU 集群来使用大模型,更不用提仅有一张显卡的个人开发者。因此,尽管大模型已经吸引了大量关注,高昂的上手门槛却令大众“望尘莫及”。

图片

导致大模型使用成本增高的核心原因是显存限制。GPU 计算虽快,但显存容量有限,无法容纳大模型。Colossal-AI 针对这一痛点,通过异构内存系统,高效地同时使用 GPU 显存以及价格低廉的 CPU 内存,在仅有一块 GPU 的个人 PC 上便能训练高达 180 亿参数 GPT,可提升模型容量十余倍,大幅度降低了 AI 大模型微调和推理等下游任务和应用部署的门槛,还能便捷扩展至大规模分布式。

Hugging Face 为深度学习社区提供了超过 5 万个 AI 模型的实现,最其中也不乏像 GPT, OPT 这样的大模型,现已成为最流行的 AI 库之一。

图片

Colossal-AI 无缝支持 Hugging Face 社区模型,让大模型对每一位开发者都变得触手可及。接下来,我们将以 Meta 发布的大模型 OPT 为例,展现如何使用 Colossal-AI,仅需添加几行代码,便可实现大模型的低成本训练和微调。

开源地址:https://github.com/hpcaitech/ColossalAI

低成本加速大模型 OPT

OPT 模型

OPT 的全称为 Open Pretrained Transformer,是 Meta(Facebook) AI 实验室发布的对标 GPT-3 的大规模 Transformer 模型。与 OpenAI 尚未公开模型权重的 GPT-3 相比,Meta AI 慷慨地开源了所有的代码以及模型权重,极大推动了 AI 大模型的民主化,每一位开发者都能以此为基础开发个性化的下游任务。接下来,我们将用 Hugging Face 提供的 OPT 模型的预训练权重进行 Casual Language Modelling 的微调。

添加配置文件 

想要使用 Colossal-AI 中各个强大功能,用户无需更改代码训练逻辑,只用添加一个简单的配置文件,即可赋予模型所期望的功能,比如混合精度、梯度累积、多维并行训练、冗余内存优化等。

在一张 GPU 上,以异构训练为例,我们只需在配置文件里加上相关配置项。其中 tensor_placement_policy 决定了我们异构训练的策略,这个参数可以为 cuda、cpu 以及 auto。各个策略有不同的优点:

  • cuda: 将全部模型参数都放置于 GPU 上,适合不 offload 时仍然能进行训练的传统场景;
  • cpu 则会将模型参数都放置在 CPU 内存中,仅在 GPU 显存中保留当前参与计算的权重,适合超大模型的训练;
  • auto 则会根据实时的内存信息,自动决定保留在 GPU 显存中的参数量,这样能最大化利用 GPU 显存,同时减少 CPU-GPU 之间的数据传输。

对于一般用户而言,仅需选择 auto 策略,由 Colossal-AI 自动化地实时动态选择最佳异构策略,最大化计算效率。
from colossalai.zero.shard_utils import TensorShardStrategy
zero = dict(model_config=dict(shard_strategy=TensorShardStrategy(),                              tensor_placement_policy="auto"),            optimizer_config=dict(gpu_margin_mem_ratio=0.8)
运行启动

在配置文件准备好之后,我们只需插入几行代码即可启动声明的新功能。

首先,通过一行代码,使用配置文件启动 Colossal-AI,Colossal-AI 会自动初始化分布式环境,并读取相关配置,之后将配置里的功能自动注入到模型以及优化器等组件中。
colossalai.launch_from_torch(config='./configs/colossalai_zero.py')

接下来,用户可以照常定义数据集、模型、优化器损失函数等,例如直接使用原生 PyTorch 代码。在定义模型时,只需将模型放置于 ZeroInitContext 下初始化即可。在例子里,我们使用 Hugging Face 提供的 OPTForCausalLM 模型以及预训练权重,在 Wikitext 数据集上进行微调。
with ZeroInitContext(target_device=torch.cuda.current_device(),                     shard_strategy=shard_strategy,                    shard_param=True):    model = OPTForCausalLM.from_pretrained(                'facebook/opt-1.3b'                config=config            )

接着,只需要调用 colossalai.initialize,便可将配置文件里定义的异构内存功能统一注入到训练引擎中,即可启动相应功能。
engine, train_dataloader, eval_dataloader, lr_scheduler = colossalai.initialize(model=model,                                                                               optimizer=optimizer,                                                                               criterion=criterion,                                                                               train_dataloader=train_dataloader,                                                                               test_dataloader=eval_dataloader,                                                                               lr_scheduler=lr_scheduler)

优势显著

在单张 GPU,与微软 DeepSpeed 相比,Colossal-AI 的使用自动化的 auto 策略,在不同的模型规模上相比 DeepSpeed 的 ZeRO Offloading 策略,均体现出显著优势,最快可实现 40% 的加速。而 PyTorch 等传统深度学习框架,在单张 GPU 上已经无法运行如此大的模型。

图片

对于使用 8 张 GPU 的并行训练,Colossal-AI 仅需在启动命令中添加 - nprocs 8 即可实现!

背后秘诀

如此显著的提升来自于 Colossal-AI 的高效异构内存管理子系统 Gemini。简单的来说,在模型训练时,Gemini 在前面的几个 step 进行预热,收集 PyTorch 动态计算图中的内存消耗信息;在预热结束后,计算一个算子前,利用收集的内存使用记录,Gemini 将预留出这个算子在计算设备上所需的峰值内存,并同时从 GPU 显存里移动一些模型张量到 CPU 内存。

图片

Gemini 内置的内存管理器给每个张量都标记一个状态信息,包括 HOLD、COMPUTE、FREE 等。然后,根据动态查询到的内存使用情况,不断动态转换张量状态、调整张量位置,相比起 DeepSpeed 的 ZeRO Offload 的静态划分,Colossal-AI Gemini 能更高效利用 GPU 显存和 CPU 内存,实现在硬件极其有限的情况下,最大化模型容量和平衡训练速度。

图片

对于大模型的代表 GPT,使用 Colossal-AI 在搭载 RTX 2060 6GB 的普通游戏笔记本上,也足以训练高达 15 亿参数模型;对于搭载 RTX3090 24GB 的个人电脑,更是可以直接训练 180 亿参数的模型;对于 Tesla V100 等专业计算卡,Colossal-AI 也能显示出显著改善。

更进一步:便捷高效并行扩展

并行分布式技术是进一步加速模型训练的重要手段,想要以最短时间训练当今世界最大最前沿的 AI 模型,仍离不开高效的分布式并行扩展。针对现有方案并行维度有限、效率不高、通用性差、部署困难、缺乏维护等痛点,Colossal-AI 通过高效多维并行和异构并行等技术,让用户仅需极少量修改,即可高效快速部署 AI 大模型训练。

例如,对于同时使用数据并行、流水并行、2.5 维张量并行等复杂并行策略,仅需简单声明,即可自动实现,Colossal-AI 无需像其他系统和框架侵入代码,手动处理复杂的底层逻辑


Pythonparallel = dict(    pipeline=2,    tensor=dict(mode='2.5d', depth = 1, size=4))

具体来说,对于 GPT-3 这样的超大 AI 模型,相比英伟达方案,Colossal-AI 仅需一半的计算资源,即可启动训练;若使用相同计算资源,则能提速 11%,可降低 GPT-3 训练成本超百万美元。Colossal-AI 相关解决方案已成功自动驾驶、云计算、零售、医药、芯片等行业知名厂商落地应用,广受好评。

图片

例如,对于蛋白质结构预测应用 AlphaFold2,基于 Colossal-AI 的加速方案的 FastFold,成功超越谷歌和哥伦比亚大学的方案,将 AlphaFold2 训练时间从 11 天减少到 67 小时,且总成本更低,在长序列推理中也实现 9.3~11.6 倍的速度提升。

图片

Colossal-AI 注重开源社区建设,提供中文教程,开放用户社群及论坛,对于用户反馈进行高效交流与迭代更新,不断添加 PaLM、AlphaFold 等前沿应用。

自然开源以来,Colossal-AI 已经多次在 GitHub 及 Papers With Code 热榜位列世界第一,与众多已有数万 star 的明星开源项目一起受到海内外关注!

图片

传送门

项目地址:
https://github.com/hpcaitech/ColossalAI

参考链接:
https://medium.com/@yangyou_berkeley/colossal-ai-seamlessly-accelerates-large-models-at-low-costs-with-hugging-face-4d1a887e500d
工程大模型
相关数据
深度学习技术

深度学习(deep learning)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。 深度学习是机器学习中一种基于对数据进行表征学习的算法,至今已有数种深度学习框架,如卷积神经网络和深度置信网络和递归神经网络等已被应用在计算机视觉、语音识别、自然语言处理、音频识别与生物信息学等领域并获取了极好的效果。

权重技术

线性模型中特征的系数,或深度网络中的边。训练线性模型的目标是确定每个特征的理想权重。如果权重为 0,则相应的特征对模型来说没有任何贡献。

参数技术

在数学和统计学裡,参数(英语:parameter)是使用通用变量来建立函数和变量之间关系(当这种关系很难用方程来阐述时)的一个数量。

损失函数技术

在数学优化,统计学,计量经济学,决策理论,机器学习和计算神经科学等领域,损失函数或成本函数是将一或多个变量的一个事件或值映射为可以直观地表示某种与之相关“成本”的实数的函数。

TensorFlow技术

TensorFlow是一个开源软件库,用于各种感知和语言理解任务的机器学习。目前被50个团队用于研究和生产许多Google商业产品,如语音识别、Gmail、Google 相册和搜索,其中许多产品曾使用过其前任软件DistBelief。

张量技术

张量是一个可用来表示在一些矢量、标量和其他张量之间的线性关系的多线性函数,这些线性关系的基本例子有内积、外积、线性映射以及笛卡儿积。其坐标在 维空间内,有 个分量的一种量,其中每个分量都是坐标的函数,而在坐标变换时,这些分量也依照某些规则作线性变换。称为该张量的秩或阶(与矩阵的秩和阶均无关系)。 在数学里,张量是一种几何实体,或者说广义上的“数量”。张量概念包括标量、矢量和线性算子。张量可以用坐标系统来表达,记作标量的数组,但它是定义为“不依赖于参照系的选择的”。张量在物理和工程学中很重要。例如在扩散张量成像中,表达器官对于水的在各个方向的微分透性的张量可以用来产生大脑的扫描图。工程上最重要的例子可能就是应力张量和应变张量了,它们都是二阶张量,对于一般线性材料他们之间的关系由一个四阶弹性张量来决定。

云计算技术

云计算(英语:cloud computing),是一种基于互联网的计算方式,通过这种方式,共享的软硬件资源和信息可以按需求提供给计算机各种终端和其他设备。

逻辑技术

人工智能领域用逻辑来理解智能推理问题;它可以提供用于分析编程语言的技术,也可用作分析、表征知识或编程的工具。目前人们常用的逻辑分支有命题逻辑(Propositional Logic )以及一阶逻辑(FOL)等谓词逻辑。

查询技术

一般来说,查询是询问的一种形式。它在不同的学科里涵义有所不同。在信息检索领域,查询指的是数据库和信息系统对信息检索的精确要求

AlphaFold技术

DeepMind 提出的深度神经网络蛋白质形态预测方法。AlphaFold系统,是DeepMind在2017-2018年中一直在研究的项目,它建立在多年以前使用大量基因组数据来预测蛋白质结构的研究基础之上。 AlphaFold产生的蛋白质3D模型比以往任何一种都精确得多,在生物学的核心挑战之一上取得了重大进展。

参数模型技术

在统计学中,参数模型是可以使用有限数量的参数来描述的分布类型。 这些参数通常被收集在一起以形成单个k维参数矢量θ=(θ1,θ2,...,θk)。

优化器技术

优化器基类提供了计算梯度loss的方法,并可以将梯度应用于变量。优化器里包含了实现了经典的优化算法,如梯度下降和Adagrad。 优化器是提供了一个可以使用各种优化算法的接口,可以让用户直接调用一些经典的优化算法,如梯度下降法等等。优化器(optimizers)类的基类。这个类定义了在训练模型的时候添加一个操作的API。用户基本上不会直接使用这个类,但是你会用到他的子类比如GradientDescentOptimizer, AdagradOptimizer, MomentumOptimizer(tensorflow下的优化器包)等等这些算法。

文本生成技术

文本生成是生成文本的任务,其目的是使人类书写文本难以区分。

文本到图像生成技术

文本到图像生成是从文本描述或标题生成图像的任务。

推荐文章
暂无评论
暂无评论~