EKS クラスター全体の GPU コスト配分
この投稿では、Amazon EKS 上での GPU スライスコスト割り当てのエンドツーエンドの概念実証 (PoC) について説明します。
問題の説明
複数のテナントが GPU 容量を共有する場合(例:MIG スライス)、次の点 を明確にする必要があります。
- 誰が GPU のどのシェアをリクエストしたか(Pod / Namespace / BU 別)?
- 誰が実際に GPU を使用したか(そしてどれだけ使用したか)?
- GPU 時間あたり $12 のような「公開」価格が与えられた場合、以下をどのように計算するか:
- 割り当てコスト(リクエストされたシェアに基づく)
- 実効コスト(観測された使用率に基づく)
- 無駄(割り当て済みから実効を引いたもの)
アーキテクチャ(高レベル)

前提条件
AWS + EKS の前提条件
- 以下を作成する権限を持つ AWS アカウント:
- EKS クラスター + ノードグループ
- サービスアカウント用の IAM ロール (IRSA)
- AMP ワークスペース
- リージョン内で GPU インスタンスを実行するためのクォータと AZ キャパシティ
使用される変数
export AWS_REGION="us-west-2"
export CLUSTER_NAME="gpu-cost-poc"
export AMP_ALIAS="gpu-cost-poc"
# Public/benchmark price you want to demonstrate (not CUR yet)
export GPU_HOURLY_RATE="12"
# MIG profile for the PoC (eg: A100 40GB commonly supports 1g.5gb with 7 slices/GPU)
export MIG_PROFILE_LABEL="all-1g.5gb"
# IMPORTANT: in this PoC, MIG slices were exposed as nvidia.com/gpu (1 “gpu” == 1 MIG slice)
export MIG_RESOURCE_KEY="nvidia.com/gpu"
# For 1g.5gb on A100: typically 7 slices per physical GPU
export SLICES_PER_GPU="7"
# kube-state-metrics may “sanitize” extended resource names
export KSM_RESOURCE_REGEX='nvidia.*(gpu|mig).*'
ステップバイステップの手順
ステップ 1 — EKS クラスターを作成する
バージョンを一覧表示します eksctl サポート対象:
eksctl utils describe cluster-versions
クラスターを作成します(省略 --version を可能にするために eksctl サポートされているデフォルトを選択します)。
eksctl create cluster \
--name "$CLUSTER_NAME" \
--region "$AWS_REGION" \
--managed
ステップ 2 — "system" ノードグループを追加する(推奨)
これにより、CoreDNS とオペレーターはコストの高い GPU ノードから切り離されます。
eksctl create nodegroup \
--cluster "$CLUSTER_NAME" \
--region "$AWS_REGION" \
--name "system-ng" \
--node-type "m5.large" \
--nodes 2 --nodes-min 2 --nodes-max 3
ステップ 3 — GPU ノードグループを追加する
eksctl create nodegroup \
--cluster "$CLUSTER_NAME" \
--region "$AWS_REGION" \
--name "gpu-ng-ubuntu" \
--node-type "p4d.24xlarge" \
--node-ami-family "Ubuntu2204" \
--install-nvidia-plugin=false \
--nodes 1 --nodes-min 1 --nodes-max 1 \
--node-labels "workload=gpu"
GPU ワークロードのみがスケジュールされるようにテイントを適用します。
kubectl taint nodes -l workload=gpu nvidia.com/gpu=present:NoSchedule --overwrite
ステップ 4 — NVIDIA GPU Operator のインストール(MIG 有効)
helm repo add nvidia https://helm.ngc.nvidia.com/nvidia
helm repo update
helm upgrade --install gpu-operator nvidia/gpu-operator \
-n gpu-operator --create-namespace \
--set mig.strategy=single