GPU-Live/nccl_test/demo2.yaml

66 lines
2.7 KiB
YAML

apiVersion: v1
kind: Pod
metadata:
name: nccl-gdrdma-pod-gcore-2
annotations:
# 1. Multus CNI를 통해 'hostdevice-net' 네트워크에 연결합니다.
k8s.v1.cni.cncf.io/networks: hostdevice-net
# 2. 파드를 Node 0에 강제 배포합니다. (실제 클러스터에서는 스케줄러가 처리)
scheduler.alpha.kubernetes.io/node-selector: kubernetes.io/hostname=nhn-aideveloper-f0fde370
spec:
# serviceAccountName: <적절한 SA 이름> # (필요시)
containers:
- name: gdrdma-client
# NVIDIA 공식 PyTorch 이미지 사용
image: nvcr.io/nvidia/pytorch:24.03-py3
imagePullPolicy: IfNotPresent
command: ["/bin/bash", "-c"]
args:
- |
# 1. RDMA 디바이스 정보 확인 및 테스트 도구 설치 (검증을 위해)
apt update && apt install -y rdma-core perftest
# 2. 분산 학습 환경 변수 설정
export NCCL_DEBUG=INFO # NCCL 디버그 레벨 (RDMA 사용 검증)
export NCCL_DEBUG_SUBSYS=NET # 네트워크 통신 계층 디버깅 활성화
export MASTER_ADDR=192.168.240.1 # Node 0 파드의 hostdevice-net IP
export MASTER_PORT=29500
export WORLD_SIZE=16 # 총 GPU 개수 (8 * 2)
export NODE_RANK=1 # 현재 파드의 노드 순위 (Node 0)
export LOCAL_WORLD_SIZE=8 # 이 파드에 할당된 GPU 개수
# 3. ddp_rdma_test.py 스크립트 실행 (미리 파드에 복사되어 있어야 함)
# torch.distributed.launch 또는 torchrun을 사용하여 8개 프로세스 실행
torchrun \
--nnodes=$((WORLD_SIZE / LOCAL_WORLD_SIZE)) \
--nproc_per_node=$LOCAL_WORLD_SIZE \
--rdzv_id=100 \
--rdzv_backend=c10d \
--rdzv_endpoint=$MASTER_ADDR:$MASTER_PORT \
ddp_rdma_test.py
# 3. 중요: torchrun 실행 대신, 무한 대기합니다.
echo "Setup complete. Pod is now in a waiting state. Use 'kubectl exec' to run torchrun."
sleep infinity # <-- 이 명령어가 컨테이너가 종료되지 않도록 유지합니다.
securityContext:
capabilities:
add: ["IPC_LOCK"] # GPU Direct RDMA를 위한 필수 설정
resources:
limits:
# GPU 8개와 Host Device NIC 1개를 요청합니다.
# 이 Host Device는 SR-IOV Device Plugin에 의해 RDMA 기능이 활성화됩니다.
nvidia.com/gpu: "8"
nvidia.com/hostdev: "8"
requests:
nvidia.com/gpu: "8"
nvidia.com/hostdev: "8"
volumeMounts:
- name: ddp-script-volume
mountPath: /app
volumes:
- name: ddp-script-volume
configMap:
name: ddp-test-script