Red Hat OpenShift 클러스터에 앱 배포하기
Red Hat® OpenShift® on IBM Cloud® 클러스터를 사용하면 단일 명령으로 GitHub와 같은 원격 파일 또는 저장소에서 앱을 배치할 수 있습니다. 또한 클러스터는 클러스터 운영을 지원하는 데 사용할 수 있는 다양한 기본 제공 서비스와 함께 제공됩니다.
앱을 Red Hat OpenShift로 이동
Red Hat OpenShift on IBM Cloud 클러스터에 앱을 작성하기 위해 Red Hat OpenShift 콘솔 또는 CLI를 사용할 수 있습니다.
앱 배치 시 오류가 표시됩니까? Red Hat OpenShift에는 커뮤니티 Kubernetes와 다른 기본 설정이 있습니다(예: 더 엄격한 보안 컨텍스트 제한조건). Red Hat OpenShift 클러스터에 배치할 수 있도록 앱을 수정해야 하는 공통 시나리오를 검토하십시오.
콘솔을 통해 앱 배치
개발자 퍼스펙티브를 사용하여 Red Hat OpenShift 콘솔에서 다양한 메소드를 통해 앱을 작성할 수 있습니다. 자세한 내용은 Red Hat OpenShift 문서를 참조하세요.
- 콘솔에서 클러스터를 선택합니다.
- Red Hat OpenShift 웹 콘솔을 클릭하십시오.
- 퍼스펙티브 전환기에서 개발자를 선택하십시오. Red Hat OpenShift 웹 콘솔은 개발자 퍼스펙티브로 전환하고 메뉴는 이제 +추가, 토폴로지 및 빌드와 같은 항목을 제공합니다.
- +추가를 클릭하십시오.
- 추가 분할창 메뉴 표시줄의 드롭 다운 목록에서 앱을 작성할 프로젝트를 선택하십시오.
- 앱을 추가하는 데 사용할 메소드를 클릭하고 지시사항을 따르십시오. 예를 들어, Git에서를 클릭하십시오.
CLI를 통해 앱 배치
Red Hat OpenShift on IBM Cloud 클러스터에서 앱을 만들려면 oc new-app 명령을 사용합니다. 예를 들면 공용 GitHub 저장소, URL이 .git으로 끝나는 공용 GitLab 저장소, 또는 다른 로컬 저장소나 원격 저장소를 참조할 수 있습니다. 자세한 내용은 튜토리얼을 사용해 보고
Red Hat OpenShift 문서를 참조하세요.
oc new-app --name <app_name> https://github.com/<path_to_app_repo> [--context-dir=<subdirectory>]
new-app명령어는 어떤 기능을 하나요?new-app명령은 소스 코드의 빌드 구성 및 앱 이미지, 클러스터의 팟(Pod)에 컨테이너를 배치할 배치 구성 및 클러스터 내에 앱을 노출하기 위한 서비스를 작성합니다. 빌드 프로세스 및 Git 이외의 다른 소스에 대한 자세한 내용은 Red Hat OpenShift 문서를 참조하세요.
레이블을 사용하여 특정 작업자 노드에 앱 배치
앱을 배치할 때 앱 팟(Pod)은 클러스터의 여러 작업자 노드에 무작위로 배치됩니다. 일부 경우에는 사용자가 앱 팟(Pod)이 배치되는 작업자 노드를 제한하려고 할 수 있습니다. 예를 들면, 특정 작업자 풀의 작업자 노드는 베어메탈 머신에 있으므로 이러한 작업자 노드에만 앱 팟(Pod)을 배치하려 할 수 있습니다. 앱 팟(Pod)이 배치되어야 하는 작업자 노드를 지정하려면 앱 배치에 친화성 규칙을 추가하십시오.
시작하기 전에
- Red Hat OpenShift 클러스터에 액세스하십시오.
- 선택사항: 앱을 실행할 작업자 풀의 레이블을 설정하십시오.
특정 작업자 노드에 앱을 배치하려면 다음을 수행하십시오.
-
앱 팟(Pod)이 배치될 작업자 풀의 ID를 가져오십시오.
ibmcloud oc worker-pool ls --cluster CLUSTER_NAME_OR_ID -
작업자 풀에 있는 작업자 노드를 나열하고 사설 IP 주소 중 하나를 기록하십시오.
ibmcloud oc worker ls --cluster CLUSTER_NAME_OR_ID --worker-pool WORKER_POOL_NAME_OR_ID -
작업자 노드에 대해 설명하십시오. 레이블 출력에서 작업자 풀 ID 레이블(
ibm-cloud.kubernetes.io/worker-pool-id)을 기록해 두십시오.이 주제의 단계는 작업자 풀 ID를 사용하여 해당 작업자 풀 내의 작업자 노드에만 앱 팟(Pod)을 배치합니다. 다른 레이블을 사용하여 특정 작업자 노드에 앱 팟(Pod)을 배치하려면 대신 이 레이블을 기록해 두십시오. 예를 들어, 특정 사설 VLAN에만 앱 팟(Pod)을 배치하려면
privateVLAN=레이블을 사용하십시오.oc describe node <worker_node_private_IP>출력 예
NAME: 10.xxx.xx.xxx Roles: <none> Labels: arch=amd64 beta.kubernetes.io/arch=amd64 beta.kubernetes.io/instance-type=b3c.4x16.encrypted beta.kubernetes.io/os=linux failure-domain.beta.kubernetes.io/region=us-south failure-domain.beta.kubernetes.io/zone=dal10 ibm-cloud.kubernetes.io/encrypted-docker-data=true ibm-cloud.kubernetes.io/ha-worker=true ibm-cloud.kubernetes.io/iaas-provider=softlayer ibm-cloud.kubernetes.io/machine-type=b3c.4x16.encrypted ibm-cloud.kubernetes.io/sgx-enabled=false ibm-cloud.kubernetes.io/worker-pool-id=00a11aa1a11aa11a1111a1111aaa11aa-11a11a ibm-cloud.kubernetes.io/worker-version=1.35_1534 kubernetes.io/hostname=10.xxx.xx.xxx privateVLAN=1234567 publicVLAN=7654321 Annotations: node.alpha.kubernetes.io/ttl=0 ... -
앱 배포에 워커 풀 ID 레이블에 대한 어피니티 규칙을 추가합니다.
YAML 예제
apiVersion: apps/v1 kind: Deployment metadata: name: with-node-affinity spec: template: spec: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: ibm-cloud.kubernetes.io/worker-pool-id operator: In values: - <worker_pool_ID> ...예제 YAML의 affinity 섹션에서
ibm-cloud.kubernetes.io/worker-pool-id는key이고<worker_pool_ID>는value입니다. -
업데이트된 배치 구성 파일을 적용하십시오.
oc apply -f with-node-affinity.yaml -
앱 팟(Pod)이 올바른 작업자 노드에 배치되었는지 확인하십시오.
- 클러스터 내의 팟(Pod)을 나열하십시오.
oc get pods -o wide ``` 출력 예 ```sh {: screen} NAME READY STATUS RESTARTS AGE IP NODE cf-py-d7b7d94db-vp8pq 1/1 Running 0 15d 172.30.xxx.xxx 10.176.48.78 ``` 2. 출력에서 앱의 팟(Pod)을 식별하십시오. 해당 팟(Pod)이 있는 작업자 노드의 **NODE** 사설 IP 주소를 기록해 두십시오. 이전 예제 출력에서 앱 팟(Pod) `cf-py-d7b7d94db-vp8pq`는 IP 주소 `10.xxx.xx.xxx`의 작업자 노드에 있습니다. 3. 앱 배치에서 지정한 작업자 풀의 작업자 노드를 나열하십시오. ```sh {: pre} ibmcloud oc worker ls --cluster CLUSTER_NAME_OR_ID --worker-pool WORKER_POOL_NAME_OR_ID ``` 출력 예 ```sh {: screen} ID Public IP Private IP Machine Type State Status Zone Version kube-dal10-crb20b637238bb471f8b4b8b881bbb4962-w7 169.xx.xxx.xxx 10.176.48.78 b3c.4x16 normal Ready dal10 1.8.6_1504 kube-dal10-crb20b637238bb471f8b4b8b881bbb4962-w8 169.xx.xxx.xxx 10.176.48.83 b3c.4x16 normal Ready dal10 1.8.6_1504 kube-dal12-crb20b637238bb471f8b4b8b881bbb4962-w9 169.xx.xxx.xxx 10.176.48.69 b3c.4x16 normal Ready dal12 1.8.6_1504 ``` 다른 요인을 기반으로 친화성 규칙을 작성한 경우에는 해당 값을 대신 가져오십시오. 예를 들어, 앱 팟(Pod)이 특정 VLAN의 작업자 노드에 배치되었는지 확인하려면 `ibmcloud oc worker get --cluster CLUSTER_NAME_OR_ID --worker WORKER_ID`를 실행하여 작업자 노드가 있는 VLAN을 보십시오. {: tip} 4. 출력에서, 이전 단계에서 식별한 사설 IP 주소의 작업자 노드가 이 작업자 풀에 배치되었는지 확인하십시오.
NVIDIA GPU 머신에 앱 배포하기
GPU 머신 유형이 있는 경우 AI, 머신 러닝, 추론 등과 같은 컴퓨팅 집약적 워크로드에 필요한 처리 시간을 가속화할 수 있습니다.
다음 단계에서는 GPU가 필요한 워크로드를 배치하는 방법에 대해 알아봅니다. 하지만 GPU와 CPU 모두에서 워크로드를 처리할 필요가 없는 앱도 배포할 수 있습니다.
또한 다음과 같이 수학적으로 집약적인 워크로드도 TensorFlow 머신 러닝 프레임워크와 같은 수학적 집약적인 워크로드를 사용해 볼 수도 있습니다( Kubernetes 데모 ).
전제조건
시작하기 전에
-
GPU 특성을 사용하는 클러스터 또는 작업자 풀을 작성하십시오. 베어메탈 머신의 설정을 완료하는 데는 1일 이상의 영업일이 소요될 수 있다는 점에 유의하십시오. 사용 가능한 특징 목록은 다음 링크를 참조하십시오.
-
클러스터에 있는 Kubernetes 리소스에 대해 작업할 수 있도록 적절한 Kubernetes RBAC 역할을 부여하는 서비스 액세스 역할이 지정되어 있는지 확인하십시오.
사설 전용 클러스터 제한사항: 클러스터에 공용 네트워크 연결이 없는 경우 공용 네트워크 연결을 허용하거나 외부 레지스트리 및 이미지 스트림에서 icr.io 로 이미지를 미러링해야 합니다. 다음 예제에서 GPU앱은 이미지 스트림과 함께 OLM 마켓플레이스를 사용합니다. 이 예제는 클러스터가 NVIDIA 레지스트리( nvcr.io )에 액세스할 수 없는
경우 작동하지 않습니다.
NVIDIA GPU 오퍼레이터 버전 1.3.1 이상을 사용해야 합니다. Node Feature Discovery 오퍼레이터를 설치할 때는 자신의 Red Hat OpenShift 클러스터 버전과 일치하는 업데이트 채널을 선택하십시오. Helm 차트와 같은 다른 방법을 통해 연산자를 설치하지 마십시오.
RHEL 9 워커 노드: RHEL 9 작업자 노드에 NVIDIA GPU 드라이버를 설치하는 경우, 해결 방법을 적용하여 필요한 모든 EUS(확장 업데이트 지원) 리포지토리를 사용하도록 설정해야 합니다. NVIDIA GPU 오퍼레이터는 기본적으로 필요한 모든 EUS 리포지토리를 활성화하지 않아 드라이버 설치에 실패할 수 있습니다. 자세한 내용은 RHEL 9 워커 노드에서 NVIDIA GPU 드라이버 설치가 실패하는 이유를 참조하세요.
Node Feature Discovery Operator 또는 NVIDIA GPU Operator를 설치하는 데 문제가 발생하면, 도움이 필요하시면 NVIDIA 고객지원팀에 문의해 주세요 으로 문의하거나 NVIDIA GPU Operator 저장소
워크로드 배치
-
YAML 파일을 작성하십시오. 이 예제에서는
JobYAML이 명령어가 완료되고 정상적으로 종료될 때까지 실행되는 단기 포드를 생성하여 배치형 워크로드를 관리합니다.GPU 워크로드의 경우, 작업 YAML 파일에서 ‘
resources: limits: nvidia.com/gpu’ 필드를 반드시 지정해야 합니다.apiVersion: batch/v1 kind: Job metadata: name: nvidia-devicequery labels: name: nvidia-devicequery spec: template: metadata: labels: name: nvidia-devicequery spec: containers: - name: nvidia-devicequery image: nvcr.io/nvidia/k8s/cuda-sample:devicequery-cuda11.7.1-ubuntu20.04 imagePullPolicy: IfNotPresent resources: limits: nvidia.com/gpu: 2 restartPolicy: NeverYAML 컴포넌트 이해하기 컴포넌트 설명 메타데이터 및 레이블 이름 작업의 이름과 레이블을 입력하고 파일의 메타데이터와 spec template메타데이터에 동일한 이름을 사용하십시오. 예를 들어,nvidia-devicequery입니다.containers.image컨테이너가 실행 중인 인스턴스인 이미지를 제공하십시오. 이 예제에서 값은 DockerHub CUDA 디바이스 조회 이미지를 사용하도록 설정됩니다. nvcr.io/nvidia/k8s/cuda-sample:devicequery-cuda11.7.1-ubuntu20.04.containers.imagePullPolicy이미지가 현재 작업자 노드에 있지 않은 경우에만 새 이미지를 가져오려면 IfNotPresent를 지정하십시오.resources.limitsGPU 머신의 경우 리소스 한계를 지정해야 합니다. Kubernetes 장치 플러그인은 기본 리소스 요청량을 제한값에 맞게 설정합니다.
- 키를
nvidia.com/gpu로 지정해야 합니다. - 요청하는 GPU의 개수를 정수로 입력하십시오(예:
2). 컨테이너 팟(Pod)은 GPU를 공유하지 않으며 GPU가 초과 커미트될 수 없습니다. 예를 들어, 1개의mg1c.16x128머신만 있는 경우 해당 머신에는 2개의 GPU만 있으며 최대2를 지정할 수 있습니다.
- 키를
-
YAML 파일을 적용하십시오. 예를 들어, 다음과 같습니다.
oc apply -f nvidia-devicequery.yaml -
nvidia-devicequery레이블을 기준으로 포드를 필터링하여 작업 포드를 확인하세요. STATUS가 Completed인지 확인하십시오.oc get pod -A -l 'name in (nvidia-devicequery)'출력 예
NAME READY STATUS RESTARTS AGE nvidia-devicequery-ppkd4 0/1 Completed 0 36s -
GPU 디바이스 플러그인이 팟(Pod)을 스케줄한 방법을 알 수 있도록 팟(Pod)에 대해 설명하십시오.
Limits및Requests필드에서 사용자가 지정한 리소스 한계가 디바이스 플러그인에서 자동으로 설정한 요청과 일치하는지 확인하십시오.- 이벤트에서 팟(Pod)이 GPU 작업자 노드에 지정되었는지 확인하십시오.
oc describe pod nvidia-devicequery-ppkd4 ``` 출력 예 ```sh {: screen} NAME: nvidia-devicequery-ppkd4 Namespace: default ... Limits: nvidia.com/gpu: 1 Requests: nvidia.com/gpu: 1 ... Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 1m default-scheduler Successfully assigned nvidia-devicequery-ppkd4 to 10.xxx.xx.xxx ... ``` -
로그를 확인하여 작업이 GPU를 사용하여 해당 워크로드를 계산했는지 확인할 수 있습니다.
oc logs nvidia-devicequery-ppkd4출력 예
/cuda-samples/sample Starting... CUDA Device Query (Runtime API) version (CUDART static linking) Detected 1 CUDA Capable device(s) Device 0: "Tesla P100-PCIE-16GB" CUDA Driver Version / Runtime Version 11.4 / 11.7 CUDA Capability Major/Minor version number: 6.0 Total amount of global memory: 16281 MBytes (17071734784 bytes) (056) Multiprocessors, (064) CUDA Cores/MP: 3584 CUDA Cores GPU Max Clock rate: 1329 MHz (1.33 GHz) Memory Clock rate: 715 Mhz Memory Bus Width: 4096-bit L2 Cache Size: 4194304 bytes Maximum Texture Dimension Size (x,y,z) 1D=(131072), 2D=(131072, 65536), 3D=(16384, 16384, 16384) Maximum Layered 1D Texture Size, (num) layers 1D=(32768), 2048 layers Maximum Layered 2D Texture Size, (num) layers 2D=(32768, 32768), 2048 layers Total amount of constant memory: 65536 bytes Total amount of shared memory per block: 49152 bytes Total shared memory per multiprocessor: 65536 bytes Total number of registers available per block: 65536 Warp size: 32 Maximum number of threads per multiprocessor: 2048 Maximum number of threads per block: 1024 Max dimension size of a thread block (x,y,z): (1024, 1024, 64) Max dimension size of a grid size (x,y,z): (2147483647, 65535, 65535) Maximum memory pitch: 2147483647 bytes Texture alignment: 512 bytes Concurrent copy and kernel execution: Yes with 2 copy engine(s) Run time limit on kernels: No Integrated GPU sharing Host Memory: No Support host page-locked memory mapping: Yes Alignment requirement for Surfaces: Yes Device has ECC support: Enabled Device supports Unified Addressing (UVA): Yes Device supports Managed Memory: Yes Device supports Compute Preemption: Yes Supports Cooperative Kernel Launch: Yes Supports MultiDevice Co-op Kernel Launch: Yes Device PCI Domain ID / Bus ID / location ID: 0 / 175 / 0 Compute Mode: < Default (multiple host threads can use ::cudaSetDevice() with device simultaneously) > deviceQuery, CUDA Driver = CUDART, CUDA Driver Version = 11.4, CUDA Runtime Version = 11.7, NumDevs = 1 Result = PASS이 예제에서는 GPU가 작업자 노드에서 스케줄되었기 때문에 GPU가 작업을 실행하는 데 사용되었습니다. 한계가 2로 설정되면 2개의 GPU만 표시됩니다.
이제 테스트용 GPU 워크로드를 배포했으니, 다음과 같이 GPU 처리에 의존하는 도구를 실행할 수 있도록 클러스터를 설정해 볼 수 있습니다. IBM Maximo Visual Inspection.
인텔 AI 가속기(Gaudi 3) 머신에 앱 배포하기
이 기능은 허용 목록에 등록된 계정에서만 이용할 수 있습니다. 액세스 권한을 요청하려면 허용 목록에 있는 기능에 대한 액세스 요청하기를 참조하세요.
다음 예제를 완료하여 resource.limits 필드를 사용하여 가우디 디바이스를 검색하는 인텔 가우디의 PyTorch 컨테이너 이미지를 배포합니다. 시작하기 전에 클러스터가 다음 요구 사항을 충족하는지 확인하십시오.
- 4.18 버전 및 이후 버전
- VPC 클러스터만 해당
- RHCOS 워커 노드만 해당
- 인텔 가우디 베이스 운영자 v1.20.1 이상
자세한 정보와 예제는 Habana 문서와 빠른 시작 예제를 참조하세요.
- 다음 예제 작업 구성을 복사하여 다음과 같은 파일로 저장합니다
config.yamlapiVersion: batch/v1 kind: Job metadata: name: habanalabs-gaudi-demo spec: template: spec: hostIPC: true restartPolicy: OnFailure containers: - name: habana-ai-base-container image: vault.habana.ai/gaudi-docker/1.21.0/ubuntu22.04/habanalabs/pytorch-installer-2.6.0:latest workingDir: /root command: ["hl-smi"] securityContext: capabilities: add: ["SYS_NICE"] resources: limits: habana.ai/gaudi: 8 memory: 409Gi hugepages-2Mi: 9500Mi - 클러스터에 해당 작업을 적용하십시오.
oc apply -f config.yaml - 파드가 시작될 때까지 기다린 다음 작업이 완료되었는지 확인합니다.
예oc get po -n defaultNAME READY STATUS RESTARTS AGE habanalabs-gaudi-demo-kmdcp 0/1 Completed 0 2m32s - 자세한 내용은 작업 포드에 대해 설명하세요.
oc describe po habanalabs-gaudi-demo-kmdcpName: habanalabs-gaudi-demo-kmdcp Namespace: default Priority: 0 Service Account: default Node: test-csrq76620trmo9r8j7u0-btsstagevpc-gaudi3s-00013059/10.180.0.83 Start Time: Tue, 27 May 2025 14:41:50 -0400 Labels: batch.kubernetes.io/controller-uid=c3b33c8a-5fef-4312-9d59-c8b13c03313a batch.kubernetes.io/job-name=habanalabs-gaudi-demo controller-uid=c3b33c8a-5fef-4312-9d59-c8b13c03313a job-name=habanalabs-gaudi-demo Annotations: cni.projectcalico.org/containerID: 7c883dfa9c681ee2c4128b1a5412d4dc181842d0de2a4b7b8019eefc06df37ca cni.projectcalico.org/podIP: cni.projectcalico.org/podIPs: Status: Succeeded IP: 172.17.151.97 IPs: IP: 172.17.151.97 Controlled By: Job/habanalabs-gaudi-demo Containers: habana-ai-base-container: Container ID: cri-o://d75288e9b467f3f820e05e770bbc3d9a2b11cbf8155a54a129fc083d5d507571 Image: vault.habana.ai/gaudi-docker/1.21.0/ubuntu22.04/habanalabs/pytorch-installer-2.6.0:latest Image ID: vault.habana.ai/gaudi-docker/1.21.0/ubuntu22.04/habanalabs/pytorch-installer-2.6.0@sha256:cd599626a8f4d1c3a7b354ccf4ef73e19196f09030d02261d4900bf3467a964c Port: <none> Host Port: <none> Command: hl-smi State: Terminated Reason: Completed Exit Code: 0 Started: Tue, 27 May 2025 14:41:53 -0400 Finished: Tue, 27 May 2025 14:41:54 -0400 Ready: False Restart Count: 0 Limits: habana.ai/gaudi: 8 hugepages-2Mi: 9500Mi memory: 409Gi Requests: habana.ai/gaudi: 8 hugepages-2Mi: 9500Mi memory: 409Gi Environment: <none> Mounts: /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-8vn42 (ro) Conditions: Type Status PodReadyToStartContainers False Initialized True Ready False ContainersReady False PodScheduled True Volumes: kube-api-access-8vn42: Type: Projected (a volume that contains injected data from multiple sources) TokenExpirationSeconds: 3607 ConfigMapName: kube-root-ca.crt ConfigMapOptional: <nil> DownwardAPI: true ConfigMapName: openshift-service-ca.crt ConfigMapOptional: <nil> QoS Class: Burstable Node-Selectors: <none> Tolerations: node.kubernetes.io/memory-pressure:NoSchedule op=Exists node.kubernetes.io/not-ready:NoExecute op=Exists for 300s node.kubernetes.io/unreachable:NoExecute op=Exists for 300s Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 53s default-scheduler Successfully assigned default/habanalabs-gaudi-demo-kmdcp to test-csrq76620trmo9r8j7u0-btsstagevpc-gaudi3s-00013059 Normal AddedInterface 52s multus Add eth0 [172.17.151.97/32] from k8s-pod-network Normal Pulling 52s kubelet Pulling image "vault.habana.ai/gaudi-docker/1.21.0/ubuntu22.04/habanalabs/pytorch-installer-2.6.0:latest" Normal Pulled 50s kubelet Successfully pulled image "vault.habana.ai/gaudi-docker/1.21.0/ubuntu22.04/habanalabs/pytorch-installer-2.6.0:latest" in 2.146s (2.146s including waiting). Image size: 5188441181 bytes. Normal Created 50s kubelet Created container: habana-ai-base-container Normal Started 50s kubelet Started container habana-ai-base-container - 포드 로그를 가져와서 Gaudi 장치 세부 정보를 확인하세요.
출력 예oc logs habanalabs-gaudi-demo-kmdcp+-----------------------------------------------------------------------------+ | HL-SMI Version: hl-1.21.0-fw-59.2.1.0 | | Driver Version: 1.20.1-366eb9c | | Nic Driver Version: 1.20.1-213b09b | |-------------------------------+----------------------+----------------------+ | AIP Name Persistence-M| Bus-Id Disp.A | Volatile Uncor-Events| | Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | AIP-Util Compute M. | |===============================+======================+======================| | 0 HL-325L N/A | 0000:e9:00.0 N/A | 0 | | N/A 36C P0 228W / 900W | 672MiB / 131072MiB | 0% 0% | |-------------------------------+----------------------+----------------------+ | 1 HL-325L N/A | 0000:c1:00.0 N/A | 0 | | N/A 37C P0 226W / 900W | 672MiB / 131072MiB | 0% 0% | |-------------------------------+----------------------+----------------------+ | 2 HL-325L N/A | 0000:b7:00.0 N/A | 0 | | N/A 36C P0 225W / 900W | 672MiB / 131072MiB | 0% 0% | |-------------------------------+----------------------+----------------------+ | 3 HL-325L N/A | 0000:ad:00.0 N/A | 0 | | N/A 40C P0 228W / 900W | 672MiB / 131072MiB | 0% 0% | |-------------------------------+----------------------+----------------------+ | 4 HL-325L N/A | 0000:a3:00.0 N/A | 0 | | N/A 36C P0 228W / 900W | 672MiB / 131072MiB | 0% 0% | |-------------------------------+----------------------+----------------------+ | 5 HL-325L N/A | 0000:df:00.0 N/A | 0 | | N/A 39C P0 229W / 900W | 672MiB / 131072MiB | 0% 0% | |-------------------------------+----------------------+----------------------+ | 6 HL-325L N/A | 0000:d5:00.0 N/A | 0 | | N/A 36C P0 231W / 900W | 672MiB / 131072MiB | 0% 0% | |-------------------------------+----------------------+----------------------+ | 7 HL-325L N/A | 0000:cb:00.0 N/A | 0 | | N/A 38C P0 227W / 900W | 672MiB / 131072MiB | 0% 0% | |-------------------------------+----------------------+----------------------+ | Compute Processes: AIP Memory | | AIP PID Type Process name Usage | |=============================================================================| | 0 N/A N/A N/A N/A | | 1 N/A N/A N/A N/A | | 2 N/A N/A N/A N/A | | 3 N/A N/A N/A N/A | | 4 N/A N/A N/A N/A | | 5 N/A N/A N/A N/A | | 6 N/A N/A N/A N/A | | 7 N/A N/A N/A N/A | +=============================================================================+
AMD 컴퓨터에서 앱 배포하기 MI300x
Red Hat CoreOS 4.18 이후 VPC
-
필요한 연산자를 설치하려면 Red Hat Marketplace 와 OperatorHub 에 대한 아웃바운드 트래픽을 허용 해야 합니다.
-
클러스터에 다음 운영자를 설치합니다:
-
운영자를 설치한 후 AMD 설명서에 따라 드라이버를 구성합니다. 참고: 허용 목록에서 인트리
amdgpu커널 모듈을 제거할 필요는 없습니다.
자세한 정보와 예제는 AMD 문서 및 빠른 시작 예제를 참조하세요.
- 다음 예제 파드 구성을 복사하여 다음과 같은 파일로 저장합니다
config.yamlapiVersion: v1 kind: Pod metadata: name: amd-smi spec: containers: - image: docker.io/rocm/rocm-terminal:latest name: amd-smi command: ["/bin/bash"] args: ["-c","amd-smi version && amd-smi monitor -ptum"] resources: limits: amd.com/gpu: 8 requests: amd.com/gpu: 8 restartPolicy: Never - 클러스터에 해당 포드를 적용하십시오.
oc apply -f config.yaml - 파드가 시작될 때까지 기다린 다음 작업이 완료되었는지 확인합니다.
예oc get po -n defaultNAME READY STATUS RESTARTS AGE amd-smi 0/1 Completed 0 19m - 자세한 내용은 작업 포드에 대해 설명하세요.
oc describe po amd-smiName: amd-smi Namespace: default Priority: 0 Node: test-d18ofps20v1lr6in6ta0-btsstagevpc-gx3d208-00001687/10.240.1.4 Start Time: Mon, 07 Jul 2025 13:32:18 -0500 Labels: <none> Annotations: cni.projectcalico.org/containerID: 5b5d39f8ebe5ea14250af02031084961285f8b210eea14d2c22704784d957de3 cni.projectcalico.org/podIP: cni.projectcalico.org/podIPs: Status: Succeeded IP: 172.17.55.73 IPs: IP: 172.17.55.73 Containers: amd-smi: Container ID: cri-o://3260f5a2788cc189adbe53d3d49c1bdccc7001df27f0c747d6fa86a3068c9eda Image: docker.io/rocm/rocm-terminal:latest Image ID: docker.io/rocm/rocm-terminal@sha256:72b323c5d56c511ea75f7353d0fee04e637390dd4874d414020284627a658014 Port: <none> Host Port: <none> Command: /bin/bash Args: -c amd-smi version && amd-smi monitor -ptum State: Terminated Reason: Completed Exit Code: 0 Started: Mon, 07 Jul 2025 13:32:20 -0500 Finished: Mon, 07 Jul 2025 13:32:20 -0500 Ready: False Restart Count: 0 Limits: amd.com/gpu: 8 Requests: amd.com/gpu: 8 Environment: <none> Mounts: /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-tshnq (ro) Conditions: Type Status PodReadyToStartContainers False Initialized True Ready False ContainersReady False PodScheduled True Volumes: kube-api-access-tshnq: Type: Projected (a volume that contains injected data from multiple sources) TokenExpirationSeconds: 3607 ConfigMapName: kube-root-ca.crt ConfigMapOptional: <nil> DownwardAPI: true ConfigMapName: openshift-service-ca.crt ConfigMapOptional: <nil> QoS Class: BestEffort Node-Selectors: <none> Tolerations: node.kubernetes.io/not-ready:NoExecute op=Exists for 300s node.kubernetes.io/unreachable:NoExecute op=Exists for 300s Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 19m default-scheduler Successfully assigned default/amd-smi to test-d18ofps20v1lr6in6ta0-btsstagevpc-gx3d208-00001687 Normal AddedInterface 19m multus Add eth0 [172.17.55.73/32] from k8s-pod-network Normal Pulling 19m kubelet Pulling image "docker.io/rocm/rocm-terminal:latest" Normal Pulled 19m kubelet Successfully pulled image "docker.io/rocm/rocm-terminal:latest" in 782ms (782ms including waiting). Image size: 3016399213 bytes. Normal Created 19m kubelet Created container: amd-smi Normal Started 19m kubelet Started container amd-smi - 포드 로그를 가져와서 AMD GPU 세부 정보를 확인하세요.
출력 예oc logs amd-smiAMDSMI Tool: 25.3.0+ede62f2 | AMDSMI Library version: 25.3.0 | ROCm version: 6.4.0 | amdgpu version: 6.10.5 | amd_hsmp version: N/A WARNING: User is missing the following required groups: render. Please add user to these groups. GPU POWER GPU_T MEM_T GFX_CLK GFX% MEM% MEM_CLOCK 0 141 W 40 °C 36 °C 140 MHz 0 % 0 % 900 MHz 1 144 W 42 °C 33 °C 138 MHz 0 % 0 % 900 MHz 2 140 W 38 °C 34 °C 142 MHz 0 % 0 % 900 MHz 3 142 W 39 °C 34 °C 140 MHz 0 % 0 % 900 MHz 4 140 W 38 °C 35 °C 138 MHz 0 % 0 % 900 MHz 5 142 W 36 °C 30 °C 138 MHz 0 % 0 % 900 MHz 6 137 W 40 °C 35 °C 138 MHz 0 % 0 % 900 MHz 7 137 W 38 °C 32 °C 142 MHz 0 % 0 % 900 MHz