使用 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:提供 GaudiTrainerGaudiTrainingArguments,它们是围绕标准 Hugging Face Trainer 的包装器,专为 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-habanaDistributedRunner(或 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%。

Sources