使用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模型的更多信息。