So erstellen Sie einen GPU-basierten Auftrag auf Amazon-EKS-Ressourcen - 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.

So erstellen Sie einen GPU-basierten Auftrag auf Amazon-EKS-Ressourcen

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

So erstellen Sie einen GPU-basierten Kubernetes Cluster auf Amazon EKS

Bevor Sie einen GPU-basierten Kubernetes Cluster auf Amazon EKS erstellen, müssen Sie die Schritte unter ausgeführt habenErste Schritte mit AWS Batch in Amazon EKS. Berücksichtigen Sie außerdem Folgendes:

  • AWS Batch unterstützt Instance-Typen mit NVIDIA GPUs .

  • Standardmäßig AWS Batch wählt das beschleunigte Amazon-EKS-AMI mit der -KubernetesVersion aus, die Ihrer Version der Amazon-EKS-Cluster-Steuerebene 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 Batch verwaltet das NVIDIA GPU-Geräte-Plugin nicht in Ihrem Namen. Sie müssen dieses Plugin in Ihrem Amazon-EKS-Cluster installieren und ihm erlauben, die AWS Batch Knoten anzuvisieren. Weitere Informationen finden Sie unter Aktivieren der GPU-Unterstützung in Kubernetes auf GitHub.

Führen Sie die folgenden Befehle aus AWS Batch , um das NVIDIA Geräte-Plugin (DaemonSet) für die Knoten zu konfigurieren.

# 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

Wir empfehlen nicht, dass Sie rechenbasierte Workloads (CPU und Arbeitsspeicher) mit GPU-basierten Workloads in denselben Paaren von Datenverarbeitungsumgebung und Auftragswarteschlange kombinieren. Dies liegt daran, dass Datenverarbeitungsaufträge GPU-Kapazität verbrauchen können.

Führen Sie die folgenden Befehle aus, um Auftragswarteschlangen anzufügen.

$ 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

So erstellen Sie eine Amazon-EKS-GPU-Auftragsdefinition

Derzeit nvidia.com/gpu wird nur unterstützt und der von Ihnen festgelegte Ressourcenwert muss eine ganze Zahl sein. Sie können keine GPU-Teile verwenden. Weitere Informationen finden Sie unter Planen von GPUs in der Kubernetes -Dokumentation.

Führen Sie die folgenden Befehle aus, um eine GPU-Auftragsdefinition 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-Auftrag in Ihrem Amazon-EKS-Cluster aus

Die GPU-Ressource ist nicht komprimierbar. AWS Batch erstellt eine Pod-Spezifikation für GPU-Aufträge, bei denen der Wert der Anforderung dem Wert von Grenzwerten entspricht. Dies ist eine Kubernetes 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" }