Transformers documentation

ファインチューニング

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v5.22.1).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

ファインチューニング

ファインチューニングは、大規模な事前学習済みモデルを、特定のタスクやドメインに特化した小さなデータセットでさらに学習させる手法です。例えば、コーディングの例を含むデータセットでファインチューニングを行うと、モデルのコーディング能力が向上します。ファインチューニングは事前学習とほぼ同じですが、ランダムな重みから始める点が異なります。また、事前学習に比べて、はるかに少ない計算リソース、データ、時間しか必要としません。

以下のチュートリアルでは、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 は、オプティマイザーの初期学習率を設定します。
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 で学習スクリプトを実行します。
  • ノートブックまたはリソース > タスクレシピセクションを参照して、テキスト、オーディオ、ビジョン、マルチモーダルなど、さまざまなタスクに関する追加の学習例を確認してください。
Update on GitHub