Habana Gaudi 上的 Transformers 入门指南

发布于 2022 年 4 月 26 日
在 GitHub 上更新

几周前,我们很高兴地宣布 Habana LabsHugging Face 将合作加速 Transformer 模型的训练。

与最新的基于 GPU 的 Amazon EC2 实例相比,Habana Gaudi 加速器在训练机器学习模型方面提供了高达 40% 的性价比提升。我们非常高兴能将这一性价比优势带给 Transformers 🚀

在这篇实操文章中,我将向您展示如何在 Amazon Web Services 上快速设置 Habana Gaudi 实例,然后微调一个 BERT 模型用于文本分类。和往常一样,我们提供了所有代码,以便您可以在自己的项目中复用。

我们开始吧!

在 AWS 上设置 Habana Gaudi 实例

使用 Habana Gaudi 加速器最简单的方法是启动一个 Amazon EC2 DL1 实例。这些实例配备了 8 个 Habana Gaudi 处理器,借助 Habana 深度学习亚马逊云主机镜像 (AMI),可以轻松地投入使用。该 AMI 预装了 Habana SynapseAI® SDK 以及运行 Gaudi 加速的 Docker 容器所需的工具。如果您想使用其他 AMI 或容器,可以在 Habana 文档中找到相关说明。

从 us-east-1 区域的 EC2 控制台开始,我首先点击 启动实例 并为实例定义一个名称 (“habana-demo-julsimon”)。

然后,我在亚马逊云市场中搜索 Habana AMI。

我选择了 Habana Deep Learning Base AMI (Ubuntu 20.04)。

接着,我选择了 dl1.24xlarge 实例大小(这是唯一可用的大小)。

然后,我选择将用于通过 ssh 连接到实例的密钥对。如果您没有密钥对,可以在此创建。

下一步,我确保实例允许入站 ssh 流量。为了简单起见,我没有限制源地址,但您在自己的账户中绝对应该这样做。

默认情况下,这个 AMI 将启动一个带有 8GB Amazon EBS 存储的实例,这在这里是不够的。我将存储空间增加到 50GB。

接下来,我为实例分配一个 Amazon IAM 角色。在实际应用中,这个角色应该拥有运行训练任务所需的最小权限集,例如从您的某个 Amazon S3 存储桶读取数据的能力。这里不需要这个角色,因为数据集将从 Hugging Face Hub 下载。如果您不熟悉 IAM,我强烈建议阅读 入门文档。

然后,我请求 EC2 将我的实例配置为竞价实例,这是降低每小时 13.11 美元成本的好方法。

最后,我启动了实例。几分钟后,实例准备就绪,我可以用 ssh 连接到它。Windows 用户可以使用 PuTTY 按照文档执行相同的操作。

ssh -i ~/.ssh/julsimon-keypair.pem ubuntu@ec2-18-207-189-109.compute-1.amazonaws.com

在这个实例上,最后的设置步骤是拉取用于 PyTorch 的 Habana 容器,我将使用这个框架来微调我的模型。您可以在 Habana 文档中找到关于其他预构建容器以及如何构建自己的容器的信息。

docker pull \
vault.habana.ai/gaudi-docker/1.5.0/ubuntu20.04/habanalabs/pytorch-installer-1.11.0:1.5.0-610

一旦镜像被拉取到实例上,我以交互模式运行它。

docker run -it \
--runtime=habana \
-e HABANA_VISIBLE_DEVICES=all \
-e OMPI_MCA_btl_vader_single_copy_mechanism=none \
--cap-add=sys_nice \
--net=host \
--ipc=host vault.habana.ai/gaudi-docker/1.5.0/ubuntu20.04/habanalabs/pytorch-installer-1.11.0:1.5.0-610

现在我已经准备好微调我的模型了。

在 Habana Gaudi 上微调文本分类模型

我首先在我刚刚启动的容器内克隆 Optimum Habana 仓库。

git clone https://github.com/huggingface/optimum-habana.git

然后,我从源码安装 Optimum Habana 包。

cd optimum-habana
pip install .

然后,我移动到包含文本分类示例的子目录,并安装所需的 Python 包。

cd examples/text-classification
pip install -r requirements.txt

我现在可以启动训练任务了,它会从 Hugging Face Hub 下载 bert-large-uncased-whole-word-masking 模型,并在 GLUE 基准测试的 MRPC 任务上进行微调。

请注意,我正在从 Hugging Face Hub 获取 BERT 的 Habana Gaudi 配置,您也可以使用自己的配置。此外,还支持其他流行模型,您可以在 Habana 组织中找到它们的配置文件。

python run_glue.py \
--model_name_or_path bert-large-uncased-whole-word-masking \
--gaudi_config_name Habana/bert-large-uncased-whole-word-masking \
--task_name mrpc \
--do_train \
--do_eval \
--per_device_train_batch_size 32 \
--learning_rate 3e-5 \
--num_train_epochs 3 \
--max_seq_length 128 \
--use_habana \
--use_lazy_mode \
--output_dir ./output/mrpc/

2 分 12 秒后,任务完成,并取得了 0.9181 的优异 F1 分数,如果增加更多轮次,分数肯定还会提高。

***** train metrics *****
  epoch                    =        3.0
  train_loss               =      0.371
  train_runtime            = 0:02:12.85
  train_samples            =       3668
  train_samples_per_second =     82.824
  train_steps_per_second   =      2.597

***** eval metrics *****
  epoch                   =        3.0
  eval_accuracy           =     0.8505
  eval_combined_score     =     0.8736
  eval_f1                 =     0.8968
  eval_loss               =      0.385
  eval_runtime            = 0:00:06.45
  eval_samples            =        408
  eval_samples_per_second =     63.206
  eval_steps_per_second   =      7.901

最后但同样重要的是,我终止了 EC2 实例以避免不必要的费用。查看 EC2 控制台中的节省摘要,我看到由于使用了竞价实例,我节省了 70% 的费用,每小时只需支付 3.93 美元,而不是 13.11 美元。

如您所见,Transformers、Habana Gaudi 和 AWS 实例的组合是强大、简单且经济高效的。快来试试吧,并告诉我们您的想法。我们非常欢迎您在 Hugging Face 论坛上提出问题和反馈。


联系 Habana 以了解更多关于在 Gaudi 处理器上训练 Hugging Face 模型的信息。

社区

注册登录 以发表评论