120 lines
3.2 KiB
Markdown
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
|
|
```
|