このチュートリアルでは、2 つの A4 仮想マシン(VM)インスタンスを使用する マルチノード Slurm クラスタで Gemma 3大規模言語モデル(LLM)をファインチューニングする方法について説明します。このチュートリアルでは、次のことを行います。
カスタム イメージを作成する。
RDMA ネットワークを構成する。
分散ファインチューニング ジョブを実行する。効率的なマルチノード トレーニングを行うには、 完全シャーディング データ並列処理(FSDP)で Hugging Face Accelerate ライブラリを使用します。
このチュートリアルは、ファインチューニング ワークロードの処理に Slurm ジョブ スケジューリング機能を使用することを検討している ML エンジニア、プラットフォーム管理者、オペレーター、データおよび AI のスペシャリストを対象としています。
目標
Hugging Face を使用して Gemma 3 にアクセスする。
環境を準備する。
A4 Slurm クラスタを作成する。
ワークロードを準備する。
ファインチューニング ジョブを実行する。
ジョブをモニタリングする。
クリーンアップする。
費用
このドキュメントでは、課金対象である次のコンポーネントを使用します。 Google Cloud
- Compute Engine
- Google Kubernetes Engine (GKE) Enterprise edition
- Filestore
- Cloud Storage
- Cloud Logging
料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを生成できます。
始める前に
- アカウントにログインします Google Cloud Google Cloudを初めて使用する場合は、 アカウントを作成して、実際のシナリオで Google プロダクトのパフォーマンスを評価してください。新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $300 分を差し上げます。
-
Google Cloud CLI をインストールします。
-
外部 ID プロバイダ(IdP)を使用している場合は、まず連携 ID を使用して gcloud CLI にログインする必要があります。
-
gcloud CLI を初期化するには、次のコマンドを実行します:
gcloud init -
プロジェクトを作成または選択します Google Cloud 。
プロジェクトを選択または作成するために必要なロール
- プロジェクトを選択する: プロジェクトの選択に特定の IAM ロールは必要ありません。ロールが付与されているプロジェクトを選択できます。
-
プロジェクトを作成する: プロジェクトを作成するには、プロジェクト作成者ロール
(
roles/resourcemanager.projectCreator)が必要です。これにはresourcemanager.projects.create権限が含まれています。詳しくは、ロールを付与する方法をご覧ください。
-
プロジェクト Google Cloud を作成します。
gcloud projects create PROJECT_ID
PROJECT_IDは、作成する Google Cloud プロジェクトの名前に置き換えます。 -
作成した Google Cloud プロジェクトを選択します。
gcloud config set project PROJECT_ID
PROJECT_IDは、使用する Google Cloud プロジェクトの名前に置き換えます。
必要な API を有効にします。
API を有効にするために必要なロール
API を有効にするには、
serviceusage.services.enable権限が必要です。プロジェクトを作成した場合は、オーナーロール(roles/owner)を通じてこの権限が付与されている可能性があります。それ以外の場合は、Service Usage 管理者ロール(roles/serviceusage.serviceUsageAdmin)を通じてこの権限を取得できます。ロールを付与する方法をご覧ください。gcloud services enable compute.googleapis.com file.googleapis.com logging.googleapis.com cloudresourcemanager.googleapis.com servicenetworking.googleapis.com
-
Google Cloud CLI をインストールします。
-
外部 ID プロバイダ(IdP)を使用している場合は、まず連携 ID を使用して gcloud CLI にログインする必要があります。
-
gcloud CLI を初期化するには、次のコマンドを実行します:
gcloud init -
プロジェクトを作成または選択します Google Cloud 。
プロジェクトを選択または作成するために必要なロール
- プロジェクトを選択する: プロジェクトの選択に特定の IAM ロールは必要ありません。ロールが付与されているプロジェクトを選択できます。
-
プロジェクトを作成する: プロジェクトを作成するには、プロジェクト作成者ロール
(
roles/resourcemanager.projectCreator)が必要です。これにはresourcemanager.projects.create権限が含まれています。詳しくは、ロールを付与する方法をご覧ください。
-
プロジェクト Google Cloud を作成します。
gcloud projects create PROJECT_ID
PROJECT_IDは、作成する Google Cloud プロジェクトの名前に置き換えます。 -
作成した Google Cloud プロジェクトを選択します。
gcloud config set project PROJECT_ID
PROJECT_IDは、使用する Google Cloud プロジェクトの名前に置き換えます。
必要な API を有効にします。
API を有効にするために必要なロール
API を有効にするには、
serviceusage.services.enable権限が必要です。プロジェクトを作成した場合は、オーナーロール(roles/owner)を通じてこの権限が付与されている可能性があります。それ以外の場合は、Service Usage 管理者ロール(roles/serviceusage.serviceUsageAdmin)を通じてこの権限を取得できます。ロールを付与する方法をご覧ください。gcloud services enable compute.googleapis.com file.googleapis.com logging.googleapis.com cloudresourcemanager.googleapis.com servicenetworking.googleapis.com
-
ユーザー アカウントにロールを付与します。次の IAM ロールごとに次のコマンドを 1 回実行します。
roles/compute.admin, roles/iam.serviceAccountUser, roles/file.editor, roles/storage.admin, roles/serviceusage.serviceUsageAdmingcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE
次のように置き換えます。
PROJECT_ID: プロジェクト ID。USER_IDENTIFIER: ユーザー アカウントの識別子。例:myemail@example.com。ROLE: ユーザー アカウントに付与する IAM ロール。
- プロジェクトのデフォルト サービス アカウントを有効にします: Google Cloud
gcloud iam service-accounts enable PROJECT_NUMBER-compute@developer.gserviceaccount.com \ --project=PROJECT_ID
PROJECT_NUMBER は、使用するプロジェクト番号に置き換えます。プロジェクト番号を確認するには、 既存のプロジェクトを取得するをご覧ください。
- 編集者ロール(
roles/editor)をデフォルトのサービス アカウントに付与します。gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com" \ --role=roles/editor
- ユーザー アカウントのローカル認証情報を作成します。
gcloud auth application-default login
- プロジェクトの OS Login を有効にします。
gcloud compute project-info add-metadata --metadata=enable-oslogin=TRUE
- Hugging Face アカウントにログインするか、アカウントを作成します。
Hugging Face を使用して Gemma 3 にアクセスする
Hugging Face を使用して Gemma 3 にアクセスする手順は次のとおりです。
Hugging Face
readアクセス トークンを作成します。 Your Profile > Settings > Access tokens > +Create new token をクリックします。read accessトークン値をコピーして保存します。このチュートリアルで後ほど使用します。
Cluster Toolkit をインストールする
gcluster の使用とクラスタの管理の詳細については、Cluster Toolkit の概要をご覧ください。
Cluster Toolkit のバージョンを準備します。
リリースをダウンロードします。
gclusterパスを定義します。
環境を準備する
環境を準備する手順は次のとおりです。
デフォルトの環境変数を設定します。
次のように置き換えます。
YOUR_PROJECT_ID: Cloud Storage バケットを作成するGoogle Cloud プロジェクトの ID。YOUR_ZONE: 予約が存在するゾーン。YOUR_REGION: 予約が存在するリージョン。RESERVATION_NAME: Slurm クラスタの作成に使用する予約の URL または名前。YOUR_CLUSTER_NAME: 作成する Slurm クラスタの名前。YOUR_HF_TOKEN: 前のセクションで作成した Hugging Face アクセス トークン。
Cloud Storage バケットを作成します。
A4 Slurm クラスタを作成する
A4 Slurm クラスタを作成する手順は次のとおりです。
a4high-slurm-deployment.yamlファイルを作成します。マニフェストを準備します。
Terraform マニフェストを作成します。
マニフェストにパッチを適用します。
クラスタをデプロイします。
gcluster deployコマンドは、次の 2 つのフェーズで構成されるプロセスです。最初のフェーズでは、すべてのソフトウェアがプリインストールされたカスタム イメージがビルドされます。この処理には最大 45 分かかることがあります。
2 番目のフェーズでは、そのカスタム イメージを使用してクラスタがデプロイされます。通常、このプロセスは最初のフェーズよりも短時間で完了します。
最初のフェーズは成功したが、2 番目のフェーズが失敗した場合は、最初のフェーズをスキップして Slurm クラスタを再度デプロイできます。
ワークロードを準備する
ワークロードを準備する手順は次のとおりです。
ワークロード スクリプトを作成する
ファインチューニング ワークロードで使用するスクリプトを作成する手順は次のとおりです。
Python 仮想環境を設定するには、次の内容で
install_environment.shファイルを作成します。ファインチューニング ジョブの構成を指定するには、次の内容で
accelerate_config.yamlファイルを作成します。Slurm クラスタで実行するジョブのタスクを指定するには、次の内容で
submit.slurmファイルを作成します。ファインチューニング ジョブの依存関係を指定するには、次の内容で
requirements.txtファイルを作成します。ジョブの手順を指定するには、次の内容で
train.pyファイルを作成します。
スクリプトを Slurm クラスタにアップロードする
前のセクションで作成したスクリプトを Slurm クラスタにアップロードする手順は次のとおりです。
クラスタのログインノードの名前を取得して、
LOGIN_NODE変数を設定します。LOGIN_NODE変数には、${CLUSTER_NAME}-login-001のような値が格納されます。スクリプトをログインノードのホーム ディレクトリにアップロードします。
Slurm クラスタに接続する
ログインノードに接続し、Hugging Face トークンを新しいセッションに伝播します。
フレームワークとツールをインストールする
ログインノードに接続したら、必要な依存関係を使用して Python 仮想環境を設定します。
ファインチューニング ワークロードを開始する
ファインチューニング ワークロードを開始する手順は次のとおりです。
ジョブを Slurm スケジューラに送信し、ジョブ ID を収集します。
Slurm クラスタのログインノードで、
homeディレクトリに作成された出力ファイルを確認して、ジョブの進行状況をモニタリングできます。ジョブが正常に開始されると、
.errファイルにプログレスバーが表示され、ジョブの進行状況に応じて更新されます。
ワークロードをモニタリングする
Slurm クラスタでの GPU の使用状況をモニタリングして、ファインチューニング ジョブが効率的に実行されていることを確認できます。これを行うには、ブラウザで次のリンクを開きます。
https://console.cloud.google.com/monitoring/metrics-explorer?project=PROJECT_ID&pageState=%7B%22xyChart%22%3A%7B%22dataSets%22%3A%5B%7B%22timeSeriesFilter%22%3A%7B%22filter%22%3A%22metric.type%3D%5C%22agent.googleapis.com%2Fgpu%2Futilization%5C%22%20resource.type%3D%5C%22gce_instance%5C%22%22%2C%22perSeriesAligner%22%3A%22ALIGN_MEAN%22%7D%2C%22plotType%22%3A%22LINE%22%7D%5D%7D%7D
ワークロードをモニタリングすると、次の内容を確認できます。
GPU 使用率: ファインチューニング ジョブが正常に実行されている場合、16 個の GPU(クラスタ内の VM ごとに 8 個の GPU)の 使用率が上昇し、トレーニング全体を通して特定のレベルで 安定します。
ジョブの実行時間: ジョブが完了するまでに約 1 時間かかります。
クリーンアップする
このチュートリアルで使用したリソースについて、Google Cloud アカウントに課金されないようにするには、リソースを含むプロジェクトを削除するか、プロジェクトを維持して個々のリソースを削除します。
Slurm クラスタを削除する
Slurm クラスタを削除するには:
プロジェクトに関連付けられているすべての VPC ネットワーク、ファイアウォール ルール、ルーター、IP、サブネットを削除する必要がある場合は、次の操作を行います。
プロジェクトの削除
プロジェクト Google Cloud を削除します。
gcloud projects delete PROJECT_ID