Настройка GPU-кластера для обучения моделей (NVIDIA A100, H100)
Правильно настроенный GPU-кластер — это не просто набор серверов с видеокартами. Это согласованная система: сеть с минимальной latency между узлами, правильно сконфигурированные драйверы и CUDA, оптимизированное хранилище для датасетов, оркестратор для управления задачами обучения и мониторинг утилизации дорогостоящего железа.
Выбор оборудования
NVIDIA A100 (40GB / 80GB SXM) — основной workhorse для обучения больших моделей. SXM-версия с NVLink обеспечивает 600 GB/s GPU-to-GPU bandwidth внутри сервера, что критично для tensor parallelism.
NVIDIA H100 (80GB SXM5) — следующее поколение. FP8 training, 3.35TB/s HBM3 bandwidth, 900 GB/s NVLink 4.0. Примерно в 2-3x быстрее A100 для transformer-обучения.
Interconnect: InfiniBand HDR/NDR (200-400 Gbps) между узлами — обязателен для эффективного multi-node training. Ethernet 100 GbE — допустим, но со значительным снижением scaling efficiency.
Storage: Parallel file system (GPFS, Lustre, WekaFS) или NVMe over Fabrics. Случайный узкий IO хранилища — частая причина GPU underutilization.
Установка драйверов и CUDA
# Ubuntu 22.04
# 1. NVIDIA driver
apt install linux-headers-$(uname -r)
apt install nvidia-driver-535 # или последний production driver
# 2. CUDA Toolkit (лучше через runfile, не apt)
wget https://developer.download.nvidia.com/compute/cuda/12.3.0/local_installers/cuda_12.3.0_545.23.06_linux.run
sh cuda_12.3.0_545.23.06_linux.run --silent --toolkit
# 3. cuDNN
tar -xvf cudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz
cp cuda/include/cudnn*.h /usr/local/cuda/include
cp cuda/lib64/libcudnn* /usr/local/cuda/lib64
ldconfig
# 4. Проверка
nvidia-smi
nvcc --version
python -c "import torch; print(torch.cuda.device_count())"
Настройка NCCL и тестирование interconnect
# Установка NCCL
apt install libnccl2 libnccl-dev
# Тест bandwidth между GPU внутри узла
git clone https://github.com/NVIDIA/nccl-tests
cd nccl-tests && make
./build/all_reduce_perf -b 1G -e 4G -f 2 -g 8
# Ожидаемые результаты на 8x A100 SXM с NVLink:
# 1GB: ~280 GB/s (algbw)
# 4GB: ~300 GB/s (algbw)
Оркестрация с Kubernetes + NVIDIA GPU Operator
GPU Operator автоматизирует установку драйверов, container toolkit, device plugin:
# Установка через Helm
helm repo add nvidia https://helm.ngc.nvidia.com/nvidia
helm install gpu-operator nvidia/gpu-operator \
--namespace gpu-operator \
--create-namespace \
--set driver.enabled=true \
--set toolkit.enabled=true
MIG (Multi-Instance GPU) для A100/H100 — разбивка одного GPU на изолированные инстансы для эффективного использования при small batch инференсе:
nvidia-smi mig -lgip # Список профилей
nvidia-smi mig -cgi 9,9,9,9,9,9,9 # 7x MIG 1g.10gb на A100 80GB
Настройка планировщика задач
Slurm — стандарт в HPC, хорошо подходит для batch-обучения:
# sbatch job для обучения
#!/bin/bash
#SBATCH --nodes=4
#SBATCH --ntasks-per-node=8
#SBATCH --gres=gpu:8
#SBATCH --partition=a100
#SBATCH --time=48:00:00
srun python train.py \
--nproc_per_node=8 \
--nnodes=4
Volcano — Kubernetes-scheduler для ML workloads с поддержкой gang scheduling (все GPU-поды запускаются одновременно или ни один):
Мониторинг GPU-кластера
# DCGM Exporter для Prometheus
helm install dcgm-exporter nvidia/dcgm-exporter
# Ключевые метрики:
# DCGM_FI_DEV_GPU_UTIL — утилизация GPU (целевой показатель > 85%)
# DCGM_FI_DEV_MEM_COPY_UTIL — PCIe bandwidth utilization
# DCGM_FI_DEV_NVLINK_BANDWIDTH_TOTAL — NVLink throughput
# DCGM_FI_DEV_POWER_USAGE — потребляемая мощность
# DCGM_FI_DEV_SM_CLOCK — текущая частота
Типичный результат настройки
На 4-узловом кластере 8x A100 (32 GPU суммарно) при правильной настройке InfiniBand и NCCL достигается scaling efficiency 85-90% для LLM предобучения: обучение, которое на 4 GPU занимает 40 часов, на 32 GPU занимает ~5.5-6 часов, а не теоретические 5.







