今回開発したモデルは、ベースモデル「Gemma2-9B」に対して、自作のデータセット100件を用いてファインチューニングを実施し、指示応答できるようにしました。ファインチューニングに使用した学習コードは、Google Gemma公式のサンプルコード「Gemma Finetuning SFT Notebook」を参考にして作成しました。開発環境としては、GCP上のL4 GPUを使用し、Omnicampus演習環境の「クローン演習環境」を構築してモデルのトレーニングおよび評価を行いました。コンペティションの結果は、予選42位、決勝8位(最終7位)となりました。
fukugawa/gemma-2-9b-finetuned · Hugging Face
fukugawa/kamakura-tasks-100 · Datasets at Hugging Face
本ドキュメントでは、今回開発したモデルの作成を再現するための開発手順を記載します。
モデルをトレーニングするための開発環境は、GCP上のL4 GPUを使用してOmnicampus演習環境のクローンを構築しました。構築手順は別のNotion記事に書いたのでそちらを参照下さい。
【クローン演習環境】GCPのL4 GPUによる開発環境の構築 ❶ 環境構築編
データセットは、ELYZA-tasks-100のオリジナルの100件の書式のみを参考にして、自分の住む鎌倉関係のコンテンツで指示と回答を自作しました。最終的に、人力で約20時間かけて100件のデータセットを開発しました。
ファインチューニングするための学習コードは、Google Gemma公式のサンプルコードの「Gemma Finetuning SFT Notebook」を参考にして開発しました。
今回開発したモデルを実際にファインチューニングした際のコードは以下の3ステップのみです。
① まずは、ベースモデルの読み込み
import torch
from transformers import AutoModelForCausalLM, BitsAndBytesConfig
model_id = "google/gemma-2-9b"
bnb_config = BitsAndBytesConfig(
load_in_4bit=True,
bnb_4bit_quant_type="nf4",
bnb_4bit_compute_dtype=torch.bfloat16
)
model = AutoModelForCausalLM.from_pretrained(model_id, quantization_config=bnb_config, device_map="auto")
② 自作のデータセットを読み込んで、プロンプトの書式にマッピング