이 페이지 개선에 도움 주기
이 사용자 가이드에 기여하려면 모든 페이지의 오른쪽 창에 있는 GitHub에서 이 페이지 편집 링크를 선택합니다.
Amazon EKS에서 Neuron 디바이스 관리
AWS Trainium 및 AWS Inferentia는 AWS에서 설계한 목적별 기계 학습 칩입니다. Amazon EKS는 EKS 클러스터에서 Neuron 디바이스를 관리하기 위한 두 가지 메커니즘(Neuron DRA 드라이버 및 Neuron Kubernetes 디바이스 플러그인)을 지원합니다.
Kubernetes 버전 1.34 이상을 실행하는 EKS 클러스터의 새 배포에 대해 Neuron DRA 드라이버를 사용하는 것이 좋습니다. Neuron DRA 드라이버는 사용자 지정 스케줄러 확장을 요구하지 않고도 토폴로지 인식 할당, 연결된 디바이스 하위 세트 예약, 논리적 NeuronCore(LNC) 구성 및 UltraServer 다중 노드 할당을 제공합니다. Neuron 디바이스 플러그인은 계속 지원됩니다.
Neuron DRA 드라이버 및 Neuron 디바이스 플러그인 비교
| 기능 | Neuron DRA 드라이버 | Neuron 디바이스 플러그인 |
|---|---|---|
|
최소 Kubernetes 버전 |
1.34 |
모든 EKS 지원 Kubernetes 버전 |
|
Karpenter 및 EKS Auto Mode |
지원되지 않음 |
지원됨 |
|
EKS 최적화 AMI 지원 |
AL2023 |
AL2023, Bottlerocket |
|
디바이스 알림 |
디바이스 ID, 인스턴스 유형, 토폴로지, 드라이버 버전, EFA 지역성을 포함한 |
|
|
연결된 디바이스 하위 세트 |
토폴로지 제약 조건을 사용하여 연결된 Neuron 디바이스의 1개, 4개, 8개 또는 16개의 하위 세트 할당 |
연속 디바이스 할당을 위해 Neuron 스케줄러 확장 |
|
LNC 구성 |
|
EC2 시작 템플릿에서 사전 구성 필요 |
|
속성 기반 선택 |
CEL 표현식을 사용하여 인스턴스 유형, 드라이버 버전 및 기타 속성을 기준으로 디바이스 필터링 |
지원되지 않음 |
Neuron DRA 드라이버 설치
Neuron DRA 드라이버는 Neuron 디바이스를 DeviceClass 이름이 neuron.aws.com인 ResourceSlice 객체로 알립니다. 드라이버는 DaemonSet로 실행되며 Neuron 디바이스와 해당 토폴로지 속성을 자동으로 검색합니다.
Neuron DRA 드라이버에 대한 자세한 내용은 Neuron DRA 설명서
현재 Bottlerocket에서 Neuron DRA 드라이버 사용은 지원되지 않습니다.
사전 조건
-
Kubernetes 버전 1.34 이상을 실행하는 Amazon EKS 클러스터.
-
AWS Trainium 또는 Inferentia2 인스턴스 유형이 있는 노드.
-
명령줄 환경에 설치된 Helm에 대한 자세한 내용은 Helm 설정 지침을 참조하세요.
-
클러스터와 통신하도록 구성된
kubectl. 자세한 내용은 kubectl 설치 또는 업데이트 섹션을 참조하세요.
절차
중요
Neuron 디바이스 플러그인이 실행 중인 노드에 Neuron DRA 드라이버를 설치하지 마세요. 두 메커니즘은 동일한 노드에 공존할 수 없습니다. 업데이트는 업스트림 Kubernetes KEP-5004
-
헬름을 사용하여 드라이버를 설치하세요.
helm upgrade --install neuron-helm-chart oci://public.ecr.aws/neuron/neuron-helm-chart \ --namespace neuron-dra-driver \ --create-namespace \ --set "devicePlugin.enabled=false" \ --set "npd.enabled=false" \ --set "draDriver.enabled=true"드라이버는 기본적으로
DeviceClassneuron.aws.com을 사용하여neuron-dra-driver네임스페이스에 DaemonSet로 배포됩니다. -
DRA 드라이버 DaemonSet가 실행 중인지 확인하세요.
kubectl get ds -n neuron-dra-driver neuron-dra-driver-kubelet-pluginNAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE neuron-dra-driver-kubelet-plugin 1 1 1 1 1 <none> 60s -
DeviceClass가 생성되었는지 확인하세요.kubectl get deviceclass neuron.aws.comNAME AGE neuron.aws.com 60s -
노드에서
ResourceSlice객체가 알려졌는지 확인하세요.kubectl get resourceslice
사용 가능한 ResourceSlice 객체 속성에 대한 자세한 내용은 Neuron DRA 설명서
포드에서 Neuron 디바이스 요청
DRA 드라이버를 사용하여 Neuron 디바이스를 요청하려면 neuron.aws.com DeviceClass를 참조하는 ResourceClaimTemplate를 생성하고 포드 사양에서 이를 참조합니다.
다음 예제에서는 trn2.48xlarge 인스턴스에서 모든 Neuron 디바이스를 요청합니다.
apiVersion: resource.k8s.io/v1 kind: ResourceClaimTemplate metadata: name: all-neurons spec: spec: devices: requests: - name: neurons exactly: deviceClassName: neuron.aws.com selectors: - cel: expression: "device.attributes['neuron.aws.com'].instanceType == 'trn2.48xlarge'" allocationMode: All --- apiVersion: v1 kind: Pod metadata: name: neuron-workload spec: containers: - name: app ... resources: claims: - name: neurons resourceClaims: - name: neurons resourceClaimTemplateName: all-neurons
연결된 디바이스 하위 세트 할당
Neuron DRA 드라이버는 Neuron 스케줄러 확장matchAttribute 제약 조건을 사용하여 디바이스가 연결되어 있는지 확인합니다.
다음 예제에서는 연결된 Neuron 디바이스 4개를 요청합니다.
apiVersion: resource.k8s.io/v1 kind: ResourceClaimTemplate metadata: name: 1x4-connected-neurons spec: spec: devices: requests: - name: neurons exactly: deviceClassName: neuron.aws.com allocationMode: ExactCount count: 4 selectors: - cel: expression: "device.attributes['neuron.aws.com'].instanceType == 'trn2.48xlarge'" constraints: - requests: ["neurons"] matchAttribute: "resource.aws.com/devicegroup4_id"
연결된 하위 세트에 대해 지원되는 matchAttribute 값은 resource.aws.com/devicegroup1_id, resource.aws.com/devicegroup4_id, resource.aws.com/devicegroup8_id 및 resource.aws.com/devicegroup16_id입니다.
논리적 NeuronCores(LNC) 구성
Neuron DRA 드라이버는 ResourceClaimTemplate 파라미터를 통해 워크로드별 논리적 NeuronCore 구성을 허용합니다. 따라서 EC2 시작 템플릿에서 LNC를 사전 구성하지 않아도 됩니다.
다음 예제에서는 LNC가 1로 설정된 모든 Neuron 디바이스를 요청합니다.
apiVersion: resource.k8s.io/v1 kind: ResourceClaimTemplate metadata: name: all-neurons-lnc-1 spec: spec: devices: requests: - name: neurons exactly: deviceClassName: neuron.aws.com selectors: - cel: expression: "device.attributes['neuron.aws.com'].instanceType == 'trn2.48xlarge'" allocationMode: All config: - requests: ["neurons"] opaque: driver: neuron.aws.com parameters: apiVersion: neuron.aws.com/v1 kind: NeuronConfig logicalNeuronCore: 1
Neuron Kubernetes 디바이스 플러그인 설치
Neuron Kubernetes 디바이스 플러그인은 Neuron 디바이스를 aws.amazon.com/neuron으로, NeuronCores를 aws.amazon.com/neuroncore 확장 리소스로 알립니다. 컨테이너 리소스 요청 및 제한에서 Neuron 디바이스를 요청합니다.
사전 조건
-
Amazon EKS 클러스터.
-
AWS Trainium 또는 AWS Inferentia 인스턴스에 대해 호스트 수준 구성 요소가 설치된 노드. EKS AL2023 가속 AMI 또는 EKS Bottlerocket AMI를 사용하는 경우에 포함됩니다.
-
명령줄 환경에 설치된 Helm에 대한 자세한 내용은 Helm 설정 지침을 참조하세요.
-
클러스터와 통신하도록 구성된
kubectl. 자세한 내용은 kubectl 설치 또는 업데이트 섹션을 참조하세요.
절차
-
헬름을 사용하여 Neuron Kubernetes 디바이스 플러그인을 설치하세요.
helm upgrade --install neuron-helm-chart oci://public.ecr.aws/neuron/neuron-helm-chart \ --set "npd.enabled=false" -
Neuron 디바이스 플러그인 DaemonSet가 실행 중인지 확인하세요.
kubectl get ds -n kube-system neuron-device-pluginNAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE neuron-device-plugin 1 1 1 1 1 <none> 60s -
노드에 할당 가능한 Neuron 디바이스가 있는지 확인하세요.
kubectl get nodes "-o=custom-columns=NAME:.metadata.name,NeuronDevice:.status.allocatable.aws\.amazon\.com/neuron,NeuronCore:.status.allocatable.aws\.amazon\.com/neuroncore"NAME NeuronDevice NeuronCore ip-192-168-47-173.us-west-2.compute.internal 1 2
테스트 포드를 사용하여 Neuron 디바이스 확인
테스트 포드에서 neuron-ls 도구를 실행하여 Neuron 디바이스에 액세스할 수 있는지 확인할 수 있습니다.
-
다음 콘텐츠를 가진
neuron-ls.yaml이라는 파일을 생성합니다: 이 매니페스트는neuron-ls도구가 설치된 Neuron Monitor컨테이너를 시작합니다. apiVersion: v1 kind: Pod metadata: name: neuron-ls spec: restartPolicy: Never containers: - name: neuron-container image: public.ecr.aws/g4h4h0b5/neuron-monitor:1.0.0 command: ["/bin/sh"] args: ["-c", "neuron-ls"] resources: limits: aws.amazon.com/neuron: 1 tolerations: - key: "aws.amazon.com/neuron" operator: "Exists" effect: "NoSchedule" -
매니페스트를 적용합니다.
kubectl apply -f neuron-ls.yaml -
포드 실행을 마친 후 로그를 확인하세요.
kubectl logs neuron-ls예제 출력은 다음과 같습니다.
instance-type: inf2.xlarge instance-id: ... +--------+--------+--------+---------+ | NEURON | NEURON | NEURON | PCI | | DEVICE | CORES | MEMORY | BDF | +--------+--------+--------+---------+ | 0 | 2 | 32 GB | 00:1f.0 | +--------+--------+--------+---------+
참고
Neuron 디바이스 플러그인을 사용하는 경우 여러 Neuron 디바이스(예: trn2.48xlarge)가 있는 인스턴스에서 연속 디바이스를 할당하려면 Neuron Kubernetes 스케줄러 확장
자세한 내용은 EKS 실행에 대한 Neuron 설명서