Knative で AI 推論、ハイパフォーマンスコンピューティング(HPC)、その他の GPU ワークロードを実行するには、Knative サービスが GPU リソースをリクエストするよう設定します。サービスに専用 GPU を割り当てるか、複数の Pod が単一の物理 GPU を共有できるように GPU 共有を有効化できます。
前提条件
開始する前に、以下の条件を満たしていることを確認してください。
お使いの ACK クラスターに Knative がデプロイ済みです。詳細については、「Knative のデプロイ」をご参照ください。
専用 GPU の設定
Knative サービスのマニフェストに、以下の 2 つのフィールドを追加します。
k8s.aliyun.com/eci-use-specsアノテーション(spec.template.metadata.annotations内)— GPU 高速化 ECS インスタンスタイプを指定します。nvidia.com/gpuリソース制限(spec.containers.resources.limits内)— コンテナが要求する GPU 数を指定します。このフィールドは必須です。省略すると、Pod の起動に失敗します。
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: helloworld-go
spec:
template:
metadata:
labels:
app: helloworld-go
annotations:
k8s.aliyun.com/eci-use-specs: ecs.gn5i-c4g1.xlarge # GPU 高速化 ECS インスタンスタイプ
spec:
containers:
- image: registry.cn-hangzhou.aliyuncs.com/knative-sample/helloworld-go:73fbdd56
ports:
- containerPort: 8080
resources:
limits:
nvidia.com/gpu: '1' # 必須フィールド — GPU 数(個)を指定します。省略すると、Pod の起動に失敗します。対応する GPU インスタンスファミリー
| インスタンスファミリー | GPU チップ | インスタンスタイプの例 |
|---|---|---|
| gn7i | NVIDIA A10 | ecs.gn7i-c8g1.2xlarge |
| gn7 | — | ecs.gn7-c12g1.3xlarge |
| gn6v | NVIDIA V100 | ecs.gn6v-c8g1.2xlarge |
| gn6e | NVIDIA V100 | ecs.gn6e-c12g1.3xlarge |
| gn6i | NVIDIA T4 | ecs.gn6i-c4g1.xlarge |
| gn5i | NVIDIA P4 | ecs.gn5i-c2g1.large |
| gn5 | NVIDIA P100 | ecs.gn5-c4g1.xlarge |
gn5 インスタンスファミリーにはローカルディスクが含まれます。ローカルディスクをエラスティックコンテナインスタンスにマウントするには、「ローカルディスクがアタッチされたエラスティックコンテナインスタンスの作成」をご参照ください。
ご利用のリージョンで利用可能な GPU 高速化 ECS インスタンスタイプの完全な一覧については、「リージョン別 ECS インスタンスタイプ」をご参照ください。インスタンスファミリーの概要については、「インスタンスファミリーの概要」をご参照ください。
GPU 高速化エラスティックコンテナインスタンスでは、NVIDIA GPU ドライバー バージョン 460.73.01 および CUDA Toolkit バージョン 11.2 をサポートしています。
GPU 共有の有効化
GPU 共有により、複数の Pod が単一の物理 GPU のメモリ領域を分割して共有できます。軽量な推論サービスや開発環境などのワークロードに適しています。
ノードでGPU共有を有効化します。詳細については、「GPU共有の有効化」をご参照ください。
Knative サービスのマニフェストにおいて、
aliyun.com/gpu-memをspec.containers.resources.limits下に設定し、各コンテナに割り当てる GPU メモリサイズ(GB 単位)を指定します。apiVersion: serving.knative.dev/v1 kind: Service metadata: name: helloworld-go namespace: default spec: template: metadata: annotations: autoscaling.knative.dev/maxScale: "100" # 最大 Pod レプリカ数 autoscaling.knative.dev/minScale: "0" # アイドル時にゼロスケール spec: containerConcurrency: 1 # 各 Pod レプリカあたりの最大同時リクエスト数 containers: - image: registry-vpc.cn-hangzhou.aliyuncs.com/hz-suoxing-test/test:helloworld-go name: user-container ports: - containerPort: 6666 name: http1 protocol: TCP resources: limits: aliyun.com/gpu-mem: "3" # このコンテナに割り当てる GPU メモリ(GB)
次のステップ
Knative における AI 推論サービスのデプロイに関するベストプラクティス — AI モデルを推論サービスとしてデプロイし、オートスケーリングを設定し、GPU リソース割り当てを管理する方法について説明します。
GPU よくある質問 — GPU 関連の一般的な課題に対する解決策について説明します。