2020年5月15日 星期五

五分鐘學會使用TPU訓練BERT自然語言模型





大家好我是Jerry老師,這篇帶來了五分鐘學會系列,主要跟大家分享如何在GCP上採用TPU來訓練自然語言模型,整個過程不包含「訓練時間、主機設定與安裝時間」只需要五分鐘就可以幾行指令就可以完成訓練操作。



首先大家必須要有GCP帳號,只要有申請Gmail,就可以快速開通。目前有300元美金免費試用,所以不用擔心費用,開通請往這裡



有了主控台之後,就可以開始玩了。
在主控台畫面,點選「新增專案」

接著可以會有一個自動產生的專案名稱,我們可以自己輸入,但是要記得輸入的名稱。
像是我在自動產生的名稱前後加上jerry跟tpu。

接著回主控台,在畫面右上角,開啟「Cloud Shell」



1.接著輸入以下參數
export PROJECT_NAME=jerry-project87630-tpu(注意這是剛剛我設定的ID)
請在紅字修改自己剛剛開的專案名稱

2.執行下面指令
gcloud config set project ${PROJECT_NAME}

3.建立bucket-name,這是Google專門存放資料的技術,我取的跟ID一樣好了
gsutil mb -p ${PROJECT_NAME} -c standard -l europe-west4 -b on gs://jerry-project87630-tpu
一樣請在紅字修改自己剛剛開的專案名稱


接著就正式開啟TPU囉
請輸入下面指令,這邊我的TPU名稱設定jerry,大家照貼即可。
ctpu up --tpu-size=v3-8 --name=jerry --machine-type=n1-standard-8 --zone=europe-west4-a --tf-version=2.2
這邊採用的是最新TensorFlow2.2版本
看到下面畫面,打 y 即可


接著會看到下面畫面,這是TPU建立過程。

接著進入我們剛剛設定好的TPU機器,執行下面指令
gcloud compute ssh jerry --zone=europe-west4-a
中間如果看到以下畫面,看到這幾行直接按Enter即可。

接著設定環境參數,執行下面指令
export TPU_NAME=jerry

設定BUCKET位置,這個跟前面設定一樣

export STORAGE_BUCKET=gs://jerry-project87630-tpu
一樣請在紅字修改自己剛剛開的專案名稱


然後安裝執行這次實作的套件
sudo pip3 install -r /usr/share/models/official/requirements.txt

最後就剩兩個步驟,設定以下環境參數

export PYTHONPATH="${PYTHONPATH}:/usr/share/models"
(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

接著跑模型,執行下面指令

python3 /usr/share/models/official/nlp/bert/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=3 \
  --model_dir=${MODEL_DIR} \
  --distribution_strategy=tpu \
  --tpu=${TPU_NAME}

看到下面畫面,表示跑成功囉,大約一小時之後會有結果,中途如果要中斷,就按Control+z

因為TPU非常貴,所以下面就是關閉的程序

首先離開VM
exit

接著確認目前的TPU有哪些還在執行
ctpu list

接著刪除指定的TPU,剛剛我設定的TPU名字是jerry,在下面畫面按 y 就可以刪除TPU囉!

ctpu delete jerry



目前的Google TPU費用,不同區域與等級都有不同價格
平均一個小時1塊到9塊美金不等

目前如果採用標準TPU-V2 約5塊美金,約156元台幣,跑一天差不多3800左右。
跑一個月就是11萬多,如果用好一點TPU-V3 約8塊美金,跑一個月17萬。
感謝文章的TPU費用是由Google雲端贊助的費用(GCP credit supported activity)。


以上是這篇文章跟大家分享透過TPU如何跑BERT模型,以及費用成本估算,感謝收看。