Представим, что вы запустили в облаке или на своем оборудованиии обучение модели. Выбрали конфигурацию с A100, H100 или L40S, может, даже с RTX 4090. Запускаете обучение модели, ждете, что процесс пойдет как по маслу. Но вместо этого в инструментах мониторинга видите, что GPU загружен на 40–60%, а то и меньше.

Причина не в «кривом коде» и не в том, что GPU «не тянут». Проблема глубже: производительность AI-кластера определяется не пиковыми терафлопсами, а самым слабым звеном в цепочке ввода-вывода. Даже самый быстрый GPU беспомощен, если данные не успевают до него «доехать». Он просто ждет.

В статье разберем, почему для эффективного AI-обучения важны быстрые диски, память и CPU, и расскажем, как спроектировать сбалансированную инфраструктуру — даже в условиях ограниченных ресурсов.

Главные узкие места в AI-инфраструктуре

Вся цепочка доставки от хранилища до GPU состоит из трех ключевых звеньев — и любое из них может стать узким местом:

  1. Диски — если подсистема хранения не справляется с чтением данных, особенно при работе с миллионами мелких файлов, GPU остаются без работы. Они ждут, пока CPU и дисковая подсистема подготовят следующий батч.

  2. Сеть — когда вычисления достаточно тяжелые, например обучение LLM или крупной CV-модели, а данные при этом читаются из сетевого хранилища (СХД), одна и та же сеть одновременно передает датасет на узлы и синхронизирует градиенты между GPU. Если ее пропускная способность или задержки не выдерживают двойной нагрузки, узлы начинают ждать, а эффективность масштабирования резко падает.

  3. CPU и оперативная память — именно процессор выполняет всю тяжелую работу по чтению, декодированию (JPEG/PNG), аугментациям и формированию батчей. Если CPU слабый или используется медленная память, он не успевает поддерживать даже одну RTX 4090.

Эти компоненты формируют сквозной I/O-пайплайн, и его производительность определяется самым слабым звеном. Дальше разберем каждую из этих зон подробно.

Хранение данных и преимущества локальных NVMe

Главная проблема при работе с датасетами — неоптимальный формат хранения данных. Если они лежат в виде миллионов мелких файлов (JPEG, TXT, JSON), система будет тратить больше времени на открытие и поиск метаданных, чем на само чтение. Но стоит упаковать их в крупные последовательные архивы, например в формате WebDataset (.tar) или TFRecord, и ситуация кардинально меняется. 

Переход к оптимизированным форматам может ускорить передачу информации в 3–10 раз. Вот как это выглядит на практике:

Формат хранения

Пример

Скорость чтения (на NVMe)

Загрузка GPU

Комментарий

Миллион JPEG-файлов

ImageNet

~0,8 ГБ/с

50–60%

Высокий IOPS, низкая эффективность

TFRecord/WebDataset (.tar)

ImageNet-shard

~2,5–3,5 ГБ/с

85–95%

Последовательное чтение, минимум системных вызовов

Parquet (табличные данные)

Kaggle-датасет

~1,5–2 ГБ/с

80%+

Колоночное хранение, сжатие

Сырой текст (миллионы .txt)

Корпус новостей

~0,3 ГБ/с

<50%

Много open()/read()

Сжатый текст (.tar.zstd)

Корпус новостей

~1,2 ГБ/с

80%+

CPU распаковывает, диск разгружен

Такой подход сводит количество системных вызовов к минимуму, включает эффективное кеширование и позволяет использовать потенциал диска на полную.

В реальных AI-проектах данные сначала обычно хранятся в централизованных системах — будь то Ceph, MinIO или даже NAS. Эти решения удобны для совместной работы, резервного копирования и управления большими объемами. Но при запуске обучения их пропускная способность на один клиент редко превышает 1–2 ГБ/с. Этого недостаточно, чтобы полностью загрузить даже одну RTX 4090 или L40S.

Именно поэтому стандартная практика — скопировать датасет локально на NVMe перед стартом обучения. Это не вопрос экономии, а необходимость для достижения высокой скорости подачи данных. Именно так поступают и в крупных облаках: сначала данные лежат в общем хранилище, а перед обучением разворачиваются на быстрых локальных дисках инстанса.

Преимущества локальных NVMe:

  • Максимальная скорость на узел. Локальный NVMe дает 5–7 ГБ/с (Gen4) и до 12+ ГБ/с (Gen5). Этого достаточно, чтобы полностью насытить даже мощную RTX 4090 или L40S. А при обучении на топовых картах вроде RTX 6000 Ada или новой RTX 6000 Blackwell с 96 ГБ памяти, требуется еще больше. И это скорость на один диск, если собрать в массив, цифры можно улучшить.

  • Простота и предсказуемость. Нет зависимости от сети, нет задержек из-за конкуренции за ресурсы СХД — данные читаются напрямую с диска в память CPU/GPU.

Сеть — не «просто интернет», а канал обмена между инстансами

Если вы работаете с одним облачным инстансом и одной видеокартой, сеть внутри кластера вам вообще не нужна. Весь цикл обучения происходит локально: данные читаются с NVMe, обрабатываются CPU и поступают в GPU. Никакого обмена с другими узлами — и, соответственно, никаких требований к сети между серверами.

Но как только вы решаете масштабировать задачу на 2–4 сервера (например, запустить Data Parallel для ускорения обучения), между ними начинает генерироваться интенсивный трафик: градиенты, веса, иногда активации. И здесь уже недостаточно «обычного» интернета. Эти сервера уже должны быть в локальной сети, и достаточно быстрой, от 10 гбит/с.

Даже при обучении относительно небольшой модели, например на 1 млрд параметров, обмен градиентами может генерировать до 8–10 ГБ/с на инстанс. Если этот трафик идет по той же сети, что и подгрузка датасета или запись чекпойнтов, возникает конкуренция за пропускную способность, и эффективность масштабирования резко падает.

Чтобы было проще понять, какие требования к сети возникают в зависимости от масштаба задачи, мы собрали типичные сценарии в таблице:

Сценарий

Типичная задача

Требования к сети

1 инстанс, 1 GPU

Обучение CV-модели, файнтюнинг LLM

Сеть не участвует в обучении — данные читаются с локального NVMe, поэтому внешняя сеть нужна только для загрузки датасета (1–10 Гбит/с достаточно)

2–4 инстанса

Data Parallel для ResNet, BERT, небольших LLM

от 10 до 100 Гбитс/с обычно достаточно. Наиболее часто диапазон от 10 до 25 Гбит/с

5+ инстансов или большие LLM

Обучение с нуля, ZeRO-3/FSDP

Сеть уже будет требовать от 100 до 200G+ и сложная настройка — редкий кейс в РФ, проще решить переносом задачи в один сервер с несколькими GPU.

Когда CPU и RAM мешают GPU работать на полную

Даже если вы работаете всего с одной видеокартой, ваш GPU может простаивать не из-за нее самой, а потому что CPU и оперативная память не успевают его «кормить».

Вот что происходит на практике:

  • Данные считываются с NVMe → попадают в RAM → CPU декодирует изображения (JPEG/PNG), применяет аугментации, формирует батч → только потом данные передаются в память GPU.

  • Если CPU слабый (менее 16 ядер или частота ниже 3.5–4 ГГц), он не справляется с этой нагрузкой.

  • Если используется медленная DDR4-память с низкой частотой и высокими таймингами, ее пропускная способность становится узким местом — особенно при работе с большими батчами и параллельными воркерами DataLoader.

В итоге GPU ждет следующий батч, а вы платите за простой.

Практические рекомендации для российских команд

Главное правило при работе с AI-инфраструктурой в условиях ограниченного бюджета — не гнаться за самыми мощными компонентами, а подбирать их под конкретную задачу:

Для CV и небольших NLP-моделей до 10–20 млрд параметров отлично подойдут GPU от 24GB до 48GB.

Если модель не помещается в 24–48 ГБ — можно собрать кластер или использовать новые 96 ГБ видеокарты, которые появятся в нашем облаке уже в ближайшие 2–3 месяца. Это позволит запускать даже 70B-модели в одном инстансе, без сложного распределенного обучения. Либо использовать более дорогие карты A100/H100 с объемом памяти от 80Gb.

Важно:

  • Эти конфигурации нужно запускать на локальных NVMe-дисках — только так вы получите 3–12 ГБ/с на инстанс и полностью насытите GPU данными. Плюс возможность получить скорость и выше, при объединенных в массив дисках.

  • Если вы используете несколько облачных серверов, они должны обмениваться данными по быстрой локальной сети между ними.

  • CPU должен быть топовым: минимум 3.5 ГГц, лучше 4+ ГГц. Процессоры ниже 3 ГГц сильно снижают эффективность даже RTX 4090, так как не успевают готовить данные для GPU. Количество ядер можно выбрать исходя из задачи, но обычно менее 16 ядер - дают меньше эффективности.

Чтобы получить полную производительность GPU, в BIOS сервера:

  1. Выставьте оптимальную NUMA-топологию (например, на AMD EPYC — NPS = 1 или 2). Это снизит задержки доступа к оперативной памяти.

  2. Отключите IOMMU (если не используете виртуализацию) — это ускорит P2P-обмен между PCIe-устройствами.

  3. Убедитесь, что GPU и NVMe-диски подключены к разным PCI-E портам, чтобы не делить пропускную способность.

Как проверить, что систе��а работает на максимуме

Даже при правильной архитектуре узкие места могут возникнуть из-за неправильной настройки. Чтобы быстро найти проблему, используйте этот диагностический минимум:

Компонент

Инструмент

Норма (здоровая система)

Признак проблемы

GPU

nvidia-smi dmon

Util ≥ 85–95%

Util ≤ 60%, большие пробелы

CPU

htop, perf

Загрузка 50–70% (оставляет запас)

100% user или iowait

Диск

iostat -x 1

%util < 70%, await < 2 мс (NVMe)

%util = 100%, await > 10 мс

Сеть

nccl-tests, ib_write_bw

≥ 85% от теории (например, 10,5 ГБ/с на 100GbE)

< 50% теории, высокий jitter

DataLoader

torch.profiler

Время загрузки < 10% шага

Загрузка > 30% шага

Чек-лист «что проверить в первую очередь»:

  1. Формат данных: переход от мелких файлов к tar /TFRecord / WebDataset дает в 3–10 раз больше скорости даже на том же диске.

  2. DataLoader: обязательно настройте num_workers (обычно 4–8 на GPU), включите pin_memory=True, используйте prefetch_factor=2–4.

Профилирование: запустите короткий тест сnvidia-smi dmon, iostat -x 1, torch.profiler или Nsight Systems. Если GPU загружены < 85% — ищите узкое место в I/O.

TCO-подход: иногда выгоднее оптимизировать, чем докупать

В условиях, когда бюджет на AI ограничен (до 100–150 тыс. ₽/мес), главный вопрос — не «сколько GPU купить», а «как максимально эффективно использовать то, что уже есть».

Оптимизация I/O-пайплайна часто дает ускорение в 2–3 раза — это эквивалентно получению «бесплатных» GPU. Напротив, покупка еще одного GPU при слабом CPU или медленном диске не даст линейного ускорения — вы просто получите два простаивающих ускорителя вместо одного.

Именно поэтому перед тем, как масштабироваться по железу, всегда проверяйте загрузку GPU. Если она ниже 85% — скорее всего, вы платите за простой, а не за вычисления.

Заключение: сбалансированная инфраструктура — ключ к эффективному AI

Мощные GPU — это лишь одна часть уравнения. Без быстрых дисков, продуманной внутриузловой топологии и высокоскоростной сети они будут простаивать, а ваш бюджет — тратиться впустую. Как показывает практика, часто именно I/O, а не вычисления определяет реальную скорость обучения. И это справедливо как для суперкомпьютеров, так и для «земных» конфигураций на базе RTX 4090 и локальных NVMe.

И да, даже в условиях РФ с ограничениями на бюджеты можно строить эффективные AI-системы. Главное — понимать, где именно появляются узкие места, и фокусироваться на их устранении. Иногда достаточно перейти от миллионов мелких файлов к tar-шардам, правильно настроить RoCE или просто добавить второй NVMe в сервер — и загрузка GPU вырастет с 50 до 90%. А это значит, что модель обучится вдвое быстрее без покупки нового GPU.

А в вашей AI-инфраструктуре что-то тормозит? С какими узкими местами пришлось сталкиваться на практике и как вы их решили? Делитесь опытом и лайфхаками в комментариях ↓

Комментарии (7)


  1. StasTukalo
    30.10.2025 07:28

    Спасибо за обзор. Хотелось бы задать несколько вопросов:

    CPU должен быть топовым: минимум 3.5 ГГц, лучше 4+ ГГц. Процессоры ниже 3 ГГц сильно снижают эффективность даже RTX 4090, так как не успевают готовить данные для GPU.

    Вы сами ранее писали, что данные нужно готовить заранее. И если подготовка оных требует мощностей цпу, то готовить их надо, наверное, не на гпу-сервере, а на соответствующей машине с нужными цпу. Или нет? Вообще, подготовка и упаковка данных для обучения- это как-то по умолчанию маст хэв, даже говорить об этом странно.

    Убедитесь, что GPU и NVMe-диски подключены к разным PCI-E портам, чтобы не делить пропускную способность

    Несколько неправильно написано: нет никаких "PCI-E портов", есть ограниченное процессором и чипсетом количество линий PCI-E; пропускная способность на конкретное устройство складывается из пропускной способности этих линий, задействованных при подключении этого устройства- понятно, что х16 будет быстрее чем х1. И при проектировании гпу-машины мы должны решить, как оптимальнее эти линии потратить- нужно подключить ссд, много гпу, и возможно смарт сетевуху. Что бы подольше не упираться в построение гпу-кластера и распределенными между машинами процессами, хочется поставить побольше гпу в одну. При этом проблема выглядит так: или N карт с подключением х16 или 2N карт с подключением х8 или 4N карт с подключением х4. В общем, наверное, это зависит от задач машинного обучения, которые предполагается гонять на этой машине. А вот о конкретных решениях хотелось бы услышать от вас- расскажите пожалуйста, насколько (и на каких задачах) подключение х4 хуже х8 и х16, какая практика у вас?


    1. mClouds_editor Автор
      30.10.2025 07:28

      Видим, что вы уже с практикой ) Напишем про нашу архитектуру. Наши хосты под GPU адаптеры, в настоящий момент стандартные x86 2U хосты Dell R7625 с EPYC 9374F. Так, к примеру, сейчас у нас карты L40S работают парой в таких хостах, соот-но это x16. Больше их просто не поставить ввиду ограничений конкретного сервера. В новом поколении EPYC 9005, мы уже заказываем хосты Dell R7625, под 6 карт L4 в том числе, которые также работают по x16. Диски при этом подключать планируется в RAID массив на уровне контроллера H975i , PCI-e 5,0 соответсвенно. Для GPU меньше x16 не используется у нас. Такая архитектура, обусловлена, в том числе экономикой конечной и уровнем задач для конечного клиента.


      1. StasTukalo
        30.10.2025 07:28

        Ясно, спасибо!


  1. bindmeister
    30.10.2025 07:28

    Спасибо за обзор ,как раз себе привез 40  L40S - буду ставить и тестировать такой подход


  1. NKulikov
    30.10.2025 07:28

    Именно так поступают и в крупных облаках: сначала данные лежат в общем хранилище, а перед обучением разворачиваются на быстрых локальных дисках инстанса.

    Спорно. В больших облаках используется High Performance Storage (HPS), типа Weka/DDN/VAST. Вот примеры Nebius, CoreWeave, Crusoe, Together.AI и прочие. Схема обычно выглядит иначе - есть холодное большое хранилище (S3), потом данные оттуда загружаются в HPS и данные из HPS напрямую загружаются в VRAM через GDS. https://www.weka.io/learn/glossary/gpu/what-is-gpudirect-storage/ Локальные NVMe в серверах есть, но в качестве Scratch патриции.

    Но как только вы решаете масштабировать задачу на 2–4 сервера (например, запустить Data Parallel для ускорения обучения), между ними начинает генерироваться интенсивный трафик: градиенты, веса, иногда активации.

    Не очень понятно откуда веса/активации между GPU или узлами, если у вас Date Parallelism: "Data Parallelism is the simplest form of parallelism in which each GPU holds the entire copy of the model weights and each GPU (rank) receives a different subset of the data. This type of parallelism has the lowest level of communication since just the gradients needs to be summed up (all reduce) between each GPU." При Tensor Parallelism или Pipeline - понятно.

    Даже если вы работаете всего с одной видеокартой, ваш GPU может простаивать не из-за нее самой, а потому что CPU и оперативная память не успевают его «кормить»

    RAM медленнее VRAM практически всегда, особенно по сравнению с HBM (с точки зрения полосы). CPU тоже. Но чтобы она не становилась узким местом и есть GDS ("GPUDirect® Storage (GDS) enables a direct data path for direct memory access (DMA) transfers between GPU memory and storage, which avoids a bounce buffer through the CPU. Using this direct path can relieve system bandwidth bottlenecks and decrease the latency and utilization load on the CPU"), GPUDirect RDMA (GPUDirect RDMA is a technology introduced in Kepler-class GPUs and CUDA 5.0 that enables a direct path for data exchange between the GPU and a third-party peer device using standard features of PCI Express. Examples of third-party devices are: network interfaces, video acquisition devices, storage adapters.), NCCL (NCCL employs a sophisticated and hierarchical approach to intra-node communication, prioritizing the lowest latency and highest bandwidth paths available between GPUs residing on the same physical machine (see Figure 1). This strategy heavily leverages NVIDIA’s GPUDirect Peer-to-Peer (P2P) technology, which enables GPUs to directly access each other’s memory without staging through CPU system memory). Короче, в общем CPU/RAM не должны находиться в Data Plane (через них должны ходить данные) - они нужна для управления потоками.

    • Если CPU слабый (менее 16 ядер или частота ниже 3.5–4 ГГц), он не справляется с этой нагрузкой.

    • CPU должен быть топовым: минимум 3.5 ГГц, лучше 4+ ГГц. Процессоры ниже 3 ГГц сильно снижают эффективность даже RTX 4090, так как не успевают готовить данные для GPU

    Про частоту тоже странно. Почему тогда NVIDIA ставит в DGX B200 процессоры с частотой 2.1GHz (2 x Intel Xeon 8570P)? Мне кажется потому, что, как я писал выше, CPU не должно быть в Data Plane, а остальное очень хорошо паралеллиться, поэтому важнее количество ядер, а не частота.

    1. Убедитесь, что GPU и NVMe-диски подключены к разным PCI-E портам, чтобы не делить пропускную способность.

    Это тоже очень странная рекомендация, ибо GDS рекомендует делать строго обратное. For hardware platforms, where GPUs do not share the same Root Port with the Storage NICs, peer-to-peer transactions (p2p) may have higher latency and are inefficient compared to p2p traffic under PCIe switches. И я не очень понял между чем там делится полоса, если оно включено в PCIe Switch из которого по 16 линий смотрят на GPU, а еще сколько-то линий на NVMe.

    1. Выставьте оптимальную NUMA-топологию (например, на AMD EPYC — NPS = 1 или 2). Это снизит задержки доступа к оперативной памяти.

    Тут все несколько сложнее. Та же AMD пишет: "The default value is NPS1, but there are times when setting this to NPS4 boosts performance when doing concurrent executions during inferencing with multiple instances that are each running in different CCDs, thus maximizing throughput. Generally speaking, all deep learning workloads, training, or inference get better performance without accessing hardware resources across NUMA nodes."

    P.S. Все написанное выше, в первую очередь, касается больших систем на DataCenter GPU (а не GeForce), но вы вроде про них и пишите


    1. mClouds_editor Автор
      30.10.2025 07:28

      Мы, конечно, про более менее земные нагрузки для реалий РФ, где большинство еще считает подвигом запуск ИИ на картах типа GTX 1080, а 4090 и вообще топ топовый) Про более серьезные решения мы писали в предыдущих статьях, кстати. И лишь малая часть в РФ уже работает в коммерческом продуктиве с L40/A100/H100 . У нас сейчас, даже, те еще квесты с просто достать карты RTX 6000 BSE 96Gb, для рынка РФ.


      1. NKulikov
        30.10.2025 07:28

        Ну так все написанное справедливо, и для L40, и для A100, и для H100, и для RTX PRO 6000 BSE. Только вот в GeForce GPUDirect нету (я сейчас не говорю про варианты с анлоком) со всеми вытекающими.