www.ydisp.cn/oss/202207/13/a46a55f14e9e7b391c45263333c31da28a506c.gif"alt="image"title="image"style="宽度:934px;能见度:可见;height:491px;"data-type="block">OpenAI刚刚发布了可以生成假文本的图像模型DALL-E2,谷歌也发布了Imagen。在大模型上,大公司也是相当的量,没有比CV刷单还差Text-to-imagegenerationexample“AstatueofaGreekwhotrippedoveracat”(左边两??列是Imagen,右边两列是DALL·E2)模型放大带最近多年来,预训练模型的规模由于神奇的表现呈现爆发式增长,但训练甚至微调大型模型需要非常高的硬件成本,往往需要几十甚至上百块GPU。此外,PyTorch、TensorFlow而其他现有的深度学习框架也很难有效处理超大模型,通常需要专业的AI系统工程师对特定模型进行适配和优化。更重要的是,并不是每个实验室和研发团队都有“钱”的能力"并且可以随时调用它那时大型GPU集群都用来使用大型模型,更不用说只有一张显卡的个人开发者了。因此,虽然大车型备受瞩目,但高门槛让大众“望尘莫及”。使用大型模型的成本增加了。核心原因是显存的限制。GPU计算速度快,但显存容量有限,无法容纳大型模型。Colossal-AI针对这个痛点,通过异构内存系统,高效地同时使用GPU显存和廉价的CPU内存,在仅带GPU的个人PC上就可以训练高达180亿个GPT参数,可以提高模型容量提升十倍以上,大幅降低AI大模型微调推理等下游任务和应用部署门槛,可轻松扩展至大规模分布式。HuggingFace为深度学习社区提供了超过50,000个AI模型的实现,包括GPT和OPT等大型模型,已成为最受欢迎的AI库之一。Colossal-AI无缝支持HuggingFace社区模型,使每个开发人员都可以访问大模型。接下来,我们将以Meta发布的大模型OPT为例,展示如何使用Colossal-AI仅用几行代码就可以实现大模型的低成本训练和微调。开源地址:https://github.com/hpcaitech/ColossalAI低成本加速大型模型OPTOPTOPT模型全称OpenPretrainedTransformer,是Meta发布的对标GPT-3的大型Transformer模型(脸书)人工智能实验室。相对于OpenAI尚未公开模型权重的GPT-3,MetaAI大手笔开源了所有代码和模型权重,极大地促进了AI大模型的民主化,每个开发者都可以基于这个优化的下游任务开发个性。接下来,我们将使用HuggingFace提供的OPT模型的预训练权重对CasualLanguageModeling进行微调。添加配置文件要使用Colossal-AI中的各种强大功能,用户无需更改代码训练逻辑,只需添加一个简单的配置文件即可赋予模型预期的功能,如混合精度、梯度累积、多维并行training,Redundantmemoryoptimization等。在GPU上,以异构训练为例,我们只需要在配置文件中添加相关的配置项即可。其中,tensor_placement_policy决定了我们的异构训练策略。这个参数可以是cuda、cpu和auto。每种策略都有不同的优势:cuda:所有模型参数都放在GPU上,适用于不卸载仍可训练的传统场景;cpu会将所有的模型参数放在CPU内存中,GPU内存中只保留当前参与计算的权重,适用于超大型模型的训练;auto会根据实时内存信息自动判断GPU内存中预留的参数量,可以最大限度地利用GPU内存,减少CPU和GPU之间的数据传输。对于一般用户,只需选择自动策略,Colossal-AI会实时自动动态选择最佳异构策略,最大化计算效率。fromcolossalai.zero.shard_utilsimportTensorShardStrategyzero=dict(model_config=dict(shard_strategy=TensorShardStrategy(),tensor_placement_policy="auto"),optimizer_config=dict(gpu_margin_mem_ratio=0.8)runandstart你可以用一行来启动声明的新函数code.首先,通过一行代码用配置文件启动Colossal-AI,Colossal-AI会自动初始化分布式环境,读取相关配置,然后自动将配置中的函数注入到模型和优化器等组件中.colossalai.launch_from_torch(config='./configs/colossalai_zero.py')接下来,用户可以照常定义数据集、模型、优化器、损失函数等,比如直接使用原生PyTorch代码。在定义模型时,只需要在ZeroInitContext下初始化模型即可,示例中我们使用了OPTForCausalLM模型和HuggingFace提供的预训练权重在Wikitext数据集上进行fine-tune吨。withZeroInitContext(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上有显着优势,相比微软DeepSolspeed-AI的自动化auto策略在不同的模型规模上都比DeepSpeed的ZeROOffloading策略有显着优势,最快实现了40%的加速。然而,PyTorch等传统深度学习框架无法在单个GPU上运行如此大的模型。对于8个GPU的并行训练,Colossal-AI只需要在启动命令中添加-nprocs8即可!如此显着改进背后的秘密来自Colossal-AI高效的异构内存管理子系统Gemini。简单来说,模型训练时,Gemini在前几步预热,收集PyTorch动态计算图中的内存消耗信息;预热结束后,在计算一个算子之前,使用收集到的内存使用记录,Gemini会在计算设备上预留这个算子所需的峰值内存,同时将一些模型张量从GPU内存中移动到中央处理器内存。Gemini内置的内存管理器为每个张量标记状态信息,包括HOLD、COMPUTE、FREE等,然后根据动态查询到的内存使用情况,不断动态转换张量状态,调整张量的位置。与DeepSpeed的ZeROOffload的静态划分相比,Colossal-AIGemini可以更高效地使用GPU内存和CPU内存。在硬件极其有限的情况下,最大化模型容量和平衡训练速度。对于大模型的代表GPT,在搭载RTX20606GB的普通游戏本上使用Colossal-AI,足以训练出高达15亿参数的模型;对于搭载RTX309024GB的个人电脑,可以直接训练出180亿参数的模型;对于TeslaV100等专业计算卡,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模型,相比Nvidia的解决方案,Colossal-AI只需要一半的计算资源就可以开始训练;如果使用相同的计算资源,速度可以提升11%,可以减少GPT-3训练成本超过100万美元。Colossal-AI相关解决方案已在自动驾驶、云计算、零售、医药、芯片等领域被知名厂商成功落地,获得广泛好评。例如,对于蛋白质结构预测应用AlphaFold2,基于Colossal-AI的加速程序FastFold成功超越了谷歌和哥伦比亚大学的程序,将AlphaFold2的训练时间从11天减少到67小时,总成本为降低。在长序列推理中,系统也实现了9.3到11.6倍的速度提升。Colossal-AI专注于开源社区建设,提供中文教程,开通用户社区和论坛,针对用户反馈进行高效沟通和迭代更新,不断添加PaLM、AlphaFold等前沿应用。自开源以来,Colossal-AI多次荣登GitHub和PapersWithCode热榜全球第一,与众多拥有数万star的明星开源项目一起受到国内外关注!传送门项目地址:https://github.com/hpcaitech/ColossalAI
