GPU-ноди і ML-обчислення
Коротке резюме
Успішний ML-стек на GPU - це сукупність рішень по залізу, софту, плануванню, даним і спостережуваності. Кластер повинен вміти однаково добре:1. навчати моделі (висока утилізація, швидкі чекпойнти, стійкість до переривань),
2. обслуговувати інференс (низька p95-латентність при високій конверсії),
3. коштувати передбачуваних грошей (FinOps, квоти, мульти-тенантність),
4. бути безпечним (ізоляція, supply chain, контроль ваг/датасетів).
Залізо і топології
ГПУ і пам'ять
HBM-об'єм і смуга важливіше «сирих TFLOPS» для LLM/RecSys.
Для інференса безлічі дрібних запитів - пріоритет вбудованої пам'яті (KV-cache) і високий clocks/power limit.
Зв'язності
NVLink/NVSwitch - всередині вузла для швидких all-reduce.
InfiniBand/RoCE - міжвузловий обмін для DDP/FSDP (≥ 100-200 Gb/s).
PCIe-дерево: намагайтеся, щоб NIC і GPU сиділи на одному NUMA-вузлі; уникайте «гарячих» PCIe-switch bottleneck.
Базовий тюнінг BIOS/вузла
Режими Performance, відключення C-states (або підвищені мінімальні), NUMA awareness, ASPM off на критичних PCIe.
Харчування: стабільні профілі, не агресивний power-save - інакше «тремтить» p99.
Базовий софт-стек
Драйвери NVIDIA + CUDA + cuDNN/TensorRT, узгоджені за матрицею сумісності.
NVIDIA Container Toolkit для GPU всередині контейнерів.
NCCL (колективки), UCX (транспорт), Apex/xFormers/Flash-Attention - для швидкості.
Опціонально GDS (GPUDirect Storage) на швидких NVMe/IB - прискорює потік даних.
Kubernetes для GPU
Ключові компоненти
NVIDIA GPU Operator (драйвери, DCGM, device-plugin).
NVIDIA Device Plugin - експорт ресурсів'nvidia. com/gpu`.
MIG (A100/H100) - розподіл одного фізичного GPU на ізольовані профілі (наприклад,'1g. 10gb`).
Time-slicing - логічне дроблення GPU за часом для дрібних завдань інференса.
Node Feature Discovery - мітки за типами GPU/топології.
Планування та ізоляція
Taints/Tolerations/NodeSelectors для розділення тренінгу/інференсу/експериментів.
Topology Manager і CPU Manager (static) для NUMA-вирівнювання.
Volcano/Slurm on K8s/Ray - черги, пріоритети, preemption для великих джоб.
yaml resources:
limits:
nvidia. com/gpu: 1 # or MIG profile: nvidia. com/mig-1g. 10gb: 1 requests:
nvidia. com/gpu: 1
Приклад taint/affinity для виділеного пулу тренувань:
yaml tolerations:
- key: "gpu-train"
operator: "Exists"
effect: "NoSchedule"
nodeSelector:
gpu. pool: "train"
Навчання: масштаб і стійкість
Паралелізм
DDP - стандартний дата-паралелізм.
FSDP/ZeRO - шардування параметрів/градів/оптимайзерів, знижує пам'ять.
Tensor/Pipeline Parallel - для дуже великих LLM; вимагає NVLink/IB.
Gradient Accumulation - збільшує ефективний batch без зростання піків пам'яті.
Змішана точність і оптимізації пам'яті
AMP (bf16/fp16) + loss scaling; для Н100/нових - FP8 де можливо.
Activation/Gradient Checkpointing, Flash-Attention для довгих послідовностей.
Paged/Chunked KV-cache для підготовки до інференсу.
Чекпойнти і відмовостійкість
Часті інкрементальні чекпойнти на швидкі NVMe/об'єктку з ретеншном.
Ідемпотентні джоби (повторювані ран-ідентифікатори).
Spot-стійкість: ловимо SIGTERM, швидко зливаємо state; планувальник повертає джобу в чергу.
Важливі змінні NCCL/мережі (приклад)
bash
NCCL_IB_HCA=mlx5_0
NCCL_SOCKET_IFNAME=eth1
NCCL_P2P_LEVEL=NVL
NCCL_MIN_NRINGS=8
NCCL_NET_GDR_LEVEL=SYS
Інференс: низька латентність, висока віддача
Сервінг-фреймворки
Triton Inference Server - єдиний сервер для TensorRT/ONNX/TS/PyTorch.
vLLM/TGI/TensorRT-LLM - LLM-фахівці (paged-attention, ефективний KV-cache, continuous batching).
Прийоми прискорення
Quantization: INT8/FP8/квант. -aware (AWQ, GPTQ) - зменшення VRAM, зростання TPS.
Batching/Continuous batching: обслуговувати пачки запитів без зростання p95.
KV-cache pinning в HBM, зменшення контекстів; speculative decoding (draft-модель).
Concurrency на GPU: кілька потоків/моделей при MIG/time-slice.
Профілі цілі (приклад SLO)
p95 латентність відповіді чат-моделі ≤ 300 мс на префікс/токен;
Throughput ≥ 200 струм/с/GPU на цільовому профілі;
Хвости p99 контролюємо шедулінгом (QoS класи і ліміти контекстів).
Triton deployment (фрагмент)
yaml env:
- name: CUDA_VISIBLE_DEVICES value: "0"
- name: TRITONSERVER_MODEL_CONTROL value: "explicit"
args: ["--backend-config=tensorrt,output_memory_pool_size=1024"]
Дані та пайплайни
Формати: Parquet/Arrow, webdataset (tar-шарди) для потокового читання.
Prefetch/Async I/O: DataLoader-ы с pin-memory, prefetch-pipelines, GDS.
Feature Store для онлайн-фіч (антифрод/рекомендації).
Версіонування: DVC/LakeFS/MLflow Model Registry; фіксуйте датасети, код і гіперпараметри.
Спостережуваність і SLO
DCGM/Prometheus метрики (мінімум)
`dcgm_sm_util`, `dcgm_fb_used`, `dcgm_power_usage`, `dcgm_pcie_rx/tx`, `dcgm_dram_bw`
Температури/частоти і ECC errors (алерт на зростання).
Achieved Occupancy і stall reasons (вузький шар ядра).
Сервісні метрики
Генеративні моделі: токени/сек, p50/p95/p99, queue depth, відмова по пам'яті.
Тренінг: кроки/сек, час епохи, ефективність all-reduce,% часу в I/O.
SLO-панель: комплаєнс p95, «бюджет помилок» (≥ 99. 5% «успішних» інференсів).
Алертінг (ідеї)
`fb_used / fb_total > 0. 95` 5 мин → throttle/scale-out.
Падіння TPS на N% при тій же утилізації - деградація моделі/коду.
Зростання ЄСС/температури → міграція джоб/інцидент біля заліза.
Безпека та ізоляція
Мульти-тенантність: MIG-профілі або ноди «per-team», namespaces/quotas.
IOMMU/PSP, cgroups, заборона привілейованих контейнерів, обмеження'CAP _'.
MPS (multi-process service) - акуратно: вище утилізація, але поділ слабкіше, ніж MIG.
Supply chain: підписи контейнерів (cosign), верифікація артефактів, контроль вивантажень моделей.
Дані/ваги: шифрування на диску, контроль доступу (ABAC/RBAC), «водяні знаки »/хеш-реєстри моделей.
FinOps: вартість, квоти, автоскейл
Пули вузлів: 'train'( on-demand/резерви),'infer'( мікс on-demand + spot),'exp'( spot-heavy).
Spot-стійкість: часті чекпойнти, швидка перезапускна логіка, черги Volcano з пріоритетами.
Резерви/RI/Savings Plans на стабільну базу; авто-вимикання порожніх вузлів.
Right-sizing моделей: квантування/LoRA-адаптери замість «повної» моделі; вибір профілів MIG під SLA.
Контур бюджетів: квоти GPU-годин per-team, «вартість за 1k запитів/токенів».
Шаблони YAML та артефакти
1) Профіль MIG (концептуально)
yaml apiVersion: nvidia. com/v1 kind: MigStrategy metadata: { name: mig-a100-1g10gb }
spec:
deviceFilter: "a100"
mode: single resources:
- profile: "1g. 10gb"
count: 7
2) Volcano черга для тренінгу
yaml apiVersion: scheduling. volcano. sh/v1beta1 kind: Queue metadata: { name: train-q }
spec:
weight: 100 reclaimable: true capability:
resources:
- name: nvidia. com/gpu quantity: 64
3) KEDA для автоскейлу інференса по глибині черги
yaml apiVersion: keda. sh/v1alpha1 kind: ScaledObject metadata: { name: llm-infer }
spec:
scaleTargetRef: { name: llm-deploy }
pollingInterval: 5 minReplicaCount: 2 maxReplicaCount: 80 triggers:
- type: rabbitmq metadata:
queueName: infer-queue mode: QueueLength value: "200"
Чек-лист запуску GPU-кластера
- NVLink/IB карта топології; NIC/GPU на одному NUMA.
- Драйвери/CUDA узгоджені, Operator/Device-plugin встановлені.
- MIG/time-slicing профілі і квоти на неймспейси.
- DDP/FSDP pipeline обкатаний на стейджингу; чекпойнти швидкі.
- Triton/vLLM с continuous batching; цілі p95 і TPS задані.
- DCGM/Prometheus/Grafana + алерти ECC/температура/пам'ять/TPS.
- Політики безпеки (PSP, cosign, обфускація/контроль ваг).
- FinOps: пули spot/ri, звіт «$/1k токенів», авто-шутдаун idle.
Типові помилки
Змішують тренінг і інференс на одних нодах без taints → «пиляють» один одному GPU/IO.
Немає чекпойнтів і preemption-логіки → втрата прогресу на spot.
Відсутність DCGM-метрик → «сліпа» утилізація і перегрів.
Ігнор NUMA/PCIe топології → низька смуга NCCL.
Невірні профілі MIG/time-slice → p99 латентності і «Out of Memory».
HPA по CPU замість TPS/латентності → пізній скейл.
Специфіка iGaming/фінтех
Антифрод/скоринг: SLA інференса ≤ 50 мс p95 на критичних шляхах (платежі/висновки); тримайте легку модель «fallback».
Рекомендації/персоналізація: on-policy/off-policy навчання вночі, online-features - низька латентність.
Чат-помічники/RAG: кеш контенту, дедеуплікація запитів, guardrails; шардування індексів векторного пошуку.
Піки (матчі/турніри): попередній розігрів моделей/kv-cache, збільшення minReplicas, QoS-класи для VIP.
Підсумок
Стек GPU-обчислень стає дійсно ефективним, коли залізо (HBM/NVLink/IB), софтова матриця (CUDA/NCCL), планування (MIG, черга, taints), дані (швидкий пайплайн/GDS), спостережуваність (DCGM/SLO) і вартість (FinOps/квоти) працюють узгоджено. Закріпіть це в IaC і політиці кластерів - і ви отримаєте передбачувану швидкість навчання, стабільний інференс з низькою p95-латентністю і прозору економіку GPU-годин.