メインコンテンツへスキップ
Hugging Face Transformers ライブラリを使用すると、BERT のような NLP モデルや、混合精度、gradient checkpointing などのトレーニング手法を簡単に利用できます。W&B インテグレーション を使うと、一元管理ダッシュボードで実験管理とモデルのバージョン管理を行えます。 このガイドでは、Hugging Face の Trainer を W&B に接続する方法を説明します。これにより、トレーニング Runs のメトリクス、モデル チェックポイント、評価出力が一元管理ダッシュボードに自動的にログされます。最後には、Runs を比較し、モデル チェックポイントを W&B Artifacts に保存してそこから再読み込みし、独自のワークフローに合わせてログをカスタマイズできるようになります。このガイドでは、Hugging Face Transformers の Trainer を使用したモデルのトレーニングにすでに慣れていることを前提としています。

クイックスタート

Hugging Face ダッシュボード
すぐに使えるコードを見たい場合は、こちらのGoogle Colabをご覧ください。

はじめに: Experiments をトラッキングする

このセクションでは、W&B への認証、クライアント ライブラリのインストール、project 名の設定、および Trainer でのログの有効化について説明します。これにより、最初のトレーニング run が W&B Dashboard に表示されるようになります。

サインアップしてAPIキーを発行する

APIキーは、お使いのマシンをW&Bに認証するために使用します。APIキーはユーザープロフィールから発行できます。
より手早く行うには、User Settings にアクセスしてAPIキーを作成してください。APIキーはすぐにコピーし、パスワードマネージャーなどの安全な場所に保存してください。
  1. 右上にあるユーザープロフィールアイコンをクリックします。
  2. User Settings を選択し、API Keys セクションまでスクロールします。

wandb ライブラリをインストールしてログインする

wandb ライブラリをローカルにインストールしてログインするには、以下の手順に従います。
  1. WANDB_API_KEY 環境変数に APIキー を設定します。<> で囲まれた値は、ご自身の値に置き換えてください。
  2. wandb ライブラリをインストールし、ログインします。
W&B を初めて使用する場合は、クイックスタートを確認してください。

プロジェクトに名前を付ける

W&B のプロジェクトは、関連する run からログされたすべてのチャート、データ、モデルを保存する場所です。プロジェクトに名前を付けることで、作業を整理しやすくなり、1 つのプロジェクトに関するすべての情報を 1 か所にまとめられます。 run をプロジェクトに追加するには、WANDB_PROJECT 環境変数にプロジェクト名を設定します。WandbCallback はこの環境変数からプロジェクト名を取得し、run の設定時に使用します。
Trainer を初期化する_前に_、必ずプロジェクト名を設定してください。
プロジェクト名を指定しない場合、デフォルトのプロジェクト名は huggingface になります。

トレーニング run を W&B にログする

コード内でもコマンドラインからでも、Trainer のトレーニング引数を定義する際は、W&B でログすることを有効にするため、report_to"wandb" に設定します。この設定がない場合、Trainer は W&B にデータを送信しません。 TrainingArgumentslogging_steps 引数では、トレーニング中のメトリクスをどのくらいの頻度で W&B に送信するかを制御します。また、run_name 引数を使って、W&B 上のトレーニング run に名前を付けることもできます。 以上です。これで、モデルはトレーニング中に損失、評価メトリクス、モデルのトポロジー、勾配を W&B にログするようになります。
TensorFlow を使っていますか?PyTorch の Trainer を TensorFlow の TFTrainer に置き換えるだけです。

モデル チェックポイントを有効にする

メトリクスのログに加えて、トレーニング済みモデルの重み自体を W&B に保存することで、バージョン管理、ダウンロード、チーム内での共有が可能になります。 Artifacts を使用すると、最大 100 GB までのモデルとデータセットを無料で保存でき、さらに W&B の Registry を利用できます。Registry を使用すると、モデルを登録して確認や評価を行ったり、ステージングに向けた準備をしたり、本番環境にデプロイしたりできます。 Hugging Face のモデル チェックポイントを Artifacts にログするには、WANDB_LOG_MODEL 環境変数を次のいずれか 1 つ に設定します。
  • checkpoint: TrainingArgumentsargs.save_steps ごとにチェックポイントをアップロードします。
  • end: load_best_model_at_end も設定されている場合、トレーニング終了時にモデルをアップロードします。
  • false: モデルをアップロードしません。
これ以降に初期化するすべての Transformers Trainer は、モデルを W&B のプロジェクトにアップロードします。ログしたモデル チェックポイントは Artifacts の UI で確認でき、完全なモデル リネージが含まれます。Artifacts UI でのモデル チェックポイントの例を参照してください。
デフォルトでは、WANDB_LOG_MODELend に設定されている場合、モデルは W&B Artifacts に model-{run_id} として保存され、WANDB_LOG_MODELcheckpoint に設定されている場合は checkpoint-{run_id} として保存されます。 ただし、TrainingArgumentsrun_name を渡すと、モデルは model-{run_name} または checkpoint-{run_name} として保存されます。

W&B Registry

チェックポイントをArtifactsにログしたら、Registry を使って最良のモデル チェックポイントを登録し、チーム全体で一元管理できます。Registry を使うと、最良のモデルをタスクごとに整理し、モデルのライフサイクルを管理し、ML ライフサイクル全体をトラッキングおよび監査し、後続のアクションを自動化できます。 モデル Artifact をリンクする方法については、Registry を参照してください。

トレーニング中に評価出力を可視化する

トレーニング中または評価時にモデルの出力を可視化することは、モデルがどのように学習しているかを理解するうえで重要です。具体的な予測を損失曲線とあわせて確認することで、集約されたメトリクスでは見えにくい品質上の問題を見つけやすくなります。 Transformers Trainer のコールバック システムを使うと、W&B Tables により有用なデータをログできます。これには、モデルのテキスト生成出力やその他の予測が含まれます。 次のような W&B 表に、トレーニング中の評価出力をログする方法の詳細については、トレーニング中に評価サンプルをログして表示する を参照してください。
評価出力を含む W&B Table を示しています

W&B run を終了する (notebook のみ)

トレーニングを Python スクリプト内で実行している場合、W&B run はスクリプトの終了とともに終了します。 Jupyter または Google Colab のノートブックを使用している場合は、run.finish() を呼び出して、トレーニングが完了したことを W&B に伝えます。

結果を可視化する

トレーニング結果をログしたら、W&B Dashboard で確認できます。run を比較したり、結果の詳細を拡大して確認したり、インタラクティブな可視化でデータを探索したりできます。 ここまでで、インテグレーションは動作する状態になっています。Trainer はメトリクスを名前付きの project にログし、必要に応じてチェックポイントを Artifacts に保存し、評価の出力を W&B Dashboard で確認できるようにします。

高度な機能と FAQ

以下のセクションでは、ベストモデルの保存、チェックポイントからのトレーニングの再開、ログ用コールバックのカスタマイズ、環境変数による W&B の動作設定など、よくある次の作業について説明します。

最良のモデルを保存する

Trainerload_best_model_at_end=True を含む TrainingArguments を渡すと、W&B は最も性能の高いモデル チェックポイントを Artifacts に保存します。 モデル チェックポイントを Artifacts として保存した場合は、Registry に昇格できます。Registry では、次のことができます。
  • ML タスクごとに最良のモデル バージョンを整理する。
  • モデルを一元管理し、チームと共有する。
  • モデルを本番向けにステージングしたり、追加の評価のためにブックマークしたりする。
  • 後続の CI/CD プロセスをトリガーする。

保存したモデルを読み込む

WANDB_LOG_MODEL を使ってモデルを W&B Artifacts に保存している場合は、追加のトレーニングや推論のためにモデルの重みをダウンロードできます。あとは、それを以前使っていたのと同じ Hugging Face のアーキテクチャに読み込んでください。

チェックポイントからトレーニングを再開する

WANDB_LOG_MODEL='checkpoint' を設定した場合は、TrainingArgumentsmodel_dirmodel_name_or_path 引数として使用し、Trainerresume_from_checkpoint=True を渡すことで、トレーニングを再開できます。

トレーニング中に評価サンプルをログして表示する

Transformers の Trainer 経由で W&B にログする処理は、Transformers ライブラリの WandbCallback が担います。モデルの予測、混同行列、その他のカスタムデータをログするには、このコールバックをカスタマイズできます。そのためには、WandbCallback をサブクラス化し、Trainer クラスの追加のメソッドを使用する機能を加えます。 以下に、この新しいコールバックを Hugging Face Trainer に追加する一般的なパターンを示します。続いて、評価出力を W&B の表にログする完全なコード例を掲載します。

トレーニング中に評価サンプルを確認する

次のセクションでは、WandbCallback をカスタマイズして、トレーニング中にモデルの予測を実行し、評価サンプルを W&B 表 にログする方法を示します。これは、Trainer の コールバック の on_evaluate メソッドを使って、eval_steps ごとに実行されます。 decode_predictions function は、トークナイザーを使用してモデル出力から予測とラベルをデコードします。 次に、コードは予測とラベルから pandas DataFrame を作成し、DataFrame に epoch 列を追加します。 最後に、コードは DataFrame から wandb.Table を作成し、それを W&B にログします。freq エポックごとに予測をログすることで、ログする頻度を制御できます。
通常の WandbCallback とは異なり、このカスタム コールバック は、Trainer の初期化時ではなく、Trainer をインスタンス化したに trainer に追加する必要があります。これは、初期化時に Trainer インスタンスが コールバック に渡されるためです。
より詳しい例については、この Colab を参照してください。

追加の W&B 設定

環境変数を設定することで、Trainer でログする内容をさらに細かく設定できます。W&B の環境変数の完全な一覧については、環境変数リファレンスを参照してください。

wandb.init() をカスタマイズする

Trainer が使用する WandbCallback は、Trainer の初期化時に内部で wandb.init() を呼び出します。代わりに、Trainer が初期化される前に wandb.init() を呼び出して、run を手動で設定することもできます。これにより、W&B の run 設定を完全に制御できます。 以下に、init に渡す内容の例を示します。wandb.init() の詳細については、wandb.init() referenceを参照してください。

追加リソース

以下は、Transformers と W&B に関連する記事 6 本です。さらに詳しく学ぶための参考としてご覧ください。

サポートを受ける、または機能を要望する

Hugging Face W&B インテグレーションに関する問題、質問、または機能要望がある場合は、Hugging Face フォーラムのこのスレッドに投稿するか、Hugging Face のTransformers GitHub リポジトリで issue を登録してください。