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

人工知能

「aiOlaのCEO兼共同創設者、アミール・ハラマティによるインタビューシリーズ」

アミール・ハラマティは、aiOlaのCEO兼共同創業者であり、スピーチを作業可能にし、どこでも完全な正確さで業界固有のプロセ...

機械学習

もし芸術が私たちの人間性を表現する方法であるなら、人工知能はどこに適合するのでしょうか?

MITのポストドクターであるジヴ・エプスタイン氏(SM '19、PhD '23)は、芸術やその他のメディアを作成するために生成的AIを...

人工知能

「Ami Hever、UVeyeの共同創設者兼CEO - インタビューシリーズ」

עמיר חבר הוא המנכל והמייסד של UVeye, סטארט-אפ ראיה ממוחשבת בלמידה עמוקה, המציבה את התקן הגלובלי לבדיקת רכבים עם זיהוי...

人工知能

「UVeyeの共同設立者兼CEO、アミール・ヘヴェルについてのインタビューシリーズ」

アミール・ヘヴァーは、UVeyeのCEO兼共同創設者であり、高速かつ正確な異常検出により、自動車およびセキュリティ産業に直面...

人工知能

「マーシャンの共同創設者であるイータン・ギンスバーグについてのインタビューシリーズ」

エタン・ギンズバーグは、マーシャンの共同創業者であり、すべてのプロンプトを最適なLLMに動的にルーティングするプラットフ...

人工知能

「パクストンAIの共同創業者兼CEO、タングイ・シャウ - インタビューシリーズ」

タングイ・ショウは、Paxton AIの共同創設者兼CEOであり、法的研究と起草の負担を軽減するためにGenerative AIを使用するプラ...