史上首个100%开源大模型重磅登场
2024-02-04
来源:新智元
艾伦人工智能研究所等 5 机构最近公布了史上最全的开源模型「OLMo」,公开了模型的模型权重、完整训练代码、数据集和训练过程,为以后开源社区的工作设立了新的标杆。
多年来,语言模型一直是自然语言处理(NLP)技术的核心,考虑到模型背后的巨大商业价值,最大最先进的模型的技术细节都是不公开的。
现在,真・完全开源的大模型来了!
来自艾伦人工智能研究所、华盛顿大学、耶鲁大学、纽约大学和卡内基梅隆大学的研究人员,联合发表了一项足以载入 AI 开源社区史册的工作 ——
他们几乎将从零开始训练一个大模型过程中的一切数据和资料都开源了!
具体来说,艾伦人工智能研究所推出的这个开放大语言模型(Open Language Model,OLMo)实验和训练平台,则提供了一个完全开源的大模型,以及所有和训练开发这个模型有关的数据和技术细节 ——
训练和建模:它包括完整的模型权重、训练代码、训练日志、消融研究、训练指标和推理代码。
预训练语料:一个包含了高达 3T token 的预训练开源语料库,以及产生这些训练数据的代码。
模型参数:OLMo 框架提供了四个不同架构、优化器和训练硬件体系下的 7B 大小的模型,以及一个 1B 大小的模型,所有模型都在至少 2T token 上进行了训练。
同时,也提供了用于模型推理的代码、训练过程的各项指标以及训练日志。
评估工具:公开了开发过程中的评估工具套件,包括每个模型训练过程中每 1000 step 中包含的超过 500 个的检查点以及评估代码。
所有数据都在 apache 2.0 下授权使用(免费商用)。
如此彻底的开源,似乎是给开源社区打了个样 —— 以后不像我这样开源的,就别说自己是开源模型了。
性能评估
从核心的评估结果来看,OLMo-7B 与同类开源模型相比略胜一筹。在前 9 项评测中,OLMo-7B 有 8 项排名前三,其中有 2 项超越了其他所有模型。
在很多生成任务或阅读理解任务(例如 truthfulQA)上,OLMo-7B 都超过了 Llama 2,但在一些热门的问答任务(如 MMLU 或 Big-bench Hard)上表现则要差一些。
前 9 个任务是研究人员对预训练模型的内部评估标准,而下面三个任务则是为了完善 HuggingFace Open LLM 排行榜而加入的
下图展示了 9 个核心任务准确率的变化趋势。除了 OBQA 外,随着 OLMo-7B 接受更多数据的训练,几乎所有任务的准确率都呈现上升趋势。
与此同时,OLMo 1B 与其同类模型的核心评估结果表明,OLMo 与它们处于同一水平。
通过使用艾伦 AI 研究所的 Paloma(一个基准测试)和可获取的检查点,研究人员分析了模型预测语言能力与模型规模因素(例如训练的 token 数量)之间的关系。
可以看到,OLMo-7B 在性能上与主流模型持平。其中,每字节比特数(Bits per Byte)越低越好。
通过这些分析,研究人员发现模型在处理不同数据源时的效率差异较大,这主要取决于模型训练数据与评估数据的相似度。
特别地,OLMo-7B 在主要基于 Common Crawl 的数据源上表现出色(比如 C4)。
不过,在与网络抓取文本关系不大的数据源上,如 WikiText-103、M2D2 S2ORC 和 M2D2 Wikipedia,OLMo-7B 与其他模型相比效率较低。
RedPajama 的评估也体现了相似的趋势,可能是因为它的 7 个领域中只有 2 个来源于 Common Crawl,且 Paloma 对每个数据源中的各个领域给予了相同的权重。
鉴于像 Wikipedia 和 arXiv 论文这样的精选数据源提供的异质数据远不如网络抓取文本丰富,随着预训练数据集的不断扩大,维持对这些语言分布的高效率会很更加困难。
OLMo 架构
在模型的架构方面,团队基于的是 decoder-only 的 Transformer 架构,并采用了 PaLM 和 Llama 使用的 SwiGLU 激活函数,引入了旋转位置嵌入技术(RoPE),并改进了 GPT-NeoX-20B 的基于字节对编码(BPE)的分词器,以减少模型输出中的个人可识别信息。
此外,为了保证模型的稳定性,研究人员没有使用偏置项(这一点与 PaLM 的处理方式相同)。
预训练数据集:Dolma
虽然研究人员在获取模型参数方面取得了一定的进展,但开源社区目前预训练数据集的开放程度还远远不够。
之前的预训练数据往往不会随着模型的开源而公开(闭源模型就更不用说了)。
而且有关这些数据的说明文档也常常缺乏足够的细节,但是这些细节对于想要复现研究或完全理解相关工作至关重要。
这一情况加大了语言模型研究的难度 —— 比如,了解训练数据如何影响模型能力和其局限性。
为了推动语言模型预训练领域的开放研究,研究人员构建并公开了预训练数据集 Dolma。
这是一个包含了从 7 种不同数据来源获取的 3 万亿个 token 的多样化、多源语料库。
这些数据源一方面在大规模语言模型预训练中常见,另一方面也能被普通大众所接触。
Dolma 的构建过程包括六个步骤:语言过滤、质量过滤、内容过滤、去重、多源混合和 token 化。
在整理和最终发布 Dolma 过程中,研究人员确保各数据源的文档保持独立。
他们还开源了一套高效的数据整理工具,这套工具能够帮助进一步研究 Dolma、复制成果,并简化预训练语料库的整理工作。
此外,研究人员也开源了 WIMBD 工具,以助于数据集分析。
训练 OLMo
分布式训练框架
研究人员利用 PyTorch 的 FSDP 框架和 ZeRO 优化器策略来训练模型。这种方法通过将模型的权重和它们对应的优化器状态在多个 GPU 中进行分割,从而有效减少了内存的使用量。
在处理高达 7B 规模的模型时,这项技术使研究人员能够在每个 GPU 上处理 4096 个 token 的微批大小,以实现更高效的训练。
对于 OLMo-1B 和 7B 模型,研究人员固定使用大约 4M token(2048 个数据实例,每个实例包含 2048 个 token 的序列)的全局批大小。
而对于目前正在训练中的 OLMo-65B 模型,研究人员采用了一个批大小预热策略,起始于大约 2M token(1024 个数据实例),之后每增加 100B token,批大小翻倍,直至最终达到大约 16M token(8192 个数据实例)的规模。
为了加快模型训练的速度,研究人员采用了混合精度训练的技术,这一技术是通过 FSDP 的内部配置和 PyTorch 的 amp 模块来实现的。
这种方法特别设计,以确保一些关键的计算步骤(例如 softmax 函数)始终以最高精度执行,以保证训练过程的稳定性。
与此同时,其他大部分计算则使用一种称为 bfloat16 的半精度格式,以减少内存使用并提高计算效率。
在特定配置中,每个 GPU 上的模型权重和优化器状态都以最高精度保存。
只有在执行模型的前向传播和反向传播,即计算模型的输出和更新权重时,每个 Transformer 模块内的权重才会临时转换为 bfloat16 格式。
此外,各个 GPU 间同步梯度更新时,也会以最高精度进行,以确保训练质量。
优化器
研究人员采用了 AdamW 优化器来调整模型参数。
无论模型规模大小如何,研究人员都会在训练初期的 5000 步(大约处理 21B 个 token)内逐渐增加学习率,这一过程称为学习率预热。
预热结束后,学习率将按线性规律逐渐减少,直到降至最高学习率的十分之一。
此外,研究人员还会对模型参数的梯度进行裁剪,确保其总的 L1 范数不会超过 1.0。
数据集
研究人员利用开放数据集 Dolma 中的一个 2T token 的样本,构建了他们的训练数据集。
研究人员将每篇文档的 token 连接起来,每篇文档的末尾都会加上一个特殊的 EOS token,接着将这些 token 分成每组 2048 个,形成训练样本。
这些训练样本在每次训练时都会以同样的方式进行随机打乱。研究人员还提供了一些工具,使得任何人都可以复原每个训练批次的具体数据顺序和组成。
研究人员已经发布的所有模型至少都经过了一轮(2T token)的训练。其中一些模型还进行了额外的训练,即在数据上进行第二轮训练,但采用了不同的随机打乱顺序。
根据之前的研究,这样重复使用少量数据的影响是微乎其微的。
英伟达和 AMD 都要 YES!
为了确保代码库能够同时在英伟达和 AMD 的 GPU 上都能高效运行,研究人员选择了两个不同的集群进行了模型训练测试:
利用 LUMI 超级计算机,研究人员部署了最多 256 个节点,每个节点搭载了 4 张 AMD MI250X GPU,每张 GPU 拥有 128GB 内存和 800Gbps 的数据传输速率。
通过 MosaicML (Databricks) 的支持,研究人员使用了 27 个节点,每个节点配备了 8 张英伟达 A100 GPU,每张 GPU 拥有 40GB 内存和 800Gbps 的数据传输速率。
虽然研究人员为了提高训练效率对批大小进行了微调,但在完成 2T token 的评估后,两个集群的性能几乎没有差异。
总结
与以往大多数仅仅提供模型权重和推理代码的模型不同,研究人员开源了 OLMo 的全部内容,包括训练数据、训练和评估代码,以及训练日志、实验结果、重要发现以及 Weights & Biases 的记录等等。
此外,团队正在研究如何通过指令优化和不同类型的强化学习(RLHF)来改进 OLMo。而这些微调代码、数据和经过微调后的模型也都会被开源。
研究人员致力于持续支持和发展 OLMo 及其框架,推动开放语言模型(LM)的发展,助力开放研究社区的发展。为此,研究人员计划引入更多不同规模的模型、多种模态、数据集、安全措施和评估方法,丰富 OLMo 家族。
他们希望通过今后持续进行的彻底开源工作,增强开源研究社区的力量,并引发新一轮的创新浪潮。