Transformers documentation
コールバック
コールバック
Callbacks は、PyTorch の Trainer におけるトレーニングループの動作をカスタマイズできるオブジェクトです。トレーニングループの状態を監視して(進捗の報告、TensorBoard やその他の ML プラットフォームへのログ出力など…)、判断を下す(早期停止など)ことができます。
Callback は、返す TrainerControl オブジェクトを除き、「読み取り専用」のコードであり、トレーニングループ内の何を変更することもできません。トレーニングループの変更を伴うカスタマイズが必要な場合は、Trainer をサブクラス化し、必要なメソッドをオーバーライドしてください(例については trainer を参照)。
デフォルトでは、TrainingArguments.report_to は "none" に設定されています。
コールバックを実装する主なクラスはTrainerCallbackです。これはTrainerをインスタンス化するために使用されたTrainingArgumentsを取得し、TrainerStateを介してそのTrainerの内部状態にアクセスでき、TrainerControlを介してトレーニングループに対していくつかのアクションを実行できます。
利用可能なコールバック
ライブラリで利用可能なTrainerCallbackの一覧は以下の通りです:
TrainerCallback であり、Comet ML へログを送信します。
オプションの Comet 統合を設定します。
環境:
- COMET_MODE (
str, 省略可, デフォルトはget_or_create): 新しい Comet の実験を作成してログを記録するか、既存の実験に追記するかどうかを制御します。 以下の値を受け取ります:get_or_create:COMET_EXPERIMENT_KEYが設定されているかどうか、およびそのキーを持つExperimentが既に存在するかどうかを自動的に判断します。create: 常に新しい Comet Experiment を作成します。get: 既存の Comet Experiment に追加するよう常に試みます。COMET_EXPERIMENT_KEYが設定されている必要があります。
- COMET_START_ONLINE (
bool、任意): オンラインまたはオフラインの Experiment を作成するかどうかを指定します。 - COMET_PROJECT_NAME (
str, 任意): 実験用の Comet プロジェクト名。 - COMET_LOG_ASSETS (
str、任意、デフォルトはTRUE): Comet にトレーニング資産(チェックポイントなど)をログ出力するかどうか。TRUEまたはFALSEを指定できます。
環境で設定可能な項目については、こちらを参照してください。
ログ、評価、チェックポイントのデフォルトフローを処理する TrainerCallback です。
ログを出力するだけの素の TrainerCallback です。
学習または評価の進捗を表示する TrainerCallback です。
ログ出力時の文字列の切り詰め長を制御するために、max_str_len を変更できます。
クラス transformers.EarlyStoppingCallback
< source >( early_stopping_patience: int = 1early_stopping_threshold: float | None = 0.0 )
早期停止を処理するTrainerCallbackです。
このコールバックは、TrainerState の best_metric を設定するために、TrainingArguments の load_best_model_at_end 機能に依存しています。なお、TrainingArguments の save_steps が eval_steps と異なる場合、次の保存ステップまで早期停止は発生しません。
class transformers.integrations.TensorBoardCallback
< source >( tb_writer = None )
TrainerCallback の一種で、ログを TensorBoard に送信します。
環境:
- TENSORBOARD_LOGGING_DIR (
str、任意、デフォルトはNone): 結果をログに記録するディレクトリです。デフォルト値は os.path.join(args.output_dir, default_logdir()) です。
Trackio にメトリクスを記録する TrainerCallback です。
任意の Trackio 統合を設定します。
セットアップをカスタマイズするには、TrainingArguments に project、trackio_space_id、trackio_bucket_id、trackio_static_space_id、hub_private_repo を設定することもできます。
TrainerCallback の一種で、メトリクス、メディア、モデルのチェックポイントを Weight and Biases に記録します。
オプションの Weights & Biases (wandb) 統合を設定します。
必要に応じて、このメソッドをサブクラス化してオーバーライドし、セットアップをカスタマイズできます。詳細はこちらを参照してください。また、以下の環境変数をオーバーライドすることもできます:
環境:
- WANDB_LOG_MODEL (
str、任意、デフォルトは"false"): トレーニング中にモデルとチェックポイントをログに記録するかどうかを指定します。"end"、"checkpoint"、または"false"を指定できます。"end"を指定すると、トレーニング終了時にモデルがアップロードされます。"checkpoint"を指定すると、args.save_stepsごとにチェックポイントがアップロードされます。"false"を指定すると、モデルはアップロードされません。load_best_model_at_end()と併用して、最良のモデルをアップロードできます。 - WANDB_WATCH (
str、任意、デフォルトは"false"):"gradients"、"all"、"parameters"、または"false"を指定できます。"all"に設定すると、勾配とパラメータがログに記録されます。 - WANDB_PROJECT (
str、任意、デフォルトは"huggingface"): 別のプロジェクトに結果を保存するには、この値をカスタム文字列に設定します。
TrainerCallback で、MLflow にログを送信します。環境変数 DISABLE_MLFLOW_INTEGRATION = TRUE を設定することで無効化できます。
オプションのMLflow統合を設定します。
環境:
- HF_MLFLOW_LOG_ARTIFACTS (
str, 任意): MLflow の.log_artifact()機能を使用して成果物をログに記録するかどうかを指定します。これは、s3 や GCS などのリモートサーバーにログを記録する場合にのみ意味があります。Trueまたは 1 に設定すると、TrainingArguments のoutput_dirに保存される各チェックポイントが、保存のたびにローカルまたはリモートの成果物ストレージにコピーされます。リモートストレージなしで使用した場合、ファイルは成果物保存先へコピーされるだけです。 - MLFLOW_TRACKING_URI (
str、任意): 実行を特定のパスまたはリモートサーバーに保存するかどうか。デフォルトでは未設定であり、tracking URI の設定を完全にスキップします。 - MLFLOW_EXPERIMENT_NAME (
str、任意、デフォルトはNone): 実行を起動するために MLflow の experiment_name を使用するかどうかを指定します。デフォルトはNoneで、MLflow のDefault実験を指します。それ以外の場合、有効化される実験の大文字小文字を区別した名前を指定します。この名前の実験が存在しない場合、この名前の新しい実験が作成されます。 - MLFLOW_TAGS (
str、任意): MLflow の実行にタグとして追加するキー/値ペアの辞列を文字列としてダンプしたもの。例:os.environ['MLFLOW_TAGS']='{"release.candidate": "RC1", "release.version": "2.2.0"}'。 - MLFLOW_NESTED_RUN (
str, 任意): MLflow のネストされたランを使用するかどうかを指定します。Trueまたは 1 に設定すると、現在のラン内にネストされたランが作成されます。 - MLFLOW_RUN_ID (
str, 任意): チェックポイントから学習を再開する場合などに有用な、既存のランへの再接続を許可します。MLFLOW_RUN_ID環境変数が設定されている場合、start_runは指定されたラン ID を持つランの再開を試み、その他のパラメータは無視されます。 - MLFLOW_FLATTEN_PARAMS (
str、任意、デフォルトはFalse): ログ出力の前にパラメータの辞書をフラットにするかどうかを指定します。 - MLFLOW_MAX_LOG_PARAMS (
int、任意): 実行でログに記録するパラメータの最大数を設定します。
TrainerCallback の一種で、ログを AzureML に送信します。
トレーニングのCO2排出量をトラッキングするTrainerCallbackです。
TrainerCallback の一種で、ログを ClearML に送信します。
環境:
- CLEARML_PROJECT (
str、任意、デフォルトはHuggingFace Transformers): ClearML のプロジェクト名です。 - CLEARML_TASK (
str、任意、デフォルトはTrainer): ClearML のタスク名です。 - CLEARML_LOG_MODEL (
bool、任意、デフォルトはFalse): 学習中にモデルを成果物としてログに記録するかどうかを指定します。
DagsHubにログを記録するTrainerCallback。MLflowCallbackを継承します。
DagsHub のロギング統合を設定します。
環境:
- HF_DAGSHUB_LOG_ARTIFACTS (
str、任意): 実験のデータおよびモデルの成果物を保存するかどうかを指定します。デフォルトはFalseです。
クラス transformers.integrations.FlyteCallback
< source >( save_log_history: bool = Truesync_checkpoints: bool = True )
TrainerCallback の一種で、ログを Flyte に送信します。 注: このコールバックは Flyte タスク内でのみ動作します。
Kubeflow Trainer への学習進捗を報告する TrainerCallback です。
このコールバックは、TrainJobRuntimeStatus 機能ゲートを有効にして Kubeflow TrainJob 内でトレーニングを実行する場合に、自動的に登録されます。Kubeflow コントローラーは、トレーニング Pod に必要な環境変数を注入します。
環境変数(コントローラーによって注入されます):
KUBEFLOW_TRAINER_SERVER_URL: ステータス更新用の HTTPS エンドポイントKUBEFLOW_TRAINER_SERVER_CA_CERT: TLS検証用のCA証明書へのパスKUBEFLOW_TRAINER_SERVER_TOKEN: 認証用のサービスアカウントトークンのパス
報告された情報:
- 進捗率(0〜100%)
- 残り推定時間(秒)
- トレーニング指標(loss、learning_rate など)
機能:
- コントローラーへの負荷を軽減するために、自動スロットリング(5秒ごとに最大1回の更新)を実行します
- ファイル I/O を最小限に抑えるためのトークンキャッシュ(5 分)
- 分散学習では、ランク0のみが進捗を報告します
- サイレントな失敗 - ネットワークの問題がトレーニングを中断しません
環境変数DISABLE_KUBEFLOW_INTEGRATION=TRUEを設定することで無効化できます。
クラス transformers.integrations.DVCLiveCallback
< source >( live: typing.Any | None = Nonelog_model: typing.Union[typing.Literal['all'], bool, NoneType] = None**kwargs )
パラメータ
- live (
dvclive.Live、任意、デフォルトはNone) — 任意の Live インスタンスです。None の場合、**kwargs を使用して新しいインスタンスが作成されます。 - log_model (Union[Literal[“all”], bool], 省略可、デフォルトは
None) —dvclive.Live.log_artifact()を使用して、Trainer によって作成されたチェックポイントをログに記録するかどうかを指定します。Trueに設定すると、トレーニング終了時に最終チェックポイントがログに記録されます。"all"に設定すると、TrainingArguments のoutput_dir全体が各チェックポイントのたびにログに記録されます。
TrainerCallback の一種で、ログを DVCLive に送信します。
setup で以下の環境変数を使用して、統合を設定します。これらの環境変数以外の方法でこのコールバックをカスタマイズする場合は、こちらを参照してください。
任意のDVCLive統合を設定します。以下の環境変数以外の方法でこのコールバックをカスタマイズする場合は、こちらを参照してください。
環境:
- HF_DVCLIVE_LOG_MODEL (
str、任意): Trainer が作成するチェックポイントをdvclive.Live.log_artifact()でログに記録するかどうかを指定します。Trueまたは 1 に設定すると、トレーニング終了時に最終チェックポイントがログに記録されます。allに設定すると、各チェックポイントのたびに TrainingArguments のoutput_dir全体がログに記録されます。
SwanLab にメトリクス、メディア、モデルのチェックポイントを記録する TrainerCallback です。
オプションの SwanLab (swanlab) 統合を設定します。
必要に応じて、このメソッドをサブクラス化してオーバーライドし、セットアップをカスタマイズできます。詳細はこちらを参照してください。
以下の環境変数をオーバーライドすることもできます。環境変数に関する詳細はこちらを参照してください。
環境:
SWANLAB_API_KEY (
str、任意、デフォルトはNone): Cloud API Keyです。ログイン時に、まずこの環境変数がチェックされます。存在しない場合、システムはユーザーがすでにログイン済みかどうかを確認します。ログインしていない場合、ログイン処理が開始されます。- login インターフェースに文字列が渡された場合、この環境変数は無視されます。
- ユーザーがすでにログイン済みの場合、この環境変数はローカルに保存されたログイン情報よりも優先されます。
SWANLAB_PROJECT (
str、任意、デフォルトはNone): 別のプロジェクトに結果を保存するには、この値をカスタム文字列に設定します。指定しない場合、現在実行中のディレクトリ名が使用されます。SWANLAB_LOG_DIR (
str、任意、デフォルトはswanlog): この環境変数は、ローカルモードで実行する際のログファイルの保存パスを指定します。 デフォルトでは、作業ディレクトリ配下のswanlogという名前のフォルダにログが保存されます。SWANLAB_MODE (
Literal["local", "cloud", "disabled"]、任意、デフォルトはcloud): SwanLab の解析モードです。オペレーターによって登録されたコールバックに関わります。現在、local、cloud、disabled の3つのモードがあります。注意:大文字と小文字を区別します。詳細はこちらを参照してください。SWANLAB_LOG_MODEL (
str、任意、デフォルトはNone): SwanLab は現在、save mode 機能をサポートしていません。この機能は将来のリリースで利用可能になります。SWANLAB_WEB_HOST (
str、任意、デフォルトはNone): プライベート版用の SwanLab クラウド環境の Web アドレス(無料)SWANLAB_API_HOST (
str、任意、デフォルトはNone): プライベート版の SwanLab クラウド環境向けの API アドレス(無料)SWANLAB_RUN_ID (
str、任意、デフォルトはNone): 再開する前回のランの実験 ID。SWANLAB_RESUMEと併用して、既存の実験を継続します。SWANLAB_RESUME (
str、任意、デフォルトはNone): 再開モード("must"、"allow"、"never")。resume_from_checkpointを使用する場合、デフォルトは"allow"です。
TrainerCallback
class transformers.TrainerCallback
< source >( )
パラメータ
- args (TrainingArguments) — Trainerをインスタンス化するために使用されるトレーニング引数。
- state (TrainerState) — Trainerの現在の状態です。
- control (TrainerControl) — Trainer に返され、いくつかの判断を行うために使用できるオブジェクト。
- model (PreTrainedModel または
torch.nn.Module) — 学習対象のモデル。 - processing_class(
PreTrainedTokenizerまたはBaseImageProcessorまたはProcessorMixinまたはFeatureExtractionMixin)— データをエンコードするために使用される処理クラスです。トークナイザー、プロセッサー、画像プロセッサー、または特徴抽出器のいずれかです。 - optimizer (
torch.optim.Optimizer) — 学習ステップで使用されるオプティマイザー。 - lr_scheduler (
torch.optim.lr_scheduler.LambdaLR) — 学習率を設定するために使用されるスケジューラ。 - train_dataloader (
torch.utils.data.DataLoader, 任意) — 学習に現在使用されているデータローダーです。 - eval_dataloader (
torch.utils.data.DataLoader, 省略可) — 評価に現在使用されているデータローダー。 - metrics (
dict[str, float]) — 最後の評価フェーズで計算されたメトリクス。それらは、
on_evaluateイベントでのみアクセスできます。 - logs (
dict[str, float]) — 記録する値。それらは、
on_logイベントでのみアクセスできます。
…
control オブジェクトは、コールバックによって変更できる唯一のオブジェクトであり、変更された場合は、その変更を行うイベントが変更後のバージョンを返す必要があります。
引数 args、state、control はすべてのイベントで位置引数として渡され、それ以外の引数は kwargs にまとめられます。必要な引数は、イベントのシグネチャ内でアンパックして使用できます。例として、シンプルな PrinterCallback のコードを参照してください。
例:
class PrinterCallback(TrainerCallback):
def on_log(self, args, state, control, logs=None, **kwargs):
_ = logs.pop("total_flos", None)
if state.is_local_process_zero:
print(logs)on_epoch_begin
< source >( args: TrainingArgumentsstate: TrainerStatecontrol: TrainerControl**kwargs )
エポックの開始時に呼び出されるイベント。
on_epoch_end
< source >( args: TrainingArgumentsstate: TrainerStatecontrol: TrainerControl**kwargs )
エポックの終了時に呼び出されるイベント。
on_evaluate
< source >( args: TrainingArgumentsstate: TrainerStatecontrol: TrainerControl**kwargs )
評価フェーズの後に呼び出されるイベント。
on_init_end
< source >( args: TrainingArgumentsstate: TrainerStatecontrol: TrainerControl**kwargs )
Trainerの初期化が完了した時点で呼び出されるイベントです。
最後のログを記録した後に呼び出されるイベント。
on_optimizer_step
< source >( args: TrainingArgumentsstate: TrainerStatecontrol: TrainerControl**kwargs )
オプティマイザのステップの後に、勾配がゼロにリセットされる前に呼び出されるイベント。勾配の監視に便利です。
on_pre_optimizer_step
< source >( args: TrainingArgumentsstate: TrainerStatecontrol: TrainerControl**kwargs )
勾配クリッピングの後に、オプティマイザーステップの前に呼び出されるイベントです。勾配の監視に便利です。
on_predict
< source >( args: TrainingArgumentsstate: TrainerStatecontrol: TrainerControlmetrics**kwargs )
予測が正常に完了した後に呼び出されるイベント。
on_prediction_step
< source >( args: TrainingArgumentsstate: TrainerStatecontrol: TrainerControl**kwargs )
予測ステップの後に呼び出されるイベント。
on_push_begin
< source >( args: TrainingArgumentsstate: TrainerStatecontrol: TrainerControl**kwargs )
Event called before pushing the model to the hub, at the beginning of Trainer.push_to_hub and Trainer._push_from_checkpoint.
チェックポイントの保存後に呼び出されるイベント。
on_step_begin
< source >( args: TrainingArgumentsstate: TrainerStatecontrol: TrainerControl**kwargs )
トレーニングステップの開始時に呼び出されるイベント。勾配蓄積を使用している場合、1つのトレーニングステップで複数の入力を使用する可能性があります。
on_step_end
< source >( args: TrainingArgumentsstate: TrainerStatecontrol: TrainerControl**kwargs )
トレーニングステップの終了時に呼び出されるイベント。勾配蓄積を使用している場合、1つのトレーニングステップには複数の入力が必要になることがあります。
on_substep_end
< source >( args: TrainingArgumentsstate: TrainerStatecontrol: TrainerControl**kwargs )
勾配蓄積中のサブステップの終了時に呼び出されるイベント。
on_train_begin
< source >( args: TrainingArgumentsstate: TrainerStatecontrol: TrainerControl**kwargs )
学習の開始時に呼び出されるイベント。
on_train_end
< source >( args: TrainingArgumentsstate: TrainerStatecontrol: TrainerControl**kwargs )
トレーニングの終了時に呼び出されるイベント。
PyTorchのTrainerにカスタムコールバックを登録する方法の例を以下に示します。
class MyCallback(TrainerCallback):
"A callback that prints a message at the beginning of training"
def on_train_begin(self, args, state, control, **kwargs):
print("Starting training")
trainer = Trainer(
model,
args,
train_dataset=train_dataset,
eval_dataset=eval_dataset,
callbacks=[MyCallback], # We can either pass the callback class this way or an instance of it (MyCallback())
)コールバックを登録するもう一つの方法は、次のようにtrainer.add_callback()を呼び出すことです。
trainer = Trainer(...)
trainer.add_callback(MyCallback)
# Alternatively, we can pass an instance of the callback class
trainer.add_callback(MyCallback())TrainerState
class transformers.TrainerState
< source >( epoch: float = 0global_step: int = 0max_steps: int = 0logging_steps: int = 500eval_steps: int = 500save_steps: int = 500train_batch_size: int | None = Nonenum_train_epochs: int = 0num_input_tokens_seen: int = 0total_flos: float = 0log_history: list = Nonebest_metric: float | None = Nonebest_global_step: int | None = Nonebest_model_checkpoint: str | None = Noneis_local_process_zero: bool = Trueis_world_process_zero: bool = Trueis_hyper_param_search: bool = Falsetrial_name: str | None = Nonetrial_params: dict[str, str | float | int | bool] | None = Nonestateful_callbacks: list['TrainerCallback'] | None = None )
パラメータ
- epoch (
float, 省略可) — トレーニング中のみに設定され、現在のトレーニングがどのエポックにあるかを示します(小数部分は、現在のエポックの完了率を表します)。 - global_step (
int、任意、デフォルトは 0)— 学習中、完了した更新ステップの数を表します。 - max_steps (
int、任意、デフォルトは 0) — 現在のトレーニング中に実行する更新ステップの回数。 - logging_steps (
int、任意、デフォルト値は 500)— X ステップごとにログを記録します - eval_steps (
int, 任意) — X ステップごとに評価を実行します。 - save_steps (
int、任意、デフォルトは 500) — X ステップごとにチェックポイントを保存します。 - train_batch_size (
int, 任意) — トレーニング用データローダーのバッチサイズ。auto_find_batch_sizeを使用した場合にのみ必要です。 - num_input_tokens_seen (
int、任意、デフォルトは 0) — 入力トークンをトラッキングする場合、学習中に確認されたトークンの数(予測トークンの数ではなく、入力トークンの数)です。 - total_flos (
float、任意、デフォルトは 0) — トレーニング開始以降にモデルが実行した浮動小数点演算の総数(オーバーフローを避けるため float として保存されます)。 - log_history (
list[dict[str, float]]、省略可) — トレーニング開始以降に記録されたログのリストです。 - best_metric (
float, 任意) — 最良モデルを追跡する場合、これまでに観測された最良メトリックの値。 - best_global_step (
int, 任意) — 最良のモデルを追跡する場合、最良のメトリクスが観測されたステップ。best_model_checkpointを設定するために使用されます。 - best_model_checkpoint (
str, 任意) — 最良のモデルを追跡している場合、これまでに見つかった最良のモデルのチェックポイントの名前の値。 - is_local_process_zero (
bool、省略可能、デフォルトはTrue) — このプロセスがローカル(複数マシンで分散学習を行う場合、1台のマシン上での)メインプロセスかどうかを示します。 - is_world_process_zero (
bool、省略可能、デフォルトはTrue) — このプロセスがグローバルなメインプロセスかどうかを示します(複数マシンで分散学習を行う場合、Trueになるのは1つのプロセスのみです)。 - is_hyper_param_search (
bool、省略可能、デフォルトはFalse) — Trainer.hyperparameter_search を使用してハイパーパラメータ検索を実行中かどうかを示します。この値は、TensorBoard にデータがどのように記録されるかに影響します。 - stateful_callbacks (
list[StatefulTrainerCallback]、省略可) —Trainerにアタッチされ、その状態の保存または復元が必要な Callback のリストです。 該当する Callback は、stateとfrom_state関数を実装する必要があります。
チェックポイント時にモデルとオプティマイザーとともに保存され、TrainerCallbackに渡される、Trainerの内部状態を含むクラス
このクラス全体において、1ステップとは1回の更新ステップを指します。勾配蓄積を使用する場合、1回の更新ステップには複数のフォワードパスとバックワードパスが必要になることがあります。
gradient_accumulation_steps=nを使用する場合、1回の更新ステップにはn個のバッチを処理する必要があります。
比例値かどうかに基づいて、ログ、eval、および保存ステップの絶対値を計算して保存します。
self に必要な初期学習の参照を保存します
json_pathの内容からインスタンスを作成します。
このインスタンスの内容をjson_path内にJSON形式で保存します。
TrainerControl
class transformers.TrainerControl
< source >( should_training_stop: bool = Falseshould_epoch_stop: bool = Falseshould_save: bool = Falseshould_evaluate: bool = Falseshould_log: bool = False )
パラメータ
- should_training_stop (
bool, 省略可, デフォルトはFalse) — トレーニングを中断するかどうか。Trueの場合、この変数はFalseにリセットされません。トレーニングは単に停止します。 - should_epoch_stop (
bool, 省略可, デフォルトはFalse) — 現在のエポックを中断するかどうか。Trueの場合、次のエポックの開始時にこの変数はFalseにリセットされます。 - should_save (
bool, 省略可, デフォルトはFalse) — このステップでモデルを保存するかどうか。Trueの場合、次のステップの開始時にこの変数はFalseにリセットされます。 - should_evaluate (
bool, 省略可, デフォルトはFalse) — このステップでモデルを評価するかどうか。Trueの場合、次のステップの開始時にこの変数はFalseにリセットされます。 - should_log (
bool, 省略可, デフォルトはFalse) — このステップでログを報告するかどうか。Trueの場合、次のステップの開始時にこの変数はFalseにリセットされます。
Trainer の制御フローを処理するクラスです。このクラスは、TrainerCallback によって使用され、トレーニングループ内のいくつかのスイッチを有効にします。