Contents
AI/ML ワークロードの前提条件と環境設計
AI/ML 向けに GPU を活用した Kubernetes クラスタを構築する際、ハードウェア・ソフトウェアの相性が崩れるとノード起動エラーやパフォーマンス低下が頻発します。本セクションでは GPU ドライバ/カーネル互換表 と CNI/CSI の相性チェック を中心に、Azure AKS と Google GKE の両環境で共通して確認すべきポイントを整理します。
GPU ハードウェア・ドライバ・カーネル要件 {#gpu-requirements}
GPU デバイスは OS カーネルと NVIDIA ドライバの組み合わせが正しくないと nvidia-device-plugin が起動できません。以下の表は 2026‑06 時点で公式に掲載されているサポートマトリクス(NVIDIA Driver Documentation・Kubernetes Release Notes)を元に作成しました。
| GPU シリーズ | 推奨 NVIDIA ドライバ (≥) | 必要 Linux カーネル (≥) | 対応 Kubernetes バージョン (≥) |
|---|---|---|---|
| A100 40 GB / 80 GB | 525.85.12 | 5.10 | 1.26 |
| RTX 6000 Ada | 525.60.11 | 5.15 | 1.25 |
| T4 | 525.60.07 | 5.8 | 1.24 |
確認手順
|
1 2 3 4 5 6 |
# カーネルバージョンを取得 uname -r # ドライババージョンを取得(ノード上で実行) nvidia-smi --query-gpu=driver_version --format=csv,noheader |
更新チェック手順
1. NVIDIA の公式ドキュメント (https://docs.nvidia.com/datacenter/tesla/driver-releases/) にアクセスし、表の「Latest Production Branch」欄を確認。
2. Kubernetes のリリースノートでnvidia-device-pluginがサポートしているバージョン範囲を検索(例: “GPU support”)。
3. 必要に応じてhelm upgrade --install gpu-operator … -f values.yaml前にdriver.versionを最新に合わせる。
CNI/CSI の互換性チェック {#cni-csi}
AI/ML ワークロードは大容量データの入出力が頻繁です。そのため ネットワーク MTU と ストレージプラグインの GPU 対応状況 を事前に検証します。
CNI の留意点
| プロバイダー | デフォルト MTU* | 推奨設定 | 備考 |
|---|---|---|---|
| Azure CNI(AKS) | 1500 (VNet‐Overlay が有効な場合は 1450) | --set azure.cni.mtu=1500 で明示的に指定可 |
MTU はノードの OS と同一ネットワークインタフェースの設定と整合させる必要があります |
| GKE VPC‑Native(Calico ベース) | 1460 〜 1480(GKE のデフォルト) | --max-pods-per-node=30 が推奨される根拠は Pod CIDR サイズ と IP アドレスプール にあります |
詳細は GKE ドキュメントの “Maximum Pods per node” を参照 |
*※2026‑06 の公式情報では Azure CNI は 1500 が標準です。Overlay ネットワークを利用すると自動で 1450 にフォールバックします。
CSI の留意点
| プラグイン | GPU 対応ステータス(2026‑06) | 推奨設定 |
|---|---|---|
| NVIDIA GPU Operator(nvidia-fs) | ✅ 完全対応(ReadWriteMany が利用可能) | storageClassName: nvidia-fs を PVC に指定 |
| Azure Disk CSI | ✅ GPU ノードでも問題なし | fsGroupPolicy: File と securityContext.fsGroup の明示が必須 |
| GCE Persistent Disk CSI | ✅ 同上 | 同上 |
検証手順
1. クラスタ作成直後に kubectl get csidrivers でプラグインのバージョンを確認。
2. 試験用 PVC を作成し、GPU デプロイメントにマウントして df -h が期待通り表示されるかチェック。
NVIDIA GPU Operator の導入とカスタマイズ
GPU デバイス管理は手動で行うよりも NVIDIA GPU Operator に委任した方が保守コストを大幅に削減できます。本章では Helm によるインストール手順と、kustomize で実装するリソース制限・Node Affinity の具体例を示します。
Helm Chart を用いたインストール手順
ポイント:公式 Helm リポジトリは
https://helm.ngc.nvidia.com/nvidia(2026‑06 時点)です。URL が変更された場合は NVIDIA NGC の “Helm Charts” ページで最新版を取得してください。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
# 1. リポジトリ追加・更新 helm repo add nvidia https://helm.ngc.nvidia.com/nvidia helm repo update # 2. Namespace 作成(例: gpu-operator) kubectl create namespace gpu-operator # 3. values.yaml(最小構成)作成 cat <<'EOF' > values.yaml driver: enabled: true version: "525.85.12" # 前節の表と合わせる toolkit: enabled: true devicePlugin: enabled: true migManager: enabled: false EOF # 4. インストール実行 helm upgrade --install gpu-operator nvidia/gpu-operator \ -n gpu-operator -f values.yaml # 5. 動作確認 kubectl get pods -n gpu-operator -l app=gpu-operator kubectl describe ds nvidia-device-plugin-daemonset -n kube-system |
バージョン固定の重要性
driver.version を明示しない場合、Operator が「最新」ドライバを取得しますが、クラスターで使用しているカーネルと不一致になるケースがあります。CI パイプラインで nvidia-smi --query-gpu=driver_version の出力を検証し、期待値と食い違う場合はデプロイを失敗させるようにしましょう。
kustomize でのリソース制限・Node Affinity
大規模環境では Helm の上書きだけでは足りません。kustomize を併用することで GitOps に適した粒度で設定を管理できます。
kustomization.yaml
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
resources: - https://github.com/NVIDIA/gpu-operator/releases/download/v23.9.0/manifests/base/all.yaml patchesStrategicMerge: # 1) デバイスプラグインのリソース上限を設定 - |- apiVersion: apps/v1 kind: DaemonSet metadata: name: nvidia-device-plugin-daemonset namespace: kube-system spec: template: spec: containers: - name: nvidia-device-plugin-ctr resources: limits: cpu: "2" memory: "4Gi" requests: cpu: "500m" memory: "1Gi" # 2) GPU ノードのみ対象にする Node Affinity - |- apiVersion: apps/v1 kind: DaemonSet metadata: name: nvidia-driver-daemonset namespace: gpu-operator spec: template: spec: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: accelerator operator: In values: ["nvidia-a100", "nvidia-t4"] |
適用例
|
1 2 3 4 |
kubectl apply -k . # 変更が反映されたら、対象ノードにラベル付与を確認 kubectl get nodes -L accelerator |
Azure AKS と Google GKE における AI ワークロード デプロイフロー
AKS と GKE はそれぞれ独自の GPU 機能とスケーリングメカニズムを提供しています。ここでは 公式ドキュメントに基づくベストプラクティス を示し、実装時に陥りやすい誤設定を回避します。
AKS での AI Copilot アプリ デプロイ手順
リンク検証:Azure の公式ページは
https://learn.microsoft.com/ja-jp/azure/aks/ai-ml-overview(2026‑06 時点)です。リンク切れに備えて、同ページを PDF で保存または Internet Archive のスナップショット URL を併記しておくと安全です。
手順概要
- GPU ノードプール付き AKS クラスタ作成
bash
az aks create \
--resource-group rg-ai \
--name aks-gpu-cluster \
--node-vm-size Standard_NC6s_v3 \
--enable-addons monitoring \
--kubernetes-version 1.27.3 \
--generate-ssh-keys
- GPU ノードプールの追加(
--aks-custom-headersは廃止済み)
bash
az aks nodepool add \
--resource-group rg-ai \
--cluster-name aks-gpu-cluster \
--name gpupool \
--node-count 3 \
--node-vm-size Standard_NC6s_v3 \
--node-labels accelerator=nvidia-a100 \
--enable-node-public-ip false # 必要に応じて設定
-
GPU Operator のデプロイ(前節参照)
-
AI Copilot デモアプリのマニフェスト適用
yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: copilot-deploy
spec:
replicas: 2
selector:
matchLabels:
app: copilot
template:
metadata:
labels:
app: copilot
spec:
containers:
- name: copilot
image: mcr.microsoft.com/azure-cognitive-services/copilot:latest
resources:
limits:
nvidia.com/gpu: 1 # GPU リクエスト
nodeSelector:
accelerator: nvidia-a100
- LoadBalancer による公開
bash
kubectl expose deployment copilot-deploy \
--type LoadBalancer --port 80 --target-port 8080
確認ポイント:
kubectl get pods -o wideでSTANDARD_NC6s_v3ノードに Pod がスケジューリングされているか必ずチェックしてください。
GKE のマネージド GPU クラスタと自動スケーリング設定
リンク検証:Google の公式ガイドは
https://cloud.google.com/kubernetes-engine/docs/tutorials/deploying-gpus?hl=ja(2026‑06)。同様に、https://web.archive.org/web/*/https://cloud.google.com/...を併記しておくとリンク切れ対策になります。
手順概要
- GPU 対応クラスタ作成
bash
gcloud container clusters create gke-gpu-cluster \
--zone us-central1-a \
--release-channel rapid \
--machine-type n1-standard-8 \
--accelerator type=nvidia-tesla-t4,count=1 \
--node-labels accelerator=nvidia-t4 \
--enable-ip-alias
-
GPU ドライバは自動インストール
--acceleratorを指定すると GKE が提供するcos-gpuイメージにドライバが組み込まれるため、追加作業は不要です。 -
GPU 用 HPA(カスタムメトリクス)設定
yaml
apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
name: gpu-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: model-server
minReplicas: 1
maxReplicas: 5
metrics:
- type: Pods
pods:
metric:
name: nvidia_gpu_utilization
target:
type: AverageValue
averageValue: "70"
- KServe によるモデルサービング例
yaml
apiVersion: serving.kserve.io/v1beta1
kind: InferenceService
metadata:
name: t5-translation
spec:
predictor:
tensorflow:
storageUri: gs://my-bucket/models/t5/
resources:
limits:
nvidia.com/gpu: 1
nodeSelector:
accelerator: nvidia-t4
ポイント:GPU の使用率が 70 % を超えると HPA が自動でスケールアウトします。メトリクスは
nvidia-dcgm-exporter(下記モニタリング節)で提供されます。
モデルサービングと永続化ストレージ構成
GPU ワークロードでは 高速推論 と 大量データの永続化 を同時に満たす必要があります。本章では KServe のベストプラクティスと、NVIDIA が提供する nvidia-fs CSI ドライバを組み合わせた永続ボリューム構成をご紹介します。
KServe による GPU 推論サービスのベストプラクティス
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
apiVersion: serving.kserve.io/v1beta1 kind: InferenceService metadata: name: resnet50-svc spec: predictor: tensorflow: storageUri: "gs://my-bucket/models/resnet50/" resources: limits: cpu: "4" memory: "8Gi" nvidia.com/gpu: 1 nodeSelector: accelerator: nvidia-a100 env: - name: TF_FORCE_GPU_ALLOW_GROWTH value: "true" |
| 項目 | 推奨設定 | 理由 |
|---|---|---|
| GPU リクエスト | nvidia.com/gpu: 1(モデルサイズに応じて増減) |
Pod が GPU ノードにスケジューリングされることを保証 |
| Node Affinity | nodeSelector または affinity.nodeAffinity にラベル付与 |
ラベルが無いノードで起動するとデバイスプラグインエラーになるため |
| 永続化 URI | Cloud Storage (gs://, https://) か CSI PVC(下記) |
大規模モデルはローカル SSD よりも外部ストレージの方がスケーラビリティが高い |
| フレームワーク固有フラグ | 例: TensorFlow の TF_FORCE_GPU_ALLOW_GROWTH=true |
メモリ確保失敗による OOM を防止 |
NVIDIA nvidia‑fs CSI と PVC(ReadWriteMany)構成
nvidia-fs は GPU ノード上で 高速かつ共有可能 なファイルシステムを提供します。以下は典型的な永続化パイプラインです。
- CSI ドライバのインストール確認(Operator が自動デプロイ)
bash
kubectl get pods -n gpu-operator -l app=nvidia-fs-csi-driver
- PVC 作成例(ReadWriteMany)
yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: dataset-pvc
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 500Gi
storageClassName: nvidia-fs
- データパイプライン(Kubeflow Pipelines の例)
python
from kfp import dsl
@dsl.pipeline(name='Dataset Sync')
def dataset_sync():
sync = dsl.ContainerOp(
name='sync-data',
image='alpine:3.18',
command=['sh', '-c'],
arguments=[
'aws s3 sync s3://my-dataset /mnt/data && echo "Sync completed"'
],
pvolumes={'/mnt/data': dsl.PipelineVolume(pvc='dataset-pvc')}
)
- 推論 Pod でのマウント
yaml
spec:
containers:
- name: predictor
image: my-model:latest
volumeMounts:
- mountPath: /models/data
name: dataset-volume
volumes:
- name: dataset-volume
persistentVolumeClaim:
claimName: dataset-pvc
ポイント:
ReadWriteManyがサポートされるため、バッチ推論とリアルタイム推論が同一データセットを同時に参照できます。
運用・モニタリング・CI/CD と更新戦略
GPU ワークロードは リソースの健全性 と 迅速なロールバック が成功の鍵です。本節では Prometheus/Grafana によるメトリクス収集、Argo CD を活用した GitOps パイプライン、そして安全なローリングアップデート手順をまとめます。
GPU メトリクス監視と Alertmanager 設定
- DCGM Exporter の Helm デプロイ(2026‑06 の公式 Chart)
bash
helm repo add dcgm https://nvidia.github.io/dcgm-exporter
helm repo update
helm install dcgm-exporter dcgm/dcgm-exporter \
-n monitoring --set serviceMonitor.enabled=true
- ServiceMonitor(Prometheus が自動検出)
yaml
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: dcgm-sm
labels:
release: prometheus
spec:
selector:
matchLabels:
app.kubernetes.io/name: dcgm-exporter
endpoints:
- port: metrics
interval: 30s
-
Grafana ダッシュボードインポート
Dashboard ID12239(NVIDIA GPU Metrics)を使用し、主要パネルに GPU Utilization, Memory Usage, Temperature を表示。 -
Alertmanager ルール例
yaml
groups:
- name: gpu-alerts
rules:
- alert: HighGpuUtilization
expr: avg_over_time(nvidia_gpu_utilization[5m]) > 85
for: 3m
labels:
severity: warning
annotations:
summary: "GPU Utilization が高すぎます"
description: "{{ $labels.instance }} の GPU 使用率が {{ $value }}% に達しています。"
ポイント:DCGM Exporter は NVIDIA ドライバと同一バージョンで動作する必要があります。Driver のアップデート時は Exporter も同様にバージョン合わせを忘れずに。
Argo CD による GitOps とロールバック手順
- Argo CD のインストール(公式マニフェスト)
bash
kubectl create namespace argocd
kubectl apply -n argocd \
-f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
- リポジトリ構成例(GitOps ベストプラクティス)
repo/
├─ base/
│ └─ kustomization.yaml # GPU Operator・CSI など共通リソース
├─ overlays/
│ ├─ prod/
│ │ └─ kustomization.yaml # 本番用パラメータ(replicas, limits)
│ └─ dev/
│ └─ kustomization.yaml # 開発環境向け
└─ apps/
└─ inference-service.yaml # KServe 定義
- Argo CD アプリケーション作成(CLI)
bash
argocd app create ai-inference \
--repo https://github.com/your-org/k8s-ai.git \
--path apps \
--dest-server https://kubernetes.default.svc \
--dest-namespace kserve \
--sync-policy automated \
--auto-prune \
--self-heal
- ロールバック手順(CLI または UI)
bash
# 直前のリビジョンへ戻す例
argocd app rollback ai-inference --revision HEAD~1
- メンテナンスウィンドウ設定例(
sync-options)
yaml
syncPolicy:
automated:
prune: true
selfHeal: true
syncOptions:
- CreateNamespace=true
- ApplyOutOfSyncOnly=true
- PruneLast=true
ポイント:
selfHeal:trueにより、GPU ドライバや Operator の一時的なドリフトが自動で復旧されます。
チェックリストと次のアクション
以下は本記事全体で触れた項目を網羅した Kubernetes AI ワークロード デプロイチェックリスト です。CI パイプラインやレビュー時に活用してください。
| カテゴリ | チェック項目 | 完了状態 |
|---|---|---|
| 前提条件 | GPU ハードウェアとドライバの互換表を最新化(手順参照) | ☐ |
| CNI / CSI のバージョン整合性をテスト | ☐ | |
| GPU Operator | values.yaml に正しい driver.version を設定 |
☐ |
kustomize でリソース上限と Node Affinity を適用 |
☐ | |
| AKS / GKE | クラスタ作成時に GPU ノードプールを追加(--aks-custom-headers 削除) |
☐ |
| Azure の AI Copilot マニフェストを適用し、Pod が GPU ノードへ配置されているか確認 | ☐ | |
GKE で HPA カスタムメトリクス (nvidia_gpu_utilization) を有効化 |
☐ | |
| サービング | KServe InferenceService に GPU リクエストと Affinity を記述 |
☐ |
| 永続化 | nvidia-fs CSI と PVC (ReadWriteMany) を作成し、Pod が正しくマウントできるか検証 |
☐ |
| モニタリング | DCGM Exporter + ServiceMonitor の導入、Grafana ダッシュボードが表示されているか確認 | ☐ |
| Alertmanager で HighGpuUtilization アラートが機能することをテスト | ☐ | |
| CI/CD | Argo CD にリポジトリ登録・自動同期設定 | ☐ |
| 更新戦略 | ローリングアップデート手順とメンテナンスウィンドウを策定、ロールバックが成功するかシミュレーション | ☐ |
次のステップ:上記チェックリストをもとにリポジトリ(例:
github.com/your-org/k8s-ai)へクローンし、環境ごとのvalues.yamlとkustomization.yamlを編集してローカルで動作確認してください。実装中の疑問や成功事例は社内技術コミュニティ(Slack #ai‑k8s)で共有すると、ナレッジが蓄積されて全体の品質向上につながります。
本稿のリンク・バージョン情報は 2026‑06 時点の公式資料を基に作成しています。将来的な変更に備えて、各ベンダーの「Release Notes」ページや「Version Compatibility Matrix」を定期的(最低四半期)で確認し、表やスクリプトを更新してください。