CV・NLPハマりどころメモ

画像認識と自然言語処理を研究する中でうまくいかなかったことと、その対策をまとめる自分用メモが中心。

BERTコンテナを作ってDockerHubで公開してみた[Docker][BERT]

最近,AWSスパコンに触れる機会が多くなったので,スペックのベンチマーク用に汎用言語モデルBERTのDockerコンテナを作ってみることにした.

BERTコンテナの仕込み

以下にBERTコンテナを構築するまでの流れを淡々と述べる.

Tensorflow公式が提供するコンテナをインストールする.

$ docker run --runtime=nvidia -it --name "bert" tensorflow/tensorflow:latest-gpu

Pythonのバージョンを確認

python -V

Python 2.7.12

このコンテナ,何故かpython2にしかTensorflowがインストールされていない...

自力でpython3をインストールしてもいいが,面倒なのでpython2で進める.

cuDNNのパスを通す.

wget http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/cuda-repo-ubuntu1604_9.0.176-1_amd64.deb


次に,標準搭載されていないパッケージを入れる.

# apt update
# apt install git
# apt install wget

Tensorflowをpipでインストール*1

pip install tensorflow-gpu==1.12.0

GoogleのBERTをクローンしてくる

git clone https://github.com/google-research/bert

学習済みのBERTモデルをダウンロードしてくる

mkdir -p ~/bert/model

cd ~/bert/model

wget https://storage.googleapis.com/bert_models/2018_10_18/uncased_L-12_H-768_A-12.zip

unzip uncased_L-12_H-768_A-12.zip

rm uncased_L-12_H-768_A-12.zip

BERTのパスを通す

export BERT_BASE_DIR=/root/git/bert/model/uncased_L-12_H-768_A-12

まずは,sample.txtを穴埋め問題用の入力データに変換するため,create_pretraining_data.pyを実行.

python create_pretraining_data.py --input_file=./sample_text.txt --output_file=/tmp/tf_examples.tfrecord --vocab_file=$BERT_BASE_DIR/vocab.txt --do_lower_case=True --max_seq_length=128 --max_predictions_per_seq=20 --masked_lm_prob=0.15 --random_seed=12345 --dupe_factor=5

bertのpre-trainingを実行.

python run_pretraining.py --input_file=/tmp/tf_examples.tfrecord --output_dir=/tmp/pretraining_output --do_train=True --do_eval=True --bert_config_file=$BERT_BASE_DIR/bert_config.json --init_checkpoint=$BERT_BASE_DIR/bert_model.ckpt --train_batch_size=16 --max_seq_length=128 --max_predictions_per_seq=20 --num_train_steps=100 --num_warmup_steps=10 --lerning_rate=2e-5