本教程介绍如何在 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 虚拟机。
打开一个 Cloud Shell 窗口。
- 为项目 ID 创建一个变量。
export PROJECT_ID=project-id
- 配置 Google Cloud CLI 以使用要在其中创建项目的项目 Cloud TPU。
gcloud config set project ${PROJECT_ID}
- 为 Cloud TPU 项目创建服务账号。
gcloud beta services identity create --service tpu.googleapis.com --project $PROJECT_ID
该命令将返回以下格式的 Cloud TPU 服务账号:
service-PROJECT_NUMBER@cloud-tpu.iam.gserviceaccount.com
- 使用以下命令创建 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(虚拟机)位于同一区域。
- 使用
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)。
- 使用 SSH 连接到 TPU 虚拟机实例。连接到虚拟机后 shell 提示符从
username@projectname
更改为username@vm-name
:
gcloud compute tpus tpu-vm ssh bert-tutorial --zone=us-central1-b
- 为 TPU 名称创建环境变量。
(vm)$ export TPU_NAME=local
准备数据集
- 定义存储模型和数据集所需的存储桶:
(vm)$ export STORAGE_BUCKET=gs://bucket-name
- 将预训练的检查点和词汇表文件复制到您的存储桶:
(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
训练模型
- 定义在测试期间 训练和评估模型:
(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
- 安装 TensorFlow 要求。
(vm)$ pip3 install -r /usr/share/tpu/models/official/requirements.txt
- 设置
PYTHONPATH
环境变量
(vm)$ export PYTHONPATH=/usr/share/tpu/models
- 切换至存储模型的目录。
(vm)$ cd /usr/share/tpu/models
- 运行训练脚本:
(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...
```
清理
- 断开与 Compute Engine 实例的连接(如果您尚未这样做):
(vm)$ exit
您的提示符现在应为 username@projectname
,表明您位于 Cloud Shell 中。
- 删除您的 Cloud TPU 和 Compute Engine 资源。
$ gcloud compute tpus tpu-vm delete bert-tutorial \
--zone=us-central1-b
通过运行
gcloud compute tpus execution-groups list
验证资源是否已删除。删除操作可能需要几分钟时间才能完成。以下命令的输出 不应包含本教程中创建的任何资源:
$ gcloud compute tpus tpu-vm list --zone=us-central1-b
- 使用 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)加入技术交流群,请备注研究方向。