10b程度のモデルをファインチューニングする日記 (逐次更新)
はじめに
最近は大規模言語モデルを作っています。
主に2-3月はデータセット構築や事前学習に取り組んできました。
概ね、手応えがつかめてきたので、次はファインチューニングの練習をしていきます。本記事は、その日記です。
3/26まで: システムのセットアップ
HuggingFace形式のモデルをinstruction tuningして、日本語のベンチマークで評価するためのパイプラインを作っていました。
評価指標は、JGLUE, Jaster, JMT-Benchとなります。
JGLUEとJasterは、単語を答えるタイプのタスクが多いです。
→ 大規模言語モデルが登場する前から存在したベンチマークも多く、どちらかというと、elementaryな内容です。
JMT-Benchでは、高度な文章生成や思考の能力が求められます。大規模言語モデルが賢くなってきたので、タスクの難易度を上げたという経緯で生まれたように思います。
回答は記述式なので、GPT-4による自動採点が行われます(一回あたり、数ドルはかかるので注意)。
わりと実用的な場面を想定したベンチマークといえます。
3/27 llm-jp-13bモデルでの評価
事前学習済みの言語モデルに何を学習させたら、何ができるようになるのかの手応えを得る必要があります。
そこで、学習させるデータセットを変えながら、ベンチマーク得点がどのように変化するか、調べることにしました。
標準モデルとして、llm-jp-13bを使いました。
こちらのモデルは、事前学習済みのものに加えて、種々の条件でファインチューニングしたバージョンが公開されています。
以下の記事も大変参考になります。
JMT-BenchはGPT-4のAPI料金がかかるわりに、ちゃんと対策しないと、ほぼすべての問題で最低評価(1)になることが分かったので、今回はスキップすることにしました。
結果は以下の通りでした。
主なポイント
指示データセットは量も重要(?)
ichikaraデータセットは高品質が売りですが、この結果だけ見ると、低品質(?)で有名なdolly-15k-jaにかないませんでした。
※ ichikaraは、どちらかというと、MT-Bench向けのデータセットである点についても留意する必要はあります。
LoRAも悪くない
フルパラメーターのファインチューニングと同程度の結果になりました。
DPOは今回の評価指標では微妙
こちらも、どちらかというと、MT-Benchなどで力を発揮するかもしれません。
jasterデータセットが最強
jasterの訓練データを利用したと思われるモデルが、jasterとjglueで圧倒的な性能を示しました。
10b程度のモデルの場合は、あまり汎化能力が高くないせいか、試験問題と似たようなタスクを解かせないと、なかなかスコアが上がらないのかなー、という気がしました。
3/29 llm-jp-13bモデルでJasterを徹底訓練する
概要
モデルの基礎能力(言語理解)を測る、jaster datasetを徹底訓練しました。
このデータセットにはtrainデータが存在するので、訓練データ数を変えた時のtest dataに対するスコアを評価しました。
コード
工事中の箇所もありますが、snapshotはこちらです。
結果
learning rateを変えながら、訓練データ数を100-10000件の範囲で変えながら、網羅的にモデルを作成&性能を評価しました。
(訓練データ5万件でも計算中ですが、A100 x2 で1条件あたり、1日以上はかかりそうなので、途中でやめるかもしれません)
ベースラインとの比較
huggingfaceで公開されている llm-jp13bのjaster特化モデルのスコアは0.47でした
それを上回る性能(>0.5)も出たので、ファインチューニング自体はうまくいっているようです。
学習率
今回のモデル&データセットでは、1e-5 あたりに最適値がありそうです。
小さすぎると、underfitします。
経験上、1e-4くらいまで上げてしまうと、数千ー数万件のデータを学習させた際にモデルが壊れやすいです (出力が「ああああ」のようになる)
データ量
今回の指標では、1万件くらいはあったほうが良いようです。
1000件くらいでOKという有名なプレプリントもありますが、最適値は、モデル・データセット・タスク次第、、といったところでしょうか。
続く
この記事が気に入ったらサポートをしてみませんか?