ELECTRAをTPUで事前学習 [GCP]
GCP経由でTPUを利用することによって,ELECTRAの事前学習を実行する方法を紹介.
必要なサービス
- Compute Engine
 - Cloud TPU
 - Cloud Storage
 
手順
Cloud Shell ウィンドウを開く
Cloud Shell (GCPのホーム画面右上のボタンを押すとでてくる)を開き,コマンドラインを出現させる.

プロジェクトIDの変数を作成
export PROJECT_ID=project-id
GCPではプロジェクト単位で課金されるため,さきにプロジェクトidを入力しておく.
Cloud TPUを作成するプロジェクトを指定
gcloud config set project $PROJECT_ID
先ほどの変数を使って,gcloudコマンドラインツールを構成
このコマンドを初めて実行すると,以下のような画面がでるため,「承認」ボタンを押す.

Cloud Storageバケットを作成
gsutil mb -p ${PROJECT_ID} -c standard -l us-central1 -b on gs://electra
gs://electraは筆者がバケットに割り当てた任意の名前で,他の名前でも構わない.
ここで作成したバケットに入力データを格納する.入力データは大量のテキストをtfrecordに変換したもので,ELECTRAのリポジトリにあるbuild_pretraining_data.pyを利用し作成する.作成の方法は,リポジトリのREADMEを参考にされたし.
また,モデルの学習結果もこのバケットに格納されることを想定している.
インスタンスとTPUを起動
ctpu up --project=${PROJECT_ID} --zone=us-central1-b --tpu-size=v3-8 --tf-version=1.15.3 --name=electra-tpu
ELECTRAの仕様に合わせるため,tf-versionは1.15.3に設定.
ctpu will use the following configuration:
  Name:                 electra-tpu
  Zone:                 us-central1-b
  GCP Project:          xxxx
  TensorFlow Version:   1.15.3
  VM:
      Machine Type:     n1-standard-2
      Disk Size:        250 GB
      Preemptible:      false
  Cloud TPU:
      Size:             v3-8
      Preemptible:      false
      Reserved:         false
OK to create your Cloud TPU resources with the above configuration? [Yn]:
実行後,確認のメッセージがでるため,OKならYを入力.
ctpu upコマンドの実行後,shellプロンプトがusername@projectからusername@tpunameに変更されたことを確認.変更されていれば,Compute Engine VMにログインしていることになる.
ELECTRAのソースコードをgit cloneで入手
Compute Engine VM上で,以下のコマンドを実行.
git clone https://github.com/google-research/electra.git cd electra
ELECTRAを実行
各種パラメータを設定し,run_pretraining.pyで事前学習開始.GCPサーバーでスクリプトを動かす際はnohup &で挟んでssh接続が切れても動くようにしておくこと.この実行コマンドの場合,同階層にelectra.logが出力され,ここにログが出力される.
nohup python3 run_pretraining.py --data-dir gs://electra/data --model-name my_electra_base --hparams '{"use_tpu":true, "num_tpu_cores":8, "tpu_name":"electra-tpu", "vocab_size":64000, "do_lower_case":false, "num_train_steps":500000, "train_batch_size":512, "generator_hidden_size":1.0, "model_size":"base"}' > electra.log &
SSH接続が切れた後にもう一度TPUが稼働しているインスタンスに接続するときは,以下のコマンドを入力.
gcloud compute ssh electra-tpu --zone=us-central1-b
TPUの削除
学習後は速やかにインスタンスとTPUを停止,あるいは削除すること.稼働中は常に課金されているため,放置しているととんでもない金額が請求されるからだ.
公式の手順によるとコマンドラインから削除できるようだが,筆者はGUI上で,VMインスタンスと,TPUを停止,あるいは削除することをおすすめする.GUIだと間違えて違うインスタンスを削除することを防げたり,TPUのモニタリングを確認してから削除することができるためである.






ディスカッション
コメント一覧
まだ、コメントがありません