初めに
最近の深層学習のライブラリは親切でサンプルコードがgithubに公開されています。
私もよく利用させてもらっているのですが、サンプルコードではインターネット上にデータを取得しに行くなどしているため、
重要データを扱うような隔離された環境では実行できません。
今回は隔離された環境でもサンプルのコードを実行できるようにtransformersの1サンプルの実行例を紹介したいと思います。
コードとデータの準備
本記事ではhuggingfaceのtransformersというフレームワークを使用してテキスト分類のサンプルを実行します。
実験コードとデータの事前準備はインターネットにつながるマシンで行ってください。
学習コード準備
学習するコードはtransformersのgithubから取得します。
$ git clone https://github.com/huggingface/transformers.git
本記事ではクローンしたコードの「transformers/examples/pytorch/text-classification/」を使用します。
以下の記事では「transformers/examples/pytorch/text-classification/」内にファイルを配置すること前提です。
事前学習モデルクローン
事前学習モデルはhuggingfaceからダウンロードします。
サイズが大きいモデルが保存されているためgit-lfsを使用してクローンしましょう。
$ git-lfs clone https://huggingface.co/bert-base-uncased
学習データダウンロード
本来はコード内でうまいことやってくれていますが、オフライン環境前提なのでデータを手動でダウンロードします。
下記の3ファイルダウンロードして適当なディレクトリに格納してください。
※本記事では「data」ディレクトリを作成しその中に格納しています。
- https://dl.fbaipublicfiles.com/glue/data/mrpc_dev_ids.tsv
- https://dl.fbaipublicfiles.com/senteval/senteval_data/msr_paraphrase_train.txt
- https://dl.fbaipublicfiles.com/senteval/senteval_data/msr_paraphrase_test.txt
不足スクリプトダウンロード
こちらもインターネットに接続されていれば自動でダウンロードされるスクリプトですが、オフライン環境では事前にダウンロードしておきます。
glue.pyはデータを扱うためのコードで、accuracy.pyは精度計算用のコードです。
※本記事ではaccuracy.pyは「module」ディレクトリを新たに作成しその中に格納しています。
- https://huggingface.co/datasets/glue/raw/main/glue.py
- https://raw.githubusercontent.com/huggingface/datasets/master/metrics/accuracy/accuracy.py
必要なファイルをダウンロード後のフォルダ構成例です。
text-classification
├── bert-base-uncased
│ ├── README.md
│ ├── config.json
│ ├── flax_model.msgpack
│ ├── pytorch_model.bin
│ ├── rust_model.ot
│ ├── tf_model.h5
│ ├── tokenizer.json
│ ├── tokenizer_config.json
│ └── vocab.txt
├── data
│ ├── mrpc_dev_ids.tsv
│ ├── msr_paraphrase_test.txt
│ └── msr_paraphrase_train.txt
├── glue.py
├── module
│ └── accuracy.py
└── run_glue.py
オフライン環境に合わせてコードを修正
必要なファイル、データの準備が終わったら次はコードを修正します。
取得したコードはインターネット上に接続されていることが前提で書かれているため、オフライン環境に合わせて一部修正します。
mrpc_files = dl_manager.download(
{
"dev_ids": _MRPC_DEV_IDS,
"train": _MRPC_TRAIN,
"test": _MRPC_TEST,
}
)
mrpc_files = {"dev_ids":"cache/data/mrpc_dev_ids.tsv",
"test":"cache/data/msr_paraphrase_test.txt",
"train":"cache/data/msr_paraphrase_train.txt"}
本来は使用するデータの名前などを指定すると自動でダウンロードしてくれるようなコードになっていますが、今回はデータは手動でダウンロードしているのでデータのパスをキーとともにdictで設定します。
実行
githubにあるサンプルの実行コマンドをコピペして走らせます。
$ export TASK_NAME=mrpc
$ python run_glue.py \
--model_name_or_pathbert-base-cased \
--task_name $TASK_NAME \
--do_train \
--do_eval \
--max_seq_length 128 \
--per_device_train_batch_size 32 \
--learning_rate 2e-5 \
--num_train_epochs 3 \
--output_dir /tmp/$TASK_NAME/
こちらで実行できました。
ターミナルに学習状況が流れていれば成功です!
終わりに
機械学習、深層学習の記事は多いですがオフライン環境下という点に絞っての記事はあまりなかったので書いてみました!
本記事に対する意見や修正などコメントいただけると嬉しいです!