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とHugging Face トランスフォーマーを組み合わせて、NLP の実験を追跡する方法基本的な使い方
- W&B Hugging Face 統合の高度な機能を利用する方法 を詳しく紹介し、実験のトラッキングを最大限に活用する方法。
すぐに実際のコードを試してみたい場合は、このGoogle Colabをチェックしてください。
はじめに:実験の追跡
1) サインアップし、wandb
ライブラリをインストールしてログインする
a) サインアップして無料アカウントを取得
b) wandb
ライブラリをpipでインストール
c) トレーニングスクリプトでログインするには、www.wandb.aiでアカウントにサインインする必要があり、その後、 Authorize page でAPIキーを見つけることができます。
Weights and Biasesを初めて使う場合は、クイックスタート をチェックしてみてください。
- コマンドライン
- ノートブック
pip install wandb
wandb login
!pip install wandb
import wandb
wandb.login()
2) プロジェクトの名前を付ける
プロジェクトは、関連するrunsから記録されたすべてのチャート、データ、モデルが格納される場所です。プロジェクトに名前を付けることで、作業を整理し、1つのプロジェクトに関するすべての情報を1か所に保管できます。
runをプロジェクトに追加するには、WANDB_PROJECT
環境変数にプロジェクト名を設定するだけです。WandbCallback
は、このプロジェクト名の環境変数を取得し、runの設定時に使用します。
- Command Line
- Notebook
WANDB_PROJECT=amazon_sentiment_analysis
%env 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にログするようになります。
- Command Line
- Notebook
python run_glue.py \ # Pythonスクリプトを実行
--report_to wandb \ # W&Bへのログを有効にする
--run_name bert-base-high-lr \ # W&Bのrunの名前(オプション)
# 他のコマンドライン引数はここに
from transformers import TrainingArguments, Trainer
args = TrainingArguments(
# 他の引数とkwargsはここに
report_to="wandb", # W&Bへのログ記録を有効化
run_name="bert-base-high-lr" # W&B runの名前(オプション)
)
trainer = Trainer(
# 他の引数とkwargsはここに
args=args, # トレーニング引数
)
trainer.train() # トレーニングを開始し、W&Bへログを記録
(ノートブックのみ)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'
%env WANDB_LOG_MODEL='end'
デフォルトでは、WANDB_LOG_MODEL
がend
に設定されている場合、モデルはW&B Artifactsにmodel-{run_id}
として保存されます。WANDB_LOG_MODEL
がcheckpoint
に設定されている場合は、checkpoint-{run_id}
として保存されます。
ただし、TrainingArguments
でrun_name
を渡すと、モデルはmodel-{run_name}
またはcheckpoint-{run_name}
として保存されます。
これで、これから初期化するすべてのTrainer
はモデルをW&Bプロジェクトにアップロードします。モデルファイルはW&B Artifacts UIで表示できます。モデルとデータセットのバージョン管理に関しては、Weights & Biases' Artifactsガイドを参照してください。
最良のモデルをどのように保存しますか?
load_best_model_at_end=True
がTrainer
に渡された場合、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_dir
を TrainingArguments
の model_name_or_path
引数に使用し、resume_from_checkpoint=True
を Trainer
に渡すことで、トレーニングを再開することもできます。
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 | モデルの勾配、パラメータ、またはどちらもログしたいかどうか設定します。
|
WANDB_DISABLED | ログを完全に無効にするには、true に設定する(デフォルトはfalse ) |
WANDB_SILENT | wandbによって出力される出力を無音にするには、true に設定する(デフォルトはfalse ) |
- コマンドライン
- ノートブック
WANDB_WATCH=all
WANDB_SILENT=true
%env WANDB_WATCH=all
%env 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を立ててください。