CUDA Toolkit 13.4: Windows on Arm, превью Rubin и MPS V3

NVIDIA выпустила CUDA Toolkit 13.4 — набор инструментов для разработки под GPU. В этом релизе CUDA впервые выходит за пределы Linux на платформу Windows on Arm, появляется предварительная поддержка архитектуры Rubin, а управление общими GPU переезжает на новую контрольную прослойку MPS V3.

Разработчики, которые пишут CUDA-приложения под Arm, раньше могли рассчитывать только на Linux. Теперь то же самое доступно и в Windows on Arm. Параллельно NVIDIA открывает ранний доступ к архитектуре Rubin (compute capability 107) — пока в режиме превью, чтобы портирование началось до того, как поддержка Rubin дойдёт до статуса general availability в одном из будущих релизов тулкита. Rubin — следующее поколение GPU-архитектуры, на которое NVIDIA делает ставку в эпоху агентного ИИ.

MPS V3: программируемое разделение GPU

Multi-Process Service (MPS) V3 меняет слой управления общими GPU-ресурсами. Появились скриптуемый CLI, именованные серверные инстансы и пространства имён для организации параллельных нагрузок. Добавлена поддержка конфигурации в TOML, управление партициями потоковых мультипроцессоров (SM) и лимиты GPU-памяти, интегрированные с cgroup.

На практике это означает, что вычислительную производительность, границы памяти и приоритет выполнения можно задавать программно, а MPS встраивается в контейнерные окружения с сохранением изоляции ресурсов для каждого процесса. Для старта есть quickstart и полная документация.

CUDA Compute Fabric Transport и локальность

CUDA Compute Fabric Transport (CFT) предлагает транспортно-ориентированный способ перемещения данных по фабрике NVLink для крупных приложений и коммуникационных библиотек. Вместо отображения каждого удалённого GPU-аллокатора в виртуальное адресное пространство процесса софт адресует именованные логические эндпоинты по идентификатору и смещению, а затем отправляет асинхронные операции put, get и reduction прямо с GPU.

Подход снижает давление на виртуальные адреса в больших multi-GPU системах, поддерживает unicast и multicast, а также сообщает статус завершения и ошибок — приложение может обнаружить сбойную передачу, повторить её или перенаправить. CFT доступен только через CUDA Driver API и предназначен для разработчиков коммуникационных библиотек, которым нужны возможности, недоступные в высокоуровневых библиотеках. Большинству прикладных разработчиков NVIDIA рекомендует NCCL или NVSHMEM.

CUDA 13.4 также открывает программный доступ к locality domains — частям GPU, содержащим SM и память устройства. Приложение может выделить память в locality domain и создать green context с SM-ресурсами в том же домене: совместное размещение вычислений рядом с данными помогает на устройствах с несколькими доменами. Кроме того, добавлен API для запроса резидентности unified memory — функция cudaMemGetLocationInfo позволяет библиотекам и рантаймам понимать, где физически лежат управляемые или системно выделенные данные, и избегать лишних миграций страниц и удалённых обращений к памяти.

Установка: драйвер больше не в комплекте

Установщики CUDA SDK перестали включать драйвер NVIDIA. Теперь драйвер nvidia-open или пакеты cuda-toolkit ставятся отдельно, любым удобным пакетным менеджером.

На когерентных платформах — NVIDIA Grace Hopper, Grace Blackwell и Vera Rubin — драйвер по умолчанию переключился с NUMA на Coherent Driver-based Memory Management (CDMM). Режим NUMA по-прежнему полностью поддерживается и выбирается параметром модуля ядра, но менять его нужно до обновления: настройка действует на всю ноду и требует перезагрузки драйвера или системы.

NVCC получил совместимость с host-компиляторами GCC 16 и Clang 22 на поддерживаемых платформах, а новая цель компиляции SM_107 позволяет собирать код под GPU Rubin.

CUDA Python: текстуры, NUMA и AoT-компиляция

cuda.core 1.1.0 расширяет стабильный Python API. Модуль cuda.core.texture даёт первоклассные Python-интерфейсы для работы с texture и surface memory: OpaqueArray и MipmappedArray представляют аппаратно разложенные GPU-аллокации, TextureObject включает bindless-чтение ядрами с аппаратной фильтрацией, а SurfaceObject — типизированные загрузки и сохранения со стороны ядра.

from cuda.core import Device
from cuda.core.texture import (
      OpaqueArrayOptions,
      ResourceDescriptor,
      TextureObjectOptions,
)
from cuda.core.typing import ArrayFormatType, FilterModeType

dev = Device()
dev.set_current()
stream = dev.create_stream()

with dev.create_opaque_array(
      OpaqueArrayOptions(
          shape=(1024, 1024),
          format=ArrayFormatType.FLOAT32,
          num_channels=1,
      )
) as array:
      array.copy_from(image, stream=stream)

      resource = ResourceDescriptor.from_opaque_array(array)
      options = TextureObjectOptions(filter_mode=FilterModeType.LINEAR)

      with dev.create_texture_object(
          resource=resource,
          options=options,
      ) as texture:
          # Pass texture.handle to a CUDA C++ kernel.
          run_kernel(texture.handle)

ManagedMemoryResource.allocate() теперь возвращает ManagedBuffer со свойствами для CUDA memory advice: можно пометить данные как read-mostly, задать предпочтительное размещение и процессоры, имеющие доступ. Новый тип Host дополняет Device при указании мест памяти — он представляет произвольную host-память, конкретную NUMA-ноду или ноду, связанную с вызывающим потоком. Добавлены .pyi-стабы для всех публичных API — IDE получают автодополнение, а кодинг-агенты видят сигнатуры и типы.

cuda.compute 1.1 приносит ahead-of-time (AoT) компиляцию объектов алгоритмов CCCL сразу под несколько GPU-архитектур, в том числе на сборочных системах без GPU. ProxyArray и ProxyValue описывают типы аргументов без выделения памяти устройства, serialize() создаёт артефакт для хранения и развёртывания, а deserialize() восстанавливает алгоритм на целевой системе без перекомпиляции, подгружая сборку под текущую архитектуру.

import numpy as np

from cuda.compute import (
      OpKind,
      ProxyArray,
      ProxyValue,
      make_reduce_into,
      serialize,
)

reducer = make_reduce_into(
      d_in=ProxyArray(np.int32),
      d_out=ProxyArray(np.int32),
      op=OpKind.PLUS,
      h_init=ProxyValue(np.int32),
      compute_capability=[80, 90],  # Build for sm_80 and sm_90.
)

with open("reduce.cclb", "wb") as file:
      file.write(serialize(reducer))

CCCL 3.4: scan на Blackwell до 92% пропускной способности

Новая warp-specialized реализация cub::DeviceScan для Blackwell использует Tensor Memory Accelerator (TMA), чтобы перекрывать перемещение данных и вычисления и снижать накладные расходы на синхронизацию. В бенчмарках на GPU Blackwell реализация cub::DeviceScan::Sum достигает до 92% утилизации пропускной способности памяти — против примерно 50% у предыдущей версии — на протестированных типах данных. Оптимизация рассчитана на большие объёмы scan, при этом сохранены запасные пути для неподдерживаемых архитектур, типов данных, итераторов и тулчейнов.

CCCL 3.4 завершает перевод device-wide алгоритмов CUB на single-call перегрузки: раньше приложение вызывало алгоритм, чтобы узнать объём временной памяти, выделяло её и вызывало алгоритм снова, теперь память берётся из memory resource, переданного через execution environment. Старый двухфазный API не объявлен устаревшим и остаётся доступным там, где нужен явный контроль над хранилищем.

auto device = cuda::devices[0];
auto stream = cuda::stream{device};
auto pool   = cuda::device_default_memory_pool(device);

auto env = cuda::std::execution::env{
      cuda::stream_ref{stream},
      pool
};

cub::DeviceReduce::Sum(d_input, d_output, num_items, env);

Появилась warp-wide коллективная операция cub::WarpReduceBatched для сведения нескольких независимых наборов значений, распределённых по warp: батчи обрабатываются вместе, что сокращает число shuffle-операций. Кроме того, в cuda::std пришла модель параллельных алгоритмов стандартной библиотеки C++ — copy_if, find_if, merge, reduce, transform и scan запускаются на GPU с политикой cuda::execution::gpu.

#include <cuda/std/algorithm>
#include <cuda/std/execution>

struct is_positive
{
    __host__ __device__
    bool operator()(int value) const
    {
        return value > 0;
    }
};

cuda::std::copy_if(
      cuda::execution::gpu,
      d_first,
      d_last,
      d_output,
      is_positive{}
);

Алгоритмы работают с device-доступными диапазонами и внутри используют реализации CCCL и CUB, сохраняя доступ к потокам и memory resources через настраиваемые execution policies. В CUDA Tile IR добавлена поддержка Programmatic Dependent Launch (PDL), позволяющая перекрывать ядра в одном потоке CUDA: зависимое ядро начинает выполнение до завершения предшественника. CUDA Tile C++ получил strided view для статически размеченных чанков данных с шагом, заданным на этапе компиляции, и gather scatter view для доступа к несмежным чанкам массива.

Инструменты разработчика

Nsight Python 1.0 — интерфейс профилирования Python-ядер, который автоматизирует анализ производительности сразу для нескольких конфигураций ядер через NVIDIA Nsight Tools. Декоратор и контекстный менеджер позволяют в одном скрипте запускать бенчмарки ядер, собирать архитектурные метрики, предотвращать троттлинг GPU и визуализировать результаты.

Nsight Compute 2026.3 добавляет поддержку Tile IR для рабочих нагрузок CUDA Tile, улучшает информацию о register spill для OptiX и дорабатывает Nsight Copilot. Nsight Systems 2026.5.1 расширяет покрытие платформ и видимость нагрузок по CUDA, CPU, ИИ-фреймворкам, сети и хранилищам, поддерживает CUDA 13.4, GPU Rubin и Windows on Arm. Среди новшеств — проекция диапазонов NVTX в иерархию «All Streams», демутинг имён cuTile, отображение нагрузок CUDA, отправленных через CiG-потоки, наборы CPU-метрик для Topdown-анализа и опция --pytorch=functions-trace-shapes, добавляющая к трассируемым функциям формы тензоров и параметры обучения.

Для сетевого профилирования добавлен сбор высокочастотных метрик NIC через NVIDIA DOCA Telemetry Service — без повышенных привилегий, с возможностью сопоставлять трафик, уведомления о перегрузке и ожидания отправки с активностью приложения. Рецепт анализа NCCL straggler выявляет ранги, которые раз за разом задерживают продвижение коммуникатора. Профилирование хранилищ получило рецепт S3 access summary analysis, агрегирующий паттерны доступа и статистику ввода-вывода по процессам и хостам, а метрики NVIDIA SCADA попадают на таймлайн для сопоставления активности storage-серверов с событиями GPU и CPU. Экспериментальный плагин vClock улучшает выравнивание отчётов в многонодовых и кластерных сценариях без изменения системных часов и без привилегий.

Nsight Cloud упрощает просмотр и анализ профилировочных отчётов на удалённых headless-системах, Nsight Operator получает улучшения для анализа, OpenTelemetry и NVIDIA Dynamo. Nsight AI приносит ИИ-помощь в разработку: NVIDIA-hosted CUDA MCP Server подключает поддерживаемые ИИ-кодинг-агенты к актуальной документации и примерам кода CUDA, а открытый Nsight Copilot Blueprint даёт самохостируемый CUDA ИИ-бэкенд для команд, предпочитающих разворачивать всё у себя. Compute Sanitizer улучшает обнаружение выходов за границы shared memory с compile-time patching на Hopper и новее, а initcheck получает поддержку Batched memcpy async и racecheck — фильтрацию по cluster-block.

Математические библиотеки и Rubin

Ядровые математические библиотеки в CUDA Toolkit 13.4 получили функциональную поддержку архитектуры Rubin и поддержку Windows on Arm для ноутбуков N1X. В cuBLAS улучшена производительность двойной точности за счёт эмуляции с фиксированной точкой по схеме Ozaki-II. На дата-центровых GPU Blackwell cuBLASLt динамически планирует Grouped GEMM по SM, чтобы минимизировать дисбаланс нагрузки в типичных MoE-нагрузках: по сравнению с прошлыми релизами это ускоряет вызовы Grouped GEMM с большим числом групп (например, 32) и помогает, когда такие операции идут параллельно с другими ядрами. Добавлены экспериментальные режимы масштабирования CUBLASLT_MATMUL_MATRIX_SCALE_VEC32_MN_K4_UE8M0 и CUBLASLT_MATMUL_MATRIX_SCALE_VEC128_MN_K4_UE8M0 с альтернативной раскладкой множителей для FP8-тензоров A и B: коэффициенты пакуются группами по 4 и хранятся в M- или N-major раскладке, а при неделимости главной размерности на 4 добавляется паддинг.

Что это значит для команд, пишущих под GPU

Для администраторов и ML-инженеров, которые держат собственные GPU-стенды, ключевые практические изменения — разделение драйвера и тулкита в установщиках, а также смена режима памяти по умолчанию на когерентных платформах. Если вы используете NUMA-режим на Grace Hopper, Grace Blackwell или Vera Rubin, переключите параметр модуля ядра до обновления: настройка действует на всю ноду и требует перезагрузки драйвера. MPS V3 с cgroup-лимитами и TOML-конфигурацией стоит рассмотреть там, где несколько процессов или арендаторов делят одну GPU — например, на инференс-нодах и в контейнерных платформах. Тем, кто ставит эксперименты с локальным инференсом, пригодится и маршрутизатор NVIDIA PAIR — он распределяет нагрузку между RTX, DGX Spark и Mac.

Разработчикам, которые ведут сборки без доступа к GPU, пригодится AoT-компиляция в cuda.compute: артефакт собирается под sm_80 и sm_90 на CI-машине, а на целевой системе разворачивается через deserialize(). А если вы уже пробовали генерировать CUDA-ядра автоматически, сравните свой опыт с тем, что показывает CUDA Agent от ByteDance: агент пишет ядра быстрее torch.compile.

Частые вопросы

Какие платформы поддерживает CUDA Toolkit 13.4?

Помимо Linux на Arm, релиз добавляет Windows on Arm — CUDA-приложения теперь можно разрабатывать и на этой платформе. Также заявлена поддержка Rubin в режиме превью и Windows on Arm для ноутбуков N1X в математических библиотеках.

Что такое compute capability 107?

Это целевая архитектура для GPU Rubin — новой архитектуры NVIDIA, поддержка которой в тулките пока предварительная. Компилятор NVCC получил цель SM_107. NVIDIA предупреждает, что general availability поддержки Rubin наступит в будущем релизе CUDA Toolkit.

Нужно ли переустанавливать драйвер после обновления до 13.4?

Да, если речь о когерентных платформах. Установщики CUDA SDK больше не включают драйвер: nvidia-open или пакеты cuda-toolkit ставятся отдельно. На Grace Hopper, Grace Blackwell и Vera Rubin драйвер по умолчанию использует CDMM вместо NUMA.

Как вернуть NUMA-режим на когерентной платформе?

NUMA полностью поддерживается и выбирается параметром модуля ядра. Важно сделать это до обновления: настройка действует на всю ноду и требует перезагрузки драйвера или системы.

Чем MPS V3 отличается от предыдущих версий?

Появились скриптуемый CLI, именованные серверные инстансы, пространства имён, конфигурация в TOML, управление партициями SM и лимиты GPU-памяти, интегрированные с cgroup. Это позволяет программно задавать производительность, границы памяти и приоритет выполнения и встраивать MPS в контейнерные окружения.

Кому доступен CUDA Compute Fabric Transport?

CFT доступен только через CUDA Driver API и рассчитан на разработчиков коммуникационных библиотек. NVIDIA рекомендует большинству прикладных разработчиков использовать NCCL или NVSHMEM.

Что даёт cuda.core 1.1.0?

Первоклассные Python-API для texture и surface memory, NUMA-aware управление managed-памятью через ManagedBuffer и тип Host, а также .pyi-стабы для всех публичных API — автодополнение в IDE и доступ кодинг-агентов к типам и сигнатурам.

Зачем нужна AoT-компиляция в cuda.compute 1.1?

Она позволяет собирать алгоритмы CCCL сразу под несколько GPU-архитектур, в том числе на сборочных системах без GPU. Артефакт сохраняется через serialize(), а на целевой машине восстанавливается через deserialize() без перекомпиляции.

Насколько быстрее стал cub::DeviceScan на Blackwell?

Новая warp-specialized реализация с TMA достигает до 92% утилизации пропускной способности памяти в бенчмарках на GPU Blackwell — против примерно 50% у предыдущей реализации — на протестированных типах данных.

Источник: developer.nvidia.com