このチュートリアルでは、Cloud TPU で BERT モデルのトレーニングを行う方法について説明します。
BERT は事前トレーニングの言語表現モデルです。事前トレーニングとは、最初にウィキペディアなどの大規模なテキストソースを使用して BERT のトレーニングを行うことを意味します。その後、このトレーニング結果を質問応答や感情分析などの他の自然言語処理(NLP)タスクに適用できます。BERT と Cloud TPU を使用すると、さまざまな NLP モデルを 30 分ほどでトレーニングできます。
BERT の詳細については、以下のリソースをご覧ください。
- オープンソース化された BERT: 自然言語処理の最先端の事前トレーニング
- BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding
目標
- データセットとモデルの出力を格納する Cloud Storage バケットを作成します。
- BERT リポジトリと他の必要なファイルのクローンを作成します。
- トレーニング ジョブを実行します。
- 出力結果を確認します。
費用
このチュートリアルでは、課金対象である次の Google Cloud コンポーネントを使用します。
- Compute Engine
- Cloud TPU
- Cloud Storage
料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを生成できます。
始める前に
このセクションでは、Cloud Storage バケットと Compute Engine VM の設定について説明します。
Cloud Shell ウィンドウを開きます。
プロジェクト ID の変数を作成します。
export PROJECT_ID=project-id
Cloud TPU を作成するプロジェクトを使用するように Google Cloud CLI を構成します。
gcloud config set project ${PROJECT_ID}
このコマンドを新しい Cloud Shell VM で初めて実行すると、
Authorize Cloud Shell
ページが表示されます。ページの下部にある [Authorize
] をクリックして、gcloud
に認証情報を使用した GCP API の呼び出しを許可します。Cloud TPU プロジェクトのサービス アカウントを作成します。
gcloud beta services identity create --service tpu.googleapis.com --project $PROJECT_ID
このコマンドでは、Cloud TPU サービス アカウントを次の形式で返します。
service-PROJECT_NUMBER@cloud-tpu.iam.gserviceaccount.com
次のコマンドを使用して Cloud Storage バケットを作成します。
gsutil mb -p ${PROJECT_ID} -c standard -l us-central1 -b on gs://bucket-name
この Cloud Storage バケットには、モデルのトレーニングに使用するデータとトレーニング結果が格納されます。
Cloud TPU でストレージ バケットの読み取りと書き込みを行うには、プロジェクトのサービス アカウントに読み取り / 書き込み権限または管理者権限が必要です。これらの権限を表示、設定する方法については、ストレージ バケットのセクションをご覧ください。
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
コマンドフラグの説明
gcloud
コマンドの詳細については、gcloud リファレンスをご覧ください。指定した構成が表示されます。承認する場合は y、キャンセルする場合は n を入力してください。
gcloud
コマンドの実行が終了したら、shell プロンプトがusername@project
からusername@vm-name
に変更されたことを確認します。変更されていれば、Compute Engine VM にログインしていることになります。gcloud compute ssh bert-tutorial --zone=us-central1-b
これらの手順を続行する場合は、VM セッション ウィンドウで、(vm)$
で始まる各コマンドを実行します。
環境変数をいくつか定義する
(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 アカウントに課金されないようにするには、リソースを含むプロジェクトを削除するか、プロジェクトを維持して個々のリソースを削除します。
Compute Engine VM との接続を解除します。
(vm)$ exit
プロンプトが
user@projectname
に変わります。これは、現在、Cloud Shell 内にいることを示しています。Cloud Shell で、次の
gcloud compute tpus execution-groups
コマンドを使用して Compute Engine VM と Cloud TPU を削除します。$ gcloud compute tpus execution-groups delete bert-tutorial \ --zone=us-central1-b
gcloud compute tpus execution-groups list
を実行して、リソースが削除されたことを確認します。削除には数分かかることがあります。以下のようなレスポンスは、インスタンスが正常に削除されたことを示します。$ gcloud compute tpus execution-groups list \ --zone=us-central1-b
NAME STATUS
次に示すように、
gsutil
を使用して Cloud Storage バケットを削除します。bucket-name を Cloud Storage バケットの名前に置き換えます。$ gsutil rm -r gs://bucket-name
次のステップ
TensorFlow Cloud TPU のチュートリアルでは通常、サンプル データセットを使用してモデルをトレーニングします。このトレーニングの結果は推論には使用できません。モデルを推論に使用するには、一般公開されているデータセットまたは独自のデータセットでデータをトレーニングします。Cloud TPU でトレーニングされた TensorFlow モデルは通常、データセットを TFRecord 形式にする必要があります。
データセット変換ツールのサンプルを使用して、画像分類データセットを TFRecord 形式に変換できます。画像分類モデルを使用しない場合は、自分でデータセットを TFRecord 形式に変換する必要があります。詳細については、TFRecord と tf.Example をご覧ください。
ハイパーパラメータ調整
データセットでモデルのパフォーマンスを向上させるには、モデルのハイパーパラメータを調整します。すべての TPU でサポートされているモデルに共通のハイパーパラメータに関する情報については、GitHub をご覧ください。モデルに固有のハイパーパラメータに関する情報については、各モデルのソースコードで確認できます。ハイパーパラメータ調整の詳細については、ハイパーパラメータ調整の概要、ハイパーパラメータ調整サービスの使用、ハイパーパラメータを調整するをご覧ください。
推論
モデルをトレーニングしたら、そのモデルを推論(予測)に使用できます。AI Platform は、機械学習モデルを開発、トレーニング、デプロイするためのクラウドベースのソリューションです。モデルをデプロイすれば、AI Platform Prediction サービスを使用できるようになります。
- ローカルマシンへのインストール方法など、
gcloud
の詳細を学習する。 - 他の TPU サンプルで試してみる。
- TensorBoard の TPU ツールを確認します。