費用効率の高いGPT NeoXおよびPythiaモデルの訓練における節約と正確性:AWS Trainiumの活用

『AWS Trainiumの活用による、費用効率の高いGPT NeoXおよびPythiaモデルの訓練における節約と正確性』

大型言語モデル(LLMs)は、日常的な会話のトピックになっています。その採用の速さは、100万人のユーザーに達するのにかかる時間が「Facebookで4.5年」から「ChatGPTでわずか2か月」までと、過去最低になったことからも明らかです。ジェネレーティブプリトレーニングトランスフォーマー(GPT)は、因果自己回帰の更新を使用して予測を行います。これらのモデルアーキテクチャによって、音声認識、テキスト生成、質問応答などさまざまなタスクが驚異的な性能を示すことが実証されています。最近のいくつかのモデル(NeoXFalconLlama)は、バックボーンとしてGPTアーキテクチャを使用しています。LLMsのトレーニングには膨大な計算時間が必要であり、数百万ドルの費用がかかります。この記事では、AWS Trainiumというディープラーニングトレーニングに最適化された特別な機械学習(ML)アクセラレータであるAWS Trainium上のGPT NeoXのトレーニング手順を要約します。AWS Trainiumを使用して、モデルの品質を損なうことなく、3.2 Mトークン/$のコスト効果的にこのようなモデルをトレーニングした方法を紹介します。

ソリューションの概要

GPT NeoXとPythiaモデル

GPT NeoXPythiaは、Eleuther-AIが開発したオープンソースの因果関係言語モデルで、NeoXは約200億のパラメータを、Pythiaは69億を持っています。どちらもChat GPT3と同じようなアーキテクチャデザインに従ったデコーダーモデルです。しかし、これらのモデルには多くの追加機能もあり、Llamaなどの最近のモデルでも広く採用されています。特に、ヘッド次元全体にわたる部分的な回転を持つ回転位置埋め込み(ROPE)があります。元のモデル(NeoXとPythia 6.9B)は、Pileデータセットを使用してdeduplicationおよびMegatronおよびDeepspeedバックエンドを利用してトレーニングされています。

私たちは、Neuron NeMoライブラリを使用して、AWS TrainiumベースのTrn1インスタンス上でこれらのモデルの事前トレーニングと微調整を実証します。コンセプトの証明と迅速な再現を確立するために、GPT2バイトペアエンコーディング(BPE)トークナイザを使用してトークン化された小さなウィキペディアデータセットのサブセットを使用します。

解説

次のように、トークン化されたウィキペディアデータセットをダウンロードします。

export DATA_DIR=~/examples_datasets/gpt2mkdir -p ${DATA_DIR} && cd ${DATA_DIR}wget https://s3.amazonaws.com/models.huggingface.co/bert/gpt2-vocab.jsonwget https://s3.amazonaws.com/models.huggingface.co/bert/gpt2-merges.txtaws s3 cp s3://neuron-s3/training_datasets/gpt/wikipedia/my-gpt2_text_document.bin . --no-sign-requestaws s3 cp s3://neuron-s3/training_datasets/gpt/wikipedia/my-gpt2_text_document.idx . --no-sign-requestaws s3 cp s3://neuron-s3/training_datasets/gpt/wikipedia/license.txt . --no-sign-request

NeoX 20BとPythia 6.9Bの両方は、部分的な回転を使用するROPEを使用しています。たとえば、ヘッドの寸法の25%を回転させ、残りの部分は回転させません。AWS Trainiumアクセラレータで部分回転を効率的に実装するために、回転する寸法と回転しない寸法を連結する代わりに、回転しない寸法のためにゼロの周波数を追加し、その後、全体のヘッド寸法セットを回転させます。この単純なトリックにより、AWS Trainium上のスループット(処理されるシーケンス数/秒)を向上させることができました。

トレーニング手順

トレーニングを実行するために、私たちはSLURMで管理されたマルチノードAmazon Elastic Compute Cloud(Amazon EC2)のTrn1クラスターを使用しています。各ノードにはtrn1.32xlインスタンスが含まれています。各trn1.32xlには、アクセラレータが16個あり、アクセラレータあたり2つのワーカーがあります。最新のNeuron NeMoパッケージをダウンロードした後、最適化されたハイパーパラメータを使用して、提供されたneoxおよびpythiaの事前学習および微調整スクリプトを実行し、4ノードトレーニングのために以下を実行してください。

  1. コンパイル:モデルを3回のトレーニングイテレーションで事前コンパイルしてグラフを生成および保存します。

    sbatch --nodes 4 compile.slurm ./neoX_20B_slurm.sh
  2. 実行:キャッシュされたグラフをロードしてトレーニングを実行します

    sbatch --nodes 4 run.slurm ./neoX_20B_slurm.sh
  3. 結果のモニタリング

    tensorboard --logdir=nemo_experiments/megatron_neox

同じ手順は、neox_20B_slurm.shpythia_6.9B_slurm.shで置き換えてPythia 6.9Bモデルを実行するためにも行う必要があります。

事前学習および微調整の実験

私たちは、Neuron NeMoライブラリを使用してAWS Trainium上でGPT-NeoXおよびPythiaモデルの事前学習を10kイテレーションでデモンストレーションし、これらのモデルの1kステップでの微調整も示しています。事前学習では、NeMo内部のGPT2 BPEトークナイザーを使用し、オリジナルモデルで使用される設定と同じ手順に従います。AWS Trainiumでのファインチューニングでは、いくつかのパラメータ(例:ボキャブラリーサイズの分割係数)を変更する必要がありますが、これらはMegatronとNeMoの違いおよびGPUとAWS Trainiumの変更に対応するためにファインチューニングスクリプトで提供されています。ノードの数を変えた場合のマルチノード分散トレーニングのスループットに関する情報は、表1に示されています。

モデル テンソル並列 パイプライン並列 インスタンス数 コスト($/時間) シーケンス長 グローバルバッチサイズ スループット(シーケンス/秒) コストとスループットの比率(トークン/$)
Pythia 6.9B 8 1 1 7.59 2048 256 10.4 10,102,387
8 1 4 30.36 2048 256 35.8 8,693,881
NeoX 20B 8 4 4 30.36 2048 16384 13.60 3,302,704
8 4 8 60.72 2048 16384 26.80 3,254,134
8 4 16 121.44 2048 16384 54.30 3,296,632
8 4 32 242.88 2048 16384 107.50 3,263,241
8 4 64 485.76 2048 16384 212.00 3,217,708

表1。 GPT NeoXとPythiaモデルの平均スループットを比較し、ノード数の変化によるトレーニングステップ500までの訓練の結果を比較します。 trn1.32xlの価格は、3年間の予約有効時間あたりのレートに基づいています。

次に、AWS Trainiumでのモデルトレーニングの損失の軌跡を評価し、Nvidia A100 GPUコアを使用したP4dクラスタでの対応する実行と比較します。トレーニングの損失に加えて、トレーニングの進行状況を監視するために、トレーニングの各イテレーションで計算されるモデル勾配の2ノルムといった有用な指標とも比較します。トレーニングの結果は、図1、2に示されており、NeoX 20Bのファインチューニングは図3に示されています。

すべてのワーカーで平均化されたトレーニング損失(左)および勾配ノルム(右)

図1。 GPUとTrainiumの4つのノードで小規模なウィキデータセット上でトレーニングされたNeoX 20Bのトレーニング損失(左)および勾配ノルム(右)。トレーニングのハイパーパラメータ(グローバルバッチサイズ=256)は、GPUとAWS Trainiumの両方で同じです。GPUはBF16とデフォルトの混合精度を使用し、AWS TrainiumはBF16を完全に使用しています。GPUとAWS Trainiumの損失と勾配ノルムの軌跡は一致しています。

すべてのワーカーで平均化されたトレーニング損失(左)および勾配ノルム(右)(Pythia)

図2。 GPUとTrainiumの4つのノードで小規模なウィキデータセット上でトレーニングされたPythia 6.9Bのトレーニング損失(左)および勾配ノルム(右)。図1のGPT NeoXと同様に、GPUとTrainiumの損失と勾配ノルムの軌跡は一致しています。

GPUおよびAWS TrainiumでGPT NeoX 20Bモデルのファインチューニングと、すべてのワーカーで平均化されたトレーニング損失(左)および勾配ノルム(右)

図3。 GPUおよびAWS TrainiumでGPT NeoX 20Bモデルのファインチューニングと、すべてのワーカーで平均化されたトレーニング損失(左)および勾配ノルム(右)。小規模なウィキデータセットを使用してファインチューニングのデモンストレーションを行っています。GPUとAWS Trainiumの損失と勾配ノルムの軌跡は一致しています。

この投稿では、AWSのディープラーニングハードウェアでの費用効果の高いLLMのトレーニングを紹介しました。 Neuron NeMoライブラリを使用して、AWS Trn1でGPT NeoX 20BおよびPythia 6.9Bモデルをトレーニングしました。 Trainiumを使用した20ビリオンモデルの費用正規化スループットは、約3.2Mトークン/$です。 AWS Trainiumでの費用効率の良いトレーニングに加えて、トレーニングステップの損失と勾配ノルムの軌跡からも同様のモデルの精度を得ることができます。また、AWS TrainiumでNeoX 20Bモデルの利用可能なチェックポイントもファインチューニングしました。AWS TrainiumでNeMo Megatronを使用した分散トレーニングの詳細については、NeMo Megatron用のAWS Neuronリファレンスを参照してください。 Llamaモデルのファインチューニングを始めるための良いリソースは、Llama2ファインチューニングで見つけることができます。 Amazon SageMakerで管理されたAWS Trainiumで始めるには、AWS TrainiumとAmazon SageMakerでMLモデルをトレーニングするを参照してください。

We will continue to update VoAGI; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more

データサイエンス

「データ分析のためのトップ10のAIツール」

ビジネスデータは日々複雑化しており、それを理解するためには高度な手法が必要です。従来のデータ分析手法は、手作業に依存...

機械学習

「PyTorchモデルのパフォーマンス分析と最適化—パート6」

「これは、PyTorch ProfilerとTensorBoardを使用してPyTorchモデルを分析および最適化するトピックに関するシリーズ投稿の第6...

人工知能

偉大さの開放:アレクサンダー大王の創造的AIとの旅 (Idai-sa no kaihō Arekusandā Taio no sōzō-teki AI to no tabi)

「生成型AI(GAI)はコーチングの効果を高めるためにどのように使用できるのか、また生成型AI(GAI)をコーチングツールとし...

AI研究

UCLAとCMUの研究者が、優れた中程度範囲の天気予報のためのスキルと信頼性のあるスケーラブルなトランスフォーマーニューラルネットワーク「ストーマー」を紹介しました

現在、科学と社会が直面している主な問題の一つは天気予報です。正確な天気予報は、自然災害や極端な天候事象に対処し、回復...

AI研究

『このAI研究は、IFPおよびリポソーム蓄積を予測するための物理ベースの深層学習を発表します』

がん治療の精緻化を追求する中、研究者たちは、腫瘍のダイナミクスを飛躍的に向上させる画期的な解決策を導入しました。この...

データサイエンス

「AIがあなたの問題を解決できるでしょうか?」

「AIの能力を製品やサービスに組み込むことを目指す製品企業では、AIに詳しくない人々をAIの流れに乗せるという課題が常に存...