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

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

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

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

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

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

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

导致大模型使用成本增高的核心原因是显存限制。GPU计算虽快,但显存容量有限,无法容纳大模型。在前不久的文章《一块英伟达3090单挑180亿参数大模型,国产开源项目这回杀疯了》中,我们介绍了Colossal-AI最新研发的异构内存系统,它能够高效地同时使用GPU显存以及价格低廉的CPU内存,可提升模型容量十余倍,以低成本高效训练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决定了我们异构训练的策略,这个参数可以为cudacpu以及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模型,仍离不开高效的分布式并行扩展。对于同时使用数据并行、流水并行、2.5维张量并行等复杂并行策略,仅需简单声明,即可自动实现,Colossal-AI无需像其他系统和框架侵入代码,手动处理复杂的底层逻辑。

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

在面对扩展至数十甚至数百张GPU的大规模并行场景时,相比英伟达Megatron-LM等现有系统,Colossal-AI在性能上仍显示出显著的加速性能和资源节约。这意味着对于预训练GPT-3等超大AI模型,可节省数百万元的训练费用。

Colossal-AI相关解决方案已成功在自动驾驶、云计算、零售、医药、芯片等行业知名厂商落地应用,广受好评。

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

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

传送门

项目地址:

https://github.com/hpcaitech/ColossalAI

招聘

潞晨科技还在广纳英才,招聘全职/实习AI分布式系统、架构、编译器、网络、CUDA、SaaS、k8s等核心系统研发人员,开源社区运营、销售人员。

潞晨科技提供有竞争力的薪资回报,特别优秀的,还可以申请远程工作。也欢迎各位向潞晨科技引荐优秀人才,如果您推荐优秀人才成功签约潞晨科技,我们将为您提供数千元至数万元的推荐费。

工作地点:中国北京,新加坡,美国 (可相互转岗)。

简历投递邮箱:hr@luchentech.com

参考文献:

https://arxiv.org/abs/2202.05924v2

https://arxiv.org/abs/2205.11487

https://github.com/features/copilot

https://github.com/huggingface/transformers

https://medium.com/@yangyou_berkeley/colossal-ai-seamlessly-accelerates-large-models-at-low-costs-with-hugging-face-4d1a887e500d

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值