費用効率の高い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

機械学習

AI導入の迷宮を進む

「過去5年間、複数の企業と協力し、彼らがAIソリューションを展開するのを支援してきましたその過程で、いくつかの共通のパタ...

データサイエンス

「2023年の人工知能(AI)と機械学習に関連するサブレディットコミュニティ15選」

人工知能(AI)と機械学習の世界では、最新のトレンド、ブレイクスルー、議論について最新情報を得ることが重要です。インタ...

機械学習

「NVIDIA BioNeMoがAWS上での薬剤探索のための生成型AIを可能にする」

主要な製薬会社やテクバイオ企業の研究者や開発者は、Amazon Web Servicesを通じてNVIDIA Claraソフトウェアとサービスを簡単...

データサイエンス

「確信せよ、ただし検証せよ」

非決定的なソフトウェアの開発、テスト、および監視の課題を理解することこれは、可観測性のための新しいかつ重要な課題です ...

データサイエンス

「Apache CassandraとApache Pulsarを使用した製品推薦エンジンの構築」

仮説上の請負業者がApache PulsarとApache Cassandraを使用してAIの加速化を行った方法この記事ではAI/MLへの道のりの重要な...

AI研究

GoogleがNotebookLMを導入:あなた専用の仮想研究アシスタント

Googleは、Google Labsから最新の実験的な提供であるNotebookLMを発表しています。以前はProject Tailwindとして知られていた...