ホームページ >テクノロジー周辺機器 >AI >コンシューマグレードの GPU は 1,760 億個のパラメータを持つ大規模モデルの実行に成功
コンシューマ GPU で大規模モデルを実行することは、機械学習コミュニティにとって継続的な課題です。
言語モデルのサイズはますます大きくなっています。PaLM には 540B のパラメータがあり、OPT、GPT-3、BLOOM には約 176B のパラメータがあります。モデルはまだ大きなサイズで移行中です。方向性を開発します。
# これらのモデルは、簡単にアクセスできるデバイスで実行するのが困難です。たとえば、BLOOM-176B は推論タスクを完了するために 8 つの 80GB A100 GPU (それぞれ約 15,000 ドル) で実行する必要がありますが、BLOOM-176B を微調整するには 72 個のそのような GPU が必要です。 PaLM などの大きなモデルには、より多くのリソースが必要になります。
モデルのパフォーマンスを維持しながら、これらのモデルのリソース要件を削減する方法を見つける必要があります。この分野では、量子化や蒸留など、モデルのサイズを削減しようとするさまざまな技術が開発されています。
BLOOM は、人工知能スタートアップの Hugging Face がフランス政府の資金で運営する「BigScience」というプロジェクトで、1,000 人以上のボランティア研究者によって昨年作成されました。今年 7 月 12 日に BLOOM モデルはが正式にリリースされました。
Int8 推論を使用すると、モデルのメモリ フットプリントが大幅に削減されますが、モデルの予測パフォーマンスは低下しません。これに基づいて、ワシントン大学、メタ AI 研究所 (旧 Facebook AI 研究所) およびその他の機関の研究者が HuggingFace と共同で研究を実施し、訓練された BLOOM-176B をより少ない GPU で実行できるようにすることを試み、提案された手法が完全に統合されました。ハギングフェイストランスフォーマーに。
この研究では、モデルの推論パフォーマンスに影響を与えない、トランスフォーマーのための最初の 10 億スケールの Int8 量子化プロセスを提案します。 16 ビットまたは 32 ビットの重みを備えた 175B パラメーター トランスフォーマーをロードし、フィードフォワード レイヤーとアテンション プロジェクション レイヤーを 8 ビットに変換できます。完全な精度のパフォーマンスを維持しながら、推論に必要なメモリを半分に削減します。
この研究では、ベクトル量子化と混合精度分解の組み合わせを LLM.int8() と名付けました。実験の結果、LLM.int8() を使用することで、パフォーマンスを低下させることなく、コンシューマ GPU 上で最大 175B パラメータの LLM による推論を実行できることがわかりました。このアプローチは、異常値がモデルのパフォーマンスに及ぼす影響に新たな光を当てるだけでなく、OPT-175B/BLOOM などの非常に大規模なモデルを、コンシューマ グレードの GPU を備えた単一サーバー上で使用することを初めて可能にします。
#メソッドの紹介機械学習モデルのサイズは、パラメーターの数とその精度 (通常は float32、float16) によって決まります。または bfloat16 のもの。 float32 (FP32) は、標準化された IEEE 32 ビット浮動小数点表現を表し、このデータ型を使用して広範囲の浮動小数点数を表現できます。 FP32 は、「指数」用に 8 ビット、「仮数」用に 23 ビット、および数値の符号用に 1 ビットを予約しています。また、ほとんどのハードウェアは FP32 の演算と命令をサポートしています。 そして、float16 (FP16) は、指数用に 5 ビット、仮数用に 10 ビットを予約します。このため、FP16 の数値の表現可能な範囲は FP32 よりもはるかに低くなり、オーバーフロー (非常に大きな数値を表現しようとする) やアンダーフロー (非常に小さな数値を表現する) のリスクにさらされます。 オーバーフローが発生すると、NaN (非数値) の結果が得られ、ニューラル ネットワークのように逐次計算を実行すると、多くの作業がクラッシュします。 bfloat16 (BF16) はこの問題を回避します。 BF16 は指数用に 8 ビット、小数用に 7 ビットを予約しています。これは、BF16 が FP32 と同じダイナミック レンジを保持できることを意味します。 理想的には、トレーニングと推論は FP32 で実行されるべきですが、FP16/BF16 よりも遅いため、混合精度を使用してトレーニング速度を向上させます。ただし、実際には、半精度重みも推論中に FP32 と同様の品質を提供します。これは、精度の重みの半分を使用し、GPU の半分を使用して同じ結果を達成できることを意味します。 しかし、さまざまなデータ型を使用して、より少ないメモリでこれらの重みを保存できたらどうなるでしょうか?深層学習では量子化と呼ばれる手法が広く使われています。 この研究では、最初に実験で 4 バイトの FP32 精度の代わりに 2 バイトの BF16/FP16 半精度を使用し、ほぼ同じ推論結果を達成しました。このようにして、モデルは半分に縮小されます。しかし、この数をさらに減らすと、精度が低下し、推論の品質が急激に低下します。 これを補うために、この研究では 8 ビット定量化を導入します。この方法では 4 分の 1 の精度が使用されるため、必要なモデル サイズは 4 分の 1 だけですが、ビットの残りの半分を削除してもこれは達成されません。最も一般的な 2 つの 8 ビット量子化手法は、ゼロ点量子化と absmax (絶対最大値) 量子化です。どちらのメソッドも浮動小数点値をよりコンパクトな int8 (1 バイト) 値にマップします。
たとえば、ゼロ点量子化では、データ範囲が -1.0 ~ 1.0 で、-127 ~ 127 に量子化される場合、拡張係数は 127 になります。この拡張係数では、たとえば値 0.3 は 0.3*127 = 38.1 に拡張されます。通常、量子化には丸めが含まれるため、38 になります。これを逆にすると、38/127=0.2992 となり、この例では量子化誤差は 0.008 になります。これらの一見小さなエラーは、モデル層を通じて伝播するにつれて蓄積および増大する傾向があり、パフォーマンスの低下を引き起こします。
これらの手法は深層学習モデルを定量化できますが、多くの場合、モデルの精度が低下します。しかし、Hugging Face Transformers および Accelerate ライブラリに統合されている LLM.int8() は、176B パラメータを持つ大規模なモデル (BLOOM など) であってもパフォーマンスを低下させない最初のテクニックです。
LLM.int8() アルゴリズムは次のように説明できます。本質的に、LLM.int8() は 3 つのステップで行列乗算の計算を完了しようとします。状態、列ごとに外れ値 (つまり、特定のしきい値を超える値) を抽出します。
# #####################################
以上がコンシューマグレードの GPU は 1,760 億個のパラメータを持つ大規模モデルの実行に成功の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。