内置 BERT 算法使用入门

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

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

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

目标

  • 创建一个 Cloud Storage 存储桶来保存模型输出。
  • 运行训练作业。
  • 验证输出结果。

在开始学习本教程之前,请检查您的 Google Cloud 项目是否已正确设置。

完成以下步骤以设置 GCP 账号,启用所需的 API,以及安装和激活 Google Cloud CLI。

  1. 登录您的 Google Cloud 账号。如果您是 Google Cloud 新手,请创建一个账号来评估我们的产品在实际场景中的表现。新客户还可获享 $300 赠金,用于运行、测试和部署工作负载。
  2. 在 Google Cloud Console 中的项目选择器页面上,选择或创建一个 Google Cloud 项目

    转到“项目选择器”

  3. 确保您的 Google Cloud 项目已启用结算功能

  4. 启用 AI Platform Training & Prediction and Compute Engine API。

    启用 API

  5. 安装 Google Cloud CLI。
  6. 如需初始化 gcloud CLI,请运行以下命令:

    gcloud init
  7. 在 Google Cloud Console 中的项目选择器页面上,选择或创建一个 Google Cloud 项目

    转到“项目选择器”

  8. 确保您的 Google Cloud 项目已启用结算功能

  9. 启用 AI Platform Training & Prediction and Compute Engine API。

    启用 API

  10. 安装 Google Cloud CLI。
  11. 如需初始化 gcloud CLI,请运行以下命令:

    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 参考文档

运行训练作业

  1. 导航到 AI Platform > 作业页面:

AI Platform > 作业页面

  1. 在页面顶部,点击“新建训练作业”按钮,然后选择“内置算法训练”

  2. 选择 BERT 作为训练算法

  3. 使用浏览按钮标记 Cloud Storage 存储桶中的训练和评估数据集,然后选择输出目录。

  4. 在下一页使用上面的参数值配置训练作业。

  5. 为训练作业命名,并使用 BASIC_TPU 机器类型。

  6. 点击“提交”以启动作业。

了解作业目录

训练作业成功完成后,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 中的目录结构与上述列表中描述的结构匹配:

gsutil ls -a $JOB_DIR/*

部署经过训练的模型

AI Platform Prediction 使用模型和版本资源来组织经过训练的模型。modelmodelAI Platform Prediction 模型是存放机器学习模型版本的容器。

要部署模型,请在 AI Platform Prediction 中创建模型资源,创建该模型的一个版本,然后使用该模型和版本请求在线预测。

详细了解如何将模型部署到 AI Platform Prediction

控制台

  1. 作业页面上,您可以找到包含所有训练作业的列表。点击您刚刚提交的训练作业的名称。

  2. 作业详情页面上,您可以查看作业的整体进度,也可以点击查看日志,更详细地查看进度。

  3. 如果作业成功,顶部会显示部署模型按钮。点击部署模型

  4. 选择“部署为新模型”,然后输入模型名称。然后,点击确认

  5. 创建版本页面上,输入版本名称(如 v1),并将其他所有字段保留为默认设置。点击保存

  6. 您的版本名称会显示在模型详情页面。版本创建过程需要几分钟时间才能完成。版本准备就绪后,版本名称旁会显示一个对勾图标。

  7. 点击版本名称 (v1) 以导航到版本详情页面。在本教程的下一步,您将发送预测请求

获取在线预测结果

请求预测时,您必须按照模型预期的方式将输入数据的格式设置为 JSON。当前的 BERT 模型不会自动预处理输入。

控制台

  1. v1(刚刚创建的版本)的版本详情页面上,您可以发送示例预测请求。

    选择测试和使用标签页。

  2. 将以下示例复制到输入字段:

      {
        "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]
            }
          ]
        }
    
  3. 点击测试

    稍等片刻,然后应返回预测矢量。

后续步骤

在本教程中,您已使用示例数据集训练 BERT 模型。在大多数情况下,此训练的结果不能用于进行推断。要使用模型进行推断,您可以在公开提供的数据集或您自己的数据集上训练数据。在 Cloud TPU 上训练的模型要求数据集采用 TFRecord 格式。

您可以使用数据集转换工具示例将图片分类数据集转换为 TFRecord 格式。如果您未使用图片分类模型,则必须自行将数据集转换为 TFRecord 格式。如需了解详情,请参阅 TFRecord 和 tf.Example