このチュートリアルでは、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 バケットを作成します。
- トレーニング ジョブを実行します。
- 出力結果を確認します。
費用
このチュートリアルでは、課金対象である次の 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 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 europe-west4 gs://bucket-name
この Cloud Storage バケットには、モデルのトレーニングに使用するデータとトレーニング結果が格納されます。このチュートリアルで使用する
gcloud compute tpus execution-groups
コマンドは、前の手順で設定した Cloud TPU サービス アカウントのデフォルトの権限を設定します。権限の詳細な設定が必要な場合は、アクセスレベル権限をご覧ください。バケットのロケーションは、Compute Engine(VM)および Cloud TPU ノードと同じリージョンにする必要があります。
gcloud
コマンドを使用して Compute Engine VM と Cloud TPU を起動します。使用するコマンドは、TPU VM を使用するか TPU ノードを使用するかによって異なります。2 つの VM アーキテクチャの詳細については、システム アーキテクチャをご覧ください。gcloud
コマンドの詳細については、gcloud リファレンスをご覧ください。TPU VM
$ gcloud alpha compute tpus tpu-vm create bert-tutorial \ --zone=europe-west4-a \ --accelerator-type=v3-8 \ --version=tpu-vm-tf-2.8.0
TPU ノード
$ gcloud compute tpus execution-groups create \ --name=bert-tutorial \ --zone=europe-west4-a \ --tf-version=2.8.0 \ --machine-type=n1-standard-1 \ --accelerator-type=v3-8
自動的に Compute Engine インスタンスにログインしない場合は、次の
ssh
コマンドを実行してログインします。VM にログインすると、シェル プロンプトがusername@projectname
からusername@vm-name
に変わります。TPU VM
gcloud alpha compute tpus tpu-vm ssh bert-tutorial --zone=europe-west4-a
TPU ノード
gcloud compute ssh bert-tutorial --zone=europe-west4-a
これらの手順を続行する場合は、VM セッション ウィンドウで、
(vm)$
で始まる各コマンドを実行します。TPU 名の環境変数を作成します。
TPU VM
(vm)$ export TPU_NAME=local
TPU ノード
(vm)$ export TPU_NAME=bert-tutorial
データセットを準備する
TensorFlow の要件をインストールします。
使用するコマンドは、TPU VM を使用するか TPU ノードを使用するかによって異なります。
TPU VM
(vm)$ pip3 install -r /usr/share/tpu/models/official/requirements.txt
TPU ノード
(vm)$ pip3 install --user -r /usr/share/models/official/requirements.txt
省略可:
download_glue_data.py
をダウンロードこのチュートリアルでは、GLUE(General Language Understanding Evaluation)ベンチマークを使用してモデル パフォーマンスの評価と分析を行います。 このチュートリアル用に、GLUE データを
gs://cloud-tpu-checkpoints/bert/classification
で提供します。生の GLUE データを処理し、TFRecord を作成する場合は、GitHub のデータセット処理手順に従います。
モデルのトレーニング
モデルのトレーニングと評価に必要なパラメータ値を定義します。
(vm)$ export STORAGE_BUCKET=gs://bucket-name
(vm)$ export BERT_BASE_DIR=gs://cloud-tpu-checkpoints/bert/keras_bert/uncased_L-24_H-1024_A-16 (vm)$ export MODEL_DIR=${STORAGE_BUCKET}/bert-output (vm)$ export GLUE_DIR=gs://cloud-tpu-checkpoints/bert/classification (vm)$ export TASK=mnli
PYTHONPATH
環境変数を設定するTPU VM
(vm)$ export PYTHONPATH="/usr/share/tpu/models:${PYTHONPATH}"
TPU ノード
(vm)$ export PYTHONPATH="${PYTHONPATH}:/usr/share/models"
モデルが保存されているディレクトリに移動します。
TPU VM
(vm)$ cd /usr/share/tpu/models/official/nlp/bert
TPU ノード
(vm)$ cd /usr/share/models/official/nlp/bert
トレーニング スクリプトを実行します。
(vm)$ python3 run_classifier.py \ --mode='train_and_eval' \ --input_meta_data_path=${GLUE_DIR}/${TASK}_meta_data \ --train_data_path=${GLUE_DIR}/${TASK}_train.tf_record \ --eval_data_path=${GLUE_DIR}/${TASK}_eval.tf_record \ --bert_config_file=${BERT_BASE_DIR}/bert_config.json \ --init_checkpoint=${BERT_BASE_DIR}/bert_model.ckpt \ --train_batch_size=32 \ --eval_batch_size=32 \ --learning_rate=2e-5 \ --num_train_epochs=1 \ --model_dir=${MODEL_DIR} \ --distribution_strategy=tpu \ --tpu=${TPU_NAME} \ --steps_per_loop=500
コマンドフラグの説明
mode
train
、eval
、train_and_eval
、predict
のいずれか。input_meta_data_path
- トレーニングと評価に使用するデータセットに関するメタデータを含むファイルへのパス。
train_data_path
- トレーニング入力用の Cloud Storage パス。この例では、fake_imagenet データセットに設定されています。
eval_data_path
- 評価入力用の Cloud Storage パス。この例では、fake_imagenet データセットに設定されています。
bert_config_file
- BERT 構成ファイル。
init_checkpoint
- 事前トレーニング済みの BERT モデルの初期チェックポイントを含む json ファイルへのパス。
train_batch_size
- トレーニングのバッチサイズ。
eval_batch_size
- 評価のバッチサイズ。
learning_rate
- 学習率。
num_train_epochs
- モデルをトレーニングするためのエポックの数。
model_dir
- モデルのトレーニングの際にチェックポイントとサマリーが保存される Cloud Storage パス。以前のチェックポイントが、同じサイズの Cloud TPU と TensorFlow バージョンを使用して作成されていれば、既存のフォルダを再利用して以前に生成されたチェックポイントを読み込み、追加のチェックポイントを保存できます。
distribution_strategy
- TPU で ResNet モデルをトレーニングするには、
distribution_strategy
をtpu
に設定します。 tpu
- トレーニングに使用する Cloud TPU の名前です。
steps_per_loop
- CPU に状態を保存する前に実行するトレーニング ステップの数。トレーニング ステップは、サンプルの 1 つのバッチの処理です。これには、フォワードパスと逆伝播の両方が含まれます。
トレーニングには v3-8 TPU で約 30 分かかります。完了すると、トレーニング スクリプトに次のような結果が表示されます。
12271/12271 [==============================] - 756s 62ms/step - loss: 0.4864 - accuracy: 0.8055 - val_loss: 0.3832 - val_accuracy: 0.8546
精度を高めるには、
--num_train_epochs=3
を設定します。
クリーンアップ
Compute Engine インスタンスとの接続を切断していない場合は切断します。
(vm)$ exit
プロンプトが
username@projectname
に変わります。これは、現在、Cloud Shell 内にいることを示しています。Cloud TPU と Compute Engine リソースを削除します。リソースの削除に使用するコマンドは、TPU VM または TPU ノードのどちらを使用するかによって異なります。詳細については、システム アーキテクチャをご覧ください。
TPU VM
$ gcloud alpha compute tpus tpu-vm delete bert-tutorial \ --zone=europe-west4-a
TPU ノード
$ gcloud compute tpus execution-groups delete bert-tutorial \ --zone=europe-west4-a
gcloud compute tpus execution-groups list
を実行して、リソースが削除されたことを確認します。削除には数分かかることがあります。次のコマンドの出力には、このチュートリアルで作成したリソースを含めないでください。TPU VM
$ gcloud alpha compute tpus tpu-vm list --zone=europe-west4-a
TPU ノード
$ gcloud compute tpus execution-groups list --zone=europe-west4-a
次に示すように、
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 サービスを使用できるようになります。
- TensorBoard の TPU ツールを確認します。