TransformersとRay Tuneを使用したハイパーパラメータの検索
'TransformersとRay Tuneによるハイパーパラメータ検索'
Anyscale チームの Richard Liaw によるゲストブログ投稿
最先端の研究実装や数千ものトレーニング済みモデルへの簡単なアクセスが可能な Hugging Face transformers ライブラリは、自然言語処理の成功と成長において重要な存在となっています。
良いパフォーマンスを達成するために、ほとんどのユーザーはパラメータのチューニングを行う必要があります。しかし、ほとんどの人はハイパーパラメータのチューニングを無視するか、小さな探索空間で簡素なグリッドサーチを行うことを選択します。
しかし、簡単な実験でも高度なチューニング手法の利点を示すことができます。以下は、Hugging Face transformers の BERT モデルを RTE データセットで実行した最近の実験結果です。PBT のような遺伝的最適化手法は、標準的なハイパーパラメータ最適化手法と比較して大幅なパフォーマンス向上を提供できます。
アルゴリズム | 最高の検証精度 | 最高のテスト精度 | 合計 GPU 分 | 合計コスト |
グリッドサーチ | 74% | 65.4% | 45 分 | $2.30 |
ベイズ最適化 + アーリーストップ | 77% | 66.9% | 104 分 | $5.30 |
Population-based Training | 78% | 70.5% | 48 分 | $2.45 |
Transformers を活用している場合、Transformers フレームワークのカスタマイズ性を損なうことなく、強力なハイパーパラメータチューニングソリューションに簡単にアクセスできる方法が必要です。
- fairseqのwmt19翻訳システムをtransformersに移植する
- 🤗 APIのお客様のためにTransformerの推論を100倍高速化する方法
- ZeROを使用して、DeepSpeedとFairScaleを介してより多くのフィットと高速なトレーニングを実現
Transformers 3.1 のリリースでは、Hugging Face Transformers と Ray Tune が協力してシンプルでパワフルな統合を提供しています。Ray Tune は、ハイパーパラメータチューニングのための人気のある Python ライブラリであり、最先端のアルゴリズムだけでなく、Weights and Biases や tensorboard などのベストクラスのツールとの統合も提供しています。
この新しい Hugging Face + Ray Tune 統合をデモンストレーションするために、Hugging Face Datasets ライブラリを使用して BERT を MRPC でファインチューニングします。
この例を実行するには、まず次のコマンドを実行してください:
pip install "ray[tune]" transformers datasets scipy sklearn torch
いくつかのコード行を追加するだけで、Ray の標準チューニングアルゴリズムを簡単に組み込むことができます。
from datasets import load_dataset, load_metric
from transformers import (AutoModelForSequenceClassification, AutoTokenizer,
Trainer, TrainingArguments)
tokenizer = AutoTokenizer.from_pretrained('distilbert-base-uncased')
dataset = load_dataset('glue', 'mrpc')
metric = load_metric('glue', 'mrpc')
def encode(examples):
outputs = tokenizer(
examples['sentence1'], examples['sentence2'], truncation=True)
return outputs
encoded_dataset = dataset.map(encode, batched=True)
def model_init():
return AutoModelForSequenceClassification.from_pretrained(
'distilbert-base-uncased', return_dict=True)
def compute_metrics(eval_pred):
predictions, labels = eval_pred
predictions = predictions.argmax(axis=-1)
return metric.compute(predictions=predictions, references=labels)
# 訓練中に評価を実行し、早期に不良トライアルを削除するために
# デフォルトよりも頻繁に評価することができます。
# tqdm を無効にするかどうかは好みの問題です。
training_args = TrainingArguments(
"test", evaluation_strategy="steps", eval_steps=500, disable_tqdm=True)
trainer = Trainer(
args=training_args,
tokenizer=tokenizer,
train_dataset=encoded_dataset["train"],
eval_dataset=encoded_dataset["validation"],
model_init=model_init,
compute_metrics=compute_metrics,
)
# デフォルトの目的関数は、すべてのメトリックの合計です
# メトリックが指定されている場合、最大化する必要があります。
trainer.hyperparameter_search(
direction="maximize",
backend="ray",
n_trials=10 # 試行回数
)
デフォルトでは、各トライアルは1つのCPUを使用し、オプションで利用可能な場合は1つのGPUも使用します。 resources_per_trial
引数を渡すことで、複数のGPUを利用して並列ハイパーパラメーター探索を行うことができます。
また、HyperBand、Bayesian Optimization、Population-Based Training など、さまざまなパラメーターチューニングアルゴリズムを簡単に切り替えることもできます。
この例を実行するには、まず次を実行してください: pip install hyperopt
from ray.tune.suggest.hyperopt import HyperOptSearch
from ray.tune.schedulers import ASHAScheduler
trainer = Trainer(
args=training_args,
tokenizer=tokenizer,
train_dataset=encoded_dataset["train"],
eval_dataset=encoded_dataset["validation"],
model_init=model_init,
compute_metrics=compute_metrics,
)
best_trial = trainer.hyperparameter_search(
direction="maximize",
backend="ray",
# Choose among many libraries:
# https://docs.ray.io/en/latest/tune/api_docs/suggestion.html
search_alg=HyperOptSearch(metric="objective", mode="max"),
# Choose among schedulers:
# https://docs.ray.io/en/latest/tune/api_docs/schedulers.html
scheduler=ASHAScheduler(metric="objective", mode="max"))
それは Weights and Biases とも簡単に連携できます!
Try it out today:
pip install -U ray
pip install -U transformers datasets
- Hugging Face のドキュメントとディスカッションスレッドをチェックしてください
- テキスト分類のための Hugging Face ハイパーパラメーター探索のエンドツーエンドの例
このブログ投稿が気に入った場合は、次のリンクもチェックしてみてください:
- Transformers + GLUE + Ray Tune の例
- Transformers のハイパーパラメーター最適化に関する Weights and Biases のレポート
- ゼロから始めるNLPモデルの簡単なサービング方法
We will continue to update VoAGI; if you have any questions or suggestions, please contact us!
Was this article helpful?
93 out of 132 found this helpful
Related articles