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
| Возвращает текущий выбранный |
cudart
| Получает модуль API среды выполнения CUDA. |
default_stream
| Возвращает поток |
device
| Менеджер контекста, изменяющий выбранное устройство. |
device_count
| Возвращает количество доступных графических процессоров. |
device_memory_used
| Возвращает объем используемой глобальной памяти устройства в байтах согласно |
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
| Возвращает |
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
| Возвращает процент времени за последний период выборки, в течение которого выполнялось чтение или запись глобальной памяти устройства согласно |
set_device
| Устанавливает текущее устройство. |
set_stream
| Устанавливает текущий поток. Это функция-обертка для установки потока. |
set_sync_debug_mode
| Устанавливает режим отладки для операций синхронизации CUDA. |
stream
| Обертка вокруг менеджера контекста StreamContext, выбирающего заданный поток. |
synchronize
| Ожидает завершения всех ядер во всех потоках на устройстве CUDA. |
utilization
| Возвращает процент времени за последний период выборки, в течение которого на графическом процессоре выполнялось одно или несколько ядер согласно |
temperature
| Возвращает среднюю температуру датчика графического процессора в градусах Цельсия. |
power_draw
| Возвращает среднюю потребляемую мощность датчика графического процессора в мВт (милливаттах) |
clock_rate
| Возвращает тактовую частоту SM графического процессора в МГц (мегагерцах) за последний период выборки согласно |
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
| Возвращает текущее начальное значение генератора случайных чисел текущего графического процессора. |
Коллективные операции обмена данными
Рассылает тензор на указанные устройства GPU. | |
Рассылает последовательность тензоров на указанные графические процессоры. | |
Суммирует тензоры с нескольких графических процессоров. | |
Суммирует тензоры с нескольких графических процессоров. | |
Распределяет тензор между несколькими графическими процессорами. | |
Собирает тензоры с нескольких устройств GPU. |
Потоки и события
Stream
| Обертка вокруг потока CUDA. |
ExternalStream
| Обертка вокруг внешнего потока CUDA. |
Event
| Обертка вокруг события CUDA. |
Графы (бета-версия)
is_current_stream_capturing
| Возвращает True, если на текущем потоке CUDA выполняется захват графа CUDA, и False в противном случае. |
graph_pool_handle
| Возвращает непрозрачный токен, представляющий идентификатор пула памяти графа. |
CUDAGraph
| Обертка вокруг графа CUDA. |
graph
| Менеджер контекста, захватывающий операции CUDA в объект |
make_graphed_callables
| Принимает вызываемые объекты (функции или |
export_dot
| Возвращает обработчик, вызываемый после завершения захвата и сохраняющий захваченный граф в |
export_graph_data
| Возвращает обработчик, вызываемый после создания экземпляра и сериализующий с помощью pickle данные |
Обработчики жизненного цикла графов CUDA
Регистрирует обратные вызовы, срабатывающие на каждом этапе жизненного цикла любого графа CUDA: при начале захвата, его завершении, создании экземпляра, каждом повторном воспроизведении и уничтожении. Например, профилировщик может отслеживать жизненный цикл графа, не требуя от кода графа знаний о потребителе, включая графы, созданные не потребителем. Регистрация обработчика включает эту возможность; это и есть весь API: граф вызывает зарегистрированные обработчики, а если их нет, ничего не происходит. Для каждого из них есть соответствующий обработчик отдельного графа в torch.cuda.CUDAGraph. Находится в torch.cuda.graphs.
register_graph_capture_start_hook
| Регистрирует обработчик, вызываемый при начале захвата каждого графа CUDA. |
register_graph_capture_end_hook
| Регистрирует обработчик, вызываемый при завершении захвата каждого графа CUDA, пока захваченный |
register_graph_instantiate_hook
| Регистрирует обработчик, вызываемый сразу после создания экземпляра каждого графа CUDA. |
register_graph_replay_start_hook
| Регистрирует обработчик, вызываемый в начале каждого повторного воспроизведения графа CUDA, непосредственно перед его запуском. |
register_graph_replay_end_hook
| Регистрирует обработчик, вызываемый в конце каждого повторного воспроизведения графа CUDA после того, как оно поставлено в очередь (enqueued); запуск асинхронный, поэтому работа на графическом процессоре еще не завершена. |
register_graph_destroy_hook
| Регистрирует |
Аннотации ядер графа (прототип)
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 и чтобы она отображалась в |
get_per_process_memory_fraction
| Возвращает долю памяти для процесса. |
list_gpu_processes
| Возвращает удобочитаемый вывод выполняющихся процессов и используемой ими памяти GPU для указанного устройства. |
mem_get_info
| Возвращает общий объём свободной и общей памяти GPU для указанного устройства с помощью cudaMemGetInfo. |
memory_stats
| Возвращает словарь статистики аллокатора памяти CUDA для указанного устройства. |
memory_stats_as_nested_dict
| Возвращает результат |
reset_accumulated_memory_stats
| Сбрасывает «накопленную» (историческую) статистику, отслеживаемую аллокатором памяти CUDA. |
host_memory_stats
| Возвращает словарь статистики аллокатора закреплённой (хостовой) памяти. |
host_memory_stats_as_nested_dict
| Возвращает результат |
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
| Устарела; см. |
max_memory_cached
| Устарела; см. |
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
| Возвращает строку с описанием активного серверного компонента аллокатора, заданного с помощью |
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
Расширение инструментов NVIDIA (NVTX)
Описывает мгновенное событие, произошедшее в определённый момент времени. | |
Добавляет диапазон в стек вложенных диапазонов. | |
Удаляет диапазон из стека вложенных диапазонов. | |
Менеджер контекста / декоратор, который добавляет диапазон NVTX в начале своей области действия и удаляет его в конце. | |
Отмечает конец диапазона с заданным range_id. | |
Отмечает начало диапазона с текстовым сообщением. |
Jiterator (бета-версия)
Создаёт ядро CUDA для поэлементной операции с помощью jiterator. | |
Создаёт ядро 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
| Возвращает |
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