# nccl-perftest Helm Chart Multi-node NCCL 분산 학습 성능 테스트를 위한 Helm chart. VGG11 + CIFAR-10 기반 torchrun 분산 학습을 StatefulSet으로 배포한다. ## Prerequisites - Kubernetes 1.24+ - Helm 3.x - NVIDIA GPU Operator 설치 - Multus CNI + hostdevice NAD 구성 - InfiniBand 장치 (`/dev/infiniband`) ## Helm Repo (Harbor OCI) ```bash # Harbor 로그인 helm registry login harbor.inje-private.com -u admin # Chart pull helm pull oci://harbor.inje-private.com/nccl-perftest/nccl-perftest --version 0.1.0 ``` ## Install ```bash # 기본 설치 (values.yaml 기본값 사용) helm install nccl-perftest ./nccl-perftest # 릴리스 이름 지정 helm install my-release ./nccl-perftest # OCI 레지스트리에서 직접 설치 helm install nccl-perftest oci://harbor.inje-private.com/nccl-perftest/nccl-perftest --version 0.1.0 ``` ## Uninstall ```bash helm uninstall nccl-perftest ``` ## Values 설정 ### 커스텀 values 파일 사용 ```bash helm install nccl-perftest ./nccl-perftest -f my-values.yaml ``` ### CLI로 개별 값 오버라이드 ```bash # 노드 수 변경 (3노드) helm install nccl-perftest ./nccl-perftest --set replicaCount=3 # GPU 수 + 노드 수 동시 변경 helm install nccl-perftest ./nccl-perftest \ --set replicaCount=4 \ --set resources.gpu=4 \ --set training.nprocPerNode=4 # 이미지 태그 변경 helm install nccl-perftest ./nccl-perftest --set image.tag="24.12-py3" # NCCL 디버그 옵션 helm install nccl-perftest ./nccl-perftest \ --set nccl.ibHCA="mlx5_0\,mlx5_1\,mlx5_2\,mlx5_3" \ --set nccl.debugFile="/tmp/nccl-%h-%p.log" ``` ## Values Reference | Key | Default | Description | |-----|---------|-------------| | `nameOverride` | `nccl-test` | 리소스 이름 | | `replicaCount` | `2` | 노드(Pod) 수. NNODES에 자동 반영 | | `image.repository` | `nvcr.io/nvidia/pytorch` | 컨테이너 이미지 | | `image.tag` | `24.10-py3` | 이미지 태그 | | `image.pullPolicy` | `IfNotPresent` | 이미지 풀 정책 | | `training.nprocPerNode` | `8` | 노드당 GPU 프로세스 수 | | `training.masterPort` | `29500` | 마스터 rendezvous 포트 | | `training.batchSize` | `1200` | 글로벌 배치 사이즈 | | `training.epochs` | `90` | 학습 에포크 수 | | `training.lr` | `0.01` | 학습률 | | `resources.gpu` | `8` | nvidia.com/gpu 요청 수 | | `resources.hostdev` | `2` | nvidia.com/hostdev 요청 수 | | `shmSize` | `128Gi` | /dev/shm 크기 | | `network.nadName` | `hostdevice-net` | Multus NAD 이름 | | `nccl.debug` | `INFO` | NCCL_DEBUG 레벨 | | `nccl.debugSubsys` | `INIT,NET,IB` | NCCL_DEBUG_SUBSYS | | `nccl.ibDisable` | `0` | NCCL_IB_DISABLE (0=IB 사용) | | `nccl.socketIfname` | `net` | NCCL_SOCKET_IFNAME | | `nccl.ibHCA` | `""` | NCCL_IB_HCA (비어있으면 미설정) | | `nccl.debugFile` | `""` | NCCL_DEBUG_FILE (비어있으면 미설정) | | `volumes.infiniband.hostPath` | `/dev/infiniband` | IB 장치 경로 | | `volumes.dataset.hostPath` | `/home/ubuntu/cifar-10-batches-py` | CIFAR-10 데이터셋 경로 | ## 예시: 3노드 4GPU 설정 ```yaml # my-values.yaml replicaCount: 3 training: nprocPerNode: 4 batchSize: 600 resources: gpu: 4 hostdev: 1 nccl: ibHCA: "mlx5_0,mlx5_1" ``` ```bash helm install nccl-3node ./nccl-perftest -f my-values.yaml ```