メインコンテンツへスキップ
Hugging Face Transformers ライブラリを使用すると、BERT のような最先端の NLP モデルや、混合精度、gradient checkpointing などのトレーニング手法を簡単に利用できます。W&B インテグレーション を使うと、その使いやすさはそのままに、インタラクティブな一元管理ダッシュボードで、充実した柔軟な実験管理とモデルのバージョン管理を行えます。

数行でできるワンランク上のログする

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

はじめに: 実験を管理する

サインアップして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" に設定することです。 TrainingArgumentslogging_steps 引数では、トレーニング中のメトリクスをどのくらいの頻度で W&B に送信するかを制御します。また、run_name 引数を使って、W&B 上のトレーニング run に名前を付けることもできます。 以上です。これで、モデルはトレーニング中に損失、評価メトリクス、モデルのトポロジー、勾配を W&B にログするようになります。
TensorFlow を使っていますか?PyTorch の Trainer を TensorFlow の TFTrainer に置き換えるだけです。

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

Artifacts を使用すると、最大 100GB までのモデルとデータセットを無料で保存でき、さらに 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 で確認でき、完全なモデル リネージが含まれます (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 表 にログできます。 トレーニング中に評価出力をログし、このような W&B 表 に記録する方法の詳細なガイドについては、以下のカスタム ログする セクションを参照してください。
評価出力を含む W&B 表 を示しています

W&B Run を終了する (Notebook のみ)

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

結果を可視化する

トレーニング結果をログしたら、W&B ダッシュボード で結果をインタラクティブに確認できます。数十件のrunを一度に簡単に比較し、興味深い発見を拡大して詳しく見たり、柔軟でインタラクティブな可視化によって複雑なデータからインサイトを引き出したりできます。

高度な機能とよくある質問

最良のモデルを保存するにはどうすればよいですか

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 が担います。Hugging Face のログすることをカスタマイズする必要がある場合は、WandbCallback をサブクラス化し、Trainer クラスの追加の method を活用する機能を加えることで、このコールバックを拡張できます。 以下に、この新しいコールバックを HF Trainer に追加する一般的なパターンを示します。さらに下には、評価出力を W&B の表にログする完全なコード例を掲載しています。

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

次のセクションでは、WandbCallback をカスタマイズして、トレーニング中にモデルの予測を実行し、評価サンプルを W&B の 表 にログする方法を示します。これは、Trainer の コールバック の on_evaluate method を使って、eval_steps ごとに実行します。 ここでは、トークナイザーを使用してモデル出力から予測とラベルをデコードする decode_predictions function を作成しています。 次に、予測とラベルから pandas DataFrame を作成し、DataFrame に epoch 列を追加します。 最後に、DataFrame から wandb.Table を作成し、それを wandb にログします。 また、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 を登録してください。