「Saturn 大規模な言語モデルおよびその他のニューラルネットワークのトレーニングへの新しいアプローチ」
New Approach to Training Large Language Models and Other Neural Networks in Saturn
編集者の注釈:Kabir Nagrechaはこの秋のODSC West 2023の講演者です。彼のトーク「Democratizing Fine-tuning of Open-Source Large Models with Joint Systems Optimization」もぜひチェックしてください。
モデルのスケールは、現代の深層学習の実践において絶対に不可欠な要素となっています。数十億パラメータの大規模言語モデル(LLM)の成功により、実践者はモデルサイズの限界に挑戦し続けています。研究者や実践者は、精度とモデル品質を向上させるために、ますます大きくメモリを消費するモデルアーキテクチャを構築しています。
しかし、これらのスケールは無視できないインフラストラクチャの課題を引き起こします。モデルのトレーニングのリソース要求は急増しています。また、UCSDと業界パートナーとの共同研究から得た教訓の1つは、ディープラーニングのジョブは決して単独では実行されないということです。1つのモデルをトレーニングしている場合、おそらく12個のモデルをトレーニングしていることになります。ハイパーパラメータの最適化、マルチユーザークラスタ、反復的な探索はすべて、マルチモデルトレーニングを促進し、さらに計算要件を増大させます。
このブログ投稿では、最近オープンソース化されたSaturnというツールについて紹介します。Saturnは、HuggingFace、PyTorchのFSDP、GoogleのGPipe、FairScale、XFormersなどの大規模モデルトレーニングの業界標準ツールとシームレスに統合されています。Saturnがこの新しいかつ重要な状況で実行を最適化し、コストを削減し、トレーニング効率を向上させる方法をデモンストレーションいたします。
なぜ大規模モデルをトレーニングするのか?そしてそれを多くトレーニングするのはなぜですか?
「モデルのサイズを大きくすると、確実に精度が向上します。それは一般的なルールになっています。」(Saturnの業界ユーザー)
最近の研究は、大きなモデルの方がさまざまなベンチマークでより良いパフォーマンスを発揮する傾向があることを示しています。
言語モデルはフューショットの学習者です(Brown et al., 2020)
したがって、アプリケーションのパワーを向上させるために最も正確なモデルを構築しようとしている場合、おそらく大規模モデルアーキテクチャーを使用するでしょう。LLaMAモデル、GPT-J、さらにはGPT-2などです。
Saturnの核となるアイデアは、複数の大規模モデルを同時に最適化することです。
「本番にリリースする前に、おそらく100回…もしかしたら1000回もモデルの異なるバージョンを試行します。そして、このプロセスは毎日再トレーニングされます。」(プロダクションパイプラインのSaturnユーザー)
実践的なディープラーニングはほとんど常に複数のトレーニングジョブで構成されています。業界のクラスターは数百のユーザーやパイプラインからジョブを受け取ります。自動化されたプロダクションパイプラインでは、異なる設定(学習率、バッチサイズ、モデルアーキテクチャのバリエーションなど)を持つ複数のトレーニングジョブをトリガーして、展開する最も正確なジョブを見つけます。個々の研究者は、異なるアプローチを評価するために複数の探索ジョブを提出する場合もあります。1日の終わりまでに、クラスターは数千のジョブを受け取ることがあります。
大規模モデルトレーニングとマルチモデル実行の課題が交差する未解決の問題があります。Saturnでは、明示的にこの状況に最適化されています。
Saturnとは何ですか?それをどのように使用できますか?
複数の大規模モデルを同時に取り組む際には、3つの重要な問題が考慮される必要があります。
まず、並列化です。大規模モデルでは通常、メモリの分散とトレーニングスループットの向上のために複数のGPUが必要です。しかし、並列実行スキームの設計は難しい課題です。数十、数百の異なるテクニックがあります!FSDP、パイプライン並列処理、3D並列処理など、最適な選択肢はGPU、インターコネクト、モデルアーキテクチャー、さらにはハイパーパラメーターに依存します。間違ったアプローチを選択すると、パフォーマンスに深刻な影響を与える可能性があります。
次に、リソースの割り当てです。100のGPUと30のジョブを持つクラスターがある場合、GPUはジョブにどのように分配されるべきですか?スループットを最適化するために、最適なリソース分配計画を自動的に見つける必要があります。
最後に、スケジューリングです。エンドツーエンドの実行時間を最小限にするために、実行の順序はどのようにすべきですか?モデルAをモデルBの前に実行すべきですか?それともモデルCをモデルAの前に実行すべきですか?
これらの問題は相互に関連していることに注意してください。使用する資源割り当て計画はスケジュールを制約し、最適な並列選択にも影響を与えます。逆もまた然りです。したがって、これを共同問題として解決する必要があります。
そして、それがSaturnがまさに行っていることです。Saturnを使用すると、一連のトレーニングジョブを送信し、これらのすべての問題を自動生成する計画を見ることができます。Saturnは、すべてのジョブに対してクイックなプロファイリングスキャンを実行し、混合整数線形計画法ソルバーを使用して最適化された実行計画を作成します。新しい並列化技術を拡張して登録することも簡単なため、研究の進歩に取り残される心配はありません。効率的なスケジューリングのための内省などの機構と組み合わせると、バッチ処理された複数モデルのジョブの実行時間を劇的に短縮することができます。実際のところ、現在の手法と比べて実行時間とコストを最大で2倍削減できることがわかっています。開発者の作業量も減らすことができます。
Saturnを使用してジョブを効率的に実行するためのプロセスは非常にシンプルです。私たちのGitHubリポジトリにはサンプルのワークフローが含まれていますが、以下に簡単な手順を示します。
まず、モデルのロード/初期化関数をSaturnの「タスク」構造でラップします。
from saturn import Task
t1 = Task(load_model, load_dataloader, loss_function, hyperparameters)
次に、Saturnの「ライブラリ」に使用したい並列化技術を登録します。
from saturn.library import register
from saturn.core.executors.Technique import BaseTechnique
class MyExecutor(BaseTechnique):
def execute(task, gpus, task_id, batch_count):
# モデルのトレーニング
return
def search(task, gpus, task_id):
# 内部パラメータの最適化
# これらは自動的に提出されたタスクに関連付けられます
return parameters
register("my_parallelism", MyExecutor)
最後に、プロファイリングと実行のためのタスクのリストを送信します。
from saturn.trial_runner.PerformanceEvaluator import search
from saturn import orchestrate
search([t1, t2, t3, t4]) # 各タスクのプロファイリングと評価
orchestrate([t1, t2, t3, t4]) # 実行を管理・調整
結論およびポイント
Saturnは、同時に複数の大規模なモデルをトレーニングするワークロードの劇的な高速化を実現します。HuggingFaceなどの標準的なツールと完全に互換性があります。次回、LLaMAモデルの微調整を行うか、独自のLLMを構築する際には、コストを削減しランタイムを高速化するためにSaturnを使用することを検討してください。詳細については、Saturnに関する論文をこちらでご覧いただけます。
私たちは現在、新しい貢献者やユーザーを募集しています。したがって、Saturnに興味がある場合は、最近オープンソース化されたGitHubリポジトリhttps://github.com/knagrecha/saturnをチェックしてみてください!
著者について/ODSC West 2023スピーカー:
Kabir Nagrechaは、UCサンディエゴで博士号を取得する候補者で、Arun Kumar教授とHao Zhang教授と共同研究を行っています。彼はMeta Research Fellowship、Haliciogluデータサイエンス研究所およびUCSDジェイコブス工学部からの奨学金を受けています。
KabirはUCSDで最年少の博士号取得候補者であり、17歳で博士課程を開始しました。彼は以前、Apple、Meta、Netflixなどの企業と協力し、SiriやNetflixの推薦アルゴリズムなどの広く使用されるサービスをサポートするための基盤を構築してきました。
Linkedin: https://www.linkedin.com/in/kabir-nagrecha-952591152/
ウェブサイト: https://kabirnagrecha.com/
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