Um einen GPU-basierten Job auf EKS-Ressourcen zu erstellen - AWS Batch

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Um einen GPU-basierten Job auf EKS-Ressourcen zu erstellen

In diesem Abschnitt wird beschrieben, wie Sie einen Amazon EKS-GPU-Workload ausführenAWS Batch.

So erstellen Sie einen GPU-basiertenKubernetes Cluster auf Amazon EKS

Bevor Sie einen GPU-basiertenKubernetes Cluster auf Amazon EKS erstellen, müssen Sie die folgenden Schritte abgeschlossen habenErste Schritte mitAWS Batch auf Amazon EKS. Berücksichtigen Sie außerdem Folgendes:

  • AWS Batchunterstützt Instanztypen mit NVIDIA-GPUs.

  • AWS BatchWählt standardmäßig das beschleunigte Amazon EKS-AMI mit derKubernetes Version aus, die Ihrer Amazon EKS-Cluster-Steuerungsebenenversion entspricht.

$ 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 Batchverwaltet dasNVIDIA GPU-Geräte-Plugin nicht in Ihrem Namen. Sie müssen dieses Plugin in Ihrem Amazon EKS-Cluster installieren und zulassen, dass es auf dieAWS Batch Knoten abzielt. Weitere Informationen finden Sie unter GPU-Unterstützung aktivieren inKubernetes on GitHub.

Führen Sie die folgenden Befehle aus, um dasNVIDIA Geräte-Plugin (DaemonSet) so zu konfigurieren, dass es auf dieAWS Batch Knoten abzielt.

# 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

Es wird nicht empfohlen, rechnergestützte (CPU und Speicher) Workloads mit GPU-basierten Workloads in derselben Kombination aus Rechenumgebung und Auftragswarteschleife zu kombinieren. Dies liegt daran, dass Rechenjobs die GPU-Kapazität beanspruchen können.

Führen Sie die folgenden Befehle aus, um Auftrag-Warteschlangen anzuhängen.

$ 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

Einen Amazon-EKS-GPU-Auftrag-Definition erstellen

Nurnvidia.com/gpu wird derzeit unterstützt und der von Ihnen festgelegte Ressourcenwert muss eine ganze Zahl sein. Sie können keine GPU-Fraktionen verwenden. Weitere Informationen finden Sie in der KubernetesDokumentation unter Schedule GPUs.

Führen Sie die folgenden Befehle aus, um eine GPU-Jobdefinition für Amazon EKS zu registrieren.

$ 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

So führen Sie einen GPU-Job in Ihrem Amazon EKS-Cluster aus

Die GPU-Ressource ist nicht komprimierbar. AWS Batcherstellt eine Pod-Spezifikation für GPU-Jobs, bei denen der Wert der Anfrage dem Wert der Grenzwerte entspricht. Das ist eineKubernetes Voraussetzung.

Führen Sie die folgenden Befehle aus, um einen GPU-Auftrag zu senden.

$ 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" }