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.
Inhalt
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
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" }