組み込み BERT アルゴリズムのスタートガイド

このチュートリアルでは、AI Platform Training で Transformer による双方向エンコード表現(BERT)モデルのトレーニングを行う方法について説明します。

BERT は言語表現の事前トレーニングの方法です。事前トレーニングとは、最初にウィキペディアなどの大規模なテキストソースを使用して BERT のトレーニングを行うことを意味します。その後、このトレーニング結果を質問応答感情分析などの他の自然言語処理(NLP)タスクに適用できます。BERT と AI Platform Training を使用すると、さまざまな NLP モデルを約 30 分でトレーニングできます。

BERT の詳細については、以下のリソースをご覧ください。

目標

  • モデル出力を格納する Cloud Storage バケットを作成します。
  • トレーニング ジョブを実行します。
  • 出力結果を確認します。

このチュートリアルを開始する前に、Google Cloud プロジェクトが正しく設定されていることを確認します。

次の手順で GCP アカウントの設定、必要な API の有効化、Google Cloud CLI のインストールと有効化を行います。

  1. 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.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the AI Platform Training & Prediction and Compute Engine APIs.

    Enable the APIs

  5. Install the Google Cloud CLI.
  6. To initialize the gcloud CLI, run the following command:

    gcloud init
  7. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  8. Make sure that billing is enabled for your Google Cloud project.

  9. Enable the AI Platform Training & Prediction and Compute Engine APIs.

    Enable the APIs

  10. Install the Google Cloud CLI.
  11. To initialize the gcloud CLI, run the following command:

    gcloud init

データを準備する

このチュートリアルでは、データの前処理やダウンロードは必要ありません。必要なすべてのデータとモデルのチェックポイントは、公開ストレージ バケットで使用できます。このプロセスの詳細については、Cloud TPU チュートリアルをご覧ください。コマンドラインからこのデータセットを作成する方法を確認できます。

トレーニング ジョブを送信する

ジョブを送信するには、基本的なトレーニング引数と、BERT アルゴリズムに関する基本的な引数を指定する必要があります。

トレーニング ジョブの一般的な引数:

トレーニング ジョブの引数
引数 説明
job-id トレーニング ジョブの一意の ID。トレーニング ジョブを送信した後、この ID を使用してログを検索しトレーニング ジョブのステータスを確認できます。
job-dir トレーニング ジョブが正常に完了した後に AI Platform Training がトレーニング ファイルを保存する Cloud Storage のパス。
scale-tier トレーニング用のマシンタイプを指定します。単一マシン構成を選択するには、BASIC を使用します。
master-image-uri トレーニング ジョブに使用する Docker コンテナを指定するための Container Registry URI。すでに 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 1,000 グラフモード ループごとのステップ数。

他の 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 内のディレクトリ構造は次のようになっています。

  • model/(TensorFlow SavedModel ディレクトリ
    • saved_model.pb
    • assets/
    • variables/
  • summaries/(トレーニングと評価からのロギング)
    • eval/
    • train/
  • さまざまなチェックポイント ファイル(トレーニング中に作成および使用)
    • チェックポイント
    • 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 にモデルをデプロイする方法をご覧ください。

Console

  1. [ジョブ] ページには、すべてのトレーニング ジョブが一覧表示されます。前の手順で送信したトレーニング ジョブの名前をクリックします。

  2. [ジョブの詳細] ページで、ジョブの全般的な進捗を確認できます。[ログを表示] をクリックすると、進捗の詳細が表示されます。

  3. ジョブが成功すると、[モデルをデプロイ] ボタンが上部に表示されます。[モデルをデプロイ] をクリックします。

  4. [新しいモデルとしてデプロイ] を選択して、モデル名を入力します。次に、[確認] をクリックします。

  5. [バージョンの作成] ページでバージョン名(v1 など)を入力します。他のフィールドはすべてデフォルト設定のままにします。[保存] をクリックします。

  6. [モデルの詳細] ページにバージョン名が表示されます。バージョンの作成には数分かかります。バージョンの準備ができると、バージョン名の横にチェックマークのアイコンが表示されます。

  7. バージョン名(v1)をクリックして、[バージョンの詳細] ページに移動します。このチュートリアルの次のステップでは、予測リクエストを送信します。

オンライン予測を取得する

予測をリクエストするときは、入力データを、モデルが想定する JSON 形式にする必要があります。現在の BERT モデルでは、入力が自動的に前処理されません。

Console

  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 をご覧ください。