Серверы и оборудование

Как выбрать CPU для GPU-сервера: PCIe-линии, NUMA и топология устройств

~17 минут11 сентября 2026 г.

Процессор с большим количеством ядер и PCIe-линий ещё не гарантирует хорошую GPU-серверную конфигурацию.

CPU может выглядеть подходящим в datasheet, но конкретная серверная платформа распределит его I/O между GPU, сетевыми картами, NVMe, PCIe switches и вторым процессором совсем не так, как предполагалось при расчёте.

И обратная ситуация возможна: I/O topology подходит идеально, но host-side preprocessing упирается в CPU.

Поэтому выбирать CPU для GPU-сервера нужно в таком порядке:

GPU / NIC / NVMe

        ↓

требуемые PCIe links

        ↓

возможности CPU

        ↓

конкретная серверная платформа

        ↓

root complexes / switches

        ↓

socket и NUMA locality

        ↓

фактические PCIe links

        ↓

CPU workload

        ↓

нагрузочная проверка

Короткое правило:

Что CPU делает в GPU-сервере

1
Что CPU делает в GPU-сервере

В GPU-сервере процессор решает две разные задачи.

Первая — обеспечивает I/O platform для GPU и периферии. Нужно физически подключить ускорители, сетевые адаптеры, NVMe и другие PCIe devices и дать им необходимую connectivity.

Вторая — выполняет host-side работу: DataLoader, tokenization, decode, augmentation, compression, network/storage processing, orchestration и другие CPU-задачи.

Поэтому CPU должен пройти два независимых теста:

I/O topology подходит?

          +

Host compute достаточен?

          =

CPU/platform подходит

Процессор с 128 ядрами не исправляет неудачное подключение NIC к GPU.

И большое количество PCIe-линий само по себе не ускоряет CPU-intensive preprocessing.

Почему количество PCIe-линий — только первый фильтр

Допустим, CPU поддерживает до 128 PCIe Gen5 lanes.

Из этой строки нельзя заключить, что сервер даст:

GPU0 → x16 напрямую

GPU1 → x16 напрямую

GPU2 → x16 напрямую

GPU3 → x16 напрямую

NIC0 → x16

NIC1 → x16

NVMe0–7 → x4 каждый

CPU задаёт архитектурный ресурс.

Реальная платформа распределяет его между:

  • GPU risers;

  • storage backplanes;

  • NIC/OCP slots;

  • PCIe switches;

  • дополнительными контроллерами;

  • а в двухсокетной системе — ещё и межпроцессорной связью.

Поэтому:

Сначала посчитайте ideal PCIe budget

Предположим, нужно установить:

4 × GPU x16

2 × NIC x16

8 × NVMe x4

Простая арифметика:

GPU:

4 × 16 = 64 lanes

NIC:

2 × 16 = 32 lanes

NVMe:

8 × 4 = 32 lanes

Итого:

128 lanes

Эти 128 lanes полезны как ideal endpoint demand: столько потребовали бы устройства при указанной ширине независимых прямых links.

Но это ещё не означает:

нужен CPU с 128 PCIe-линиями — задача решена.

Следующий этап гораздо важнее. Нужно выяснить:

какие endpoints подключены напрямую;

какие находятся за PCIe switch;

каков upstream у switch;

как организован NVMe backplane;

какой socket владеет каждым root port;

какие high-speed links недоступны периферии в 2P;

какая ширина действительно требуется workload.

Lane arithmetic помогает отсеять явно неподходящие варианты. Она не заменяет block diagram.

Почему два CPU не означают вдвое больше PCIe для устройств

AMD EPYC 9005 хорошо показывает эту ловушку.

В single-socket design EPYC 9005 предоставляет до 128 PCIe Gen5 lanes. Но в двухсокетной системе те же physical high-speed connections могут использоваться для xGMI/Infinity Fabric между процессорами.

AMD описывает типичный 2P-вариант с четырьмя xGMI links:

128 high-speed lanes / socket

− 64 lanes для 4 × xGMI

=

64 PCIe lanes / socket

2 sockets → 128 PCIe lanes для I/O

Производитель системы может вместо четырёх использовать три xGMI links. Тогда на socket остаётся до 80 PCIe lanes, а на 2P-систему — до 160. Выбор зависит от баланса между peripheral I/O и межсокетной bandwidth.

Следовательно:

2 × CPU с capability 128 lanes

≠

256 peripheral PCIe lanes

автоматически.

Именно поэтому для 2P-конфигурации CPU datasheet недостаточно.

У Intel логика выбора такая же

Intel указывает для Xeon 6 варианты до 136 PCIe 5.0 lanes для one-socket server designs и до 192 lanes для two-socket servers, а также до 12 memory channels в соответствующих вариантах семейства.

Но это platform/family capability.

Нельзя перенести число 136 на любой сервер с надписью Xeon 6.

Нужно знать:

exact CPU SKU

server model

1P / 2P

GPU base

riser option

NIC configuration

storage backplane

Поэтому таблица вида:

CPU

PCIe lanes

EPYC

X

Xeon

Y

слишком поверхностна для выбора GPU-сервера.

Даже один server model может иметь несколько разных топологий

Хороший пример — Lenovo ThinkSystem SR675 V3.

Для одного шасси Lenovo документирует несколько GPU configurations.

В 4-GPU модели есть, например:

  • 2P direct x16 configuration;

  • 1P x16 configuration через PCIe switch.

В 8-GPU модели доступны как direct x8 connections, так и x16 downstream connections через switched risers.

То есть:

ThinkSystem SR675 V3

ещё не описывает PCIe topology.

Нужна конкретная:

base configuration

+

GPU riser

+

CPU count

+

I/O riser

+

storage option

Четыре GPU не обязательно требуют двух CPU

У того же SR675 V3 официально существуют 4-GPU configurations с одним процессором и switched x16 riser, наряду с двухсокетными direct x16 configurations.

Поэтому правило:

4 GPU → 2 CPU

технически неверно.

Второй socket оправдан, если он решает конкретное ограничение:

Причина

Может потребовать 2P

Не хватает I/O topology

Да

OEM требует 2P для выбранной GPU configuration

Да

Не хватает CPU compute

Возможно

Нужна дополнительная RAM capacity/bandwidth

Возможно

Требуется больше memory channels

Возможно

Просто хочется «более мощный сервер»

Нет

Если один CPU уже закрывает I/O, compute и memory requirements, второй socket не становится преимуществом сам по себе.

Восемь GPU могут использовать совсем другую архитектуру

В 8-GPU вариантах того же Lenovo платформа уже предлагает другой design.

Direct riser обеспечивает восьми GPU links x8, а switched configuration предоставляет x16 downstream connections при подписке через PCIe switch.

Здесь особенно хорошо видно различие:

x16 со стороны GPU

не обязательно означает:

отдельный x16 upstream до CPU

на каждую карту.

Поэтому надо различать endpoint link и shared upstream topology.

Механический x16 slot, electrical width и negotiated width — три разные вещи

Надпись PCIe x16 slot может описывать физический разъём.

Но для GPU-сервера интересуют как минимум:

physical connector

electrical width

PCIe generation

upstream path

А после сборки появляется ещё один параметр:

negotiated width / speed

Таким образом, возможна конфигурация, где карта физически установлена в x16 connector, но серверная разводка предусматривает x8.

И это само по себе не является неисправностью.

PCIe switch — не синоним bottleneck

Типовая switched topology:

CPU / root complex

        ↓

     PCIe switch

     ├─ GPU0

     ├─ GPU1

     ├─ GPU2

     └─ GPU3

Такой design позволяет подключить больше endpoints, чем доступно независимых CPU root ports.

У него может быть shared upstream. Но наличие switch ещё не доказывает, что этот upstream ограничит workload.

Нужно знать:

upstream width/generation

число downstream devices

одновременный traffic

направление transfers

P2P requirements

реальный workload throughput

Lenovo использует switched risers и в официальных GPU Direct configurations, поэтому само наличие PCIe switch нельзя считать отрицательным признаком.

Правильный вопрос:

Какие устройства одновременно делят upstream и нужен ли им в этот момент полный downstream bandwidth?

Direct и switched topology: что сравнивать

Параметр

Direct attach

Через switch

Path до root complex

Обычно проще

Есть дополнительный PCIe bridge/switch

Fan-out

Ограничен CPU/platform routing

Может быть выше

Shared upstream

Меньше возможностей для sharing

Возможен

P2P

Зависит от платформы

Зависит от switch/platform

Анализ topology

Проще

Нужно знать downstream и upstream

Ни одна из колонок не означает автоматически лучшую производительность.

Пригодность определяется critical data paths.

NUMA node и CPU socket — не одно и то же

2
NUMA node и CPU socket — не одно и то же

Это важнейшее уточнение.

Для простой двухсокетной схемы часто рисуют:

CPU0 / NUMA0

CPU1 / NUMA1

Но это всего лишь возможная конфигурация.

Например, AMD EPYC 9005 поддерживает настройки NPS:

NPS1 → 1 NUMA node / socket

NPS2 → 2 NUMA nodes / socket

NPS4 → 4 NUMA nodes / socket

При NPS4 PCIe device получает locality относительно того NUMA domain, где расположен соответствующий PCIe root complex.

Поэтому на реальной системе таблица должна иметь два разных поля:

Root socket

NUMA node

а не одно поле CPU/NUMA.

Это особенно важно для placement CPU workers и memory.

Правильная NUMA-карта выглядит подробнее

Условная система при одном NUMA node на socket может выглядеть так:

Socket 0

  NUMA 0

   ├─ GPU0

   ├─ GPU1

   ├─ NIC0

   └─ NVMe group A

Socket 1

  NUMA 1

   ├─ GPU2

   ├─ GPU3

   ├─ NIC1

   └─ NVMe group B

Но при NPS4 один socket уже может содержать несколько NUMA domains.

Поэтому универсальная карта должна хранить:

Device

Root socket

NUMA node

GPU0

0

0

GPU1

0

1

NIC0

0

0

NVMe0

0

1

GPU2

1

4

Числа здесь только иллюстративные.

Главный вопрос после этого:

какие устройства должны интенсивно обмениваться друг с другом?

Добавьте к каждому устройству critical peer

Предположим:

GPU0 ↔ NIC0

GPU1 ↔ NVMe group A

CPU workers ↔ GPU0/1

GPU2 ↔ NIC1

Это намного полезнее списка:

4 GPU

2 NIC

8 NVMe

Потому что topology становится связана с workload.

Для каждого bandwidth-sensitive endpoint нужно определить:

device

→ root path

→ locality

→ critical peer

И уже после этого оценивать, хорошее ли размещение.

Для GPUDirect RDMA GPU↔NIC topology особенно важна

Для GPUDirect RDMA NVIDIA указывает важное ограничение: GPU и сторонний PCIe peer должны находиться под одним upstream PCIe root complex. NVIDIA также разделяет пути, состоящие только из PCIe switches, path через один CPU/host bridge и cross-socket path через CPU-to-CPU interconnect; последний вариант может быть серьёзно ограничен или работать нестабильно на отдельных платформах.

Поэтому для RDMA недостаточно строки:

NIC: ConnectX, 400 Gbit/s

Нужно знать её размещение относительно целевых GPU.

Условно:

GPU

 └─ PCIe switch

       └─ NIC

и:

GPU

 └─ CPU0

      ↓

 inter-socket

      ↓

     CPU1

       └─ NIC

— разные topology.

Эта оговорка относится именно к GPUDirect RDMA и другим соответствующим peer-to-peer scenarios, а не автоматически ко всему сетевому трафику.

В HGX-системе GPU↔GPU traffic может идти по NVLink/NVSwitch.

Но это не означает, что расположение CPU, NIC и storage стало безразличным.

Есть два слоя:

GPU ↔ GPU

NVLink / NVSwitch

и:

CPU / RAM / NIC / NVMe ↔ GPU

PCIe / host topology

Поэтому даже для HGX-сервера всё ещё нужно знать, откуда к GPU приходят данные с host/network/storage side.

Сколько CPU cores нужно GPU-серверу

После I/O topology можно переходить к вычислительной части CPU.

Универсального:

8 CPU cores на GPU

или:

8 GPU → 64 CPU cores

нет.

В одном workload CPU почти только запускает GPU work.

В другом на CPU выполняются:

image/video decode

augmentation

tokenization

compression

DataLoader workers

network processing

storage processing

Правильный sizing выглядит так:

GPU недогружены?

       ↓

данные не успевают?

       ↓

CPU насыщен?

       ↓

какая именно host-задача насыщена?

       ↓

растёт ли throughput при добавлении cores?

Memory channels входят в выбор платформы

В SS-008 мы рассчитывали, сколько системной RAM требуется data pipeline.

Но одинаковые 512 GB памяти могут иметь разную topology.

EPYC 9005 имеет 12 memory channels на socket; для Xeon 6 Intel также указывает варианты до 12 channels.

При выборе GPU-сервера нужно знать:

socket count

NUMA mode

memory channels

DIMM population

locality CPU workers

locality I/O devices

Потому что:

объём RAM и её доступная bandwidth/locality — разные свойства.

Но размер памяти здесь повторно не рассчитываем: это задача SS-008.

Как читать OEM block diagram

На diagram нужны не маркетинговые подписи, а следующие элементы:

CPU/socket

root ports

PCIe switches

GPU risers

NIC/OCP

NVMe backplane

chipset

inter-socket links

Для каждого критичного устройства ответьте:

Вопрос

Что фиксируем

К какому socket/root complex подключено?

ownership

Есть ли PCIe switch?

path

Какой upstream?

потенциальный shared resource

Какая electrical width?

запланированный link

Какой NUMA node ожидается?

locality

С кем устройство активно работает?

critical peer

Block diagram — один из ключевых документов закупки GPU-сервера, а не вспомогательная картинка из manual.

Как проверить PCIe tree после сборки

Для Linux базовая команда:

lspci -t

lspci -t показывает дерево PCI buses, bridges, devices и connections.

Это позволяет увидеть, что GPU не просто присутствуют в системе, а находятся за ожидаемыми bridges/switches.

Полезно сразу сохранять BDF каждого критичного устройства:

domain:bus:device.function

например:

0000:65:00.0

BDF затем связывает вывод разных инструментов в одну topology matrix.

3
Как проверить фактический PCIe link

Для конкретного BDF:

lspci -s <BDF> -vv

В PCI Express capability нас интересуют прежде всего:

LnkCap

LnkSta

LnkCap используется для capability link, а LnkSta показывает текущую negotiated speed/width.

Пример:

LnkCap: ... Width x16

LnkSta: ... Width x16

соответствует ожидаемой ширине.

Если:

LnkCap: ... Width x16

LnkSta: ... Width x8

это повод проверить конфигурацию.

Но не повод автоматически объявлять аппаратную неисправность. x8 может быть предусмотрен riser design или конфигурацией OEM.

Таким образом:

Проверяйте именно configured server, а не только CPU

Хорошая acceptance запись:

GPU0

Expected:

Gen5 x16

specific riser

root socket 0

expected locality ...

Actual:

BDF ...

LnkSta ...

PCI tree ...

NUMA ...

Если expected и actual расходятся, только тогда начинается диагностика:

другая riser configuration;

BIOS;

bifurcation;

не тот slot;

device limitation;

link training;

hardware issue.

Не угадываем причину по одной строке lspci.

numactl --hardware отвечает только на часть вопроса

Для NUMA inventory полезен:

numactl --hardware

Он показывает доступные NUMA nodes, CPU sets и память.

Но он не является полной картой PCIe hierarchy.

Поэтому для GPU-сервера нужны и другие источники.

lstopo связывает CPU, memory и I/O hierarchy

hwloc умеет обнаруживать PCI devices и bridges и связывать их с ближайшими CPU/memory objects в topology. lstopo отображает эту структуру и поэтому особенно полезен для анализа I/O locality.

Это не замена OEM diagram.

Логика такая:

OEM block diagram

→ что должно быть физически

lstopo

→ как locality видит ОС

На Linux это хороший способ проверить, рядом с какой частью CPU/memory hierarchy находится I/O device.

Что показывает nvidia-smi topo -m

Для NVIDIA GPU базовая команда:

nvidia-smi topo -m

выводит GPU/NIC connectivity и CPU/memory affinities.

Основные обозначения:

Код

Path

PIX

через один PCIe switch

PXB

через несколько PCIe switches

PHB

через PCIe Host Bridge

NODE

через host bridges внутри одного NUMA node

SYS

через PCIe и меж-NUMA SMP interconnect

NV#

через NVLink connections

Особенно заметен SYS: он показывает, что path пересекает NUMA/system interconnect.

Но:

Если это critical path, его нужно проверить workload test.

PIX тоже не является автоматической гарантией скорости

Для GPUDirect RDMA NVIDIA действительно считает PCIe-switch-only path наиболее благоприятным из описанных topology scenarios. Но даже он не даёт гарантированную цифру throughput для произвольной системы.

Реальный результат зависит от:

switch architecture

upstream links

simultaneous traffic

NIC/GPU

software stack

transfer pattern

Поэтому nvidia-smi topo нужно читать как карту маршрутов, а не рейтинг сервера.

Новые nvidia-smi позволяют смотреть GPU, NIC и NVMe отдельно

В актуальной документации доступны:

nvidia-smi topo -gpu

nvidia-smi topo -nic

nvidia-smi topo -nvme

nvidia-smi topo -cpu

nvidia-smi topo -all

-all объединяет GPU, NIC и NVMe connectivity и добавляет CPU/memory/NUMA information для GPU.

Для статьи базовой командой всё равно оставляем:

nvidia-smi topo -m

поскольку на старых driver/tooling versions новые subcommands могут отсутствовать.

Ни одна команда не заменяет остальные источники

Источник

Что проверяет

CPU datasheet

theoretical CPU capability

OEM configuration guide

поддерживаемые варианты сборки

OEM block diagram

проект platform topology

lspci -t

фактический PCIe tree

lspci -vv

capability/current link

numactl --hardware

CPU/memory NUMA topology

lstopo

CPU/memory/I/O locality

nvidia-smi topo

GPU/NIC/NVMe paths

workload benchmark

влияет ли topology на вашу задачу

Правильная проверка GPU-сервера — это совпадение нескольких независимых уровней.

Acceptance matrix для CPU/GPU-платформы

Перед заказом и после поставки полезно заполнить одну таблицу:

Device

BDF

Expected link

Actual link

Switch/path

Root socket

NUMA node

Critical peer

GPU0

…

Gen5 x16

…

…

0

…

NIC0

GPU1

…

Gen5 x16

…

…

0

…

NVMe A

GPU2

…

Gen5 x16

…

…

1

…

NIC1

NIC0

…

Gen5 x16

…

…

0

…

GPU0

NVMe0

…

Gen5 x4

…

…

0

…

GPU1

Обратите внимание: Root socket и NUMA node — отдельные столбцы.

Критерий готовности:

Именно эта таблица намного полезнее рейтинга «лучших CPU для AI».

Как проверить, влияет ли NUMA на workload

Предположим, topology выявила:

GPU0 ↔ NIC1 = SYS

или CPU preprocessing выполняется далеко от NUMA node, к которому локальна целевая GPU.

Это гипотеза о bottleneck.

Проверять её нужно сравнением:

одинаковая задача

одинаковая GPU

одинаковая NIC/storage

одинаковый software stack

local placement

vs

remote placement

И измерять:

throughput

latency

GPU utilization

network/storage throughput

CPU load

Только после этого можно говорить:

для нашей платформы remote placement стоил столько-то.

Универсального:

cross-NUMA = −20%

не существует.

Полный порядок выбора CPU для GPU-сервера

1. Зафиксировать workload

               ↓

2. Определить GPU

               ↓

3. Перечислить NIC и NVMe

               ↓

4. Определить critical data paths

               ↓

5. Посчитать ideal endpoint lane demand

               ↓

6. Отобрать CPU по I/O capability

               ↓

7. Выбрать exact server configuration

               ↓

8. Проверить OEM compatibility

               ↓

9. Прочитать block diagram

               ↓

10. Найти switches / shared uplinks

               ↓

11. Определить root sockets

               ↓

12. Определить NUMA mode/nodes

               ↓

13. Проверить host CPU workload

               ↓

14. Проверить memory subsystem

               ↓

15. Собрать сервер

               ↓

16. Проверить PCIe tree

               ↓

17. Проверить negotiated links

               ↓

18. Проверить NUMA/I/O topology

               ↓

19. Выполнить workload validation

Такой подход отвечает сразу на два вопроса:

Можно ли физически собрать нужную конфигурацию?

и:

Будет ли её topology подходящей именно для нашего data flow?

Worksheet для выбора CPU и платформы

WORKLOAD

Primary workload:

Critical data paths:

GPU

Exact model:

Count:

Expected PCIe generation:

Expected electrical width:

P2P requirements:

NETWORK

NIC model:

Count:

PCIe link:

RDMA:

GPUDirect RDMA required:

STORAGE

NVMe model/count:

Link per drive:

Backplane:

Critical GPU path:

CPU

Exact SKU:

Socket count:

PCIe capability:

Cores:

Memory channels:

SERVER

Exact model:

Base configuration:

Riser configuration:

GPU topology:

PCIe switches:

NIC/OCP topology:

NVMe topology:

NUMA

BIOS NUMA/NPS/SNC mode:

Root socket per device:

NUMA node per device:

CPU worker placement:

VALIDATION

PCI BDF map:

lspci tree:

Expected link:

Actual LnkSta:

numactl:

lstopo:

nvidia-smi topo:

Cross-NUMA critical paths:

PERFORMANCE

CPU saturation:

Locality A/B test:

I/O saturation:

Unresolved topology risks:

RESULT

CPU/platform accepted:

Особенно важное новое поле после technical review:

BIOS NUMA/NPS/SNC mode

Как понять, что CPU недостаточен

CPU/platform может быть слабым не только из-за количества ядер.

Проблема возможна, если:

  • OEM не поддерживает требуемое сочетание GPU/NIC/NVMe;

  • platform topology не даёт нужных links;

  • critical peers оказываются неудобно распределены;

  • CPU preprocessing насыщает cores;

  • memory subsystem не обеспечивает host workload;

  • второй socket создаёт нежелательный remote path для критичных устройств.

Это разные причины и требуют разных решений.

Как понять, что CPU избыточен

Если:

platform I/O requirement закрыт;

CPU не насыщается;

GPU получают данные вовремя;

memory subsystem не bottleneck;

добавление cores не меняет throughput;

переход на более старший CPU может не дать полезного эффекта.

А установка второго процессора без I/O/compute/memory причины может лишь усложнить NUMA topology.

В GPU-сервере нужен не максимальный CPU из прайс-листа.

Нужен CPU и server design, которые закрывают конкретные host-side ограничения workload.

Какой CPU выбрать для GPU-сервера

Начинайте со списка GPU, NIC и NVMe и с путей данных между ними.

Посчитайте ideal PCIe lane demand, но используйте это число только как первичный фильтр CPU.

После этого обязательно проверяйте exact server configuration: CPU count, risers, switches, storage backplane, NIC placement и electrical widths.

Отдельно зафиксируйте NUMA mode. Один CPU socket не обязательно соответствует одному NUMA node: архитектура и BIOS могут делить socket на несколько NUMA domains.

После сборки сравните план с фактической машиной:

OEM block diagram

        ↕

lspci tree / LnkSta

        ↕

NUMA topology

        ↕

lstopo

        ↕

GPU/NIC/NVMe topology

И только после этого используйте workload benchmark для оценки того, имеет ли найденная locality практическое значение.

Итоговый критерий можно записать так:

Подходящий CPU для GPU-сервера

=

достаточная CPU I/O capability

+

поддерживаемая OEM configuration

+

подходящая PCIe/NUMA topology

+

достаточный host compute

+

достаточная memory subsystem

+

проверенная actual configuration

Коротко:


Проверить баланс CPU, GPU и периферии

Для проверки конфигурации нужны точные модели и количество GPU, NIC и NVMe, CPU SKU, server model, base/riser configuration, планируемый NUMA mode и критичные потоки данных — например NIC→GPU или NVMe→GPU.

По этим данным можно проверить PCIe budget, switches, root/socket/NUMA placement и определить, подходит ли выбранная CPU/platform configuration до закупки оборудования.