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 フレームワークのカスタマイズ性を損なうことなく、強力なハイパーパラメータチューニングソリューションに簡単にアクセスできる方法が必要です。

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!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more

人工知能

「アナコンダのCEO兼共同創業者、ピーターウォングによるインタビューシリーズ」

ピーター・ワンはAnacondaのCEO兼共同創設者ですAnaconda(以前はContinuum Analyticsとして知られる)を設立する前は、ピー...

人工知能

「コマンドバーの創設者兼CEO、ジェームズ・エバンスによるインタビューシリーズ」

ジェームズ・エバンズは、CommandBarの創設者兼CEOであり、製品、マーケティング、顧客チームを支援するために設計されたAIパ...

人工知能

「ジンディのCEO兼共同創設者、セリーナ・リー― インタビューシリーズ」

「Celina Leeは、ZindiのCEO兼共同創設者であり、アフリカのデータサイエンティスト向けの最大の専門ネットワークです Celina...

人工知能

キャルレールの最高製品責任者、ライアン・ジョンソンへのインタビューシリーズ

ライアンは、初期のスタートアップからフォーチュン100の組織まで、多様なテクノロジーと製品開発のリーダーシップ経験を15年...

人工知能

スコット・スティーブンソン、スペルブックの共同創設者兼CEO- インタビューシリーズ

スコット・スティーブンソンは、Spellbookの共同創設者兼CEOであり、OpenAIのGPT-4および他の大規模な言語モデル(LLM)に基...

データサイエンス

アステラソフトウェアのCOO、ジェイ・ミシュラ - インタビューシリーズ

ジェイ・ミシュラは、急速に成長しているエンタープライズ向けデータソリューションの提供企業であるAstera Softwareの最高執...