Spec-Zone.ru › PyTorch 2.14

torch.cuda

Создано: 23 дек. 2016 | Последнее обновление: 08 авг. 2026

Этот пакет добавляет поддержку типов тензоров CUDA.

Он реализует те же функции, что и тензоры CPU, но использует для вычислений графические процессоры.

Инициализация выполняется отложенно, поэтому вы всегда можете импортировать этот пакет и использовать is_available(), чтобы определить, поддерживает ли ваша система CUDA.

Дополнительные сведения о работе с CUDA приведены в разделе Семантика CUDA.

StreamContext

Менеджер контекста, выбирающий заданный поток.

can_device_access_peer

Проверяет, возможен ли прямой доступ между двумя устройствами.

check_error

Вызывает исключение, если вызов API среды выполнения CUDA завершился неудачно.

current_blas_handle

Возвращает указатель cublasHandle_t на текущий дескриптор cuBLAS

current_solver_handle

Возвращает указатель cusolverDnHandle_t на текущий дескриптор cuSOLVER

current_device

Возвращает индекс текущего выбранного устройства.

current_stream

Возвращает текущий выбранный Stream для заданного устройства.

cudart

Получает модуль API среды выполнения CUDA.

default_stream

Возвращает поток Stream по умолчанию для заданного устройства.

device

Менеджер контекста, изменяющий выбранное устройство.

device_count

Возвращает количество доступных графических процессоров.

device_memory_used

Возвращает объем используемой глобальной памяти устройства в байтах согласно nvidia-smi или amd-smi.

device_of

Менеджер контекста, переключающий текущее устройство на устройство заданного объекта.

get_arch_list

Возвращает список архитектур CUDA, для которых была скомпилирована эта библиотека.

get_device_capability

Возвращает вычислительные возможности устройства CUDA.

get_device_name

Возвращает имя устройства.

get_device_properties

Возвращает свойства устройства.

get_gencode_flags

Возвращает флаги gencode NVCC, с которыми была скомпилирована эта библиотека.

get_stream_from_external

Возвращает Stream из внешнего потока CUDA.

get_sync_debug_mode

Возвращает текущее значение режима отладки для операций синхронизации CUDA.

init

Инициализирует состояние CUDA в PyTorch.

ipc_collect

Принудительно освобождает память графического процессора после ее высвобождения через CUDA IPC.

is_available

Возвращает логическое значение, указывающее, доступна ли в данный момент CUDA.

is_bf16_supported

Возвращает логическое значение, указывающее, поддерживает ли текущее устройство CUDA/ROCm тип данных bfloat16.

is_initialized

Возвращает, было ли инициализировано состояние CUDA в PyTorch.

is_tf32_supported

Возвращает логическое значение, указывающее, поддерживает ли текущее устройство CUDA/ROCm тип данных tf32.

memory_usage

Возвращает процент времени за последний период выборки, в течение которого выполнялось чтение или запись глобальной памяти устройства согласно nvidia-smi.

set_device

Устанавливает текущее устройство.

set_stream

Устанавливает текущий поток. Это функция-обертка для установки потока.

set_sync_debug_mode

Устанавливает режим отладки для операций синхронизации CUDA.

stream

Обертка вокруг менеджера контекста StreamContext, выбирающего заданный поток.

synchronize

Ожидает завершения всех ядер во всех потоках на устройстве CUDA.

utilization

Возвращает процент времени за последний период выборки, в течение которого на графическом процессоре выполнялось одно или несколько ядер согласно nvidia-smi.

temperature

Возвращает среднюю температуру датчика графического процессора в градусах Цельсия.

power_draw

Возвращает среднюю потребляемую мощность датчика графического процессора в мВт (милливаттах)

clock_rate

Возвращает тактовую частоту SM графического процессора в МГц (мегагерцах) за последний период выборки согласно nvidia-smi.

AcceleratorError

Исключение, возникающее при выполнении на устройстве

OutOfMemoryError

Исключение, возникающее при нехватке памяти на устройстве

Генератор случайных чисел

get_rng_state

Возвращает состояние генератора случайных чисел указанного графического процессора в виде ByteTensor.

get_rng_state_all

Возвращает список ByteTensor, представляющих состояния генератора случайных чисел всех устройств.

set_rng_state

Устанавливает состояние генератора случайных чисел указанного графического процессора.

set_rng_state_all

Устанавливает состояние генератора случайных чисел всех устройств.

manual_seed

Устанавливает начальное значение для генерации случайных чисел на текущем графическом процессоре.

manual_seed_all

Устанавливает начальное значение для генерации случайных чисел на всех графических процессорах.

seed

Устанавливает для генерации случайных чисел случайное начальное значение на текущем графическом процессоре.

seed_all

Устанавливает для генерации случайных чисел случайное начальное значение на всех графических процессорах.

initial_seed

Возвращает текущее начальное значение генератора случайных чисел текущего графического процессора.

Коллективные операции обмена данными

comm.broadcast

Рассылает тензор на указанные устройства GPU.

comm.broadcast_coalesced

Рассылает последовательность тензоров на указанные графические процессоры.

comm.reduce_add

Суммирует тензоры с нескольких графических процессоров.

comm.reduce_add_coalesced

Суммирует тензоры с нескольких графических процессоров.

comm.scatter

Распределяет тензор между несколькими графическими процессорами.

comm.gather

Собирает тензоры с нескольких устройств GPU.

Потоки и события

Stream

Обертка вокруг потока CUDA.

ExternalStream

Обертка вокруг внешнего потока CUDA.

Event

Обертка вокруг события CUDA.

Графы (бета-версия)

is_current_stream_capturing

Возвращает True, если на текущем потоке CUDA выполняется захват графа CUDA, и False в противном случае.

graph_pool_handle

Возвращает непрозрачный токен, представляющий идентификатор пула памяти графа.

CUDAGraph

Обертка вокруг графа CUDA.

graph

Менеджер контекста, захватывающий операции CUDA в объект torch.cuda.CUDAGraph для последующего повторного воспроизведения.

make_graphed_callables

Принимает вызываемые объекты (функции или nn.Module) и возвращает их версии с графами.

export_dot

Возвращает обработчик, вызываемый после завершения захвата и сохраняющий захваченный граф в path в формате Graphviz DOT.

export_graph_data

Возвращает обработчик, вызываемый после создания экземпляра и сериализующий с помощью pickle данные CUDAGraph.get_graph_data() в path.

Обработчики жизненного цикла графов CUDA

Регистрирует обратные вызовы, срабатывающие на каждом этапе жизненного цикла любого графа CUDA: при начале захвата, его завершении, создании экземпляра, каждом повторном воспроизведении и уничтожении. Например, профилировщик может отслеживать жизненный цикл графа, не требуя от кода графа знаний о потребителе, включая графы, созданные не потребителем. Регистрация обработчика включает эту возможность; это и есть весь API: граф вызывает зарегистрированные обработчики, а если их нет, ничего не происходит. Для каждого из них есть соответствующий обработчик отдельного графа в torch.cuda.CUDAGraph. Находится в torch.cuda.graphs.

register_graph_capture_start_hook

Регистрирует обработчик, вызываемый при начале захвата каждого графа CUDA.

register_graph_capture_end_hook

Регистрирует обработчик, вызываемый при завершении захвата каждого графа CUDA, пока захваченный cudaGraph_t еще активен (см. CUDAGraph.register_capture_end_hook()).

register_graph_instantiate_hook

Регистрирует обработчик, вызываемый сразу после создания экземпляра каждого графа CUDA.

register_graph_replay_start_hook

Регистрирует обработчик, вызываемый в начале каждого повторного воспроизведения графа CUDA, непосредственно перед его запуском.

register_graph_replay_end_hook

Регистрирует обработчик, вызываемый в конце каждого повторного воспроизведения графа CUDA после того, как оно поставлено в очередь (enqueued); запуск асинхронный, поэтому работа на графическом процессоре еще не завершена.

register_graph_destroy_hook

Регистрирует fn(exec_ids), вызываемый при уничтожении графа CUDA.

Аннотации ядер графа (прототип)

torch.cuda.graph_annotations добавляет к ядрам, захваченным в графе CUDA, пользовательские метаданные с ключами, позволяющими сопоставлять аннотации с полем graph node id событий ядер в трассировках профилировщика. Включите запись для каждого захвата с помощью аргумента enable_annotations функции torch.cuda.graph, а затем оберните нужные области захваченной рабочей нагрузки в блоки mark_kernels().

Для этих API требуется пакет cuda-bindings и драйвер CUDA с поддержкой cudaGraphNodeGetToolsId (CUDA 13.1 или новее либо совместимый пакет cuda-compat); в противном случае запись без предупреждения заменяется пустой операцией. ROCm не поддерживается. Используйте is_available(), чтобы проверить поддержку.

Полный процесс: добавьте аннотации во время захвата, профилируйте повторное воспроизведение, затем объедините аннотации с экспортированной трассировкой и просмотрите ее в Perfetto. Во время захвата:

import torch
from torch.cuda.graph_annotations import mark_kernels, get_kernel_annotations

x = torch.randn(1024, 1024, device="cuda")

# Warmup: run the workload once outside capture so lazy initialization
# (e.g. cuBLAS handles) does not end up in -- or invalidate -- the capture.
y = x @ x.t()
z = torch.relu(y) @ x
torch.cuda.synchronize()

g = torch.cuda.CUDAGraph()
with torch.cuda.graph(g, enable_annotations=True):
    with mark_kernels("attention"):
        y = x @ x.t()
    with mark_kernels({"name": "mlp", "layer": 3}):
        z = torch.relu(y) @ x

with torch.profiler.profile() as prof:
    g.replay()
    torch.cuda.synchronize()
prof.export_chrome_trace("trace.json")

Каждое событие ядра в экспортированной трассировке содержит graph node id в поле args; записанные аннотации используют те же идентификаторы в качестве ключей, поэтому для их объединения с трассировкой достаточно обратиться к словарю:

import json

annotations = get_kernel_annotations()
with open("trace.json") as f:
    trace = json.load(f)
for event in trace["traceEvents"]:
    node_id = event.get("args", {}).get("graph node id")
    for ann in annotations.get(node_id, []):
        event["args"].update(ann)
with open("trace_annotated.json", "w") as f:
    json.dump(trace, f)

Если открыть trace_annotated.json в Perfetto (или chrome://tracing) и щелкнуть ядро из повторно воспроизводимого графа, рядом с размерами сетки и блока ядра будут показаны поля аннотаций — name: attention или name: mlp, layer: 3. Они указывают, к какой области захваченной рабочей нагрузки относится каждое ядро.

Поскольку аннотации хранятся в глобальном для процесса реестре с идентификаторами, соответствующими идентификаторам профилировщика, сериализованный с помощью pickle объект dict(get_kernel_annotations()) можно также сохранить рядом с трассировкой и объединить с ней автономно.

is_available

Возвращает, поддерживается ли запись аннотаций графов CUDA.

mark_kernels

Менеджер контекста, добавляющий аннотации к работе графического процессора, захваченной в его области действия.

get_kernel_annotations

Возвращает активный реестр записанных аннотаций ядер.

clear_kernel_annotations

Очищает все записанные аннотации ядер.

Этот пакет добавляет поддержку управления памятью устройства, реализованного в CUDA.

Управление памятью

empty_cache

Освобождает всю незанятую кэшированную память, удерживаемую в данный момент кэширующим аллокатором, чтобы её можно было использовать в других приложениях GPU и чтобы она отображалась в nvidia-smi.

get_per_process_memory_fraction

Возвращает долю памяти для процесса.

list_gpu_processes

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

mem_get_info

Возвращает общий объём свободной и общей памяти GPU для указанного устройства с помощью cudaMemGetInfo.

memory_stats

Возвращает словарь статистики аллокатора памяти CUDA для указанного устройства.

memory_stats_as_nested_dict

Возвращает результат memory_stats() в виде вложенного словаря.

reset_accumulated_memory_stats

Сбрасывает «накопленную» (историческую) статистику, отслеживаемую аллокатором памяти CUDA.

host_memory_stats

Возвращает словарь статистики аллокатора закреплённой (хостовой) памяти.

host_memory_stats_as_nested_dict

Возвращает результат host_memory_stats() в виде вложенного словаря.

reset_accumulated_host_memory_stats

Сбрасывает «накопленную» (историческую) статистику, отслеживаемую аллокатором хостовой памяти.

memory_summary

Возвращает удобочитаемый вывод текущей статистики аллокатора памяти для указанного устройства.

memory_snapshot

Возвращает снимок состояния аллокатора памяти CUDA на всех устройствах.

memory_allocated

Возвращает текущий объём памяти GPU в байтах, занятый тензорами на указанном устройстве.

max_memory_allocated

Возвращает максимальный объём памяти GPU в байтах, занятый тензорами на указанном устройстве.

reset_max_memory_allocated

Сбрасывает начальную точку отслеживания максимального объёма памяти GPU, занятой тензорами на указанном устройстве.

memory_reserved

Возвращает текущий объём памяти GPU в байтах, управляемый кэширующим аллокатором для указанного устройства.

max_memory_reserved

Возвращает максимальный объём памяти GPU в байтах, управляемый кэширующим аллокатором для указанного устройства.

set_per_process_memory_fraction

Задаёт долю памяти для процесса.

memory_cached

Устарела; см. memory_reserved().

max_memory_cached

Устарела; см. max_memory_reserved().

reset_max_memory_cached

Сбрасывает начальную точку отслеживания максимального объёма памяти GPU, управляемой кэширующим аллокатором для указанного устройства.

reset_peak_memory_stats

Сбрасывает статистику «пиковых» значений, отслеживаемую аллокатором памяти CUDA.

reset_peak_host_memory_stats

Сбрасывает статистику «пиковых» значений, отслеживаемую аллокатором хостовой памяти.

caching_allocator_alloc

Выполняет выделение памяти с помощью аллокатора памяти CUDA.

caching_allocator_delete

Удаляет память, выделенную с помощью аллокатора памяти CUDA.

get_allocator_backend

Возвращает строку с описанием активного серверного компонента аллокатора, заданного с помощью PYTORCH_ALLOC_CONF.

CUDAPluggableAllocator

Аллокатор памяти CUDA, загружаемый из файла so.

change_current_allocator

Заменяет используемый в данный момент аллокатор памяти на указанный.

MemPool

MemPool представляет собой пул памяти в кэширующем аллокаторе.

caching_allocator_disabled

Менеджер контекста, временно отключающий кэширующий аллокатор CUDA.

caching_allocator_enable

Включает или отключает аллокатор памяти CUDA.

class torch.cuda.use_mem_pool(pool, device=None) [исходный код]

Менеджер контекста, направляющий выделение памяти в указанный пул.

Параметры:
  • pool (torch.cuda.MemPool) – объект MemPool, который нужно активировать, чтобы выделение памяти направлялось в этот пул.
  • device (torch.device или int, необязательный) – выбранное устройство. Используется MemPool на текущем устройстве, определяемом с помощью current_device(), если device равно None (по умолчанию).

Примечание

Этот менеджер контекста направляет в указанный пул выделения памяти только текущего потока. Если внутри менеджера контекста запускается новый поток (например, при вызове backward), выделения в этом потоке не будут направляться в указанный пул.

Примечание

При использовании во время захвата CUDAGraph граф удерживает пул до сброса или уничтожения графа.

torch.cuda.nccl.version() [исходный код]

Возвращает версию NCCL.

Эта функция возвращает кортеж с основным, дополнительным и исправительным номерами версии NCCL. Если у версии есть суффикс, он также включается в кортеж. :returns: Информация о версии NCCL. :rtype: tuple

profile

Включает профилирование.

start

Запускает сбор данных профилировщиком CUDA.

stop

Останавливает сбор данных профилировщиком CUDA.

Расширение инструментов NVIDIA (NVTX)

nvtx.mark

Описывает мгновенное событие, произошедшее в определённый момент времени.

nvtx.range_push

Добавляет диапазон в стек вложенных диапазонов.

nvtx.range_pop

Удаляет диапазон из стека вложенных диапазонов.

nvtx.range

Менеджер контекста / декоратор, который добавляет диапазон NVTX в начале своей области действия и удаляет его в конце.

nvtx.range_end

Отмечает конец диапазона с заданным range_id.

nvtx.range_start

Отмечает начало диапазона с текстовым сообщением.

Jiterator (бета-версия)

jiterator._create_jit_fn

Создаёт ядро CUDA для поэлементной операции с помощью jiterator.

jiterator._create_multi_output_jit_fn

Создаёт ядро CUDA для поэлементной операции с помощью jiterator, поддерживающее возврат одного или нескольких результатов.

TunableOp

Некоторые операции можно реализовать с помощью нескольких библиотек или несколькими способами. Например, GEMM для CUDA или ROCm можно реализовать с помощью библиотек cublas/cublasLt или hipblas/hipblasLt соответственно. Как определить, какая реализация быстрее и какую следует выбрать? Для этого предназначен TunableOp. Некоторые операторы реализованы как настраиваемые операторы с использованием нескольких стратегий. Во время выполнения профилируются все стратегии, а самая быстрая выбирается для всех последующих операций.

Информацию об использовании см. в документации.

Stream Sanitizer (прототип)

CUDA Sanitizer — это прототип инструмента для обнаружения ошибок синхронизации между потоками в PyTorch. Информацию об использовании см. в документации.

GPUDirect Storage (прототип)

API в torch.cuda.gds предоставляют тонкие обёртки для некоторых API cuFile, позволяющих напрямую передавать данные между памятью GPU и хранилищем, избегая промежуточного буфера в CPU. Подробнее см. в документации по API cufile.

Эти API можно использовать в CUDA версии 12.6 и выше. Для их использования необходимо убедиться, что система настроена для работы с GPUDirect Storage в соответствии с документацией по GPUDirect Storage.

Пример использования см. в документации по GdsFile.

is_available

Возвращает True, если поддержка GDS (GPUDirect Storage) включена при сборке.

gds_register_buffer

Регистрирует хранилище на устройстве CUDA как буфер cufile.

gds_deregister_buffer

Отменяет регистрацию ранее зарегистрированного хранилища на устройстве CUDA в качестве буфера cufile.

GdsFile

Обёртка для cuFile.

Зелёные контексты (экспериментальная функция)

torch.cuda.green_contexts предоставляет тонкие обёртки для API CUDA Green Context, позволяя более гибко распределять ресурсы SM для ядер CUDA.

Для этих API требуется пакет cuda.bindings; их можно использовать в PyTorch с CUDA версии 12.8 и выше. Для настройки Workqueue требуется CUDA 13.1 или новее.

Инструкции по установке cuda.bindings доступны здесь: https://nvidia.github.io/cuda-python/

Создайте потоки из зелёного контекста и используйте их так же, как другие пользовательские потоки CUDA:

ctx = GreenContext(...)
stream = ctx.Stream()
with torch.cuda.stream(stream):
    # torch operations here are using resources from `ctx`
    pass

Синхронизация между потоками зелёного контекста и другими потоками является ответственностью пользователя. Используйте события CUDA для упорядочивания операций так же, как и для любых других пользовательских потоков.

Методы GreenContext.set_context() и GreenContext.pop_context() являются устаревшими API, оставленными для совместимости.

GreenContext

Обёртка для зелёного контекста CUDA.

torch.cuda.nccl.is_available(tensors) [исходный код]

Этот пакет добавляет поддержку NVIDIA Tools Extension (NVTX), используемого при профилировании.

© 2026, PyTorch Contributors
PyTorch has a BSD-style license, as found in the LICENSE file.
https://docs.pytorch.org/docs/2.14/cuda.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API