Pour créer une offre d'emploi GPU basée sur les EKS ressources Amazon - AWS Batch

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Pour créer une offre d'emploi GPU basée sur les EKS ressources Amazon

Cette section explique comment exécuter un EKS GPU workload Amazon sur AWS Batch.

Pour créer un Kubernetes cluster GPU basé sur Amazon EKS

Avant de créer un Kubernetes cluster GPU basé sur AmazonEKS, vous devez avoir effectué les étapes décrites dansCommencer à utiliser AWS Batch Amazon EKS. En outre, tenez également compte des points suivants :

  • AWS Batch prend en charge les types d'instance avec NVIDIAGPUs.

  • Par défaut, AWS Batch sélectionne l'Amazon EKS accéléré AMI avec la Kubernetes version qui correspond à la version de votre plan de contrôle EKS du cluster Amazon.

$ 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 ne gère pas le plug-in de l'NVIDIAGPUappareil en votre nom. Vous devez installer ce plugin dans votre EKS cluster Amazon et l'autoriser à cibler les AWS Batch nœuds. Pour plus d'informations, consultez la section Activation du GPU Support in Kubernetes on GitHub.

Pour configurer le plug-in de NVIDIA périphérique (DaemonSet) afin de cibler les AWS Batch nœuds, exécutez les commandes suivantes.

# 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

Nous vous déconseillons de mélanger des charges de travail basées sur le calcul (CPUet la mémoire) avec des charges de travail GPU basées sur les mêmes combinaisons d'environnement informatique et de file d'attente des tâches. Cela est dû au fait que les tâches de calcul peuvent consommer de GPU la capacité.

Pour joindre des files d'attente de tâches, exécutez les commandes suivantes.

$ 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

Pour créer une définition de EKS GPU tâche Amazon

Seule nvidia.com/gpu est prise en charge pour le moment et la valeur de ressource que vous définissez doit être un nombre entier. Vous ne pouvez pas utiliser de fractions deGPU. Pour plus d'informations, consultez la section Planification GPUs dans la Kubernetesdocumentation.

Pour enregistrer une définition de GPU tâche pour AmazonEKS, exécutez les commandes suivantes.

$ 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

Pour exécuter une GPU tâche dans votre EKS cluster Amazon

La GPU ressource n'est pas compressible. AWS Batch crée une spécification de module pour les GPU tâches où la valeur de la requête est égale à la valeur des limites. Il s'agit d'une Kubernetes exigence.

Pour soumettre une GPU tâche, exécutez les commandes suivantes.

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