ColossalAI_colossal ai 应用场景-程序员宅基地

技术标签: 人工智能  

ChatGPT 引发的大模型热潮愈演愈烈,全球科技巨头和明星初创争相入局,打造以 AI 大模型为核心的竞争力和多样化商业使用需求。其中 LLaMA 系列模型,因良好的基础能力和开放生态,已积累了海量的用户和实际应用案例,成为无数开源模型后来者的模仿和竞争的标杆对象。

但如何降低类 LLaMA2 大模型预训练成本,如何基于 LLaMA2 通过继续预训练和微调,低成本构建 AI 大模型实际应用,仍是 AIGC 相关企业面临的关键瓶颈。

作为全球规模最大、最活跃的大模型开发工具与社区,Colossal-AI 再次迭代,提供开箱即用的 8 到 512 卡 LLaMA2 训练、微调、推理方案,对 700 亿参数训练加速 195%,并提供一站式云平台解决方案,极大降低大模型开发和落地应用成本。

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

LLaMA2 训练加速 195%

Meta 开源的 LLaMA 系列大模型进一步激发了打造类 ChatGPT 的热情,并由此衍生出了诸多项目和应用。最新的 7B~70B LLaMA2 大模型,则进一步提高了语言模型的基础能力。但由于 LLaMA2 的预训练预料大部分来自英文通用知识,而仅用微调能够提升和注入的领域知识和多语言能力也相对有限。此外,高质量的专业知识和数据集通常被视为各个行业和公司的核心资产,仅能以私有化形式保存。因此,以低成本预训练 / 继续预训练 / 微调 LLaMA2 系列大模型,结合高质量私有化业务数据积累,帮助业务降本增效是众多行业与企业的迫切需求与瓶颈。但 LLaMA2 大模型仅发布了原始模型权重与推理脚本,不支持训练 / 微调,也未提供数据集。

针对上述空白与需求,Colossal-AI 开源了针对 LLaMA2 的全流程方案,并具备高可扩展性,支持从 70 亿到 700 亿参数的模型,从 8 卡到 512 卡都可保持良好的性能

在使用 8 卡训练 / 微调 LLaMA2-7B 时,Colossal-AI 能达到约 54% 的硬件利用率(MFU),处于业界领先水平。而对于预训练任务,以使用 512 张 A100 40GB 预训练 LLaMA2-70B 为例,DeepSpeed ZeRO3 策略因显存不足而无法启动,仅能通过速度衰减较大的 ZeRO3-offload 策略启动。而 Colossal-AI 则因卓越的系统优化和扩展性,仍能保持良好性能,训练提速 195%。Colossal-AI LLaMA-2 训练 / 微调方案的高性能来源于新的异构内存管理系统 Gemini 高性能算子(包括 Flash attention 2)等系统优化。新 Gemini 提供了高可扩展性,高鲁棒性,高易用性的接口。其 Checkpoint 格式与 HuggingFace 完全兼容,减小了使用和转换成本。其对于切分、offload 等的设置更加灵活且易用,能够覆盖更多硬件配置下的 LLaMA-2 训练 / 微调任务。仅需数行代码即可使用:

from colossalai.booster import Boosterfrom colossalai.booster.plugin import GeminiPluginplugin = GeminiPlugin ()booster = Booster (plugin=plugin)model, optimizer, train_dataloader, criterion = booster.boost (model, optimizer, train_dataloader, criterion)

ShardFormer 多维细粒度并行 虽然对于主流硬件条件和大多数模型,Colossal-AI 的新 Gemini 已经能够提供良好的性能。但是对于一些极端硬件条件,或者是特殊模型,可能仍然需要多维并行的细粒度优化。现有其他方案通常需要分布式系统资深专家,手动对代码进行大规模重构和调优,Colossal-AI 的 ShardFormer 提供了开箱即用的多维并行和算子优化的能力,仅需数行代码即可使用,在单机 / 大规模集群上都能提供良好的性能。 

from colossalai.booster import Booster
from colossalai.booster.plugin import HybridParallelPlugin
from transformers.models.llama import LlamaForCausalLM, LlamaConfig
plugin = HybridParallelPlugin (tp_size=2, pp_size=2, num_microbatches=4, zero_stage=1)
booster = Booster (plugin=plugin)
model = LlamaForCausalLM (LlamaConfig ())
model, optimizer, train_dataloader, criterion = booster.boost (model, optimizer, train_dataloader, criterion)

Colossal-AI ShardFormer 支持包括 LLaMA1/2、BLOOM、OPT、T5、GPT-2、BERT、GLM 在内的主流开源模型,也可以直接使用 Huggingface/transformers 模型导入,Checkpoint 格式也与 HuggingFace 完全兼容,对比 Megatron-LM 等需重写大量代码的方案,大大提升了易用性。对于并行策略,已支持以下多种并行方式:张量并行、流水线并行、序列并行、数据并行、Zero 数据并行等,并可将多种并行方式组合使用,只需通过简单的配置命令,即可适配各种复杂的硬件环境 / 模型。同时,其内置了各种高性能算子,免去了繁琐的兼容 / 配置过程。其中包括:

  • Flash attention 2

  • Memory efficient attention (xformers)

  • Fused Normalization Layer

  • JIT kernels

云平台大模型一站式解决

为了进一步提升开发和部署效率,Colossal-AI 团队还将上述系统优势与算力结合,提供 Colossal-AI 云平台,提供廉价算力和开箱即用的 AI 主流应用,包括对话大模型,多模态模型,生物医药等,现已开启内测。通过屏蔽大模型底层的分布式并行计算、内存、通信管理与优化等,AI 开发者可以继续专注于 AI 模型与算法设计,以更低成本更快速度完成 AI 大模型助力业务降本增效。 用户只需要上传相关数据,即可无代码训练个性化私有模型,并将训练好的模型一键部署。相关的应用都经过 Colossal-AI 团队精心优化,得益于算法和系统的双面优化,能大大降低模型训练以及部署的成本。 whaosoft aiot http://143ai.com Colossal-AI 云平台:platform.luchentech.com

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

参考链接:https://www.hpc-ai.tech/blog/70b-llama2-training

LLaMA-2 相较于 LLaMA-1,引入了更多且高质量的语料,实现了显著的性能提升,全面允许商用,进一步激发了开源社区的繁荣,拓展了大型模型的应用想象空间。然而,从头预训练大模型的成本相当高,被戏称 「5000 万美元才能入局」,这使得许多企业和开发者望而却步。那么,如何以更低的成本构建自己的大型模型呢?

作为大模型降本增效的领导者,Colossal-AI 团队充分利用 LLaMA-2 的基础能力,采用高效的训练方法,仅使用约 8.5B token 数据、15 小时、数千元的训练成本,成功构建了性能卓越的中文 LLaMA-2,在多个评测榜单性能优越。

相较于原始 LLaMA-2,在成功提升中文能力的基础上,进一步提升其英文能力,性能可与开源社区同规模预训练 SOTA 模型媲美。秉承 Colossal-AI 团队一贯的开源原则,完全开源全套训练流程、代码及权重,无商用限制,并提供了一个完整的评估体系框架 ColossalEval,以实现低成本的可复现性。相关方案还可迁移应用到任意垂类领域和从头预训练大模型的低成本构建。

性能表现注:基于 ColossalEval 评分,括号中分数来源于对应模型官方发布的榜单分数,C-Eval 分数来源于官网 Leaderboard。

在常见的中、英文评测榜单,可以看到,在英文 MMLU 榜单中,Colossal-LLaMA-2-7B-base 在低成本增量预训练的加持下,克服了灾难性遗忘的问题,能力逐步提升(44.47 -> 53.06),在所有 7B 规模的模型中,表现优异。

在中文榜单中,主要对比了 CMMLU, AGIEVAL, GAOKAO 与 C-Eval,效果远超基于 LLaMA-2 的其他中文汉化模型。即使与其他采用中文语料,可能花费上千万元成本,从头预训练的各大知名模型相比,Colossal-LLaMA-2 在同规模下仍表现抢眼。尤其是与原始 LLaMA-2 相比,在中文能力上有了质的飞跃 (CMMLU: 32.97 -> 49.89)。

通过 SFT、LoRA 等方式微调,能有效注入基座模型的知识与能力十分有限,不能较好的满足高质量领域知识或垂类模型应用的构建的需求。

为了更好的评估模型的性能,Colossal-AI 团队不仅仅依赖于量化的指标,还对于模型的不同方面进行了人工的评估,以下是一些例子:从整个训练的 Loss 记录来看,在利用 Colossal-AI 系统降本增效能力的同时,模型收敛性也得到充分保证,仅通过约 8.5 B tokens(85 亿 tokens),数千元算力成本,让模型达到如此惊艳的效果。而市面上的大模型动辄使用几万亿 token 进行训练才有效果保证,成本高昂。那么 Colossal-AI 团队是如何把训练成本降低,并达到如此的效果的呢?

词表扩充与模型初始化

LLaMA-2 原始词表并未针对中文做特定优化,所包含的中文词有限,导致在中文语料上理解力不足。因此,首先对 LLaMA-2 进行了词表的扩充。

Colossal-AI 团队发现:

  • 词表的扩充不仅可以有效提升字符串序列编码的效率,并且使得编码序列包含更多的有效信息,进而在篇章级别编码和理解上,有更大的帮助。

  • 然而,由于增量预训练数据量较少,扩充较多的单词反而会导致某些单词或组合无实际意义,在增量预训练数据集上难以充分学习,影响最终效果。

  • 过大的词表会导致 embedding 相关参数增加,从而影响训练效率。

因此,经过反复实验,同时考虑了训练的质量与训练的效率,Colossal-AI 团队最终确定将词表从 LLaMA-2 原有的 32000 扩充至 69104。

有了扩充好的词表,下一步就是基于原有的 LLaMA-2 初始化新词表的 embedding。为了更好的迁移 LLaMA-2 原有的能力,实现从原有 LLaMA-2 到 中文 LLaMA-2 能力的快速迁移,Colossal-AI 团队利用原有的 LLaMA-2 的权重,对新的 embedding 进行均值初始化。既保证了新初始化的模型在初始状态下,英文能力不受影响,又可以尽可能的无缝迁移英文能力到中文上。  

数据构建 

为了更大程度的降低训练的成本,高质量的数据在其中起着关键作用,尤其是对于增量预训练,对于数据的质量,分布都有着极高的要求。为了更好的筛选高质量的数据,Colossal-AI 团队构建了完整的数据清洗体系与工具包,以便筛选更为高质量的数据用于增量预训练。

以下图片展示了 Colossal-AI 团队数据治理的完整流程:除了常见的对数据进行启发式的筛选和去重,还对重点数据进行了打分和分类筛选。合适的数据对于激发 LLaMA-2 的中文能力,同时克服英文的灾难性遗忘问题,有着至关重要的作用。

最后,为了提高训练的效率,对于相同主题的数据,Colossal-AI 团队对数据的长度进行了排序,并根据 4096 的最大长度进行拼接。

训练策略

多阶段训练

在训练方面,针对增量预训练的特点,Colossal-AI 团队设计了多阶段,层次化的增量预训练方案,将训练的流程划分为三个阶段:

  • 大规模预训练阶段:目标是通过大量语料训练,使得模型可以产出相对较为流畅的文本。该阶段由 LLaMA-2 完成,经过此阶段,模型已经掌握大量英文知识,并可以根据 Next Token Prediction  输出流畅的结果。

  • 中文知识注入阶段:该阶段依赖于高质量的中文知识,一方面增强了模型对于中文知识的掌握程度,另一方面提升了模型对于新增中文词表中单词的理解。

  • 相关知识回放阶段:该阶段致力于增强模型对于知识的理解与泛化能力,缓解灾难性遗忘问题。

多阶段相辅相成,最终保证模型在中英文的能力上齐头并进。

分桶训练

增量预训练对于数据的分布极为敏感,均衡性就尤为重要。因此,为了保证数据的均衡分布,Colossal-AI 团队设计了数据分桶的策略,将同一类型的数据划分为 10 个不同的 bins。在训练的过程中,每个数据桶中均匀的包含每种类型数据的一个 bin,从而确保了每种数据可以均匀的被模型所利用。

评估体系

为了更好的评估模型的性能,Colossal-AI 团队搭建了完整的评估体系 - ColossalEval,希望通过多维度对大语言模型进行评估。流程框架代码完全开源,不仅支持结果复现,也支持用户根据自己不同的应用场景自定义数据集与评估方式。评估框架特点总结如下:

  • 涵盖针对于大语言模型知识储备能力评估的常见数据集如 MMLU,CMMLU 等。针对于单选题这样的形式,除了常见的比较 ABCD 概率高低的计算方式,增加更为全面的计算方式,如绝对匹配,单选困惑度等,以求更加全面的衡量模型对于知识的掌握程度。

  • 支持针对多选题的评估和长文本评估。

  • 支持针对于不同应用场景的评估方式,如多轮对话,角色扮演,信息抽取,内容生成等。用户可根据自己的需求,有选择性的评估模型不同方面的能力,并支持自定义 prompt 与评估方式的扩展。

构建通用大模型到垂类大模型迁移的桥梁

由 Colossal-AI 团队的经验来看,基于 LLaMA-2 构建中文版模型,可基本分为以下流程:那么这套方案是否可以复用呢?

答案是肯定的,并且在业务落地的场景中是非常有意义的。

随着 ChatGPT 掀起的人工智能浪潮,全球各大互联网巨头、AI 公司、创企、高校和研究机构等,纷纷在通用大模型的赛道上策马狂奔。然而,通用大模型通用能力的背后往往是针对特定领域内知识的不足,因此,在实际落地上,大模型幻觉的问题就变的尤为严重。针对业务微调固然可以有一定的收获,但垂类大模型的缺失导致应用落地存在性能瓶颈。如果可以快速低成本构造一个垂类大模型,再基于垂类大模型进行业务微调,一定能在业务落地上更进一步,占得先机与优势。

将以上流程应用在任意领域进行知识迁移,即可低成本构建任意领域垂类基座大模型的轻量化流程:

对于从头预训练构建基础大模型,也可借鉴上述经验与 Colossal-AI 降本增效能力,以最低成本高效完成。

系统优化

上述 Colossal-LLaMA-2 的亮眼表现和成本优势,构建在低成本 AI 大模型开发系统 Colossal-AI 之上。

Colossal-AI 基于 PyTorch,可通过高效多维并行、异构内存等,降低 AI 大模型训练 / 微调 / 推理的开发与应用成本,提升模型任务表现,降低 GPU 需求等。仅一年多时间便已在 GitHub 开源社区收获 GitHub Star 3 万多颗,在大模型开发工具与社区细分赛道排名世界第一,已与世界 500 强在内的多家知名厂商联合开发 / 优化千亿 / 百亿参数预训练大模型或打造垂类模型。

Colossal-AI 云平台

为了进一步提高 AI 大模型开发和部署效率,Colossal-AI 已进一步升级为 Colossal-AI 云平台,以低代码 / 无代码的方式供用户在云端低成本进行大模型训练、微调和部署,快速将各种模型接入到个性化的应用中。

目前 Colossal-AI 云平台上已经预置了 Stable diffusion, LLaMA-2 等主流模型及解决方案,用户只需上传自己的数据即可进行微调,同时也可以把自己微调之后的模型部署成为 API,以实惠的价格使用 A10, A800, H800 等 GPU 资源,无需自己维护算力集群以及各类基础设施。更多应用场景、不同领域、不同版本的模型、企业私有化平台部署等正不断迭代。

ColossalAI 云平台现已开启公测,注册即可获得代金券,欢迎参与并提出反馈。

  • Colossal-AI 云平台:platform.luchentech.com

  • Colossal-AI 云平台文档:https://docs.platform.colossalai.com/

  • Colossal-AI 开源地址:https://github.com/hpcaitech/ColossalAI

参考链接:

https://www.hpc-ai.tech/blog/one-half-day-of-training-using-a-few-hundred-dollars-yields-similar-results-to-mainstream-large-models-open-source-and-commercial-free-domain-specific-LLM-solution

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_29788741/article/details/132666999

智能推荐

攻防世界_难度8_happy_puzzle_攻防世界困难模式攻略图文-程序员宅基地

文章浏览阅读645次。这个肯定是末尾的IDAT了,因为IDAT必须要满了才会开始一下个IDAT,这个明显就是末尾的IDAT了。,对应下面的create_head()代码。,对应下面的create_tail()代码。不要考虑爆破,我已经试了一下,太多情况了。题目来源:UNCTF。_攻防世界困难模式攻略图文

达梦数据库的导出(备份)、导入_达梦数据库导入导出-程序员宅基地

文章浏览阅读2.9k次,点赞3次,收藏10次。偶尔会用到,记录、分享。1. 数据库导出1.1 切换到dmdba用户su - dmdba1.2 进入达梦数据库安装路径的bin目录,执行导库操作  导出语句:./dexp cwy_init/[email protected]:5236 file=cwy_init.dmp log=cwy_init_exp.log 注释:   cwy_init/init_123..._达梦数据库导入导出

js引入kindeditor富文本编辑器的使用_kindeditor.js-程序员宅基地

文章浏览阅读1.9k次。1. 在官网上下载KindEditor文件,可以删掉不需要要到的jsp,asp,asp.net和php文件夹。接着把文件夹放到项目文件目录下。2. 修改html文件,在页面引入js文件:<script type="text/javascript" src="./kindeditor/kindeditor-all.js"></script><script type="text/javascript" src="./kindeditor/lang/zh-CN.js"_kindeditor.js

STM32学习过程记录11——基于STM32G431CBU6硬件SPI+DMA的高效WS2812B控制方法-程序员宅基地

文章浏览阅读2.3k次,点赞6次,收藏14次。SPI的详情简介不必赘述。假设我们通过SPI发送0xAA,我们的数据线就会变为10101010,通过修改不同的内容,即可修改SPI中0和1的持续时间。比如0xF0即为前半周期为高电平,后半周期为低电平的状态。在SPI的通信模式中,CPHA配置会影响该实验,下图展示了不同采样位置的SPI时序图[1]。CPOL = 0,CPHA = 1:CLK空闲状态 = 低电平,数据在下降沿采样,并在上升沿移出CPOL = 0,CPHA = 0:CLK空闲状态 = 低电平,数据在上升沿采样,并在下降沿移出。_stm32g431cbu6

计算机网络-数据链路层_接收方收到链路层数据后,使用crc检验后,余数为0,说明链路层的传输时可靠传输-程序员宅基地

文章浏览阅读1.2k次,点赞2次,收藏8次。数据链路层习题自测问题1.数据链路(即逻辑链路)与链路(即物理链路)有何区别?“电路接通了”与”数据链路接通了”的区别何在?2.数据链路层中的链路控制包括哪些功能?试讨论数据链路层做成可靠的链路层有哪些优点和缺点。3.网络适配器的作用是什么?网络适配器工作在哪一层?4.数据链路层的三个基本问题(帧定界、透明传输和差错检测)为什么都必须加以解决?5.如果在数据链路层不进行帧定界,会发生什么问题?6.PPP协议的主要特点是什么?为什么PPP不使用帧的编号?PPP适用于什么情况?为什么PPP协议不_接收方收到链路层数据后,使用crc检验后,余数为0,说明链路层的传输时可靠传输

软件测试工程师移民加拿大_无证移民,未受过软件工程师的教育(第1部分)-程序员宅基地

文章浏览阅读587次。软件测试工程师移民加拿大 无证移民,未受过软件工程师的教育(第1部分) (Undocumented Immigrant With No Education to Software Engineer(Part 1))Before I start, I want you to please bear with me on the way I write, I have very little gen...

随便推点

Thinkpad X250 secure boot failed 启动失败问题解决_安装完系统提示secureboot failure-程序员宅基地

文章浏览阅读304次。Thinkpad X250笔记本电脑,装的是FreeBSD,进入BIOS修改虚拟化配置(其后可能是误设置了安全开机),保存退出后系统无法启动,显示:secure boot failed ,把自己惊出一身冷汗,因为这台笔记本刚好还没开始做备份.....根据错误提示,到bios里面去找相关配置,在Security里面找到了Secure Boot选项,发现果然被设置为Enabled,将其修改为Disabled ,再开机,终于正常启动了。_安装完系统提示secureboot failure

C++如何做字符串分割(5种方法)_c++ 字符串分割-程序员宅基地

文章浏览阅读10w+次,点赞93次,收藏352次。1、用strtok函数进行字符串分割原型: char *strtok(char *str, const char *delim);功能:分解字符串为一组字符串。参数说明:str为要分解的字符串,delim为分隔符字符串。返回值:从str开头开始的一个个被分割的串。当没有被分割的串时则返回NULL。其它:strtok函数线程不安全,可以使用strtok_r替代。示例://借助strtok实现split#include <string.h>#include <stdio.h&_c++ 字符串分割

2013第四届蓝桥杯 C/C++本科A组 真题答案解析_2013年第四届c a组蓝桥杯省赛真题解答-程序员宅基地

文章浏览阅读2.3k次。1 .高斯日记 大数学家高斯有个好习惯:无论如何都要记日记。他的日记有个与众不同的地方,他从不注明年月日,而是用一个整数代替,比如:4210后来人们知道,那个整数就是日期,它表示那一天是高斯出生后的第几天。这或许也是个好习惯,它时时刻刻提醒着主人:日子又过去一天,还有多少时光可以用于浪费呢?高斯出生于:1777年4月30日。在高斯发现的一个重要定理的日记_2013年第四届c a组蓝桥杯省赛真题解答

基于供需算法优化的核极限学习机(KELM)分类算法-程序员宅基地

文章浏览阅读851次,点赞17次,收藏22次。摘要:本文利用供需算法对核极限学习机(KELM)进行优化,并用于分类。

metasploitable2渗透测试_metasploitable2怎么进入-程序员宅基地

文章浏览阅读1.1k次。一、系统弱密码登录1、在kali上执行命令行telnet 192.168.26.1292、Login和password都输入msfadmin3、登录成功,进入系统4、测试如下:二、MySQL弱密码登录:1、在kali上执行mysql –h 192.168.26.129 –u root2、登录成功,进入MySQL系统3、测试效果:三、PostgreSQL弱密码登录1、在Kali上执行psql -h 192.168.26.129 –U post..._metasploitable2怎么进入

Python学习之路:从入门到精通的指南_python人工智能开发从入门到精通pdf-程序员宅基地

文章浏览阅读257次。本文将为初学者提供Python学习的详细指南,从Python的历史、基础语法和数据类型到面向对象编程、模块和库的使用。通过本文,您将能够掌握Python编程的核心概念,为今后的编程学习和实践打下坚实基础。_python人工智能开发从入门到精通pdf