Amazon EKSリソースで GPUベースのジョブを作成するには - AWS Batch

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Amazon EKSリソースで GPUベースのジョブを作成するには

このセクションでは、 で Amazon EKSGPUワークロードを実行する方法について説明します AWS Batch。

Amazon で GPUベースのKubernetesクラスターを作成するには EKS

Amazon で GPUベースのKubernetesクラスターを作成する前にEKS、「」の手順を完了しておく必要がありますAmazon EKS AWS Batch での の開始方法。また、次の操作を行います。

  • AWS Batch は、 NVIDIA でインスタンスタイプをサポートしますGPUs。

  • デフォルトでは、 は Amazon EKS EKSクラスターコントロールプレーンKubernetesのバージョンと一致するバージョンAMIで高速化された Amazon AWS Batch を選択します。

$ cat <<EOF > ./batch-eks-gpu-ce.json { "computeEnvironmentName": "My-Eks-GPU-CE1", "type": "MANAGED", "state": "ENABLED", "eksConfiguration": { "eksClusterArn": "arn:aws:eks:<region>:<account>:cluster/<cluster-name>", "kubernetesNamespace": "my-aws-batch-namespace" }, "computeResources": { "type": "EC2", "allocationStrategy": "BEST_FIT_PROGRESSIVE", "minvCpus": 0, "maxvCpus": 1024, "instanceTypes": [ "p3dn.24xlarge", "p4d.24xlarge" ], "subnets": [ "<eks-cluster-subnets-with-access-to-internet-for-image-pull>" ], "securityGroupIds": [ "<eks-cluster-sg>" ], "instanceRole": "<eks-instance-profile>" } } EOF $ aws batch create-compute-environment --cli-input-json file://./batch-eks-gpu-ce.json

AWS Batch はユーザーに代わってNVIDIAGPUデバイスプラグインを管理しません。このプラグインを Amazon EKSクラスターにインストールし、 AWS Batch ノードをターゲットにできるようにする必要があります。詳細については、「」の「 でGPUのサポートの有効化Kubernetes」を参照してください GitHub。

AWS Batch ノードをターゲットにするようにNVIDIAデバイスプラグイン (DaemonSet) を設定するには、次のコマンドを実行します。

# pull nvidia daemonset spec $ curl -O https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/v0.12.2/nvidia-device-plugin.yml # using your favorite editor, add Batch node toleration # this will allow the DaemonSet to run on Batch nodes - key: "batch.amazonaws.com/batch-node" operator: "Exists" $ kubectl apply -f nvidia-device-plugin.yml

コンピューティングベースの (CPU およびメモリ) ワークロードと GPUベースのワークロードを、コンピューティング環境とジョブキューの同じペアで混在させることはお勧めしません。これは、コンピューティングジョブがGPU容量を使い果たす可能性があるためです。

ジョブキューをアタッチするには、以下のコマンドを実行します。

$ cat <<EOF > ./batch-eks-gpu-jq.json { "jobQueueName": "My-Eks-GPU-JQ1", "priority": 10, "computeEnvironmentOrder": [ { "order": 1, "computeEnvironment": "My-Eks-GPU-CE1" } ] } EOF $ aws batch create-job-queue --cli-input-json file://./batch-eks-gpu-jq.json

Amazon EKSGPUジョブ定義を作成するには

現時点では nvidia.com/gpu のみサポートされており、設定するリソース値は整数でなければなりません。の分数は使用できませんGPU。詳細については、 Kubernetesドキュメント「スケジュールGPUs」を参照してください。

Amazon のGPUジョブ定義を登録するにはEKS、次のコマンドを実行します。

$ cat <<EOF > ./batch-eks-gpu-jd.json { "jobDefinitionName": "MyGPUJobOnEks_Smi", "type": "container", "eksProperties": { "podProperties": { "hostNetwork": true, "containers": [ { "image": "nvcr.io/nvidia/cuda:10.2-runtime-centos7", "command": ["nvidia-smi"], "resources": { "limits": { "cpu": "1", "memory": "1024Mi", "nvidia.com/gpu": "1" } } } ] } } } EOF $ aws batch register-job-definition --cli-input-json file://./batch-eks-gpu-jd.json

Amazon EKSクラスターでGPUジョブを実行するには

GPU リソースは非圧縮です。 リクエストの値が制限 の値と等しいGPUジョブのポッド仕様 AWS Batch を作成します。Kubernetes は必須です。

GPU ジョブを送信するには、次のコマンドを実行します。

$ aws batch submit-job --job-queue My-Eks-GPU-JQ1 --job-definition MyGPUJobOnEks_Smi --job-name My-Eks-GPU-Job # locate information that can help debug or find logs (if using Amazon CloudWatch Logs with Fluent Bit) $ aws batch describe-jobs --job <job-id> | jq '.jobs[].eksProperties.podProperties | {podName, nodeName}' { "podName": "aws-batch.f3d697c4-3bb5-3955-aa6c-977fcf1cb0ca", "nodeName": "ip-192-168-59-101.ec2.internal" }