YaLM 100B是一个类似 GPT 的神经网络,用于生成和处理文本。它可以被世界各地的开发者和研究人员免费使用。
该模型利用 1000 亿个参数。我们花了 65 天的时间在由 800 个 A100 显卡和 1.7 TB 在线文本、书籍以及无数其他英语和俄语资源组成的集群上训练该模型。
有关加速和稳定的培训详细信息和最佳实践可以在Medium (英语)和Habr (俄语)文章中找到。
我们使用 DeepSpeed 来训练模型,并从 Megatron-LM 示例中汲取灵感。但是,此存储库中的代码与用于训练模型的代码不同。相反,它是来自 DeepSpeed 存储库的库存示例,只需进行最少的更改即可推断我们的模型。
下载权重之前,请确保有 200GB 的可用磁盘空间。该模型(代码基于 microsoft/DeepSpeedExamples/Megatron-LM-v1.1.5-ZeRO3)应该在具有张量并行性的多个 GPU 上运行。它在 4 个 (A100 80g) 和 8 个 (V100 32g) GPU 上进行了测试,但能够使用总共约 200GB GPU 内存的不同配置,正确划分权重维度(例如 16、64、128)。
bash download/download.sh
下载模型权重和词汇。./yalm100b_checkpoint/weights/
,词汇表将下载到./yalm100b_checkpoint/vocab/
。docker/pull.sh
拉取它。它与A100和V100兼容。docker/build.sh
从源代码构建 docker 镜像(这只会从docker/Dockerfile
构建 docker 镜像)。docker/run.sh
(卷、名称和其他参数可以更改) 。 您可以从以下脚本开始:
examples/generate_interactive.sh
:从命令行交互式生成,是尝试模型的最简单方法。examples/generate_conditional_sampling.sh
:具有采样策略的条件生成。默认使用top-p,随意更改温度或使用top-k。输入是 jsonlines (示例: examples/example_cond_input.json
),输出将是相同的 jsonlines,并将生成的文本字段添加到每行。examples/generate_conditional_greedy.sh
:与之前相同,但生成是贪婪的。适合解决少样本问题。examples/generate_unconditional.sh
:无条件生成。不使用输入,输出将为 jsonlines。 该模型根据 Apache 2.0 许可证发布,允许研究和商业使用,Megatron-LM 则根据 Megatron-LM 许可证获得许可。
用于训练 YaLM-100B 的数据集由以下部分组成(粗略百分比以模型看到的标记来衡量):
25% The Pile — Eleuther AI 团队开放的英语数据集
我们团队收集的75%俄语文本(给出了整个数据集的百分比)
Yandex 搜索索引中 49% 的俄语网页通过以下启发式从 ~100Tb 过滤到 ~1Tb:
12% 来自 Yandex 搜索索引的各种来源的新闻
俄语分布词库中使用的数据集的 10% 书籍
3% 来自 Taiga 数据集的杂项文本
1.5% 来自社交媒体的对话以类似于 Reddit 在 The Pile 中处理的方式进行预处理
维基百科的 0.5% 俄语部分
一些子集在训练期间被遍历了多达 3 次。
模型在 800 个 A100 集群上进行了约 65 天的训练。期间消耗了300B代币。您可以在 HF 页面上看到带有 LR 的 TensorBoard 和提升时间表、训练指标和我们的“温度计”。