使用 Hugging Face Transformers 和 Habana Gaudi 预训练 BERT
TL;DR
Hugging Face 提供了一份技术指南,介绍如何在 AWS 上使用基于 Habana Gaudi 的 DL1 实例从头预训练 BERT-base。通过使用 optimum-habana 库,该过程相较于等效的 NVIDIA V100 GPU 训练配置实现了 25% 的成本降低。
硬件与软件栈
预训练在 AWS DL1 实例上执行,该实例配备 8 个 HPU 核心。软件栈集成了以下 Hugging Face 库:
- Transformers:模型架构的核心库。
- Optimum Habana:提供
GaudiTrainer和GaudiTrainingArguments,它们是围绕标准 Hugging FaceTrainer的包装器,专为 Habana Gaudi 硬件设计。 - Datasets:用于加载和管理预训练语料库。
预训练工作流
预训练过程分为 CPU 密集型的数据准备和 HPU 密集型的模型训练。
1. 数据准备与分词
数据准备在 CPU 优化的实例上进行(例如 AWS c6i.12xlarge),随后迁移到 DL1 实例。工作流包括:
- Dataset Merging:将 Wikipedia(20220301.en 切分)和 BookCorpus 合并为单一数据集。
- Tokenizer Training:从头训练一个新的
BertTokenizerFast,词表大小为 32,000 个 token。 - Preprocessing:对文本进行分词,并将其分组成 512 token 的块(BERT 的最大序列长度),对超出此限制的文档进行截断。
2. 通过掩码语言模型(MLM)进行模型训练
BERT 使用掩码语言模型(MLM)进行预训练,这是一项任务,模型利用双向上下文预测句子中被掩盖的词。
为了利用 DL1 实例的 8 个 HPU 核心,训练采用分布式数据并行方式实现,使用脚本 (run_mlm.py) 和来自 optimum-habana 的 DistributedRunner(或 gaudi_spawn.py)。
性能与成本分析
训练时间与成本
Hugging Face 对 100,000 步、全局批量大小为 256 的运行进行了基准测试,耗时约 12.5 小时。将此结果外推到原始 BERT 预训练所需的 1,000,000 步:
- Total Estimated Time:125 小时。
- Total Estimated Cost:在 AWS 上使用 Habana Gaudi 约 $1,650。
与 GPU 基准的比较
与在 DGX-2(16 块 NVIDIA V100 GPU)上进行的最快 BERT 预训练的 DeepSpeed 记录相比,Habana Gaudi 方法提供了显著的节省:
- GPU Cost Estimate:以 AWS p3dn.24xlarge 实例(8× V100 32GB)为参考,类似配置的成本约为 $2,075。
- Cost Reduction:Habana Gaudi 相比基于 V100 的配置实现了 25% 的成本降低。
值得注意的是,作者指出如果没有 DeepSpeed 优化,GPU 训练成本可能进一步上升至约 $3,000–$4,000。
对领域适应的影响
从头预训练使组织能够将模型适配到特定语言或专业领域。根据来源,这一过程相较于使用通用 BERT 模型,可提升模型准确率最高达 10%。