8.2. 拡張リソースのリソースクォータの設定
nvidia.com/gpu などの拡張リソースの消費を管理するには、requests プレフィックスを使用してリソースクォータを定義します。これらのリソースでは過剰割り当てが禁止されているため、有効な設定を確保するには、要求と制限の両方を明示的に指定する必要があります。
手順
クラスター内のノードで使用可能な GPU の数を確認するには、次のコマンドを使用します。
$ oc describe node ip-172-31-27-209.us-west-2.compute.internal | egrep 'Capacity|Allocatable|gpu'出力例
openshift.com/gpu-accelerator=true Capacity: nvidia.com/gpu: 2 Allocatable: nvidia.com/gpu: 2 nvidia.com/gpu: 0 0この例では、2 つの GPU が利用可能です。
このコマンドを使用して、namespace
nvidiaにクォータを設定します。この例では、クォータは1です。$ cat gpu-quota.yaml出力例
apiVersion: v1 kind: ResourceQuota metadata: name: gpu-quota namespace: nvidia spec: hard: requests.nvidia.com/gpu: 1次のコマンドでクォータを作成します。
$ oc create -f gpu-quota.yaml出力例
resourcequota/gpu-quota created次のコマンドを使用して、namespace に正しいクォータが設定されていることを確認します。
$ oc describe quota gpu-quota -n nvidia出力例
Name: gpu-quota Namespace: nvidia Resource Used Hard -------- ---- ---- requests.nvidia.com/gpu 0 1次のコマンドを使用して、単一の GPU を要求する Pod を実行します。
$ oc create pod gpu-pod.yaml出力例
apiVersion: v1 kind: Pod metadata: generateName: gpu-pod-s46h7 namespace: nvidia spec: restartPolicy: OnFailure containers: - name: rhel7-gpu-pod image: rhel7 env: - name: NVIDIA_VISIBLE_DEVICES value: all - name: NVIDIA_DRIVER_CAPABILITIES value: "compute,utility" - name: NVIDIA_REQUIRE_CUDA value: "cuda>=5.0" command: ["sleep"] args: ["infinity"] resources: limits: nvidia.com/gpu: 1以下のコマンドを使用して、Pod が実行されていることを確認してください。
$ oc get pods出力例
NAME READY STATUS RESTARTS AGE gpu-pod-s46h7 1/1 Running 0 1m次のコマンドを実行して、クォータ
Usedカウンターが正しいことを確認します。$ oc describe quota gpu-quota -n nvidia出力例
Name: gpu-quota Namespace: nvidia Resource Used Hard -------- ---- ---- requests.nvidia.com/gpu 1 1次のコマンドを使用して、
nvidianamespace に 2 番目の GPU Pod を作成してみます。2 つの GPU があるので、これをノード上で実行することは可能です。$ oc create -f gpu-pod.yaml出力例
Error from server (Forbidden): error when creating "gpu-pod.yaml": pods "gpu-pod-f7z2w" is forbidden: exceeded quota: gpu-quota, requested: requests.nvidia.com/gpu=1, used: requests.nvidia.com/gpu=1, limited: requests.nvidia.com/gpu=1この
Forbiddenエラーメッセージが表示されるのは、GPU のクォータが 1 つに制限されているにもかかわらず、Pod が 2 つ目の GPU を割り当てようとしたためです。これは、許可されているクォータを超えています。