NVIDIA подробно описывает чтения Python-пути к памяти GPU с помощью GPUDirect Storage
NVIDIA опубликовала техническое руководство по 2026-10-22 , объясняющее, как приложения на Python могут читать данные напрямую в память GPU с помощью Magnum IO GPUDirect Storage, а также как проверить, использовал ли чтение ускоренный путь или запасной вариант с процессорным этапом. В посте говорится, что различие важно, потому что KvikIO и cuFile принимают отдельные решения о маршрутизации до того, как запрос попадёт в хранилище.
Как выбирается путь
По данным NVIDIA, GPUDirect Storage создаёт прямой путь данных между поддерживаемым хранилищем и GPU-памятью, избегая ненужного этапирования через память CPU и снижая общее использование CPU. В Python-стеке, описанном в посте, KvikIO расположен над cuFile: KvikIO решает, вызывать ли cuFile вообще, а cuFile — по ускоренному пути nvidia-fs или по пути совместимости, проходящем данные через память хоста.
Компания утверждает, что доступ к cuFile API сам по себе не доказывает, что ускоренный путь был использован. Это различие является центральным в учебнике, который показывает, как проверять стандартные параметры KvikIO, подтверждать компоненты GDS с помощью gdscheck.py, а затем использовать gds_stats для определения, учитываются ли операции в nvfs или posix.
Что использовалось в учебнике
NVIDIA утверждает, что пример был протестирован на x86_64 системе с H100 GPU, CUDA 13.3 и cuFile 1.18. В установке также использовалось локальное NVMe-устройство, отформатированное с ext4, PIX-соединение между GPU и NVMe, отключённые IOMMU и ACS, а также модуль ядра nvidia-fs загружен для обеспечения ускоренного пути.
В примере с Python руководство создаёт файл 1 GiB, выделяет массив CuPy в памяти GPU и считывает файл в этом буфере с помощью KvikIO. В посте говорится, что KvikIO отчитал compat_mode как AUTO и gds_threshold 16 KiB в обучающей системе. AUTO советует KvikIO сначала попробовать cuFile, а если cuFile недоступен, вернуться к POSIX, а чтения ниже порога — использовать путь POSIX напрямую.
Проверка с помощью статистики cuFile
В статье говорится, что один подтверждение фактического пути передачи — включить CUFILE_STATS_LEVEL=3 и проверить запущенный процесс с помощью gds_stats. В примере с учебником стандартный размер задачи KvikIO 4 МиБ делил запрос 1 ГиБ на 256 чтения, и статистика показала n=256, nvfs =256 и posix=0, что указывает на то, что все операции использовали путь nvidia-fs.
В посте также сравниваются слои путём изменения настроек. При KVIKIO_COMPAT_MODE=off KvikIO всё ещё использует cuFile, и cuFile может быть вынужден перейти в режим совместимости с CUFILE_FORCE_COMPAT_MODE=true, который перемещает операции под posix. С KVIKIO_COMPAT_MODE=on KvikIO полностью обходит cuFile и выполняет чтение через собственный CPU-стадированный POSIX бэкенд.
Планирование и размер запросов cuFile
NVIDIA утверждает, что cuFile имеет собственные настройки выполнения в cufile.json, которые влияют на разбиение и планирование запросов, включая execution.parallel_io, execution.max_io_threads, execution.min_io_threshold_size_kb, execution.max_request_parallelism и execution.max_io_queue_depth. В примере конфигурации четыре рабочие потоки cuFile, max_request_parallelism настроены на четыре, а min_io_threshold_size_kb на 8192 означало, что чтение 1 GiB можно было дополнительно разделить после получения cuFile.
В руководстве отмечается, что если KVIKIO_TASK_SIZE настроен на 1 ГиБ, KvikIO отправляет один большой запрос cuFile, который затем использует свой незарегистрированный путь планирования буфера, поскольку буфер-получатель явно не зарегистрирован. В посте говорится, что в данном случае cuFile ограничивает запрос четыре частями, каждая 256 МиБ, и что эти части являются запланированными рабочими единицами, а не отдельными переносами хранилища. Также говорится, что целевой планирование 8 МиБ будет иметь значение для запроса 16 МиБ, который cuFile разделит на два 8 МиБ частей.
Почему NVIDIA делает акцент на стеке
В статье учебник рассматривается в контексте более широких требований по перемещению данных ИИ, ссылаясь на индекс 2025 Stanford ИИ, согласно которому вычисления для заметных ИИ моделей удваивались примерно каждые пять месяца, а обучающие наборы данных для больших языковых моделей удваивались примерно каждые восемь месяца. NVIDIA также отмечает, что Python был основным интерфейсом приложений для многих ИИ проектов, а cuFile остаётся C API, что делает KvikIO мостом между кодом на Python и уровнем ускорения хранения.
Согласно публикации, KvikIO входит в NVIDIA CUDA-X для науки о данных и имеет корни в более ранних работах cuDF по ускоренному внедрению Parquet и ORC. Компания утверждает, что тот же путь хранения с тех пор использовался в рабочих процессах cuCIM цифровой патологии, cuPhoton xDataReader и GPU-ускоренном Presto, но сам учебник сосредоточен на том, как подтвердить, действительно ли чтение на Python выбрал ускоренный путь.
В посте не присваиваются прирост производительности каждой конфигурации. Вместо этого подчеркивается, что работа по прямому пути зависит от совместимого оборудования, драйверов, файловых систем, топологии и настроек, а неподдерживаемые конфигурации могут вернуться к режиму совместимости. NVIDIA советует пользователям проверять свои рабочие нагрузки с помощью gds_stats, а не предполагать ускорение.