本教程介绍如何在 AI Platform Training 上训练“基于 Transformer 的双向编码器表示法 (BERT)”模型。
BERT 是预训练语言表示法的一种方法。预训练涉及 BERT 如何首先针对大量文本进行训练,例如维基百科。然后,您可以将训练结果应用于其他自然语言处理 (NLP) 任务,例如问答系统和情感分析。借助 BERT 和 AI Platform Training,您可以在大约 30 分钟内训练各种 NLP 模型。
如需详细了解 BERT,请参阅以下资源:
目标
- 创建一个 Cloud Storage 存储分区来保存模型输出。
- 运行训练作业。
- 验证输出结果。
在开始学习本教程之前,请检查您的 Google Cloud 项目是否已正确设置。
完成以下步骤以设置 GCP 账号,启用所需的 API,以及安装和激活 Google Cloud CLI。
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the AI Platform Training & Prediction and Compute Engine APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the AI Platform Training & Prediction and Compute Engine APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
准备数据
本教程不需要进行任何预处理或下载数据。所需的所有数据和模型检查点都在公共存储桶中提供。如果您对该过程感兴趣,请查看 Cloud TPU 教程,其中介绍了如何通过命令行创建此数据集。
提交训练作业
如需提交作业,您必须指定一些基本训练参数,以及一些与 BERT 算法相关的基本参数。
训练作业的常规参数:
训练作业参数 | |
---|---|
参数 | 说明 |
job-id |
训练作业的唯一 ID。提交训练作业后,您可以使用此参数查找训练作业状态的日志。 |
job-dir |
AI Platform Training 在训练作业成功完成后用来保存训练文件的 Cloud Storage 路径。 |
scale-tier |
指定用于训练的机器类型。使用 BASIC 选择仅使用一台机器的配置。 |
master-image-uri |
Container Registry URI,用于指定训练作业要使用的 Docker 容器。将容器用于先前定义为 IMAGE_URI 的内置 BERT 算法。 |
region |
指定用于运行训练作业的可用区域。在本教程中,您可以使用区域 us-central1 。 |
使用提供的数据集的内置 BERT 算法训练专用参数:
算法参数 | ||
---|---|---|
参数 | 值 | 说明 |
mode |
train_and_eval | 指示是否进行微调训练或导出模型。 |
train_dataset_path |
gs://cloud-tpu-checkpoints/bert/classification/mnli_train.tf_record | 存储训练数据的 Cloud Storage 路径。 |
eval_dataset_path |
gs://cloud-tpu-checkpoints/bert/classification/mnli_eval.tf_record | 存储评估数据的 Cloud Storage 路径。 |
input_meta_data_path |
gs://cloud-tpu-checkpoints/bert/classification/mnli_meta_data | 存储输入架构的 Cloud Storage 路径。 |
bert_config_file |
gs://cloud-tpu-checkpoints/bert/keras_bert/uncased_L-24_H-1024_A-16/bert_config.json | 存储 BERT 配置文件的 Cloud Storage 路径。 |
init_checkpoint |
gs://cloud-tpu-checkpoints/bert/keras_bert/uncased_L-24_H-1024_A-16/bert_model.ckpt | 启动微调检查点(通常是预训练 BERT 模型)。 |
train_batch_size |
32 | 用于训练的批次大小。 |
eval_batch_size |
32 | 用于评估的批次大小。 |
learning_rate |
2e-5 | Adam 优化器使用的学习速率。 |
num_train_epochs |
1 | 要运行的训练周期数(仅在 train_and_eval 模式下可用)。 |
steps_per_loop |
1000 | 每个图形-模式循环的步数。 |
如需查看所有其他 BERT 算法标志的详细列表,请参阅内置 BERT 参考文档。
运行训练作业
- 导航到 AI Platform > 作业页面:
在页面顶部,点击“新建训练作业”按钮,然后选择“内置算法训练”
选择 BERT 作为训练算法
使用浏览按钮标记 Cloud Storage 存储桶中的训练和评估数据集,然后选择输出目录。
在下一页使用上面的参数值配置训练作业。
为训练作业命名,并使用
BASIC_TPU
机器类型。点击“提交”以启动作业。
了解作业目录
训练作业成功完成后,AI Platform Training 会在您的 Cloud Storage 存储分区中创建经过训练的模型,以及其他一些工件。您可以在 JOB_DIR
中找到以下目录结构:
- 模型/(TensorFlow SavedModel 目录)
- saved_model.pb
- assets/
- variables/
- 总结/(来自训练和评估的日志记录)
- eval/
- train/
- 各种检查点文件(在训练期间创建和使用)
- checkpoint
- ctl_checkpoint-1.data-00000-of-00002
- …
- ctl_checkpoint-1.index
确认 JOB_DIR
中的目录结构与上述列表中描述的结构匹配:
gcloud storage ls -a $JOB_DIR/*
部署经过训练的模型
AI Platform Prediction 使用模型和版本资源来组织经过训练的模型。AI Platform Prediction 模型是存放机器学习模型版本的容器。
要部署模型,请在 AI Platform Prediction 中创建模型资源,创建该模型的一个版本,然后使用该模型和版本请求在线预测。
详细了解如何将模型部署到 AI Platform Prediction。
控制台
在作业页面上,您可以找到包含所有训练作业的列表。点击您刚刚提交的训练作业的名称。
在作业详情页面上,您可以查看作业的整体进度,也可以点击查看日志,更详细地查看进度。
如果作业成功,顶部会显示部署模型按钮。点击部署模型。
选择“部署为新模型”,然后输入模型名称。然后,点击确认。
在创建版本页面上,输入版本名称(如
v1
),并将其他所有字段保留为默认设置。点击保存。您的版本名称会显示在模型详情页面。版本创建过程需要几分钟时间才能完成。版本准备就绪后,版本名称旁会显示一个对勾图标。
点击版本名称 (
v1
) 以导航到版本详情页面。在本教程的下一步,您将发送预测请求
获取在线预测结果
请求预测时,您必须按照模型预期的方式将输入数据的格式设置为 JSON。当前的 BERT 模型不会自动预处理输入。
控制台
在
v1
(刚刚创建的版本)的版本详情页面上,您可以发送示例预测请求。选择测试和使用标签页。
将以下示例复制到输入字段:
{ "instances": [ { "input_mask": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "input_type_ids":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "input_word_ids": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] } ] }
点击测试。
稍等片刻,然后应返回预测矢量。
后续步骤
在本教程中,您已使用示例数据集训练 BERT 模型。在大多数情况下,此训练的结果不能用于进行推断。要使用模型进行推断,您可以在公开提供的数据集或您自己的数据集上训练数据。在 Cloud TPU 上训练的模型要求数据集采用 TFRecord 格式。
您可以使用数据集转换工具示例将图片分类数据集转换为 TFRecord 格式。如果您未使用图片分类模型,则必须自行将数据集转换为 TFRecord 格式。如需了解详情,请参阅 TFRecord 和 tf.Example
- 详细了解如何使用内置 BERT 算法。