私達と接続

Artificial Intelligence

大規模言語モデルのパラメータとメモリ要件の理解: 詳細

mm

公開済み

 on

Transformer ベースの LLM におけるパラメータの計算

大規模な言語モデル 近年、LLM (人工知能) は目覚ましい進歩を遂げています。GPT-4、Google の Gemini、Claude 3 などのモデルは、機能とアプリケーションにおいて新たな基準を確立しています。これらのモデルは、テキスト生成と翻訳を強化するだけでなく、マルチモーダル処理の新境地を開拓し、テキスト、画像、音声、ビデオの入力を組み合わせて、より包括的な AI ソリューションを提供しています。

たとえば、OpenAI の GPT-4 は人間のようなテキストの理解と生成において大幅な改善を示しており、Google の Gemini モデルはテキスト、画像、音声など多様なデータ タイプの処理に優れており、よりシームレスで文脈に即したインタラクションを可能にします。同様に、Anthropic の Claude 3 モデルは、多言語機能と AI タスクにおけるパフォーマンスの向上で知られています。

LLM の開発が加速するにつれて、これらのモデルの複雑さ、特にパラメータとメモリ要件を理解することが重要になります。このガイドは、これらの側面をわかりやすく説明し、詳細に説明することを目的としています。

大規模言語モデルの基礎

大規模言語モデルとは何ですか?

大規模言語モデルは、人間の言語を理解して生成するために、膨大なデータセットでトレーニングされたニューラル ネットワークです。テキストの処理と生成に自己注意などのメカニズムを使用する Transformer などのアーキテクチャに依存しています。

LLMにおけるパラメータの重要性

パラメータはこれらのモデルの中核となるコンポーネントです。パラメータには重みとバイアスが含まれており、モデルはトレーニング中にこれらを調整して予測のエラーを最小限に抑えます。パラメータの数は、多くの場合、モデルの容量とパフォーマンスに相関しますが、計算要件とメモリ要件にも影響します。

変圧器のアーキテクチャを理解する

トランスフォーマーのアーキテクチャ

トランスフォーマーのアーキテクチャ

概要

Vaswani ら (2017) の論文「Attention Is All You Need」で紹介された Transformer アーキテクチャは、多くの LLM の基盤となっています。Transformer はエンコーダーとデコーダーで構成され、それぞれが複数の同一レイヤーで構成されています。

エンコーダーとデコーダーのコンポーネント

  • エンコーダ: 入力シーケンスを処理し、コンテキストに応じた表現を作成します。
  • デコード: エンコーダーの表現と以前に生成されたトークンを使用して出力シーケンスを生成します。

主要な構成要素

  1. マルチヘッドアテンション: モデルが入力シーケンスのさまざまな部分に同時に焦点を当てることができるようになります。
  2. フィードフォワードニューラルネットワーク: モデルに非線形性と複雑さを追加します。
  3. レイヤーの正規化: 中間出力を正規化することでトレーニングを安定させ、高速化します。

パラメータ数の計算

トランスフォーマートレーニング

効率的なトランスフォーマートレーニングのための事前トレーニング済みモデル

Transformer ベースの LLM におけるパラメータの計算

TransformerベースのLLMの各コンポーネントのパラメータ計算を分解してみましょう。元の論文の表記法を使用します。 d_model モデルの隠れた状態の次元を表します。

  1. 埋め込みレイヤー:
    • パラメータ = vocab_size * d_model
  2. マルチヘッドアテンション:
    • h 頭、 d_k = d_v = d_model / h:
    • パラメータ = 4 * d_model^2 (Q、K、V、および出力投影の場合)
  3. フィードフォワードネットワーク:
    • パラメータ = 2 * d_model * d_ff + d_model + d_ff
    • 場所 d_ff 通常は4 * d_model
  4. レイヤーの正規化:
    • パラメータ = 2 * d_model (スケールとバイアスのため)

1 つの Transformer レイヤーの合計パラメータ:

  • Parameters_layer = Parameters_attention + Parameters_ffn + 2 * Parameters_layernorm

モデルの場合 N レイヤー:

  • 合計パラメータ = N * Parameters_layer + Parameters_embedding + Parameters_output

計算例

次の仕様のモデルを考えてみましょう。

  • d_model = 768
  • h (注目ヘッドの数) = 12
  • N (層数) = 12
  • vocab_size = 50,000
  1. 埋め込みレイヤー:
    • 50,000 * 768 = 38,400,000
  2. マルチヘッドアテンション:
    • 4 * 768^2 = 2,359,296
  3. フィードフォワードネットワーク:
    • 2 * 768 * (4 * 768) + 768 + (4 * 768) = 4,719,616
  4. レイヤーの正規化:
    • 2 * 768 = 1,536

レイヤーごとの合計パラメータ:

  • 2,359,296 + 4,719,616 + (2 * 1,536) = 7,081,984

12 層の合計パラメータ:

  • 12 * 7,081,984 = 84,983,808

合計モデルパラメータ:

  • 84,983,808 + 38,400,000 = 123,383,808

このモデルには約 123 億 XNUMX 万個のパラメータがあります。

メモリ使用量の種類

LLM を使用する場合、主に 2 種類のメモリ使用量を考慮する必要があります。

  1. モデルメモリ: モデルパラメータを保存するために必要なメモリ。
  2. ワーキングメモリ: 推論またはトレーニング中に中間アクティベーション、勾配、およびオプティマイザーの状態を保存するために必要なメモリ。

モデルメモリの計算

モデル メモリは、パラメータの数に直接関係します。各パラメータは通常、32 ビットの浮動小数点数として保存されますが、一部のモデルでは、16 ビットの浮動小数点数を使用した混合精度のトレーニングを使用します。

モデルメモリ(バイト) = パラメータ数 * パラメータあたりのバイト数

123億XNUMX万個のパラメータを持つサンプルモデルの場合:

  • モデルメモリ (32 ビット) = 123,383,808 * 4 バイト = 493,535,232 バイト ≈ 494 MB
  • モデルメモリ (16 ビット) = 123,383,808 * 2 バイト = 246,767,616 バイト ≈ 247 MB

ワーキングメモリの推定

作業メモリの要件は、特定のタスク、バッチ サイズ、シーケンスの長さによって大きく異なります。推論中の作業メモリの大まかな見積もりは次のとおりです。

ワーキングメモリ ≈ 2 * モデルメモリ

これは、モデル パラメータと中間アクティベーションの両方を格納することを考慮したものです。トレーニング中は、勾配とオプティマイザーの状態を格納する必要があるため、メモリ要件がさらに高くなる可能性があります。

トレーニングメモリ ≈ 4 * モデルメモリ

私たちのサンプルモデルの場合:

  • 推論作業メモリ ≈ 2 * 494 MB = 988 MB ≈ 1 GB
  • トレーニングメモリ ≈ 4 * 494 MB = 1,976 MB ≈ 2 GB

定常状態のメモリ使用量とピーク時のメモリ使用量

Transformer アーキテクチャに基づく大規模な言語モデルをトレーニングする場合、効率的なリソース割り当てにはメモリ使用量を理解することが重要です。メモリ要件を、定常状態のメモリ使用量とピーク時のメモリ使用量という 2 つの主なカテゴリに分類してみましょう。

定常状態のメモリ使用量

定常状態のメモリ使用量は、次のコンポーネントで構成されます。

  1. モデルの重み: モデル パラメータの FP32 コピー。4N バイトが必要です (N はパラメータの数)。
  2. オプティマイザーの状態: Adam オプティマイザーの場合、これには 8N バイト (パラメーターごとに 2 つの状態) が必要です。
  3. グラデーション: 勾配の FP32 コピー。4N バイトが必要です。
  4. 入力データ: int64 入力を想定すると、8BD バイトが必要になります。ここで、B はバッチ サイズ、D は入力次元です。

定常状態の合計メモリ使用量は次のように概算できます。

  • M_steady = 16N + 8BD バイト

ピークメモリ使用量

ピーク メモリ使用量は、勾配計算のためにアクティベーションが保存される逆方向パス中に発生します。ピーク メモリの主な要因は次のとおりです。

  1. レイヤーの正規化: レイヤーノルムあたり 4E バイトが必要です。ここで、E = BSH (B: バッチ サイズ、S: シーケンス長、H: 隠しサイズ)。
  2. 注意ブロック:
    • QKV計算: 2Eバイト
    • 注意行列: 4BSSバイト (S: シーケンス長)
    • 注意出力: 2E バイト
  3. フィードフォワードブロック:
    • 最初の線形層: 2E バイト
    • GELU アクティベーション: 8E バイト
    • 第2線形層: XNUMXEバイト
  4. クロスエントロピー損失:
    • ロジット: 6BSV バイト (V: 語彙サイズ)

総活性化メモリは次のように推定できます。

  • M_act = L * (14E + 4BSS) + 6BSV バイト

ここで、L は変圧器の層の数です。

合計ピークメモリ使用量

トレーニング中のピーク時のメモリ使用量は、定常状態メモリとアクティベーション メモリを組み合わせることで概算できます。

  • M_peak = M_steady + M_act + 4BSVバイト

追加の 4BSV 項は、後方パスの開始時の追加割り当てを考慮します。

これらのコンポーネントを理解することで、トレーニングと推論中のメモリ使用量を最適化し、効率的なリソース割り当てと大規模言語モデルのパフォーマンス向上を実現できます。

スケーリングの法則と効率性の考慮

 LLM のスケーリング法則

研究によると、LLM のパフォーマンスは、パラメータの数が増えるにつれて、特定のスケーリング法則に従う傾向があります。Kaplan ら (2020) は、モデルのパフォーマンスは、パラメータの数、計算予算、データセット サイズのべき乗法則として向上することを観察しました。

モデルのパフォーマンスとパラメータの数の関係は次のように近似できます。

パフォーマンス ∝ N^α

ここで、N はパラメータの数、α は言語モデリング タスクの場合のスケーリング指数 (通常 0.07 程度) です。

これは、パフォーマンスを 10% 向上させるには、パラメータの数を 10^(1/α) ≈ 3.7 倍に増やす必要があることを意味します。

効率化テクニック

LLM が成長し続けるにつれて、研究者や実務家は効率を向上させるためのさまざまな手法を開発してきました。

a) 混合精密トレーニング: 特定の操作に 16 ビットまたは 8 ビットの浮動小数点数を使用して、メモリ使用量と計算要件を削減します。

b) モデルの並列性: 単一のデバイスに収まらないほど大きなモデルを処理するために、モデルを複数の GPU または TPU に分散します。

c) 勾配チェックポイント: 後方パス中に特定のアクティベーションを保存する代わりに再計算することで、計算をメモリと交換します。

d) 剪定と量子化: トレーニング後に重要度の低い重みを削除したり、精度を下げたりして、より小さく効率的なモデルを作成します。

e) 蒸留: より小さなモデルをトレーニングして、より大きなモデルの動作を模倣することで、より少ないパラメータでパフォーマンスの多くを維持できる可能性があります。

実例と計算

最大の言語モデルの 3 つである GPT-175 には、XNUMX 億のパラメータがあります。これは、Transformer アーキテクチャのデコーダー部分を使用します。その規模を理解するために、パラメータ数を仮想的な値で分解してみましょう。

  • d_model = 12288
  • d_ff = 4 * 12288 = 49152
  • レイヤー数 = 96

1 つのデコーダー レイヤーの場合:

合計パラメータ = 8 * 12288^2 + 8 * 12288 * 49152 + 2 * 12288 ≈ 1.1億

合計96層:

1.1億×96=105.6億

残りのパラメータは埋め込みやその他のコンポーネントから取得されます。

まとめ

大規模な言語モデルのパラメータとメモリ要件を理解することは、これらの強力なツールを効果的に設計、トレーニング、展開するために不可欠です。Transformer アーキテクチャのコンポーネントを分解し、GPT などの実際の例を調べることで、これらのモデルの複雑さと規模についてより深い洞察が得られます。

大規模言語モデルとその応用における最新の進歩をさらに理解するには、次の包括的なガイドをご覧ください。

私は過去 50 年間、機械学習と深層学習の魅力的な世界に没頭してきました。 私の情熱と専門知識により、特に AI/ML に重点を置いた XNUMX を超える多様なソフトウェア エンジニアリング プロジェクトに貢献してきました。 私の継続的な好奇心は、私がさらに探求したいと思っている分野である自然言語処理にも引き寄せられました。