1 概要

今回の最終課題で、以下の成績(優秀賞一般部門(16位))となりました。要件である、最終課題の開発ドキュメントとして本稿を提出します。

・Slack名 UoRuiSemiTu_j

・予選スコア(Omnicampus上のスコア) 3.22(66位) ・決勝最終スコア(Omnicampus上の最終表示スコア) 3.12632(15位) ・最終結果 16位 ・ベースモデル gemma-2-9b

※なお、優秀賞コントリビューション部門特別賞もいただいています

学習は、以下の方法で行いました。 ・QLora(4bit量子化)、SFTによる学習 ・SFTの学習データセットは"aya-ja-evol-instruct-calm3-dpo-remasked.json"(weblab-GENIAC/aya-ja-evol-instruct-calm3-dpo-masked · Datasets at Hugging Face)(apache-2.0)を使用(1エポックのみ学習) ・外国語の出力を抑制することや、数学的な問題の回答率を上げる等の目的で、Instruction Tuning(SFTの学習の際のプロンプトに「指示」「ルール」を追加するなど、サンプルコードから変更)

推論は、基本的にサンプルコードを利用していますが、主に以下のカスタマイズを行ってます。 ・推論は学習モデルからさらに二重に量子化することを避けるため、load_4bit=Falseで実行 ・外国語の出力を抑制することや、数学的な問題の回答率を上げる等の目的で、学習時にInstruction Tuningで使ったプロンプトと同様のプロンプトを使用

ほか、今回の学習にあたって、試行錯誤を行った(最終的には採用に至らなかった)手法等についても、参考として付記します。

2 モデルの学習手法

以下は学習時は、主にGoogle Colaboratory・A100環境を使いました。ただ、実際はL4環境でも十分学習可能と思われます。

(1)unslothを用いてgemma-2-9bを4bit Lora、SFT学習しました。

ただ、gemma2は、unslothを使って4bit Loraで学習すると、unslothがあらかじめ4bit化したモデルがダウンロードされ、今回のコンペのレギュレーション違反となります。

これを回避するため、「niryuu」さんが作成した、Slackで投稿されていた、カスタマイズされたunslothのライブラリをダウンロードして、オリジナルのgemma2-9bがダウンロードできるようにしました。

!pip install -q --upgrade --no-cache-dir "unsloth[colab-new] @ git+https://github.com/niryuu/unsloth.git@use-exact-model-name"

(注)2024年12月のunslothのアップデートが原因なのか、上記のライブラリを使うとエラーがでるようになりました。このため、「松本」さんがSlackで投稿されていた以下の手法を用いることで、gemma-2-9bをローカルにダウンロードしたうえで、当該ファイルを読み込むことが必要となります。(学習時も同じ)

!huggingface-cli download google/gemma-2-9b --local-dir gemma-2-9b/ model_id = "./gemma-2-9b"

(2)Loraの主な学習パラメータは以下のとおりです。(QLora(4bit量子化))