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という有名なプレプリントもありますが、最適値は、モデル・データセット・タスク次第、、といったところでしょうか。

続く


この記事が気に入ったらサポートをしてみませんか?