😇

LiteLlama-460M-1Tを日英データで継続事前学習してみた

2024/04/25に公開

要約

  • LiteLlama-460M-1Tを日英データで継続事前学習した
  • ベースモデルより日本語を話せるようになったが、出力自体は支離滅裂だった

https://huggingface.co/Kendamarron/Yonaguni-460M-v0.1

目的

継続事前学習の練習をしてみたかったので、460MパラメーターのLiteLlamaを使って試してみました。

実施内容

モデル・データセット

  • ベースモデル: ahxt/LiteLlama-460M-1T
  • トークナイザー: 語彙拡張は行わず、LiteLlamaのトークナイザーをそのまま使用
  • 学習データ:
  • izumi-lab/wikipedia-ja-20230720 (2.13GB)
  • OSCAR-2301-ja (約2GB、フィルタリングした一部を使用)
  • HuggingFaceTB/cosmopedia-100k
  • DKYoon/SlimPajama-6B(全体の10%を使用)
  • 1epoch: 約3.9Bトークン

ハイパーパラメーター

パラメーター
attn_implementation flash_attention_2
optimizer AdamW
scheduler cosine_schedule_with_warmup
batch_size 8
gradient_accumulation_steps 64
lr 5e-5
weight_decay 0.1
warmup_rate 0.01
num_train_epoch 5(実際は1epoch+αで打ち切り)

実行環境

PCスペック

項目 スペック
CPU i9-14900K
RAM 96GB
GPU RTX-4090

その他

  • WSL2のDocker上で実行
  • transformersのTrainerを使用

結果

学習ログ

ベンチマークの比較

Stability-AI/lm-evaluation-harnessを用いて、jsquad、jcommonsenseqa、jnliのベンチマークでYonaguni-460Mを評価しました。
比較対象として、japanese-gpt-neox-small、TinyLlama、karasu-1.1Bも評価しています。

モデル パラメーター数 jsquad jcommonsenseqa jnli
ahxt/LiteLlama-460M-1T 460M 2.4989 0.1930 0.3044
Yonaguni-460M-2k-steps 460M 4.0747 0.1761 0.3389
Yonaguni-460M-4k-steps 460M 4.3224 0.1743 0.3439
Yonaguni-460M-6k-steps 460M 4.3449 0.1698 0.3406
Yonaguni-460M-8k-steps 460M 4.2548 0.1698 0.3431
Yonaguni-460M-9k-steps 460M 4.2323 0.1698 0.3435
rinna/japanese-gpt-neox-small 204M 5.8082 0.3601 0.3090
TinyLlama/TinyLlama-1.1B-intermediate-step-715k-1.5T 1.1B 23.8406 0.2073 0.5505
lightblue/karasu-1.1B 1.1B 37.9559 0.2493 0.4022

1epochは約7500stepsなので、8k-stepsのモデルが1epoch学習したモデルになります。
9k-stepsの時点でここからの性能向上は難しいだろうと考え、学習をストップしています。

ステップごとのスコアを見てみると、4000stepsからほとんど性能向上が見られないのが残念です...
また、jsquadとjnliはベースモデルより向上している一方、jcommonsenseqaは悪化してしまっています。
これはTinyLlamaとその継続事前学習モデルであるkarasu-1.1Bの間でも起きているため、ある程度は仕方ないのかもしれません。

出力の比較

太字がプロンプトとして与えたテキスト、それ以降がLLMの出力です。

ahxt/LiteLlama-460M-1T

大規模言語モデルとは、
それらのようになる。\n\end{comment}\n\n\section*{\refname}} \r\n\t%\n\t\usepackage[utf8]{inputenc} \usepackage[T1]{fontenc} % <=====================================================\r\n\t\usepackage{amsmath,amssymb,bm}\r\n\t\usepackage{graphicx}\r\n\t\usepackage{color}\r\n\t\usepackage{tikz-

Q: まどか☆マギカでは誰が一番かわいい?\nA:
何も! あるところに、それを持っています。\nB: このときはおりした。\nC: このときはおりした。\nD: このときはおりした。\nE: このときはおりした。\nF: このときはおりし

Yonaguni-460M-v0.2-steps-8k

大規模言語モデルとは、
その他にも知られている。\n『銅』(あゆうさん)は、日本の学校であり、アメリカ合衆国の日本を受けた場合がある。この結果的な形式は「多くの運産」と呼ばれる

Q: まどか☆マギカでは誰が一番かわいい?\nA:
今日の記事を持って、これに対して短くなります。「青年(明月)」とも呼ばれる場合は、家庭の元の教会の申請を行うためにある人間の�

rinna/japanese-gpt-neox-small

大規模言語モデルとは、
大規模言語の実装を記述する言語モデルである。 大規模言語は、大規模言語の実装を記述する言語モデルである。 大規模言語は、大規模言語の実装を記述する言語モデルである。 大規模言語は、大規模言語の実装を記述する言語モデルである。 大規模言語は、大規模言語の実装を記述する言語モデルである。 大規模言語は、大規模言語の実装を記述する言語モデルである。 大規模言語は、大規模言語の実装を記述する言語モデルである。 大規模言語は、大規模言語の実装を記述する言語モデルである。 大規模言語は、大規模言語

Q: まどか☆マギカでは誰が一番かわいい?\nA:
さやかちゃん、杏子ちゃん、杏子ちゃん、杏子ちゃん、杏子ちゃん、杏子ちゃん、杏子ちゃん、杏子ちゃん、杏子ちゃん、杏子ちゃん、杏子ちゃん、杏子ちゃん、杏子ちゃん、杏子ちゃん、杏子ちゃん、杏子ちゃん、杏子ちゃん、杏子ちゃん、杏子ちゃん、杏子ちゃん、杏子ちゃん、杏子ちゃん、杏子ちゃん、杏子ちゃん、杏子ちゃん、杏子ちゃん、杏子ちゃん、杏子ちゃん、杏子

TinyLlama/TinyLlama-1.1B-intermediate-step-715k-1.5T

大規模言語モデルとは、
大規模言語モデルとは、経験的な言語モデルを使用して、多くの言語に対する機能を提供する。 Large scale language model, a large-scale language model is used to provide many languages with the experience of language models.\n\n### 2.1 構成\n\nこの論文では、Large Scale Language Model (LASLM) とは、大規模言語モデルとは

Q: まどか☆マギカでは誰が一番かわいい?\nA:
まるたんだけど、それは誰もの人になってしまう。\n\nA: まるたんだけど、それは誰もの人になってしまう。\n\nA: まるたんだけど、それは誰もの人になってしまう。\n\nA: まるたんだけど、それは

lightblue/karasu-1.1B

大規模言語モデルとは、
大規模言語モデルとは、その名の通り、大規模な言語を扱うために開発されたモデルです。このモデルは、単純な言語モデルよりも、より多くの情報を持っています。\nこのモデルは、単純な言語モデルよりも、より多くの情報を持っています。\nこの

Q: まどか☆マギカでは誰が一番かわいい?\nA:
まどか☆マギカでは誰が一番かわいい?\nまどか☆マギカのキャラクターを募集しているサイトです。\nまどか☆マギカのキャラクターを募集しています。\nまどか☆マギカのキャラクターを募集しています

実際の出力を見てみると、今回学習したモデルは支離滅裂な出力をしているのが分かります。
原因としては、継続事前学習に使ったデータセットの品質やハイパーパラメータなども考えられますが、ベースにしたモデルそのものの性能が大きく影響しているような気がします。
TinyLlamaとkarasu-1.1Bを見ると、継続事前学習をする前のTinyLlamaの段階から入力にある程度合った出力をしています(支離滅裂ではありますが、方向性は合ってる)。
LiteLlamaの出力を見る限り、入力を理解できているとは思えず、ノイジーなデータを学習してしまっている様子が伺えます。
そのモデルをベースに学習してしまったことが今回の結果の大きな原因なのではないかと考えています。

まとめ

LiteLlama-460M-1Tを日英データで継続事前学習したYonaguni-460Mを公開しました。
https://huggingface.co/Kendamarron/Yonaguni-460M-v0.1
ご家庭のGPUでも事前学習を回せることを検証できたのは良かったですが、もう少し性能が出てほしかったです...

TODO

  • ハイパーパラメータを変えて再挑戦
  • 他の小規模モデルでも実験してみる
  • データセットの品質向上

Discussion