みなさんこんにちは。私の名前はティムです。 GPT モデルの誕生以来、そのパラメータスケールは継続的に拡大しています。ただし、モデルを直接的に大きくすることはできません。データ、スケジューリング、並列コンピューティング、アルゴリズム、マシン リソースに対応する変更を加える必要があります。 今日は、ビッグモデルとは何か、モデルを大きくすることがなぜ難しいのか、CV/NLPや検索プロモーションのシナリオにはどのような戦略があるのかをまとめてみましょう。 大型モデルとは何ですか?ビッグモデルは、その名の通り「大きい」ことに重点を置いています。主にいくつかの側面が含まれます:
大規模モデルは、主にスパース大規模モデルと密な大規模モデルの 2 つのカテゴリに分けられます。
検索やプロモーションなどの大規模なスパース モデルの場合、通常、スパース機能の埋め込みと密なモデルの 2 つの部分が含まれます。 このうち、スパース特徴の埋め込み計算は大規模なスパースモデルの鍵となる一方、密なモデル部分は一般的に小さく、GPU に配置できるため、データの並列処理や全削減通信を実行できます。 トレーニング中は、特徴埋め込みテーブルに対して検索や順列化などの複雑な操作が必要となり、その後、高密度モデル計算用のテンソルが生成されます。 特徴埋め込みテーブルは多くの場合、多くのストレージ スペースを占有し、それを完全に保存するには多数の GPU サーバーが必要になります。これが典型的なテンソル並列処理です。 このようなシナリオでは、典型的な全対全通信モードが発生し、全対全通信によって深刻なインキャスト通信 (多対 1) が発生し、ネットワークの輻輳につながり、ネットワーク アーキテクチャ、輻輳制御プロトコル、負荷分散アルゴリズムなどに高い要求が課せられます。 CV および NLP タスクの場合、モデル パラメーターが非常に大きいため、単一の GPU メモリで収容できるスペースをはるかに超えてしまいます (NVIDIA の最新の A100 には 80 GB のメモリがあります)。 したがって、大規模なモデル全体に対応するには、モデルの特定のレイヤーのテンソルと、異なるレイヤー間のパイプラインを並列化する必要があることがよくあります。 計算プロセス中には、単一のマシン内での通信と異なるマシン間の通信の両方が行われます。具体的な通信モードは、モデルの分割と配置方法によって異なります。 トレーニング プロセスを高速化するために、完全な大規模モデル間でデータ並列処理がよく使用されます。完全な大規模モデルごとに異なるトレーニング データが提供され、おなじみの all-reduce 通信モードが実現されます。 要約すると、高密度の大規模モデルと疎な大規模モデルではモデル特性に明らかな違いがあり、コンピューティング/ストレージ/通信リソースに対する要件も大きく異なります。 GPU コンピューティング リソースの利用率を最大化し、最高の加速効果を実現するには、モデルの特性と実装方法と組み合わせて、GPU サーバー アーキテクチャ、ネットワーク アーキテクチャ、トレーニング データの保存と取得、分散トレーニング フレームワークを総合的に検討して設計する必要があります。 大型モデルの難しさは何ですか?大規模モデルには、膨大なサンプル、パラメーター(数兆レベル)、長い収束時間という 2 つの主な課題があります。 これら 2 つの点を過小評価しないでください。過小評価すると、解決が必要な多くの問題が発生します。 1. 大規模モデルのトレーニングには、より大きな計算能力が必要です。大規模モデルのトレーニングに必要な合計計算能力は、実は非常にシンプルです。つまり、6 * モデル パラメータの数 * トレーニング データ内のトークンの数が、すべてのトレーニング データを処理するために必要な計算能力です。ここでの 6 は、モデルの順方向および逆方向の伝播中に各トークンに必要な乗算と加算の計算回数です。 簡単に言えば、一連の行列乗算は、左側のニューロンの数と右側のニューロンの数によって完全な二部グラフが形成されることを意味します。左ニューロン L と右ニューロン R のいずれかを選択します。
モデルのトレーニングに必要な合計計算能力を各 GPU の理論上の計算能力で割り、さらに GPU の実効計算能力利用率で割ると、必要な GPU 時間が得られます。 一般的な大規模言語モデルの基盤をトレーニングするのに半年から数か月かかり、また多くのマシンリソースも消費する場合、大規模モデルのトレーニングは非常に「高価」になり、大規模モデルのトレーニングは個々の大企業に限定されます。 たとえば、試したい実験が 100 個あり、モデルのトレーニングに半年かかる場合は、優先度の高い実験のみを選択できます。 これが、現在、すべての大規模な言語モデル ベースが最新のオープン ソース モデルを追跡している理由です。なぜなら、汎用性の高い大型モデルベースを自分で作ると、コストがかからず、時間もかかる上、かと言って効果もあまりない可能性があるからです。 2. 大規模モデルのトレーニングには、より多くのビデオ メモリ リソースが必要です。ディープラーニングのトレーニングに必要なメモリには、モデル パラメータ、バックプロパゲーション勾配、オプティマイザが使用するメモリ、フォワードプロパゲーションの中間状態 (アクティベーション) が含まれます。ビデオ メモリ使用量 = モデル パラメータ サイズ + バッチ サイズ * オプティマイザ パラメータと中間変数のサイズ。
もちろん、計算能力をメモリと交換したり、時間をメモリと交換したりするなど、メモリ リソースを節約する方法もあります。 計算能力をメモリと交換する秘訣は、各層の順方向伝播の勾配と中間状態を大量に保存するのではなく、特定の層を計算するときに、順方向伝播の中間状態を一時的に最初から再計算することです。 これを各レイヤーに対して実行すると、このレイヤーの勾配を格納するために必要なのは 2 バイトだけですが、中間状態を計算するための計算能力のオーバーヘッドは非常に高くなります。 そのため、実際には、Transformer 全体は通常、いくつかのグループに分割され、各グループにはいくつかのレイヤーがあり、各グループの最初のレイヤーの中間状態のみが保存されます。後続のレイヤーは、グループの最初のレイヤーから再計算され、計算能力とメモリのオーバーヘッドのバランスが取られます。 時間を節約してメモリを増やすコツは、ミニバッチ データの順方向計算勾配を順番に実行し、同時に勾配を蓄積することです。蓄積された結果は、最後のミニバッチ計算の後に平均化され、モデル変数が更新されます。 さらに、マルチレベルキャッシュが可能で、GPU メモリが収まらない場合は CPU メモリにスワップアウトできます。 たとえば、LLaMA-2 70B モデルの場合、モデル パラメータには 140 GB、バックプロパゲーションされた勾配には 140 GB、オプティマイザー状態 (Adam を使用している場合) には 840 GB が必要です。 3. データ量とデータ品質に対する要求は非常に高い膨大なデータ サンプルの場合、すべてを入力することは必ずしも効果的ではありません。どのデータが価値があり、どのデータが価値がないかを把握することが重要です。データの量が増えるにつれて、データの価値を見極めることがますます難しくなります。 また、大量のデータはどこに保存するのでしょうか?一般的には、HDFS または S3 に保存できます。しかし、ストレージとアクセスによってマシンがいっぱいにならず、すぐに取得できるようにするにはどうすればよいでしょうか? 同じデータを使用してモデルを複数回トレーニングする場合、キャッシュを使用してモデルのトレーニング時間を短縮できますか? 4. トランスフォーマーの「不可能三角形」の特徴写真 Transformer のトレーニングの並列性、推論の効率、競争力のあるパフォーマンスのバランスをとることの難しさは、「不可能三角形」として知られています。 トランスフォーマーは、ステップごとに O(N) の複雑さとメモリにバインドされたキー値キャッシュのため、推論中に最適な効率を示しません。この非効率性により、特に長いシーケンスの場合、実際の展開が複雑になります。 5. ディープラーニングフレームワークにはあまり適していないこの分野は近年になって普及し始めたばかりであり、pytorch や tensorflow などの以前のフレームワークは長い間存在していたため、当時は大規模モデルの分散トレーニングの需要シナリオに対する詳細な抽象設計と最適化はありませんでした。 したがって、この分野は、ビッグデータ フレームワークをディープラーニング フレームワークにエンドツーエンドで接続し、新しいプログラミング パラダイムと対応するコンピューティング フレームワークを形成することによって解決する必要があります。 以下では、CV、NLP、検索プロモーションのシナリオをそれぞれ詳しく説明します。 CV と NLP のシナリオ: CV および NLP シナリオの場合の主な機能は次のとおりです。
GPT-3 のような高密度部分が大きいモデルの場合、単一の Allreduce カードのメモリでは対応できません。分散トレーニング用の有向非巡回グラフ (DAG) を構築するには、モデル並列処理を使用して計算グラフをさまざまなデバイスに分割する必要があります。Gpipe、Megatron、Oneflow、Whale はすべて、モデル並列処理のソリューションを提案しています。 各ワーカーがデータの一部のみを保持するデータ並列処理と比較すると、モデル並列処理の各ノードはすべてのデータを使用します。 以下では、モデル並列化のいくつかの方法について簡単に説明します。
CTR プロモーション検索シナリオ:CTR 大規模モデル シナリオでは、小規模モデルと大規模語彙の特徴を備えています。
したがって、大きな密なパラメータを持つ大規模な CTR モデルの問題を解決する鍵は、スパース パラメータを単一マシン ストレージから分散ストレージに変換し、主にデータ並列処理によってスループットを向上させることです。 次に、トレーニング フレームワークの最適化ポイントについて説明します。 2 つの核となるポイントは、分散通信トポロジの設計と、埋め込みルックアップのパフォーマンス最適化です。
実装面では、TF ネイティブ演算子 (コア演算子は GatherV2 演算子) を置き換えることで、Sparse パラメータの読み取りプロセスを実行できます。 この演算子の機能は、ID リスト インデックスに対応する Embedding データを Embedding テーブルから読み取り、それを返すことです。これは本質的にハッシュ クエリ プロセスです。 演算子を置き換え、上流ノードと下流ノードの入出力を同時に変更することで、ローカルの埋め込みテーブルからのクエリが分散 KV からのクエリに変換されます。 要約する大規模モデルのトレーニングには、十分なコンピューティング リソースとデータだけでなく、深い経験とスキル、そして「錬金術」のように、ある程度の忍耐と集中力も必要であると言えます。 錬金術師が行動を起こすたびに、膨大な時間と金銭的コストがかかります。いかにして最小のコストで最適な解決策を見つけるか、それが私たちが探求してきたことです。 |
<<: AI規制に関するマスク氏の見解:規制は面倒だが、審判がいるのは良いことだ
SVM は機械学習の分野における古典的なアルゴリズムの 1 つです。 SVM をニューラル ネットワ...
アルゴリズムは私たちの生活の中でますます一般的なものになってきています。しかし、アルゴリズムに関する...
01 ROS入門多くの初心者は、ロボットのオペレーティングシステムと聞いて、「オペレーティングシス...
ABBは7月20日、欧州最大のAMRプロバイダーの1つであるASTI Mobile Robot G...
[51CTO.com からのオリジナル記事] ビッグデータとビッグデータ分析は、現在、企業の注目の的...
人間の脳の神経信号も言語であると考えられるなら、機械翻訳アーキテクチャを神経信号の解釈に適用する実現...
サプライチェーン管理は最適化ゲームです。 AI の導入により、企業は最適な成果の達成にさらに注力でき...
序文短い記事を書こうと決めたので、これがそれです。私がこの記事を書こうと思った理由は、Weibo 上...
「プログラム合成」または「コード生成」タスクの目標は、与えられた記述に基づいて実行可能なコードを生成...
6月10日、江蘇省人工知能学会、ファーウェイ端末クラウドサービス、ファーウェイ南京研究所が共催する2...
機械学習 (ML) は情報技術 (IT) の柱の 1 つであり、人工知能のサブセットとして定義できま...