【No.L004】WindowsとUbuntuでBERT(Huggingface Transformers)の本のコードを動かす方法:詳細解説と学習結果の分析

はじめに

BERT(というよりHaggingfaceのTransformers)に関する勉強をしたくて買った本のコードをWindows(Linux)のローカル環境で動かしたくなったのでそこでの気づきを本記事に投稿。ちなみに環境は以下の通り。

OS   :Windows11(Ubuntu 20.04.6 LTS)
GPU  :NVIDIA GeForce GTX 1660 Ti
Python:3.10.12
<書籍名>BERT-GPT-3-DALL-自然言語処理・画像処理・音声処理-人工知能プログラミング実践入門

★関連リンク
業務で活用できるAI技集のまとめはこちら

解説

概要

ざっくり流れは以下のとおり。
①Ubuntu(Linux)で仮想環境つくる
②必要なライブラリをいれる
③コードを実行する

①Ubuntu(Linux)で仮想環境つくる

まずUbuntu上で仮想環境をつくる。Ubuntuを起動し、下記のコマンドで現在のディレクトリに新たな仮想環境用のフォルダができる(1行目)。そしてそれを有効化する(2行目)。

python -m venv myvenv
source myvenv/bin/activate

ちなみに仮想環境を消したかったら以下を実施。Optionで-rはディレクトリ削除、-fは警告非表示。

rm -rf myvenv

②必要なライブラリをいれる

必要なライブラリは以下のとおり。下記を参考にpipコマンドでインストール。

[参考] インストール用メモ
#コーディング環境用。起動時のコマンドは「jupyter lab」
pip install jupyterlab

#後でつかうrun_clm.pyを入手するためにgit cloneでtransformersをDLする
#2行目はDLしたtransformersフォルダからtransformersをインストールするコマンド
git clone https://github.com/huggingface/transformers
pip install -e transformers #4.39.0.dev0で動作確認

#書籍とVersionを同じにしたらErrorが発生したので少し調整
pip install mecab-python3

#FineTuningの実行時にライブラリ不足のErrorが発生したので予め入れておく。
pip install evaluate #0.4.1で動作確認
pip install accelerate #0.27.2で動作確認
pip install scikit-learn #1.4.1.post1で動作確認

#学習結果確認に必要
pip install tensorboard #2.16.2で動作確認

③コードを実行する

注意ポイントをいくつか記載。
・(4行目)run_squad.pyのパスが合っているか
・(13,14行目)学習/検証用データのパスが存在するか
※学習/検証用データ:下記URLのデータをmecabを使って分かち書きしたもの
(分かち書き用のコードは書籍に記載あり。)
Driving domain QA datasets – LANGUAGE MEDIA PROCESSING LAB (kyoto-u.ac.jp)

ちなみに分かち書きとは語と語の間や、文節と文節との間を1字分空けて書くことで、こうすることで精度向上が見込める。

なお下記の設定で、私の環境では完了までに7h 8min 42sかかった。

%%time

# ファインチューニングの実行
!python ./transformers/examples/legacy/question-answering/run_squad.py \
    --model_type=bert \
    --model_name_or_path=cl-tohoku/bert-base-japanese-whole-word-masking \
    --do_train \
    --do_eval \
    --max_seq_length=384 \
    --per_gpu_train_batch_size=12 \
    --learning_rate=3e-5 \
    --num_train_epochs=3 \
    --train_file=./work/wakati_DDQA-1.0_RC-QA_train.json \
    --predict_file=./work/wakati_DDQA-1.0_RC-QA_dev.json \
    --output_dir=output_qa/ \
    --overwrite_output_dir \
    --logging_steps=1

ちなみに学習結果を確認する際はjupyterlab上でマジックコマンド(%で始まるコマンド)打ってもtensorboardがうまく出てこなかったので、Ubuntu上で下記コマンドを実行して指定のURL(http://localhost:xxxx)にアクセスしたらうまくいった。

tensorboard --logdir runs


コメント