BLOG
NVIDIA GPU를 탑재한 Amazon EC2 P3 및 P2 인스턴스는 기계 학습 (ML), 고성능 컴퓨팅 (HPC), 재무 분석, 비디오 트랜스 코딩 등 현재 가장 컴퓨팅 성능이 뛰어난 워크로드를 제공합니다. 현재 Kubernetes용 Amazon Elastic Container Service(Amazon EKS)는 P3 및 P2 인스턴스를 지원하므로 GPU 기반 컨테이너화 응용 프로그램을 쉽게 배포하고 관리 및 확장 할 수 있습니다
오늘은 GPU 기반의 작업자 노드를 시작하고 기존 Amazon EKS 클러스터에 연결하는 방법을 설명하고자 합니다. 그 이후 컨테이너가 GPU의 성능을 어떻게 활용할 수 있는지를 보여주는 응용 프로그램을 소개하고자 합니다.
전제조건
Amazon EKS 안내서에 따라 기존 Amazon EKS 클러스터, kubectl 및 aws-iam-인증부호가 설정되어 있어야 합니다.
GPU 워크로드를 활성화하기 위해서는 두 단계가 필요합니다. 먼저, Amazon EC2 P3 또는 P2 GPU 컴퓨팅 인스턴스를 Kubernetes 클러스터의 작업자 노드로 조인합니다. 다음 노드의 GPU에 컨테이너 수준의 액세스를 사용하도록 창을 구성합니다.
Amazon EC2 GPU 인스턴스 스핀업 및 기존 Amazon EKS 클러스터에 가입하기
작업자 노드를 시작하려면 새 Amazon EKS—최적화된 AMI(GPU workloads용)의 AMI ID를 지정하고 Amazon EKS 작업자 노드에 대한 표준 AWS CloudFormation 템플릿을 사용합니다. 이 AMI는 AWS Marketplace에서 사용할 수 있습니다.
AMI를 구독하고 AWS CloudFormation 템플릿을 사용하여 시작합니다. 이 템플릿은 아래의 그림과 같이 네트워킹, kubelets 설정 및 작업자 노드를 자동 스케일링 그룹에 배치합니다.
이 템플릿은 최대 2 개의 p3.8xlarge Amazon EC2 GPU 인스턴스를 사용하여 오토 스케일링 그룹을 만듭니다. 최대 8 개의 NVIDIA Tesla V100 GPU로 구동되는 인스턴스는 인스턴스 당 최대 1 petaflop의 정밀도 성능을 제공하여 ML 및 HPC 애플리케이션을 크게 가속화합니다. Amazon EC2 P3 인스턴스는 ML 트레이닝 시간을 며칠에서 몇 시간으로 단축하고 HPC 결과 시간 단축을 입증했습니다.
AWS CloudFormation 템플릿이 완료되면 다음 그림과 같이 출력뷰에 NodeInstanceRole 매개 변수가 포함됩니다.
NodeInstanceRole은 AWS EKS 설명서에 설명된 대로 AWS Authenticator ConfigMap에 전달되어야 합니다. 이를 위해서는, ConfigMap 템플릿을 편집하고 터미널에서 kubectl apply -f aws-auth-cm.yaml 명령을 실행하여 ConfigMap을 적용하십시오. 그럼 다음 이미지와 같이 kubectl get nodes —watch를 실행하여 두 Amazon EC2 GPU 인스턴스가 클러스터에 조인하는 것을 확인 할 수 있습니다.
GPU 리소스 접근을 위한 Kubernetes pods 구성하기
먼저 다음 명령을 사용하여 NVIDIA Kubernetes 장치플로그인을 클러스터에 설정된 데몬으로 적용하십시오.
kubectl create -f https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/v1.10/nvidia-device-plugin.yml
이 명령문은 다음과 같은 출력을 보여줍니다.
데몬 세트가 GPU 기반 작업자 노드에서 실행되면 다음 명령을 사용하여 각 노드에 할당 가능한 GPU가 있는지 확인합니다.
kubectl get nodes \
“-o=custom-columns=NAME:.metadata.name,GPU:.status.allocatable.nvidia\.com/gpu”
다음 출력은 각 노드에 4 개의 GPU가 사용 가능하다는 것을 보여줍니다.
다음으로 GPU를 이용하기 위해서는 다음과 같이 Kubernetes 포드 매니페스트를 수정합니다. 일반적으로 포드 매니페스트에 리소스 구성 (resources : limits :)을 추가하면 컨테이너가 하나의 GPU에 액세스 할 수 있게 됩니다. 포드는 실행중인 노드에서 사용 가능한 모든 GPU를 액세스 할 수 있습니다.
apiVersion: v1
kind: Pod
metadata:
name: pod-name
spec:
containers:
– name: container-name
…
resources:
limits:
nvidia.com/gpu: 4
보다 구체적인 예로서 다음의 샘플 매니페스트에는 nvidia-smi 바이너리 결과가 표시됩니다. 이 바이너리는 컨테이너에 표시되는 모든 GPU에 대한 진단 정보가 표시됩니다.
apiVersion: v1
kind: Pod
metadata:
name: nvidia-smi
spec:
restartPolicy: OnFailure
containers:
– name: nvidia-smi
image: nvidia/cuda:latest
args:
– “nvidia-smi”
resources:
limits:
nvidia.com/gpu: 4
이 매니페스트를 nvidia-smi-pod.yaml 로 다운로드하고 kubectl apply -f nvidia-smi-pod.yaml을 사용하여 실행하십시오.
nvidia-smi가 성공적으로 실행되었는지 확인하려면 다음 명령을 사용하여 로그를 검사하십시오.
kubectl logs nvidia-smi
위의 명령을 실행하면 다음과 같은 결과가 출력됩니다.
제한 사항
- GPU를 오버 프로비저닝 할 수 없습니다. 컨테이너와 포드는 GPU를 공유 할 수 없습니다.
- 포드에 스케줄링 할 수 GPU의 최대 수는 포드의 노드에서 사용 가능한 GPU의 수에 따라 제한됩니다.
- 계정에 따라 동시에 실행할 수 있는 Amazon EC2 GPU 컴퓨팅 인스턴스 수와 유형에 대한 Amazon EC2 서비스제한이 있을 수 있습니다.
Kubernetes에서 GPU 지원에 대한 자세한 내용은 Kubernetes 설명서를 참조하십시오. Amazon EKS 사용에 대한 자세한 내용은 Amazon EKS 문서를 참조하십시오. Amazon EKS 설정 및 실행에 대한 지침은 GitHub의 Kubernetes용 AWS Workshop에 있습니다.
원문 URL: https://aws.amazon.com/ko/blogs/compute/running-gpu-accelerated-kubernetes-workloads-on-p3-and-p2-ec2-instances-with-amazon-eks/
** 메가존클라우드 TechBlog는 AWS BLOG 영문 게재글중에서 한국 사용자들에게 유용한 정보 및 콘텐츠를 우선적으로 번역하여 내부 엔지니어 검수를 받아서, 정기적으로 게재하고 있습니다. 추가로 번역및 게재를 희망하는 글에 대해서 관리자에게 메일 또는 SNS페이지에 댓글을 남겨주시면, 우선적으로 번역해서 전달해드리도록 하겠습니다.