Amazon EKS 리소스에서 GPU 기반 작업을 생성하려면 - AWS Batch

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

Amazon EKS 리소스에서 GPU 기반 작업을 생성하려면

이 섹션에서는 AWS Batch에서 Amazon EKS GPU 워크로드를 실행하는 방법을 다룹니다.

Amazon EKS에서 GPU 기반 Kubernetes 클러스터를 만들려면

Amazon EKS에서 GPU 기반 Kubernetes 클러스터를 생성하려면 먼저 아마존 AWS Batch EKS에서 시작하기의 단계를 완료해야 합니다. 추가적으로 다음 사항도 고려하세요.

  • AWS Batch NVIDIA GPU를 사용하는 인스턴스 유형을 지원합니다.

  • 기본적으로 Amazon EKS 클러스터 컨트롤 플레인 Kubernetes 버전과 일치하는 버전의 Amazon EKS 가속 AMI를 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 사용자를 대신하여 NVIDIA GPU 디바이스 플러그인을 관리하지 않습니다. Amazon EKS 클러스터에 이 플러그인을 설치하고 AWS Batch 노드를 대상으로 하도록 허용해야 합니다. 자세한 내용은 Kubernetes GitHubon에서 GPU 지원 활성화를 참조하십시오.

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 EKS GPU 작업 정의를 생성하려면

현재는 nvidia.com/gpu만 지원되며, 설정하는 리소스 값은 정수여야 합니다. GPU의 일부만 사용할 수는 없습니다. 자세한 내용은 Kubernetes 설명서GPU 예약을 참조하세요.

Amazon EKS용 GPU 작업 정의를 등록하려면 다음 명령을 실행합니다.

$ 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 리소스는 압축할 수 없습니다. AWS Batch 요청 값이 제한 값과 동일한 GPU 작업에 대한 포드 사양을 생성합니다. 이는 Kubernetes 요구 사항입니다.

작업을 다시 시작하려면 다음 명령을 실행합니다.

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