大規模に基礎モデルをトレーニングするためのAmazon SageMaker HyperPodの紹介

Amazon SageMaker HyperPodを使用した大規模な基礎モデルトレーニングの紹介

ファウンデーションモデル(FM)を構築するには、巨大なクラスタを構築し、保守し、最適化する必要があります。これにより、数百億のパラメータを持つモデルを膨大なデータでトレーニングすることが可能となります。モデルトレーニングの進捗を失うことなく、障害や環境の変化に対応できる頑強な環境を作成するためには、クラスタのスケーリング、プロアクティブなヘルスモニタリング、ジョブのチェックポイント作成、障害や問題が発生した場合に自動的にトレーニングを再開する機能などを実装する必要があります。

Amazon SageMaker HyperPodが一般に利用可能になり、ファウンデーションモデルを数千のアクセラレータで最大40%高速化することができます。これにより、大規模な訓練クラスタの運用に関連する繁重な作業を排除しながら、高い頑強性を持つ訓練環境を提供します。SageMaker HyperPodを使用することで、機械学習(ML)の専門家は数週間や数ヶ月にわたってFMをトレーニングすることができ、ハードウェアの故障に対処する必要はありません。

Stability AIなどのお客様は、SageMaker HyperPodを使用して、Stable Diffusionを含むファウンデーションモデルをトレーニングしています。

「私たちは、オープンソースの生成型AI企業として、現代のAIのアクセシビリティを最大化することを目指しています。数百億のパラメータを持つファウンデーションモデルを構築しており、トレーニングのパフォーマンスを最適化するためには、インフラストラクチャのスケーリングが必要です。SageMaker HyperPodの管理型インフラストラクチャと最適化ライブラリを使用することで、トレーニング時間とコストを50%以上削減することができます。これにより、モデルトレーニングをより頑強で高パフォーマンスなものにし、最先端のモデルをより早く構築することができます。」

– Emad Mostaque、Stability AIの創設者兼CEO。

SageMaker HyperPodは、ハードウェアの障害に対してファウンデーションモデルの開発フルサイクルを頑強にするために、クラスタの作成、クラスタのヘルスの監視、故障したノードの修復と置換、頻繁なチェックポイントの保存、およびトレーニングの自動再開をサポートします。また、SageMaker HyperPodは、Amazon SageMakerの分散トレーニングライブラリ(SMDDP)とモデル並列処理ライブラリ(SMP)などがプリコンフィグされており、トレーニングデータとモデルをより小さいチャンクに分割してクラスタノード全体で並列処理し、クラスタの計算能力とネットワークインフラストラクチャを最大限に活用することで、FMのトレーニングパフォーマンスを向上させます。SageMaker HyperPodは、クラスタとトレーニングジョブのオーケストレーションにSlurm Workload Managerを統合しています。

Slurm Workload Managerの概要

Slurmは、分散コンピューティングクラスタでのジョブスケジューリングに使用されるユーティリティであり、NVIDIA Collective Communications Library(NCCL)Message Passing Interface(MPI)の標準を使用して並列ジョブを実行するためのフレームワークも提供しています。Slurmは、高性能コンピューティング(HPC)や生成型AIおよびFMトレーニングのワークロードで広く使用される人気のあるオープンソースのクラスタリソース管理システムです。SageMaker HyperPodは、数分でSlurmクラスタをセットアップし、実行するための直感的な方法を提供します。

以下は、ユーザーがSageMaker HyperPodと対話し、各クラスタコンポーネントが互いおよび他のAWSサービス(Amazon FSx for LustreおよびAmazon Simple Storage Service(Amazon S3)など)と対話する方法についての高レベルのアーキテクチャ図です。

Slurmのジョブはコマンドライン上でコマンドを使用して提出されます。Slurmジョブを実行するためのコマンドはsrunsbatchです。srunコマンドはトレーニングジョブをインタラクティブかつブロッキングモードで実行し、sbatchはバッチ処理で非ブロッキングモードで実行します。srunは主に即座のジョブ実行に使用され、sbatchは後でジョブを実行するために使用できます。

追加のSlurmコマンドや設定に関する情報は、Slurm Workload Managerのドキュメントを参照してください。

自動再開と復旧機能

SageMaker HyperPodの新機能の1つは、ジョブに自動再開の機能を持たせることです。以前は、トレーニングジョブまたはファインチューニングジョブの実行中にワーカーノードが失敗した場合、ユーザーはジョブの状態を確認し、最新のチェックポイントからジョブを再開し、ジョブ全体の実行を監視し続ける必要がありました。トレーニングジョブやファインチューニングジョブは数日、数週間、または数か月にわたって実行する必要があり、ノードがクラッシュした場合にユーザーがジョブを監視および維持するために追加の管理オーバーヘッドが発生し、高価な高速コンピュートインスタンスのアイドル時間のコストもかかります。

SageMaker HyperPodは、自動化されたヘルスチェック、ノードの置換、ジョブのリカバリを使用してジョブの強靭性に対処します。SageMaker HyperPodでのSlurmジョブは、SPANKフレームワークを使用したSageMakerカスタムSlurmプラグインを使用して監視されます。トレーニングジョブが失敗した場合、SageMaker HyperPodは一連のヘルスチェックを介してクラスタのヘルスを検査します。クラスタ内で不良ノードが見つかった場合、SageMaker HyperPodは自動的にノードをクラスタから削除し、健全なノードで置き換え、トレーニングジョブを再起動します。トレーニングジョブでチェックポイントを使用している場合、中断または失敗したジョブは最新のチェックポイントから再開できます。

ソリューションの概要

SageMaker HyperPodを展開するためには、まず環境を準備する必要があります。Amazon Virtual Private Cloud(Amazon VPC)ネットワークとセキュリティグループを設定し、VPC内のFSx for Lustreなどのサポートサービスをデプロイし、SlurmライフサイクルスクリプトをS3バケットに公開します。次に、SageMaker HyperPodをデプロイして構成し、ヘッドノードに接続してトレーニングジョブを開始します。

前提条件

SageMaker HyperPodを作成する前に、VPCを構成し、FSx for Lustreファイルシステムを作成し、所望のクラスタライフサイクルスクリプトを持つS3バケットを作成する必要があります。また、最新バージョンのAWS Command Line Interface(AWS CLI)AWS Session ManagerのCLIプラグインを、AWS Systems Managerの機能であるAWS CLIとCLIプラグインをインストールする必要があります。

SageMaker HyperPodはVPCと完全に統合されています。新しいVPCを作成する方法については、デフォルトVPCの作成またはVPCの作成を参照してください。リソース間の最高のパフォーマンスでシームレスな接続を許可するために、すべてのリソースを同じリージョンとアベイラビリティゾーンに作成し、関連するセキュリティグループのルールがクラスタリソース間の接続を許可することも確認してください。

次に、FSx for Lustreファイルシステムを作成します。これは、モデルトレーニング全体で使用する高パフォーマンスのファイルシステムとして機能します。FSx for LustreおよびクラスタセキュリティグループがクラスタリソースとFSx for Lustreファイルシステムの間の受信および送信の通信を許可することを確認してください。

クラスタのライフサイクルスクリプトを設定するには、新しいクラスタインスタンスのようなイベントが発生したときに実行されるもので、まずS3バケットを作成し、デフォルトのライフサイクルスクリプトをコピーして任意にカスタマイズします。この例では、すべてのライフサイクルスクリプトをlifecycle-scriptsというバケットの接頭辞に保存します。

まず、GitHubのリポジトリからサンプルのライフサイクルスクリプトをダウンロードします。これらを自分のクラスタの動作に合わせてカスタマイズしてください。

次に、カスタマイズされたライフサイクルスクリプトを保存するためのS3バケットを作成します。

aws s3 mb s3://<your_bucket_name>

次に、ローカルディレクトリからデフォルトのライフサイクルスクリプトを指定したバケットと接頭辞にコピーします。これにはaws s3 syncを使用します。

aws s3 sync . s3://<your_bucket_name>/lifecycle-scripts

最後に、クラスタのヘッドノードへの簡単な接続のために、AWS CLIのインストールまたはアップデートおよびAWSセッションマネージャーCLIプラグインのインストールを行う必要があります。これにより、クラスタの管理およびトレーニングジョブの実行のための対話型ターミナル接続が可能になります。

SageMaker HyperPodクラスターは、オンデマンドリソースを使用するか、SageMakerにキャパシティ予約をリクエストして作成することができます。キャパシティ予約を作成する場合は、Service Quotasダッシュボードで特定のコンピュートインスタンスタイプとキャパシティ割り当てを予約するためのクォータ増加リクエストを作成します。

トレーニングクラスターの設定

SageMaker HyperPodクラスターを作成するには、次の手順を実行します。

  1. SageMakerコンソールで、ナビゲーションペインのHyperPodクラスタークラスター管理を選択します。
  2. クラスターの作成を選択します。
  3. クラスター名を指定し、オプションでクラスターリソースに適用するタグを指定して、次へを選択します。
  4. インスタンスグループの作成を選択し、インスタンスグループ名、必要なインスタンスタイプ、希望するインスタンス数、および以前にクラスタライフサイクルスクリプトをコピーしたS3バケットと接頭辞のパスを指定します。

コントローラノード用にクラスタを管理しジョブを送信するための別々のインスタンスグループと、アクセラレートされたコンピュートインスタンスでトレーニングジョブを実行するためのワーカーノード用の別々のインスタンスグループを作成することが推奨されています。ログインノード用の追加のインスタンスグループを設定することもできます。

  1. まず、コントローラインスタンスグループを作成します。ヘッドノードを含みます。
  2. このインスタンスグループのAWS Identity and Access Management(IAM)ロールでは、クラスタインスタンスがアクセスできるようにするS3バケットを指定して、新しいロールを作成を選択します。

生成されたロールはデフォルトで指定したバケットに対して読み取り専用のアクセス権が付与されます。

  1. ロールの作成を選択します。
  2. インスタンス作成時に各インスタンスで実行されるスクリプト名をon_create.shという名前で入力します。
  3. 保存を選択します。
  4. ワーカーインスタンスグループを作成するためにインスタンスグループの作成を選択します。
  5. 要求されるすべての詳細情報を指定します。必要なインスタンスタイプと数量を含みます。

この例では、4つのml.trn1.32xlのアクセラレートインスタンスを使用してトレーニングジョブを実行します。前回と同じIAMロールを使用するか、ワーカーインスタンス用にロールをカスタマイズすることができます。同様に、このワーカーインスタンスグループ用に前のインスタンスグループとは異なる作成時ライフサイクルスクリプトを設定することもできます。

  1. 次へを選択して次に進んでください。
  2. クラスターインスタンスのための希望するVPC、サブネット、およびセキュリティグループを選択してください。

私たちはクラスターインスタンスを単一の利用可能ゾーンとサブネットにホストし、遅延を低減するためにします。

S3データに頻繁にアクセスする場合、潜在的なデータ転送コストを削減するために、プライベートサブネットのルーティングテーブルに関連するVPCエンドポイントを作成することをお勧めします。

  1. 次を選択してください。
  2. クラスターの詳細の要約を確認し、送信を選択してください。

または、AWS CLIを使用してSageMaker HyperPodを作成する場合は、最初にクラスターの作成に使用するJSONパラメータをカスタマイズしてください:

// create-cluster-slurm-default-vpc.json{   "ClusterName": "sagemaker-demo-cluster",   "InstanceGroups": [        {            "InstanceGroupName": "my-controller-group",            "InstanceType": "ml.m5.xlarge",            "InstanceCount": 1,            "lifecycleConfig": {                "SourceS3Uri": "s3://<your-s3-bucket>/<lifecycle-script-directory>/",                "OnCreate": "on_create.sh"            },            "ExecutionRole": "arn:aws:iam::111122223333:role/my-role-for-cluster",            "ThreadsPerCore": 1        },         {            "InstanceGroupName": "worker-group-1",            "InstanceType": "ml.trn1.32xlarge",            "InstanceCount": 4,            "lifecycleConfig": {                "SourceS3Uri": "s3://<your-s3-bucket>/<lifecycle-script-directory>/",                "OnCreate": "on_create.sh"            },            "ExecutionRole": "arn:aws:iam::111122223333:role/my-role-for-cluster",            "ThreadsPerCore": 1        }    ]}

次に、提供された入力を使用してクラスターを作成するために次のコマンドを使用してください:

aws sagemaker create-cluster create-cluster-slurm-default-vpc.json

Llama 2を使用して最初のトレーニングジョブを実行する

Llama 2モデルの使用はメタライセンスによって管理されます。モデルの重みとトークナイザーをダウンロードするには、ウェブサイトを訪問し、ライセンスに同意した後でメタのHugging Faceウェブサイトでアクセスを要求してください。

クラスターが実行されたら、クラスターID、インスタンスグループ名、およびインスタンスIDを使用してセッションマネージャーでログインしてください。クラスターの詳細を表示するには、次のコマンドを使用してください:

aws sagemaker describe-cluster –cluster-name <cluster_name>

応答に含まれるクラスターARN内のクラスターIDをメモしてください。

“ClusterArn”: “arn:aws:sagemaker:us-west-2:111122223333:cluster/<cluster_id>”

ログインするために必要なインスタンスグループ名とインスタンスIDを取得するには、次のコマンドを使用してください。

aws sagemaker list-cluster-nodes --cluster-name <cluster_name>

応答内のInstanceGroupNameInstanceIdをメモしてください。これらはセッションマネージャーでインスタンスに接続する際に使用されます。

今度は、セッションマネージャーを使用してヘッドノードまたはログインノードのいずれかにログインし、トレーニングジョブを実行します:

aws ssm start-session —target sagemaker-cluster:<cluster_id>_<instance_group_name>-<instance_id>

次に、環境を準備し、Llama 2とRedPajamaデータセットをダウンロードします。詳しいコードとステップバイステップの手順は、AWSome Distributed TrainingのGitHubリポジトリの指示に従ってください。

git clone https://github.com/aws-samples/awsome-distributed-training.git

環境を準備する手順に従い、モデルを準備し、データセットをダウンロードしてトークナイズし、モデルを事前コンパイルした後、6.pretrain-model.shスクリプトとsbatchジョブ提出コマンドを編集して、SageMaker HyperPodの自動再開機能を利用できるようにします。

sbatchの行を以下のように編集します:

sbatch --nodes 4 --auto-resume=1 run.slurm ./llama2_7b.sh

ジョブを提出した後、以下のコードを使用してジョブステータスを確認するためにJobIDが表示されます:

squeue <jobid>

また、ジョブの出力ログをフォローするために以下のコードを使用してジョブを監視できます:

tail -f slurm-run.slurm-<jobid>.out

クリーンアップ

SageMaker HyperPodクラスターを削除するには、SageMakerコンソールまたは次のAWS CLIコマンドを使用します:

aws sagemaker delete-cluster --cluster-name <cluster_name>

結論

この記事では、AWS環境を準備し、最初のSageMaker HyperPodクラスターをデプロイし、70億パラメータのLlama 2モデルをトレーニングする方法を紹介しました。SageMaker HyperPodは、本日アメリカ(北バージニア、オハイオ、オレゴン)、アジアパシフィック(シンガポール、シドニー、東京)、およびヨーロッパ(フランクフルト、アイルランド、ストックホルム)リージョンで一般に利用可能です。SageMakerコンソール、AWS CLI、AWS SDKを介してデプロイすることができ、p4d、p4de、p5、trn1、inf2、g5、c5、c5n、m5、およびt3のインスタンスファミリーをサポートしています。

SageMaker HyperPodについて詳しくは、Amazon SageMaker HyperPodをご覧ください。

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

機械学習

「Google LLMは、ドキュメントを読むだけでツールをマスターできる」

急速な技術の進歩の時代において、人工知能(AI)は時折、人間のような驚異的な進歩を遂げています。Googleの研究者たちは画...

データサイエンス

「線形代数からディープラーニングまで 7冊の本(2023年冬のアップデート)」

「Towards Data Science」への初めての投稿では、私は線形代数から現代のディープラーニングまで、あらゆる内容をカバーする...

人工知能

「2023年版AI音声生成器の究極ガイド」

導入 人工知能(AI)の導入により、さまざまな産業で画期的な進歩が生まれています。AI音声生成器の登場は、AIが人間の振る舞...

データサイエンス

データから洞察力へ:KubernetesによるAI/MLの活用

「KubernetesがAI/MLと連携することで、AI/MLのワークロードに対して細粒度の制御、セキュリティ、弾力性を提供する方法を発...

人工知能

「開発チームのためのAIツール 採用するべきか否か?」

「AIツールがより人気になるにつれて、それを導入する際のリスクと利点を知ることが重要ですCodiumAIのイタマール・フリード...

AI研究

CMUの研究者がMultiModal Graph Learning(MMGL)を導入「複数の多様な隣接情報から関係構造を持つ情報を抽出するための新たなAIフレームワーク」としています

多モーダルグラフ学習は、機械学習、グラフ理論、およびデータフュージョンの概念を組み合わせた多様なデータソースとその相...