Transformers documentation
ファインチューニング
ファインチューニング
ファインチューニングは、大規模な事前学習済みモデルを、特定のタスクやドメインに特化した小さなデータセットでさらに学習させる手法です。例えば、コーディングの例を含むデータセットでファインチューニングを行うと、モデルのコーディング能力が向上します。ファインチューニングは事前学習とほぼ同じですが、ランダムな重みから始める点が異なります。また、事前学習に比べて、はるかに少ない計算リソース、データ、時間しか必要としません。
以下のチュートリアルでは、Trainerを使用して大規模言語モデルのファインチューニングを行う手順を説明します。
ユーザートークンを使用して Hugging Face アカウントにログインし、ファインチューニングしたモデルを Hub にプッシュします。
from huggingface_hub import login
login()トークナイズ
データセットを読み込み、モデルが学習に使用するテキスト列(以下のデータセットではhoroscope)をトークナイズします。
トークナイザーはモデルの入力であるinput_idsとattention_maskを生成します。モデルのforwardメソッドはinput_idsとattention_maskのみを受け入れるため、トークナイズ後にhoroscopeなどの列を削除するようにremove_columnsを設定してください。
truncation=Trueを設定し、max_lengthを指定することで、長いシーケンスを指定された最大長に切り詰めることができます。train_test_splitメソッドを使用して、モデルの評価に使用するテスト分割を作成します。
from datasets import load_dataset
from transformers import AutoTokenizer, DataCollatorForLanguageModeling
model_name = "Qwen/Qwen3-0.6B"
tokenizer = AutoTokenizer.from_pretrained(model_name)
dataset = load_dataset("karthiksagarn/astro_horoscope", split="train")
def tokenize(batch):
return tokenizer(
batch["horoscope"],
truncation=True,
max_length=512,
)
dataset = dataset.map(tokenize, batched=True, remove_columns=dataset.column_names)
dataset = dataset.train_test_split(test_size=0.1)データコラレーターは、モデルが処理するためのバッチにデータセットのサンプルをまとめる役割を担います。DataCollatorForLanguageModeling は、データセット内のすべてのシーケンスを同じ長さにパディングするのではなく、動的に各バッチ内の最長シーケンスに合わせてパディングを行います。これにより、不要なパディングトークンの計算を回避し、計算リソースとメモリを節約できます。
- トークンをランダムにマスクすることを避けるには、
mlm=Falseを設定してください。
data_collator = DataCollatorForLanguageModeling(tokenizer, mlm=False)モデルの読み込み
ファインチューニングのために事前学習済みチェックポイントを読み込みます(モデルの読み込みに関する詳細については、モデルの読み込みガイドを参照してください)。
dtype="auto"を設定すると、重みが保存されている dtype で読み込まれます。設定しない場合、PyTorch は重みをtorch.float32で読み込むため、重みが元々torch.bfloat16である場合、メモリ使用量が2倍になります。
from transformers import AutoModelForCausalLM, TrainingArguments, Trainer
model_name = "Qwen/Qwen3-0.6B"
model = AutoModelForCausalLM.from_pretrained(model_name, dtype="auto")トレーニング設定
TrainingArguments は、トレーニング実行をカスタマイズするためのすべてのオプションを提供します。ここでは、最も一般的な引数のみを紹介します。その他の引数は、適切なデフォルト値が設定されているか、分散トレーニングのような特定のシナリオでのみ関連します。引数の完全なリストについては、TrainingArguments の API ドキュメントを参照してください。
num_train_epochsとper_device_train_batch_sizeは、学習期間とバッチサイズを制御します。learning_rateは、オプティマイザーの初期学習率を設定します。
- ハードウェアがサポートしている場合(Ampere 以降の GPU)、高速な混合精度トレーニングのために
bf16=Trueを設定してください。それ以外の古いハードウェアでは、fp16=Trueにフォールバックしてください。 gradient_accumulation_stepsは、重みの更新を行う前に複数のフォワードパスにわたって勾配を蓄積することで、より大きな実効バッチサイズをシミュレートします。gradient_checkpointingは、中間アクティベーションを保存する代わりにバックワードパスで再計算することで、計算量とメモリをトレードオフします。メモリと速度のバランスを取る方法については、部分的なチェックポイントを参照してください。gradient_checkpointing=Trueの場合、gradient_checkpointing_kwargs={"offload": True}を設定すると、保存されたアクティベーションをピン留めされたホストメモリに保持し、長いシーケンスにおける GPU メモリ使用量を削減できます。トレードオフについては、保存されたアクティベーションのオフロードを参照してください。train_sampling_strategy="group_by_length"を設定すると、長さの似たサンプルをバッチにまとめ、パディングを削減できます。プロセッサベースのマルチモーダルデータセットや事前計算された長さについては、長さでサンプルをグループ化を参照してください。
eval_strategyとsave_strategyは、学習中にモデルを評価するタイミングと、チェックポイントを保存するタイミングを決定します。load_best_model_at_endは、トレーニングが終了した時点で最良のチェックポイントをロードします。eval_strategyが設定されている必要があります。
logging_stepsは、学習中に損失を更新して返す頻度を制御します。
training_args = TrainingArguments(
output_dir="qwen3-finetuned",
num_train_epochs=3,
per_device_train_batch_size=2,
gradient_accumulation_steps=8,
gradient_checkpointing=True,
gradient_checkpointing_kwargs={"every_n_layers": 4},
bf16=True,
learning_rate=2e-5,
logging_steps=10,
eval_strategy="epoch",
save_strategy="epoch",
load_best_model_at_end=True,
)トレーニング
必要なコンポーネントをすべて含めてTrainerインスタンスを作成し、train()を呼び出して学習を開始します。
trainer = Trainer(
model=model,
args=training_args,
train_dataset=dataset["train"],
eval_dataset=dataset["test"],
processing_class=tokenizer,
data_collator=DataCollatorForLanguageModeling(tokenizer, mlm=False),
)
trainer.train()
trainer.push_to_hub()push_to_hub() は、ファインチューニングされた重み、生成設定、トークナイザー、モデル設定を Hub にアップロードします。
次のステップ
- Trainerの機能ガイドでは、カスタム損失関数、メモリ効率の良い評価、チェックポイント作成など、一般的なTrainer機能の最小限の動作例を掲載しています。
- Trainer メソッドのサブクラス化ガイドを読み、Trainerのメソッドをサブクラス化して新しい機能やカスタム機能をサポートする方法を学びましょう。
- Callbacksガイドを読み、ロギング、早期停止、その他のカスタム動作のためにトレーニングイベントにフックする方法を学びましょう。
- Data collatorsガイドを読み、サンプルをバッチに組み立てる方法をカスタマイズする方法を学びましょう。
- Hugging Face Jobs を使用して、レンタルした GPU で学習スクリプトを実行します。
- ノートブックまたはリソース > タスクレシピセクションを参照して、テキスト、オーディオ、ビジョン、マルチモーダルなど、さまざまなタスクに関する追加の学習例を確認してください。