Open2

transformersのexamples/pytorch/language-modelingでPre-training,Continual Pre-trainingをしてみる

seri_kseri_k

https://github.com/huggingface/transformers/tree/main/examples/pytorch/language-modeling
まずREADME.mdを読んで何のscriptがおいてあるかを眺める.

script名についている略語の意味から整理する.

seri_kseri_k

run_clm.pyでpre-trainingしてみる

まずはclmでGPT2ベースの0.037Bモデルをpre-trainingしてみる.
使用したライブラリのバージョンは以下の通り(使用したtransformersのバージョンの requirements.txt をそのまま使用した)

[tool.poetry.dependencies]
python = "^3.10"
transformers = "4.45.2"
accelerate = ">=0.12.0"
datasets = ">=2.14.0"
sentencepiece = "!=0.1.92"
protobuf = "^5.28.3"
evaluate = "^0.4.3"
scikit-learn = "^1.5.2"
torch = ">=1.3"

modelとtokenizerは rinna/japanese-gpt2-xsmallを指定し,datasetには globis-university/aozorabunko-cleanを使用した.epoch数は3としたが,大体これでlossは収束できたようである.RTX2080Tiが刺さっているマシンで5時間ぐらいかかった.

poetry run python ./transformers/examples/pytorch/language-modeling/run_clm.py \
  --config_name rinna/japanese-gpt2-xsmall \
  --tokenizer_name rinna/japanese-gpt2-xsmall \
  --dataset_name globis-university/aozorabunko-clean \
  --output_dir myLLM-0.037B \
  --auto_find_batch_size \
  --do_train \
  --do_eval \
  --num_train_epochs=3 \
  --save_steps=10000 \
  --save_total_limit=3

実際に推論もしてみる.なお入力した文字列は夏目漱石の「それから」の最後らへんに出てくる一節である.

import torch
from transformers import T5Tokenizer, AutoModelForCausalLM

device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
tokenizer = T5Tokenizer.from_pretrained("rinna/japanese-gpt2-xsmall")
tokenizer.do_lower_case = True
model = AutoModelForCausalLM.from_pretrained("myLLM-0.037B/")
model.to(device)

input = tokenizer.encode("売出しの旗が赤かった。", return_tensors="pt", add_special_tokens=False).to(device)

with torch.no_grad():
  output_ids = model.generate(input,
    max_length=200,
    min_length=30,
    do_sample=True,
    top_k=500,
    top_p=0.95,
    pad_token_id=tokenizer.pad_token_id,
    bos_token_id=tokenizer.bos_token_id,
    eos_token_id=tokenizer.eos_token_id,
  )

output = tokenizer.decode(output_ids.tolist()[0], skip_special_tokens=True)
print(output)

推論結果は以下の通りである.大体謎の文章しか出てこない.

売出しの旗が赤かった。そして数日前の国で買って置いてやる。
屋さんは商売の娘だった。 「こりゃ売りに行くんじゃないか」 持って来た勘定で、買って来た金が無い。
織物のことで売出した。女中のお金のためには売上げの金だ。こんなに買っても買うはずはないけれど。
家へ預けても売ると買っても、お互が買い入れず、どうせ買ってるだけの品物を買って来てやらなければならないという訳だ。
「あれは何んでさア。そして買って来てくれたって?」 買って行った御飯を食べ終ると、
「あれこれを買って帰りました」
「ええ、そうよ! こりゃあ買ってからさ、そして買ってゆきましたよ、変な人達で。」と、
屋さんは母親に手を突つくので、 「小言を云ってくんねえや、娘