メインコンテンツまでスキップ

Hugging Faceトランスフォーマー

Hugging Faceトランスフォーマー ライブラリは、BERTのような最先端のNLPモデルや、混合精度演算や勾配チェックポイントのようなトレーニング手法を簡単に利用できるようにしています。W&Bインテグレーションは、使いやすさを損なうことなく、インタラクティブな中央集約ダッシュボードに豊富で柔軟な実験トラッキングとモデルバージョン管理を追加します。

🤗 2行で次世代のログ作成

from transformers import TrainingArguments, Trainer

args = TrainingArguments(... , report_to="wandb")
trainer = Trainer(... , args=args)

W&Bのインタラクティブダッシュボードで実験結果を探索

このガイドで解説する内容

備考

すぐに実際のコードを試してみたい場合は、このGoogle Colabをチェックしてください。

はじめに:実験の追跡

1) サインアップし、wandb ライブラリをインストールしてログインする

a) サインアップして無料アカウントを取得 b) wandbライブラリをpipでインストール

c) トレーニングスクリプトでログインするには、www.wandb.aiでアカウントにサインインする必要があり、その後、 Authorize page でAPIキーを見つけることができます。

Weights and Biasesを初めて使う場合は、クイックスタート をチェックしてみてください。

pip install wandb

wandb login

2) プロジェクトの名前を付ける

プロジェクトは、関連するrunsから記録されたすべてのチャート、データ、モデルが格納される場所です。プロジェクトに名前を付けることで、作業を整理し、1つのプロジェクトに関するすべての情報を1か所に保管できます。

runをプロジェクトに追加するには、WANDB_PROJECT 環境変数にプロジェクト名を設定するだけです。WandbCallback は、このプロジェクト名の環境変数を取得し、runの設定時に使用します。

WANDB_PROJECT=amazon_sentiment_analysis
備考

Trainerを初期化する前に、プロジェクト名を設定してください。

プロジェクト名が指定されていない場合、デフォルトで "huggingface" になります。

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

これが最も重要なステップです:Trainer のトレーニング引数を定義する際、コード内やコマンドラインから、Weights & Biases でのログを有効にするために report_to"wandb" に設定します。

また、run_name引数を使用してトレーニングrunに名前を付けることもできます。

備考

TensorFlowを使用していますか? PyTorchのTrainer を TensorFlow の TFTrainerに置き換えるだけです。

これで完了です!これで、モデルはトレーニング中に損失、評価メトリクス、モデルトポロジー、勾配をWeights & Biasesにログするようになります。

python run_glue.py \     # Pythonスクリプトを実行
--report_to wandb \ # W&Bへのログを有効にする
--run_name bert-base-high-lr \ # W&Bのrunの名前(オプション)
# 他のコマンドライン引数はここに

(ノートブックのみ)W&B Runを終了する

もしトレーニングがPythonスクリプトにカプセル化されている場合、スクリプトが終了するとW&B runも終了します。

JupyterまたはGoogle Colabノートブックを使用している場合は、トレーニングが終了したことをwandb.finish()を呼び出すことで伝える必要があります。

trainer.train()  # W&Bにトレーニングとログ記録を開始する
# トレーニング後の分析、テスト、その他のログコード

wandb.finish()

4) 結果を可視化する

トレーニング結果をログに記録したら、W&Bダッシュボードで結果を動的に探索できます。複数のrunを一度に比較しやすく、興味深い発見をズームインし、柔軟でインタラクティブな可視化で複雑なデータから洞察を引き出すことが容易です。

おすすめ記事

以下は、TransformersとW&Bに関連するおすすめの6つの記事です。

Hugging Face Transformersのハイパーパラメータ最適化
  • Hugging Face Transformersのハイパーパラメータ最適化の3つの戦略 - グリッドサーチ、ベイズ最適化、および集団的学習 - を比較します。
  • Hugging Face transformersの標準的なuncased BERTモデルを使用し、SuperGLUEベンチマークのRTEデータセットで微調整を行いたい。
  • 結果は、集団的学習がHugging Faceトランスフォーマーモデルのハイパーパラメータ最適化に最も効果的なアプローチであることを示します。

詳細レポートはこちら

ハグするツイート:ツイートを生成するモデルのトレーニング
  • この記事では、著者が5分で誰のツイートでもHuggingFace Transformerの学習済みGPT2モデルを微調整する方法を実演しています。
  • モデルは以下の開発フローを使用しています:ツイートのダウンロード、データセットの最適化、初期実験、ユーザー間の損失の比較、モデルの微調整。

詳細なレポートは、こちらをご覧ください。

Hugging Face BERTとWBを用いた文章の分類
  • この記事では、自然言語処理(NLP)で最近の画期的な進歩を活用した文章の分類器を作成し、NLPへの転移学習の適用に焦点を当てます。
  • Corpus of Linguistic Acceptability(CoLA)データセットを使用して、単一の文章の分類を行います。これは、文法的に正しいか正しくないかというラベルが付けられた文章のセットで、2018年5月に初めて公開されました。
  • GoogleのBERTを使用して、NLPタスクの範囲で最小限の努力で高性能なモデルを作成します。

詳細なレポートはこちらでご覧いただけます。

Hugging Faceモデルパフォーマンスのトラッキング方法
  • Weights & BiasesとHugging Faceトランスフォーマーを使用して、DistilBERTをトレーニングします。DistilBERTは、BERTより40%小さく、BERTの精度の97%を保持したトランスフォーマーです。
  • GLUEベンチマークは、NLPモデルのトレーニング用の9つのデータセットとタスクを集めたものです。

詳細なレポートはこちらでご覧いただけます。

HuggingFaceでのEarly Stoppingの例
  • Hugging Face TransformerをEarly Stopping正則化を使用してファインチューニングすることは、PyTorchまたはTensorFlowではネイティブに実行できます。
  • TensorFlowでは、tf.keras.callbacks.EarlyStoppingコールバックを使って手軽にEarlyStoppingコールバックを使用できます。
  • PyTorchでは、すぐに使えるearly stopping方法はありませんが、GitHub Gistで利用可能なearly stoppingフックがあります。

完全なレポートはこちらで読めます。

カスタムデータセットでの Hugging Face Transformer の微調整方法

カスタムIMDBデータセットでセンチメント分析(二値分類)用にDistilBERTトランスフォーマーを微調整します。

完全なレポートはこちらで読めます。

高度な機能

モデルバージョン管理を有効にする

Weights & Biases のアーティファクトを使用すると、最大100GBのモデルやデータセットを格納できます。Hugging Face モデルを W&B アーティファクトにログするには、WANDB_LOG_MODEL という名前の W&B 環境変数を 'end' または 'checkpoint' のいずれかに設定します。 'end' は最終モデルのみをログし、'checkpoint'save_steps ごとにモデルのチェックポイントをログします(TrainingArguments内)。

WANDB_LOG_MODEL='end'
備考

デフォルトでは、WANDB_LOG_MODELendに設定されている場合、モデルはW&B Artifactsにmodel-{run_id}として保存されます。WANDB_LOG_MODELcheckpointに設定されている場合は、checkpoint-{run_id}として保存されます。 ただし、TrainingArgumentsrun_nameを渡すと、モデルはmodel-{run_name}またはcheckpoint-{run_name}として保存されます。

これで、これから初期化するすべてのTrainerはモデルをW&Bプロジェクトにアップロードします。モデルファイルはW&B Artifacts UIで表示できます。モデルとデータセットのバージョン管理に関しては、Weights & Biases' Artifactsガイドを参照してください。

最良のモデルをどのように保存しますか?

load_best_model_at_end=TrueTrainerに渡された場合、W&Bは最もパフォーマンスの良いモデルをArtifactsに保存します。

保存されたモデルの読み込み

WANDB_LOG_MODELでW&B Artifactsにモデルを保存した場合は、追加のトレーニングや推論の実行のためにモデルの重みをダウンロードできます。以前使用したHugging Faceアーキテクチャーに戻して読み込むだけです。

# 新しいrunを作成します
with wandb.init(project="amazon_sentiment_analysis") as run:
# runにアーティファクトを接続する
my_model_name = "model-bert-base-high-lr:latest"
my_model_artifact = run.use_artifact(my_model_name)

# モデルの重みをフォルダにダウンロードし、パスを返す
model_dir = my_model_artifact.download()

# そのフォルダからHugging Faceトランスフォーマーを読み込む
# 同じモデルクラスを使用する
model = AutoModelForSequenceClassification.from_pretrained(
model_dir, num_labels=num_labels)

# 追加のトレーニングを行うか、推論を実行する

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

WANDB_LOG_MODEL='checkpoint' を設定していた場合、model_dirTrainingArgumentsmodel_name_or_path 引数に使用し、resume_from_checkpoint=TrueTrainer に渡すことで、トレーニングを再開することもできます。

last_run_id = "xxxxxxxx"  # wandbワークスペースからrun_idを取得

# run_idからwandb runを再開
with wandb.init(
project=os.environ["WANDB_PROJECT"],
id=last_run_id,
resume="must",) as run:

# runにアーティファクトを接続する
my_checkpoint_name = f"checkpoint-{last_run_id}:latest"
my_checkpoint_artifact = run.use_artifact(my_model_name)

# フォルダにチェックポイントをダウンロードし、パスを返す
checkpoint_dir = my_checkpoint_artifact.download()

#モデルとトレーナーを再初期化
model = AutoModelForSequenceClassification.from_pretrained(
<model_name>, num_labels=num_labels)

#素晴らしいトレーニング引数がここにあります。
training_args = TrainingArguments(...)

trainer = Trainer(
model=model,
args=training_args,
...)

#チェックポイントからトレーニングを再開するため、チェックポイントディレクトリを使用してください
trainer.train(resume_from_checkpoint=checkpoint_dir)

追加のW&B設定

Trainerでログした内容をさらに設定することができます。ここでW&B環境変数の全リストを見ることができます。

環境変数使用法
WANDB_PROJECTプロジェクトに名前を付ける(デフォルトではhuggingface
WANDB_LOG_MODELトレーニング終了時にモデルをアーティファクトとしてログする(デフォルトではfalse
WANDB_WATCH

モデルの勾配、パラメータ、またはどちらもログしたいかどうか設定します。

  • false(デフォルト):勾配もパラメータもログしない
  • gradients:勾配のヒストグラムをログする
  • all:勾配とパラメータのヒストグラムをログする
WANDB_DISABLEDログを完全に無効にするには、trueに設定する(デフォルトはfalse
WANDB_SILENTwandbによって出力される出力を無音にするには、trueに設定する(デフォルトはfalse
WANDB_WATCH=all
WANDB_SILENT=true

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

Trainerが使っているWandbCallbackは、Trainerが初期化されたときにwandb.initを呼び出します。代わりに、Trainerが初期化される前にwandb.initを呼び出して、runを手動で設定することもできます。これにより、W&B run設定を完全にコントロールすることができます。

initに渡す例を下記に示します。wandb.initの使い方の詳細は、リファレンスドキュメントをご覧ください

wandb.init(project="amazon_sentiment_analysis",
name="bert-base-high-lr",
tags=["baseline", "high-lr"],
group="bert")

カスタムログ

Weights & Biasesへのログは、TransformersのTrainer によって、Transformersライブラリ内のWandbCallback(参考資料)で処理されます。Hugging Faceのログをカスタマイズする必要がある場合は、このコールバックを変更してください。

問題点、質問、機能のリクエスト

Hugging FaceのW&Bインテグレーションに関する問題、質問、機能のリクエストは、Hugging Faceフォーラムのこのスレッドで投稿するか、Hugging Face Transformers GitHubリポジトリでissueを立ててください。

Was this page helpful?👍👎