このチュートリアルでは、AI Platform Training で Transformer による双方向エンコード表現(BERT)モデルのトレーニングを行う方法について説明します。
BERT は言語表現の事前トレーニングの方法です。事前トレーニングとは、最初にウィキペディアなどの大規模なテキストソースを使用して BERT のトレーニングを行うことを意味します。その後、このトレーニング結果を質問応答や感情分析などの他の自然言語処理(NLP)タスクに適用できます。BERT と AI Platform Training を使用すると、さまざまな NLP モデルを約 30 分でトレーニングできます。
BERT の詳細については、以下のリソースをご覧ください。
- オープンソース化された BERT: 自然言語処理の最先端の事前トレーニング
- BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding
目標
- モデル出力を格納する 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。トレーニング ジョブを送信した後、この 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 リファレンスをご覧ください。
トレーニング ジョブを実行する
- [AI Platform] > [ジョブ] ページに移動します。
ページ上部の [新規トレーニング ジョブ] ボタンをクリックして、[組み込みアルゴリズムによるトレーニング] を選択します。
トレーニング アルゴリズムとして [BERT] を選択します。
[参照] ボタンを使用して、Cloud Storage バケットのトレーニング用データセットと評価用データセットを選択し、出力ディレクトリを選択します。
次のページで、上記の引数の値を使用して、トレーニング ジョブを構成します。
トレーニング ジョブに名前を付け、
BASIC_TPU
マシンタイプを使用します。[送信] をクリックしてジョブを開始します。
ジョブ ディレクトリについて
トレーニング ジョブが正常に完了すると、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
[ジョブ] ページには、すべてのトレーニング ジョブが一覧表示されます。前の手順で送信したトレーニング ジョブの名前をクリックします。
[ジョブの詳細] ページで、ジョブの全般的な進捗を確認できます。[ログを表示] をクリックすると、進捗の詳細が表示されます。
ジョブが成功すると、[モデルをデプロイ] ボタンが上部に表示されます。[モデルをデプロイ] をクリックします。
[新しいモデルとしてデプロイ] を選択して、モデル名を入力します。次に、[確認] をクリックします。
[バージョンの作成] ページでバージョン名(
v1
など)を入力します。他のフィールドはすべてデフォルト設定のままにします。[保存] をクリックします。[モデルの詳細] ページにバージョン名が表示されます。バージョンの作成には数分かかります。バージョンの準備ができると、バージョン名の横にチェックマークのアイコンが表示されます。
バージョン名(
v1
)をクリックして、[バージョンの詳細] ページに移動します。このチュートリアルの次のステップでは、予測リクエストを送信します。
オンライン予測を取得する
予測をリクエストするときは、入力データを、モデルが想定する JSON 形式にする必要があります。現在の BERT モデルでは、入力が自動的に前処理されません。
Console
作成したバージョン(
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 アルゴリズムの使用について詳細を確認する。