top of page
スクリーンショット 2024-01-25 15.42.00.png
  • 執筆者の写真Ryo Shimizu

Gemma-2BをLoRAファインチューニングして物語生成に強い日本語大規模言語モデルを学習しました

Googleから発表された大規模言語モデルGemmba-2BをLoRAファインチューニングして日本語の長文を生成できるモデルの学習を行いました。


学習に用いたデータは青空文庫のデータを元にした株式会社グロービスによるglobis-university/aozorabunko-clean東京大学和泉研究室による日本語Wikipediaをデータセット化したizumi-lab/wikipedia-ja-20230720を使用しました。


コンテキスト長は4096で、学習は当社の社長であるAIスーパーコンピュータ継之助が90時間(約三日)を費やして行いました。


学習にはaxolotlを使用しています。実際に使用したaxolotlの設定ファイルは以下の通り


base_model: google/gemma-2b #ensure you have accepted their terms on huggingface and logged in via "huggingface-cli login" in the terminal
model_type: GemmaForCausalLM #don't use auto for now
tokenizer_type: GemmaTokenizer #don't use auto for now

load_in_8bit: false
load_in_4bit: false
strict: false

datasets:
datasets:
  - path: izumi-lab/wikipedia-ja-20230720
    type: completion
  - path: globis-university/aozorabunko-clean
    type: completion
dataset_prepared_path: last_run_prepared #preprocess your dataset for easier vram: "python -m axolotl.cli.preprocess examples/FOLDER/YOURCONFIG.yml"
val_set_size: 0.0
output_dir: ./lora-out


model_config:
  output_router_logits: true

adapter: lora  #could only get lora working at the moment
lora_model_dir:

sequence_len: 4096
sample_packing: false
pad_to_sequence_len: true

lora_r: 32
lora_alpha: 16
lora_dropout: 0.05
lora_target_linear: true
lora_fan_in_fan_out:

wandb_project: 
wandb_entity: 
wandb_watch:
wandb_name: 
wandb_log_model:

gradient_accumulation_steps: 4
micro_batch_size: 6 #could go up to 8 with 80gb card
num_epochs: 3
optimizer: adamw_bnb_8bit
lr_scheduler: cosine
learning_rate: 0.0002

train_on_inputs: false
group_by_length: false
bf16: auto
fp16:
tf32: false

gradient_checkpointing: true
early_stopping_patience:
resume_from_checkpoint:
local_rank:
logging_steps: 1
xformers_attention: 
flash_attention: true #could only get flash-attn to work on an a100/h100 for now. Needs an update.

warmup_steps: 10
evals_per_epoch: 4
eval_table_size:
eval_max_new_tokens: 128
saves_per_epoch: 1
debug:
deepspeed: deepspeed_configs/zero3_bf16.json
weight_decay: 0.0
fsdp: 
fsdp_config: 
special_tokens:

学習前のgemma-2bに「吾輩は猫である」という単語を与えた時の出力は以下のようになります。


Give me an instruction (Ctrl + D to submit): 
吾輩は猫である。名前はまだ
========================================
<s>吾輩は猫である。名前はまだ numele numele numele numele numele numele numele numele numele numele numele numele numele numele numele numele numele numele numele numele numele numele numele numele numele numele numele numele numele numele numele numele numele numele numele numele numele numele numele numele numele numele numele numele numele numele numele numele numele numele numele numele numele numele numele numele numele numele numele numele numele numele numele numele numele numele numele numele numele numele numele numele

</code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></h1></code></code><eos><eos> The same The the m The same The same The sameThe 

学習後のgemma-2bに「吾輩は猫である」という単語を与えた時の出力は以下のようになります。


Give me an instruction (Ctrl + D to submit): 
吾輩は猫である。名前はまだ
========================================
<s>吾輩は猫である。名前はまだ決めてない。が、僕にはどうしてもこの猫の名前が欲しいのだ。」
「猫の名前なんか決まってるものですか?」と、おつねが言つた。
「そう云ふことを云ひますんだ。何故です? 僕は猫の事を忘れたんですか?――いや、僕は忘れることはしません。しかし猫の名を考へてくれる方がいいです。僕が猫に名前をつけてくれもしないと云ふのは、ただ僕だけの話です。僕以外の人が、猫に名前をつけるのは、僕の話じゃないんですから。――僕は犬が好きなんだ。僕は犬の事をもっとよく知ってゐるし、また犬の名を考へてくれる人を捜すのも好きなんだ。――が、猫の事はどうなのさ?――猫は犬よりも、人間に似ている。犬よりも人間に近いし、人間と同じく感情のあり方などを知つてゐる。――僕は犬と同様のことを、猫にも云ひたいんだ。」
 すると、おつねもまた、猫の名前を思ひだしたのであらうか、もう猫の事なんか忘れてしまつて、
「僕は君に猫の事は一言云へなかつたんでせう?」と、きこえながら問ひ返した。
「猫の名前なんて、僕は云はないからさ……。」と言つて、その場でおつねは笑ひかけた。「猫の名前なんて、僕なんかも知らないんでせう!」<eos>2

 おつねはそんな風に答へると、いつの間にか、おつね自身はすっかり眠つてしまつてゐるのであつた。
「さうよ! 僕はこれから寝よう。」と、おつねはその時ぱつたり横にならんで、起き直つた。
「今晩は――御飯を一つ――」と、女中が呼んだので、それにおつねは起きあがらうと思つた。
 おつねは、その時の事、自分が女中の前に立つてゐるのに、まるで夢見るやうに思つて、その時に一度、「おい!」と叫んだことがあつた。そして女中に向つて、
「お前さん、私を寝かさないで下さいね。」
 とおつねは叫んだのである。
 が、女中は、おつねが、自分の前の座敷に行かなければならないと言つてゐるのに、おつねは何も彼も聞いてゐずに、女中に顔を向けることにきまつてるのだつた。そして、おつねは、
「おや? ――誰だい?」と聞いたものである。
「私です!」と、女中は答へた。「貴女が私の前を通りかゝつて私のお夜具の傍まで行つて、仰しやつて下さいましたんです。」
「何が?」と、おつねは訊いた。
「私の指です!――私はあなたのお尻の方からぴしりと手をかけられて、あなたの膝の上に押しつけられました。」
「おや?」と、おつねは眼を開いて、急に自分の身体の様子を窺つて見た。
 おつねは何でもないことを、女中に訊かれても、実は気がついたといふ位にしか見えなかつた。
 おつねは、その時はまだ意識を失つてゐたのである。
「私はあなたの前を通つて、あなたの頭上をかはしました。」
「はア、それは何処かの神様が仰山仰天している時分だったのね。」と、おつねは云つた。
「さあ! あなたは仰山な顔をしておいでなさるわね。」
 おつねは又も、ふと自分の身体の様子などを、じろじろと見て見た。
「さあ、私はどうしたらよろしいんです?」と、おつねは呟かうともせず、「あたしは、今日からちよつと、あなたをお気遣ひになる事がありますからねえ。」といふたのを、もうおつねは言ひ切つたのである。
 おつねは、もう、まだ、さつきからの自分の行動の様子などもまったく、自分の頭に浮んで来なかつた。
 そこで、おつねは、
「あなたはどんな風に、私に云つたんです?」と、問ひかけてみた。
「私達は、昨夕の八ツ時頃まで、あの部屋で話をしましたわね……。私達は、それから、あなたから、あの子が私のところへ来た時に、すぐその処へ来たんですもの。――それから、貴女は、あの時、その小児を、自分の膝の上へ押しつけて、貴女自身の裸体で、仰山な顔をして笑つたわね?……それに、私は、あなたとの話し方は、いつも、あなたが私を撫でた後にして行けるような事だと思つてゐましたけれど、貴女がその通りに私が仰山な顔をして、こんな風に笑つたのを、その時は初めてにしてゐ

このことから、学習に成功したと考えています。

青空文庫に古い文体の作品が多いため、古い文体になっていると考えられます。

LoRAをマージしたモデルをhuggingfaceで公開します。

配布形態はgemmaライセンスに従います。詳しくはこちらをご覧ください。




モデルはこちらで配布しています



閲覧数:1,347回

最新記事

すべて表示

Comments


bottom of page