使用Habana Gaudi开始使用Transformers

使用Habana Gaudi开始使用Transformers

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

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

在这篇实践性的文章中,我将向您展示如何在Amazon Web Services上快速设置Habana Gaudi实例,然后对BERT模型进行文本分类的微调。和往常一样,所有的代码都已提供,以便您在自己的项目中重用。

让我们开始吧!

在AWS上设置Habana Gaudi实例

使用Habana Gaudi加速器的最简单方法是启动Amazon EC2 DL1实例。这些实例配备了8个Habana Gaudi处理器,通过Habana Deep Learning Amazon Machine Image(AMI)可以轻松投入使用。该AMI预先安装了Habana SynapseAI® SDK和运行Gaudi加速的Docker容器所需的工具。如果您希望使用其他AMI或容器,可以在Habana文档中找到相关说明。

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

然后,我在Amazon Marketplace中搜索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将我的实例配置为Spot Instance,这是降低每小时13.11美元的成本的绝佳方式。

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

ssh -i ~/.ssh/julsimon-keypair.pem [email protected]

在此实例上,最后的设置步骤是拉取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秒,作业完成,并且获得了优秀的F1分数0.9181,通过增加轮次,分数肯定可以进一步提高。

***** 训练指标 *****
  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

***** 评估指标 *****
  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控制台的节省摘要中,我看到由于Spot实例,我节省了70%,每小时只需支付3.93美元,而不是13.11美元。

正如您所看到的,Transformer、Habana Gaudi和AWS实例的组合是强大、简单且具有成本效益的。试试看,并告诉我们您的想法。我们非常欢迎您在Hugging Face论坛上提问和反馈。


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