Optimum+ONNX Runtime – Hugging Faceモデルのより簡単で高速なトレーニング
'Optimum+ONNX Runtime - Hugging Faceモデルのトレーニングを簡単かつ高速にする'
はじめに
言語、ビジョン、音声におけるトランスフォーマーベースのモデルは、複雑なマルチモーダルのユースケースをサポートするためにますます大きくなっています。モデルのサイズが増えるにつれて、これらのモデルをトレーニングし、サイズが増えるにつれてスケーリングするために必要なリソースにも直接的な影響があります。Hugging FaceとMicrosoftのONNX Runtimeチームは、大規模な言語、音声、ビジョンモデルのファインチューニングにおいて進歩をもたらすために協力しています。Hugging FaceのOptimumライブラリは、ONNX Runtimeとの統合により、多くの人気のあるHugging Faceモデルのトレーニング時間を35%以上短縮するオープンなソリューションを提供します。本稿では、Hugging Face OptimumとONNX Runtimeトレーニングエコシステムの詳細を紹介し、Optimumライブラリの利点を示すパフォーマンスの数値を提示します。
パフォーマンスの結果
以下のチャートは、Optimumを使用したHugging Faceモデルのパフォーマンスを示しており、トレーニングにONNX RuntimeとDeepSpeed ZeRO Stage 1を使用することで、39%から130%までの印象的な高速化が実現されています。パフォーマンスの測定は、ベースライン実行としてPyTorchを使用した選択されたHugging Faceモデルで行われ、2番目の実行ではトレーニングのためにONNX Runtimeのみを使用し、最終的な実行ではONNX Runtime + DeepSpeed ZeRO Stage 1を使用して最大の利益を示します。ベースラインPyTorch実行ではAdamWオプティマイザを使用し、ORTトレーニング実行ではFused Adamオプティマイザを使用しました。実行は、8つのGPUを搭載した単一のNvidia A100ノード上で実行されました。
トレーニングの高速化のためにOptimumをオンにするための設定の詳細については、こちらをご覧ください。これらの実行に使用されたバージョン情報は次のとおりです。
PyTorch: 1.14.0.dev20221103+cu116; ORT: 1.14.0.dev20221103001+cu116; DeepSpeed: 0.6.6; HuggingFace: 4.24.0.dev0; Optimum: 1.4.1.dev0; Cuda: 11.6.2
Optimumライブラリ
Hugging Faceは急速に成長しているオープンなコミュニティとプラットフォームであり、良い機械学習を民主化することを目指しています。NLPから音声やビジョンへのモダリティを拡張し、Transformersライブラリの成功に続いて、機械学習のさまざまなタスクに対応するユースケースをカバーしています。現在、Hugging Face Hubでは、120,000以上の無料かつアクセス可能なモデルチェックポイント、18,000以上のデータセット、20,000以上のMLデモアプリが提供されています。しかし、トランスフォーマーベースのモデルを本番環境にスケーリングすることは、現在でも業界において課題となっています。高い精度にもかかわらず、トランスフォーマーベースのモデルのトレーニングと推論は時間がかかり、コストもかかります。
これらのニーズに対応するために、Hugging Faceは2つのオープンソースライブラリ、AccelerateとOptimumを開発しました。🤗 Accelerateは、即座に分散トレーニングを行うことに焦点を当てており、🤗 OptimumはTransformersの拡張として、ユーザーのターゲットハードウェアの最大の効率を活用してモデルのトレーニングと推論を高速化します。Optimumは、ONNX Runtimeなどの機械学習アクセラレータやIntelのHabana Gaudiなどの特殊ハードウェアを統合しており、トレーニングと推論の両方で大幅なスピードアップを実現できます。さらに、Optimumは他のHugging Faceのツールをシームレスに統合し、Transformersと同じ使いやすさを継承しています。開発者は簡単に作業を適応させることで、より低いレイテンシとより少ない計算リソースでより高速な推論を実現できます。
ONNX Runtimeトレーニング
ONNX Runtimeは、大規模なモデルのトレーニングを高速化し、単体でスループットを最大40%向上させ、HuggingFaceのトランスフォーマーベースの人気モデルにDeepSpeedと組み合わせて130%まで高速化します。ONNX Runtimeは既にOptimumの一部として統合されており、Hugging FaceのOptimumトレーニングフレームワークを通じてより高速なトレーニングを実現します。
ONNX Runtimeトレーニングは、いくつかのメモリと計算の最適化によってこのようなスループットの向上を実現しています。メモリの最適化により、ONNX Runtimeはバッチサイズを最大化し、利用可能なメモリを効率的に利用することができます。一方、計算の最適化はトレーニング時間を高速化します。これらの最適化には、効率的なメモリプランニング、カーネルの最適化、Adamオプティマイザへのマルチテンソル適用(全てのモデルのパラメータに対して適用される要素ごとの更新を1つまたは複数のカーネル起動にまとめる)、FP16オプティマイザ(デバイスからホストメモリへの多数のコピーを削減する)、ミックスドプレシジョントレーニング、ノードのフュージョンとノードの除去などのグラフ最適化などが含まれます。ONNX RuntimeトレーニングはNVIDIAおよびAMDのGPUの両方をサポートし、カスタムオペレータとの拡張性を提供します。
要するに、AI開発者は、PyTorchやHugging Faceなどの既存のエコシステムをフルに活用し、選択したターゲットデバイス上でONNX Runtimeの高速化を利用することで、時間とリソースの両方を節約することができます。
OptimumにおけるONNX Runtimeでのトレーニング
Optimumは、ONNX Runtimeを加速のバックエンドとして使用するために、TransformersのTrainer
を拡張したORTTrainer
APIを提供しています。 ORTTrainer
は、完全なトレーニングループと評価ループを含む使いやすいAPIであり、ハイパーパラメータの検索、混合精度トレーニング、複数のGPUを使用した分散トレーニングなどの機能をサポートしています。 ORTTrainer
を使用することで、AI開発者はTransformersモデルのトレーニング時にONNX Runtimeと他のサードパーティの加速技術を組み合わせることができ、トレーニングをさらに高速化しハードウェアの最大限のパフォーマンスを引き出すことができます。 例えば、開発者はONNX RuntimeトレーニングをTransformersのTrainerに統合されている分散データパラレルと混合精度トレーニングと組み合わせることができます。 さらに、ORTTrainer
はDeepSpeed ZeRO-1とも簡単に組み合わせることができ、オプティマイザの状態を分割することでメモリを節約することができます。 プレトレーニングまたはファインチューニングが完了した後、開発者はトレーニング済みのPyTorchモデルを保存するか、ONNX形式に変換することができます。OptimumはONNX Runtimeへの展開を容易にするためにONNX Runtimeのために実装したAPIを提供しています。 そして、Trainer
と同様に、ORTTrainer
はHugging Face Hubと完全に統合されています。トレーニング後、ユーザーはモデルのチェックポイントをHugging Face Hubアカウントにアップロードすることができます。
具体的には、Optimumを使用してONNX Runtimeのトレーニングの加速を活用するためにユーザーは何をすればよいのでしょうか? もし既にTrainer
を使用している場合、上記で述べた改善点を活用するためにコードのいくつかの行を変更するだけで済みます。 大まかに言うと、主に2つの置換が適用される必要があります。 まず、Trainer
を ORTTrainer
に置き換え、次に TrainingArguments
を ORTTrainingArguments
に置き換えます。 ORTTrainingArguments
には、トレーナーがトレーニングと評価に使用するすべてのハイパーパラメータが含まれています。 ORTTrainingArguments
はONNX Runtimeによって強化されたいくつかの追加引数を適用するためにTrainingArguments
を拡張しています。 例えば、ユーザーは追加のパフォーマンス向上のためにFused Adam Optimizerを適用することができます。 以下に例を示します:
-from transformers import Trainer, TrainingArguments
+from optimum.onnxruntime import ORTTrainer, ORTTrainingArguments
# ステップ1:トレーニング引数を定義する
-training_args = TrainingArguments(
+training_args = ORTTrainingArguments(
output_dir="path/to/save/folder/",
- optim = "adamw_hf",
+ optim = "adamw_ort_fused",
...
)
# ステップ2:ONNX Runtimeトレーナーを作成する
-trainer = Trainer(
+trainer = ORTTrainer(
model=model,
args=training_args,
train_dataset=train_dataset,
+ feature="sequence-classification",
...
)
# ステップ3:ONNX Runtimeを使用してトレーニング!🤗
trainer.train()
今後の展望
Hugging Faceチームは、トレーニングと推論の両方で加速ツールを使用してユーザーがより大規模なモデルを活用するための障壁を下げるためのオープンソース化を進めています。 ONNX Runtimeトレーニングチームと協力して、WhisperやStable Diffusionなどの新しい大規模なモデルアーキテクチャに対してより多くのトレーニング最適化を提供する予定です。 マイクロソフトはまた、Azure Container for PyTorchに最新のトレーニング加速技術をパッケージ化しています。これは、DeepSpeedとONNX Runtimeを含む軽量でカスタマイズされた環境であり、PyTorchを使用したAI開発者の生産性を向上させるためのものです。 大規模モデルのトレーニングに加えて、ONNX Runtimeトレーニングチームは、メモリと電力に制約のあるデバイスでの学習のための新しいソリューションの開発も行っています。
はじめに
Hugging Faceモデルに対してOptimum ONNX Runtimeトレーニングを学び、始めるための以下のリンクをご覧ください。
- Optimum ONNX Runtimeトレーニングドキュメント
- Optimum ONNX Runtimeトレーニングの例
- OptimumのGithubリポジトリ
- ONNX Runtimeトレーニングの例
- ONNX RuntimeトレーニングのGithubリポジトリ
- ONNX Runtime
- DeepSpeedとZeROチュートリアル
- Azure Container for PyTorch
🏎読んでいただきありがとうございます!ご質問がある場合は、Githubまたはフォーラムを通じてお気軽にお問い合わせください。TwitterやLinkedInでもご連絡いただけます。
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