使用 Cloud TPU 进行 BERT 微调:句子和句对分类任务 (TF 2.x)

本教程介绍如何在 Cloud TPU 上训练基于 Transformer 的双向编码器表示法 (BERT) 模型。

BERT 是预训练语言表示法的一种方法。预训练涉及 BERT 如何首先针对大量文本进行训练,例如维基百科。然后,您可以将训练结果应用于其他自然语言处理 (NLP) 任务,例如问答系统情感分析。借助 BERT 和 Cloud TPU,您可以在大约 30 分钟内训练各种 NLP 模型。

如需详细了解 BERT,请参阅以下资源:

目标

  • 创建 Cloud Storage 存储分区以保存数据集和模型输出。
  • 运行训练作业。
  • 验证输出结果。

费用

在本文档中,您将使用 Google Cloud 的以下收费组件:

  • Compute Engine
  • Cloud TPU
  • Cloud Storage

您可使用价格计算器根据您的预计使用情况来估算费用。 Google Cloud 新用户可能有资格申请免费试用

准备工作

本部分介绍如何设置 Cloud Storage 存储分区和 Compute Engine 虚拟机。

  1. 打开一个 Cloud Shell 窗口。

    打开 Cloud Shell

  2. 为项目 ID 创建一个变量。

   export PROJECT_ID=project-id
  1. 配置 Google Cloud CLI 以使用要在其中创建项目的项目 Cloud TPU。
gcloud config set project ${PROJECT_ID}
  1. 为 Cloud TPU 项目创建服务账号。
  gcloud beta services identity create --service tpu.googleapis.com --project $PROJECT_ID

该命令将返回以下格式的 Cloud TPU 服务账号:

service-PROJECT_NUMBER@cloud-tpu.iam.gserviceaccount.com
  1. 使用以下命令创建 Cloud Storage 存储分区:
    gcloud storage buckets create gs://bucket-name --project=${PROJECT_ID} --location=us-central1

此 Cloud Storage 存储分区存储您用于训练模型的数据和训练结果。用于创建 TPU 的命令, gcloud compute tpus tpu-vm create用于为 您在上一步中设置的 Cloud TPU 服务账号。如果您需要更精细的权限,请查看访问级层权限

存储桶位置必须与您的 TPU(虚拟机)位于同一区域。

  1. 使用 gcloud 启动 TPU 虚拟机。有关详情,请参阅 gcloud 参考
    $ gcloud compute tpus tpu-vm create bert-tutorial \
      --zone=us-central1-b \
      --accelerator-type=v3-8 \
      --version=tpu-vm-tf-2.17.0-se

命令标志说明

`zone`

拟在其中创建 Cloud TPU 的[区域](https://cloud.google.com/tpu/docs/types-zones?hl=zh-cn)。

`accelerator-type`

加速器类型指定要创建的 Cloud TPU 的版本和大小。 如需详细了解每个 TPU 版本支持的加速器类型,请参阅 [TPU 版本](https://cloud.google.com/tpu/docs/system-architecture-tpu-vm?hl=zh-cn#versions)。

`version`

Cloud TPU [软件版本](https://cloud.google.com/tpu/docs/supported-tpu-versions?hl=zh-cn#tpu_software_versions)。
  1. 使用 SSH 连接到 TPU 虚拟机实例。连接到虚拟机后 shell 提示符从 username@projectname 更改为 username@vm-name
gcloud compute tpus tpu-vm ssh bert-tutorial --zone=us-central1-b
  1. 为 TPU 名称创建环境变量。
  (vm)$ export TPU_NAME=local

准备数据集

  1. 定义存储模型和数据集所需的存储桶:
 (vm)$ export STORAGE_BUCKET=gs://bucket-name
  1. 将预训练的检查点和词汇表文件复制到您的存储桶:
      (vm)$ curl https://storage.googleapis.com/tf_model_garden/nlp/bert/v3/uncased_L-12_H-768_A-12.tar.gz -o uncased_L-12_H-768_A-12.tar.gz
      (vm)$ mkdir -p uncased_L-12_H-768_A-12
      (vm)$ tar -xvf uncased_L-12_H-768_A-12.tar.gz
      (vm)$ gcloud storage cp uncased_L-12_H-768_A-12 ${STORAGE_BUCKET} --recursive

训练模型

  1. 定义在测试期间 训练和评估模型:
      (vm)$ export INIT_CHECKPOINT=${STORAGE_BUCKET}/uncased_L-12_H-768_A-12/bert_model.ckpt
      (vm)$ export TFDS_DIR=${STORAGE_BUCKET}/tfds
      (vm)$ export VOCAB_FILE=${STORAGE_BUCKET}/uncased_L-12_H-768_A-12/vocab.txt
      (vm)$ export MODEL_DIR=${STORAGE_BUCKET}/bert-output
      (vm)$ export TASK=mnli
  1. 安装 TensorFlow 要求。
(vm)$ pip3 install -r /usr/share/tpu/models/official/requirements.txt
  1. 设置 PYTHONPATH 环境变量
 (vm)$ export PYTHONPATH=/usr/share/tpu/models
  1. 切换至存储模型的目录。
(vm)$ cd /usr/share/tpu/models
  1. 运行训练脚本:
    (vm)$ python3 official/nlp/train.py \
      --tpu=${TPU_NAME} \
      --experiment=bert/sentence_prediction_text \
      --mode=train_and_eval \
      --model_dir=${MODEL_DIR} \
      --config_file=official/nlp/configs/experiments/glue_mnli_text.yaml \
      --params_override="runtime.distribution_strategy=tpu, task.init_checkpoint=${INIT_CHECKPOINT}, task.train_data.tfds_data_dir=${TFDS_DIR}, task.train_data.vocab_file=${VOCAB_FILE}, task.validation_data.tfds_data_dir=${TFDS_DIR}, task.validation_data.vocab_file=${VOCAB_FILE}, trainer.train_steps=2000"

命令标志说明

`tpu`

要用于训练的 Cloud TPU 的名称。

`mode`

以下用户之一:`train`、`eval`、`train_and_eval`、 或 `predict`。

`model_dir`

存储检查点和摘要的 Cloud Storage 路径 模型训练期间的预测。您可以重复使用现有文件夹来之前加载 还可以存储其他检查点,但前提是 之前使用 Cloud TPU 和 Cloud TPU 创建 相同大小和 TensorFlow 版本。

该脚本会训练 2000 步,然后运行 307 步的评估。 在 v3-8 TPU 上,大约 5 分钟后,训练脚本应该 完整并显示类似如下所示的结果:

```auto
I0719 00:47:52.683979 140297079573568 controller.py:457] train | step:   2000 | steps/sec:   26.3 | output:
{'cls_accuracy': 0.7249375,
 'learning_rate': 1.4670059e-05,
 'training_loss': 0.6740678}
train | step:   2000 | steps/sec:   26.3 | output:
{'cls_accuracy': 0.7249375,
 'learning_rate': 1.4670059e-05,
 'training_loss': 0.6740678}
I0719 00:47:53.184051 140297079573568 controller.py:277]  eval | step:   2000 | running 307 steps of evaluation...
eval | step:   2000 | running 307 steps of evaluation...
```

清理

  1. 断开与 Compute Engine 实例的连接(如果您尚未这样做):
(vm)$ exit

您的提示符现在应为 username@projectname,表明您位于 Cloud Shell 中。

  1. 删除您的 Cloud TPU 和 Compute Engine 资源。
 $ gcloud compute tpus tpu-vm delete bert-tutorial \
      --zone=us-central1-b
  1. 通过运行 gcloud compute tpus execution-groups list 验证资源是否已删除。删除操作可能需要几分钟时间才能完成。以下命令的输出 不应包含本教程中创建的任何资源:
$ gcloud compute tpus tpu-vm list --zone=us-central1-b
  1. 使用 gcloud CLI 删除 Cloud Storage 存储桶,如下所示 。将 bucket-name 替换为您的 Cloud Storage 存储分区的名称。
 $ gcloud storage rm gs://bucket-name --recursive

后续步骤

TensorFlow Cloud TPU 教程通常使用示例数据集来训练模型。此训练的结果不能用于推理。接收者 使用模型进行推理,就可以使用公开可用的 或您自己的数据集。在 Cloud TPU 上训练的 TensorFlow 模型 通常需要将数据集 TFRecord 格式。

您可以使用数据集转换工具 示例,用于转换图片 转换为 TFRecord 格式。如果您使用的不是图片 分类模型,您需要将数据集转换为 TFRecord 格式 。如需了解详情,请参阅 TFRecord 和 tf.Example

超参数调节

要使用数据集提升模型的性能,您可以调整模型的 超参数。您可以找到所有用户共有的超参数的相关信息 支持 TPU 的 GitHub。 如需了解特定于模型的超参数,请参阅源代码 每个代码 模型。如需详细了解超参数调优,请参阅概览 超参数调优Tune 超参数

推断

训练模型后,即可将其用于推理(也称为 预测)。您可以使用 Cloud TPU 推断转换器 工具来准备和优化 在 Cloud TPU v5e 上用于推理的 TensorFlow 模型。有关 如需了解如何在 Cloud TPU v5e 上进行推理,请参阅 Cloud TPU v5e 推理 简介

文章来源:google cloud

推荐阅读

更多芯擎AI开发板干货请关注芯擎AI开发板专栏。欢迎添加极术小姐姐微信(id:aijishu20)加入技术交流群,请备注研究方向。

  • 12
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值