Cloud TPU による BERT の調整: 文と文のペア分類タスク

このチュートリアルでは、Cloud TPU で BERT モデルのトレーニングを行う方法について説明します。

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

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

目標

  • データセットとモデルの出力を格納する Cloud Storage バケットを作成します。
  • BERT リポジトリと他の必要なファイルのクローンを作成します。
  • トレーニング ジョブを実行します。
  • 出力結果を確認します。

費用

このチュートリアルでは、Google Cloud の課金対象となる以下のコンポーネントを使用します。

  • Compute Engine
  • Cloud TPU
  • クラウド ストレージ

料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを出すことができます。新しい Google Cloud ユーザーは無料トライアルをご利用いただける場合があります。

始める前に

このセクションでは、Cloud Storage バケットと Compute Engine VM の設定について説明します。

  1. Cloud Shell ウィンドウを開きます。

    Cloud Shell を開く

  2. プロジェクト ID の変数を作成します。

    export PROJECT_ID=project-id
    
  3. Cloud TPU を作成するプロジェクトを使用するように gcloud コマンドライン ツールを構成します。

    gcloud config set project ${PROJECT_ID}
    

    このコマンドを新しい Cloud Shell VM で初めて実行すると、Authorize Cloud Shell ページが表示されます。ページの下部にある [Authorize] をクリックして、gcloud に認証情報を使用した GCP API の呼び出しを許可します。

  4. Cloud TPU プロジェクトのサービス アカウントを作成します。

    gcloud beta services identity create --service tpu.googleapis.com --project $PROJECT_ID
    

    このコマンドでは、Cloud TPU サービス アカウントを次の形式で返します。

    service-PROJECT_NUMBER@cloud-tpu.iam.gserviceaccount.com
    

  5. 次のコマンドを使用して Cloud Storage バケットを作成します。

    gsutil mb -p ${PROJECT_ID} -c standard -l us-central1 -b on gs://bucket-name
    

    この Cloud Storage バケットには、モデルのトレーニングに使用するデータとトレーニング結果が格納されます。

    Cloud TPU でストレージ バケットの読み取りと書き込みを行うには、プロジェクトのサービス アカウントに読み取り / 書き込み権限または管理者権限が必要です。これらの権限を表示、設定する方法については、ストレージ バケットのセクションをご覧ください。

  6. gcloud compute tpus execution-groups コマンドを使用して Compute Engine VM と Cloud TPU を起動します。

    $ gcloud compute tpus execution-groups create \
     --name=bert-tutorial \
     --zone=us-central1-b \
     --tf-version=1.15.5 \
     --machine-type=n1-standard-8 \
     --accelerator-type=v3-8
    

    コマンドフラグの説明

    name
    作成する Cloud TPU の名前。
    zone
    Cloud TPU を作成するゾーン
    tf-version
    Tensorflow gcloud のバージョンが VM にインストールされます。
    machine-type
    作成する Compute Engine VM のマシンタイプ
    accelerator-type
    作成する Cloud TPU のタイプ

    gcloud コマンドの詳細については、gcloud リファレンスをご覧ください。

  7. 指定した構成が表示されます。承認する場合は y、キャンセルする場合は n を入力してください。

    gcloud コマンドの実行が終了したら、shell プロンプトが username@project から username@vm-name に変更されたことを確認します。変更されていれば、Compute Engine VM にログインしていることになります。

    gcloud compute ssh bert-tutorial --zone=us-central1-b
    

これらの手順を続行する場合は、VM セッション ウィンドウで、(vm)$ で始まる各コマンドを実行します。

  1. 環境変数をいくつか定義する

    (vm)$ export STORAGE_BUCKET=gs://bucket-name
    
    (vm)$ export TPU_NAME=bert-tutorial
    (vm)$ export PYTHONPATH="${PYTHONPATH}:/usr/share/tpu/models"
    (vm)$ export BERT_BASE_DIR=gs://cloud-tpu-checkpoints/bert/uncased_L-12_H-768_A-12
    (vm)$ export GLUE_DIR=$HOME/glue_data
    (vm)$ export TASK_NAME=MRPC
    

BERT リポジトリのクローンを作成する

Compute Engine 仮想マシン(VM)から、BERT リポジトリのクローンを作成します。

(vm)$ git clone https://github.com/google-research/bert

download_glue_data.py のダウンロード

このチュートリアルでは、GLUE(General Language Understanding Evaluation)ベンチマークを使用してモデル パフォーマンスの評価と分析を行います。このベンチマークを使用するには、次の git clone コマンドを使用して download_glue_data.py スクリプトをダウンロードします。

(vm)$ git clone https://gist.github.com/7f702beb69199612a039004f42c9982e.git download_glue_data

GLUE データをダウンロードする

次に、Compute Engine VM で download_glue_data.py を実行します。

(vm)$ python3 download_glue_data/download_glue_data.py --data_dir $HOME/glue_data --tasks ${TASK_NAME}

モデルのトレーニング

Compute Engine VM から次のコマンドを実行します。

python3 ./bert/run_classifier.py \
--task_name=${TASK_NAME} \
--do_train=true \
--do_eval=true \
--data_dir=${GLUE_DIR}/${TASK_NAME} \
--vocab_file=${BERT_BASE_DIR}/vocab.txt \
--bert_config_file=${BERT_BASE_DIR}/bert_config.json \
--init_checkpoint=${BERT_BASE_DIR}/bert_model.ckpt \
--max_seq_length=128 \
--train_batch_size=32 \
--learning_rate=2e-5 \
--num_train_epochs=3.0 \
--output_dir=${STORAGE_BUCKET}/${TASK_NAME}-output/ \
--use_tpu=True \
--tpu_name=${TPU_NAME}

コマンドフラグの説明

task_name
タスク名。このチュートリアルでは、Microsoft Research Paraphrase Corpus(MSRPC)タスクを使用します。
do_train
モデルのトレーニングを行います。
do_eval
モデルの評価を行います。
data_dir
トレーニング データが格納されている Cloud Storage パス。
vocab_file
BERT ボキャブラリ ファイル。
bert_config_file
BERT 構成ファイル。
init_checkpoint
事前トレーニング済みの BERT モデルの初期チェックポイントを含む json ファイルへのパス。
max_seq_length
テキストのシーケンスの最大長。BERT は、トークン化されたテキスト シーケンスの最大長を 512 に制限します。この値以下で、任意のシーケンスの長さを設定できます。
train_batch_size
トレーニングのバッチサイズ。
learning_rate
学習率。
num_train_epochs
モデルをトレーニングするためのエポックの数。
output_dir
トレーニング スクリプトの出力ディレクトリ。
use_tpu
Cloud TPU でトレーニングするには、true に設定します。
tpu_name
トレーニングに使用する Cloud TPU の名前。

結果の確認

トレーニングの所要時間は 5 分未満です。トレーニングが完了すると、次のような結果が表示されます。

I1109 21:55:34.984220 139985090225920 run_classifier.py:923] ***** Eval results *****
INFO:tensorflow:  eval_accuracy = 0.8455882
I1109 21:55:34.984345 139985090225920 run_classifier.py:925]   eval_accuracy = 0.8455882
INFO:tensorflow:  eval_loss = 0.77791333
I1109 21:55:34.984572 139985090225920 run_classifier.py:925]   eval_loss = 0.77791333
INFO:tensorflow:  global_step = 343
I1109 21:55:34.984693 139985090225920 run_classifier.py:925]   global_step = 343
INFO:tensorflow:  loss = 0.88203496
I1109 21:55:34.984774 139985090225920 run_classifier.py:925]   loss = 0.88203496

クリーンアップ

このチュートリアルで使用したリソースについて、Google Cloud アカウントに課金されないようにするには、リソースを含むプロジェクトを削除するか、プロジェクトを保存して個々のリソースを削除します。

  1. Compute Engine VM との接続を解除します。

    (vm)$ exit
    

    プロンプトが user@projectname に変わります。これは、現在、Cloud Shell 内にいることを示しています。

  2. Cloud Shell で、以下に示す gcloud compute tpus execution-groups コマンドを使用して、Compute Engine VM と Cloud TPU を削除します。

    $ gcloud compute tpus execution-groups delete bert-tutorial \
      --zone=us-central1-b
    
  3. gcloud compute tpus execution-groups list を実行して、リソースが削除されていることを確認します。削除には数分かかることがあります。次のようなレスポンスは、インスタンスが正常に削除されたことを示します。

    $ gcloud compute tpus execution-groups list \
      --zone=us-central1-b
    
       NAME             STATUS
    
  4. 以下に示すように、gsutil を使用して Cloud Storage バケットを削除します。bucket-name を Cloud Storage バケットの名前に置き換えます。

    $ gsutil rm -r gs://bucket-name
    

次のステップ

このチュートリアルでは、サンプル データセットを使用して BERT モデルをトレーニングしました。このトレーニングの結果は(ほとんどの場合)推論には使用できません。推論にモデルを使用するには、一般公開されているデータセットまたは独自のデータセットでデータをトレーニングします。Cloud TPU でトレーニングされたモデルでは、データセットを TFRecord 形式にする必要があります。

データセット変換ツールのサンプルを使用して、画像分類データセットを TFRecord 形式に変換できます。画像分類モデルを使用しない場合は、自分でデータセットを TFRecord 形式に変換する必要があります。詳細については、TFRecord と tf.Example をご覧ください。

ハイパーパラメータ調整

データセットでモデルのパフォーマンスを向上させるには、モデルのハイパーパラメータを調整します。すべての TPU でサポートされているモデルに共通のハイパーパラメータに関する情報については、GitHub をご覧ください。モデルに固有のハイパーパラメータに関する情報については、各モデルのソースコードで確認できます。ハイパーパラメータ調整の詳細については、ハイパーパラメータ調整の概要ハイパーパラメータ調整サービスの使用ハイパーパラメータを調整するをご覧ください。

推論

モデルをトレーニングしたら、そのモデルを推論(予測)に使用できます。AI Platform は、機械学習モデルを開発、トレーニングデプロイするためのクラウドベースのソリューションです。モデルをデプロイすれば、AI Platform Prediction サービスを使用できるようになります。