Amazon EKS에서 GPU 노드 사용 방법에 대한 안내서
Amazon EK에서 GPU 워크로드를 실행하려면 GPU 지원 노드 구성, 필요한 드라이버 설치 및 올바른 스케줄링을 보장해야합니다. 다음 단계를 따라 EKS 클러스터에서 GPU 노드를 설정하십시오.
1. Amazon EKS 클러스터를 만듭니다
먼저 작업자 노드를 사용하지 않고 EKS 클러스터를 만듭니다 eksctl
(간단히하기 위해, 우리는 Terraform/opentofu를 사용하지 않습니다) :
eksctl create cluster --name kvendingoldo–eks-gpu-demo --without-nodegroup
2. 기본 CPU 노드 그룹을 만듭니다
별도의 CPU 노드 그룹이이를 보장합니다
-
Kubernetes 시스템 구성 요소 (
kube-system
포드) 달리기 장소가 있습니다. -
GPU 연산자 및 그 종속성은 성공적으로 배포됩니다.
-
비 GPU 워크로드는 GPU 노드에서 끝나지 않습니다.
하나 이상을 만듭니다 CPU 노드 클러스터 안정성을 유지하려면 :
eksctl create nodegroup --cluster kvendingoldo–eks-gpu-demo \
--name cpu-nodes \
--node-type t3.medium \
--nodes 1 \
--nodes-min 1 \
--nodes-max 3 \
--managed
3. GPU 노드 그룹을 만듭니다
GPU 노드에는 GPU가 아닌 워크로드가 실행되는 것을 방지하기 위해 적절한 오염이 있어야합니다. NVIDIA 호환 인스턴스 유형을 사용합니다 (Instances.vantage.sh에서 모든 옵션을 확인할 수 있지만 일반적으로 g4dn.xlarge
또는 p3.2xlarge
) 그러한 노드의 경우 :
eksctl create nodegroup --cluster kvendingoldo–eks-gpu-demo \
--name gpu-nodes \
--node-type g4dn.xlarge \
--nodes 1 \
--node-taints only-gpu-workloads=true:NoSchedule \
--managed
맞춤형 오염 only-gpu-workloads=true:NoSchedule
동일한 허용 구성이있는 포드만이 노드에서 예약되도록 보장합니다.
4. NVIDIA GPU 연산자를 설치하십시오
NVIDIA GPU 운영자는 드라이버, CUDA, 툴킷 및 모니터링 도구를 설치합니다. 설치하려면 다음 단계를 사용하십시오.
gpu-operator-values.yaml 만들기 :
tolerations:
- key: "only-gpu-workloads"
value: "true"
effect: "NoSchedule"
Helm을 통해 GPU-OPERATOR를 배포하십시오.
helm repo add nvidia
helm repo update
helm install gpu-operator nvidia/gpu-operator -f gpu-operator-values.yaml
두 가지에주의를 기울이십시오.
K8S-Device-Plugin의 YAML 배포 생산에 사용해서는 안됩니다.- 사용하여
gpu-operator-values.yaml
값, 우리는 GPU-OPERATOR DAEMONSET에 대한 내성을 설정합니다. 그 없이는 노드가 작동하지 않으며 GPU 워크로드를 예약 할 수 없습니다.
5. GPU 가용성을 확인하십시오
GPU 연산자를 배포 한 후 다음 명령으로 GPU에서 NVIDIA 장치가 올바르게 감지되는지 확인하십시오.
kubectl get nodes -o json | jq '.items[].status.allocatable' | grep nvidia
AWS SSM을 사용하여 노드에서 GPU 상태를 확인하십시오 (문제의 경우)
GPU 노드를 수동으로 디버깅 해야하는 경우 AWS SSM (Systems Manager Session Manager) SSH 대신.
1 단계 : SSM IAM 정책을 첨부하십시오
당신을 확인하십시오 전직 노드 가지고있다 AmazonSSMManagedInstanceCore
정책:
aws iam attach-role-policy --role-name \
--policy-arn arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore
2 단계 : SSM 세션을 시작하십시오
찾아보세요 인스턴스 ID GPU 노드의 :
aws ec2 describe-instances --filters "Name=tag:eks:nodegroup-name,Values=gpu-nodes" \
--query "Reservations[].Instances[].InstanceId" --output text
AWS SSM 세션 시작 :
aws ssm start-session --target
노드 내부에서 GPU 상태를 확인하십시오.
lspci | grep -i nvidia
GPU 하드웨어가 감지되었는지 확인하십시오nvidia-smi
NVIDIA 드라이버 및 GPU 상태를 확인합니다
만약에 nvidia-smi가 실패합니다 또는 GPU가 누락되었으므로 다음을 나타낼 수 있습니다.
- GPU 연산자가 설치되지 않았습니다 바르게.
- K8S 노드에는 NVIDIA GPU가 없습니다.
- Nvidia 드라이버는로드하지 못했습니다.
확인하다
6. GPU 포드를 예약하십시오
GPU 스케줄링을 확인하기 위해 테스트 포드를 배포하십시오. 이 포드 :
- GPU를 요청합니다.
- 용도 관용 GPU 노드에서 실행됩니다.
- GPU 액세스를 확인하기 위해 NVIDIA-SMI를 실행합니다.
---
apiVersion: v1
kind: Pod
metadata:
name: kvendingoldo-gpu-test
spec:
tolerations:
- key: "only-gpu-workloads"
value: "true"
effect: "NoSchedule"
nodeSelector:
nvidia.com/gpu: "true"
containers:
- name: cuda-container
image: nvidia/cuda:12.0.8-base
command: ["nvidia-smi"]
resources:
limits:
nvidia.com/gpu: 1
일반적으로 사용자는 실패한 포드와 같은 오류에 직면 할 수 있습니다.
0/2 nodes are available: 1 Insufficient nvidia.com/gpu
그것은 의미합니다 모든 GPU는 이미 할당되었습니다 또는 Kubernetes는 사용 가능한 GPU를 인식하지 못합니다. 여기에서 다음 수정 사항이 도움이 될 수 있습니다.
GPU 할당을 확인하십시오 kubectl describe node
당신이 보지 않는다면 nvidia.com
GPU 노드의 레이블이 있으므로 연산자가 작동하지 않으며 디버깅해야합니다. 일반적으로 오염이나 관용으로 인해 발생합니다. 주의를 기울이십시오 nvidia-device-plugin
포드는 각 GPU 노드에 존재해야합니다.
GPU 연산자를 확인하십시오
연산자 포드의 상태를 확인하십시오.kubectl get pods -n gpu-operator
일부 포드가 보류 중이거나 CrashLoopBackoff에 갇혀 있으면 연산자를 다시 시작하십시오.kubectl delete pod -n gpu-operator — all
Kubectl을 다시 시작하십시오
때때로, 큐렛이 붙어 있습니다. 이러한 경우 노드에 로그인하고 Kubelet을 다시 시작하는 것이 도움이 될 수 있습니다.
** GPU 노드를 확장하십시오
** GPU 노드 수 증가 :eksctl scale nodegroup --cluster=kvendingoldo–eks-gpu-demo --name=gpu-nodes --nodes=3
결론
축하해요! EKS 클러스터는 모두 GPU 워크로드를 해결하도록 설정되었습니다. AI 모델을 실행하거나 비디오 처리 또는 데이터를 크 런칭하든 갈 준비가되었습니다. 행복한 배포!
Post Comment