컨테이너에서 그래픽 처리 장치 (GPU) 리소스를 사용 설정하고 관리할 수 있습니다. 예를 들어 GPU 환경에서 인공지능 (AI) 및 머신러닝 (ML) 노트북을 실행하는 것이 좋습니다. GPU 컨테이너 워크로드를 실행하려면 GPU 기기를 지원하는 Kubernetes 클러스터가 있어야 합니다. GPU 머신이 프로비저닝된 Kubernetes 클러스터의 경우 GPU 지원이 기본적으로 사용 설정됩니다.
이 문서는 조직의 애플리케이션 워크로드를 만드는 애플리케이션 운영자 그룹 내의 애플리케이션 개발자를 대상으로 합니다. 자세한 내용은 GDC 에어 갭 문서의 대상 독자를 참고하세요.
시작하기 전에
이 문서의 작업을 완료하려면 필요한 권한을 요청하고 환경을 준비해야 합니다.
IAM 역할 요청
컨테이너에 GPU를 배포하는 데 필요한 권한을 얻으려면 특정 역할이 있어야 합니다. 필요한 역할은 조직 범위 공유 클러스터 또는 프로젝트 범위 표준 클러스터 내에서 작업하는지에 따라 다릅니다. 자세한 내용은 Kubernetes 클러스터 구성을 참고하세요.
공유 클러스터 역할
공유 클러스터에서 GPU 지원 노드 풀을 확인하고 GPU 워크로드를 배포하려면 수행할 작업에 따라 다음 역할을 요청하세요.
- 사용자 클러스터 관리자 (
user-cluster-admin): 관리 API 서버에서 호스팅되는 공유 클러스터의 리소스를 만들거나, 삭제하거나, 수정하거나, 볼 수 있습니다. 이 역할을 사용하면 공유 클러스터에서 GPU를 확인할 수 있으며 프로젝트 네임스페이스에 바인딩되지 않습니다. - 네임스페이스 관리자 (
namespace-admin): 프로젝트에서 호스팅되는 공유 클러스터의 리소스를 만들거나, 삭제하거나, 수정하거나, 볼 수 있습니다. 이 역할을 사용하면 표준 클러스터에 GPU 워크로드를 배포할 수 있으며 프로젝트 네임스페이스에 바인딩됩니다.
표준 클러스터 역할
GPU 지원 노드 풀을 확인하고 표준 클러스터에 GPU 워크로드를 배포하려면 프로젝트 IAM 관리자에게 다음 역할을 부여해 달라고 요청하세요.
- 표준 클러스터 관리자 (
standard-cluster-admin): 관리 API 서버에서 호스팅되는 표준 클러스터의 리소스를 만들거나, 삭제하거나, 수정하거나, 볼 수 있습니다. 이 역할을 사용하면 공유 클러스터에서 GPU를 확인할 수 있으며 프로젝트 네임스페이스에 바인딩됩니다. - 클러스터 개발자 (
cluster-developer): 표준 클러스터를 만들거나, 삭제하거나, 수정하거나, 볼 수 있습니다. 이 역할을 사용하면 표준 클러스터 내에서 호스팅되는 데이터 영역 API에 대한 액세스 권한을 제공하여 표준 클러스터에 GPU 워크로드를 배포할 수 있습니다. 이 역할은 프로젝트 네임스페이스에 바인딩됩니다.
개발 환경 준비
GPU 리소스를 사용하도록 컨테이너를 구성하려면 다음 리소스가 있어야 합니다.
GPU 머신 클래스가 있는 Kubernetes 클러스터. 자세한 내용은 지원되는 GPU 카드 섹션을 참고하세요.
Kubernetes 클러스터 이름을 찾거나 플랫폼 관리자 그룹의 구성원에게 클러스터 이름을 문의합니다.
로그인하고 생성합니다 Kubernetes 클러스터의 kubeconfig 파일.
Kubernetes 클러스터의 kubeconfig 경로를 사용하여 이 안내의
KUBERNETES_CLUSTER_KUBECONFIG를 바꿉니다.로그인하고 생성 하여 Kubernetes 클러스터를 호스팅하는 영역 관리 API 서버의 kubeconfig 파일을 가져옵니다. 이 경로를 사용하여 이 안내의
MANAGEMENT_API_SERVER를 바꿉니다.로그인하고 생성합니다. GPU를 호스팅할 영역의 조직 인프라 클러스터에 대한 kubeconfig 파일을
GPU 리소스를 사용하도록 컨테이너 구성
컨테이너에서 이러한 GPU를 사용하려면 다음 단계를 완료하세요.
Kubernetes 클러스터에 GPU를 지원하는 노드 풀이 있는지 확인합니다.
kubectl describe clusters.cluster.gdc.goog/KUBERNETES_CLUSTER_NAME \ -n KUBERNETES_CLUSTER_NAMESPACE \ --kubeconfig MANAGEMENT_API_SERVER다음을 바꿉니다.
KUBERNETES_CLUSTER_NAME: 클러스터의 이름입니다.KUBERNETES_CLUSTER_NAMESPACE: 클러스터의 네임스페이스입니다. 공유 클러스터의 경우platform네임스페이스를 사용합니다. 표준 클러스터의 경우 클러스터의 프로젝트 네임스페이스를 사용합니다.MANAGEMENT_API_SERVER: Kubernetes 클러스터가 호스팅되는 영역 API 서버의 kubeconfig 경로입니다. 타겟 영역의 API 서버에 대한 kubeconfig 파일을 아직 생성하지 않은 경우 로그인하기를 참고하세요.
관련 출력은 다음 스니펫과 유사합니다.
# Several lines of code are omitted here. spec: nodePools: - machineTypeName: a2-ultragpu-1g-gdc nodeCount: 2 # Several lines of code are omitted here.지원되는 GPU 머신 유형 및 다중 인스턴스 GPU (MIG) 프로필의 전체 목록은 클러스터 노드 머신 유형을 참고하세요.
컨테이너 사양에
.containers.resources.requests및.containers.resources.limits필드를 추가합니다. 각 리소스 이름은 머신 클래스에 따라 다릅니다. GPU 리소스 할당을 확인하여 GPU 리소스 이름을 찾습니다.예를 들어 다음 컨테이너 사양은
a2-ultragpu-1g-gdc노드에서 GPU의 파티션 3개를 요청합니다.# Several lines of code are omitted here. containers: - name: my-container image: "my-image" resources: requests: nvidia.com/mig-1g.10gb-NVIDIA_A100_80GB_PCIE: 3 limits: nvidia.com/mig-1g.10gb-NVIDIA_A100_80GB_PCIE: 3 # Several lines of code are omitted here.컨테이너에는 GPU에 액세스하기 위한 추가 권한도 필요합니다. GPU를 요청하는 각 컨테이너에 대해 컨테이너 사양에 다음 권한을 추가합니다.
# Several lines of code are omitted here. securityContext: seLinuxOptions: type: unconfined_t # Several lines of code are omitted here.컨테이너 매니페스트 파일을 적용합니다.
kubectl apply -f CONTAINER_MANIFEST_FILE \ -n KUBERNETES_CLUSTER_NAMESPACE \ --kubeconfig KUBERNETES_CLUSTER_KUBECONFIG다음을 바꿉니다.
CONTAINER_MANIFEST_FILE: 컨테이너 워크로드의 YAML 매니페스트 파일입니다.KUBERNETES_CLUSTER_NAMESPACE: 클러스터의 네임스페이스입니다. 공유 클러스터의 경우platform네임스페이스를 사용합니다. 표준 클러스터의 경우 클러스터의 프로젝트 네임스페이스를 사용합니다.KUBERNETES_CLUSTER_KUBECONFIG: 클러스터의 kubeconfig 경로입니다.
GPU 리소스 할당 확인
GPU 리소스 할당을 확인하려면 다음 명령어를 사용하세요.
kubectl describe nodes NODE_NAME --kubeconfig KUBERNETES_CLUSTER_KUBECONFIG다음을 바꿉니다.
NODE_NAME: 검사할 GPU를 관리하는 노드입니다.KUBERNETES_CLUSTER_KUBECONFIG: 클러스터의 kubeconfig 경로입니다.
관련 출력은 다음 스니펫과 유사합니다.
# Several lines of code are omitted here. Capacity: nvidia.com/mig-1g.10gb-NVIDIA_A100_80GB_PCIE: 7 Allocatable: nvidia.com/mig-1g.10gb-NVIDIA_A100_80GB_PCIE: 7 # Several lines of code are omitted here.
GPU의 리소스 이름을 기록해 둡니다. GPU 리소스를 사용하도록 컨테이너를 구성할 때 이를 지정해야 합니다.