multinode-perftest/README.md

120 lines
3.2 KiB
Markdown

# 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/infra/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/infra/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
```