Spec-Zone.ru › PyTorch 2.14

Защитник

Создано: 8 дек. 2025 | Последнее обновление: 9 дек. 2025

Общие сведения

Абстракция Device Guard в PyTorch предоставляет управление устройствами и потоками на основе RAII, позволяя коду временно переключать контексты устройств и автоматически восстанавливать исходное устройство при выходе из области видимости. Это необходимо для операций, которые должны выполняться на определенном устройстве независимо от текущего глобального состояния устройства.

Для пользовательских ускорителей CustomDeviceGuardImpl, реализующий c10::impl::DeviceGuardImplInterface, обеспечивает бесшовную интеграцию с инфраструктурой управления устройствами PyTorch. Например, пример интеграции OpenReg (Open Registration) в PyTorch предоставляет OpenRegGuardImpl для ключа диспетчеризации PrivateUse1 со следующими возможностями:

  • Управление устройствами: сохранение, переключение и восстановление текущего индекса устройства
  • Управление потоками: создание потоков вычислений, получение сведений о них и переключение между ними
  • Управление событиями: запись событий в потоки и синхронизация выполнения

После регистрации OpenRegGuardImpl в PyTorch пользовательский код может использовать менеджеры контекста устройств, такие как torch.accelerator.device_index(), а операции автоматически обрабатывают переключение устройств благодаря семантике RAII защитника.

Архитектура

Интерфейсный класс защитника c10::impl::DeviceGuardImplInterface предоставляет три основные категории функциональности:

Управление устройствами

Управление устройствами позволяет переключаться между различными устройствами ускорителя и запрашивать сведения об устройствах. Это основа управления контекстами устройств в PyTorch.

Функциональность

Описание

Сценарий использования

Запрос сведений об устройстве и переключение

exchangeDevice, setDevice, getDevice, uncheckedSetDevice

Изменение текущего устройства для выполнения операций; сохранение и восстановление контекста устройства в защитниках RAII

Количество устройств

deviceCount (noexcept)

Запрос количества доступных устройств; при ошибках необходимо возвращать 0, а не выбрасывать исключение

Синхронизация устройства

synchronizeDevice

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

Управление потоками

Потоки позволяют асинхронно выполнять операции на устройствах ускорителя. Несколько потоков позволяют одновременно выполнять независимые операции на одном устройстве.

Функциональность

Описание

Сценарий использования

Создание и получение потоков

getStream, getDefaultStream, getNewStream, getStreamFromGlobalPool, exchangeStream

Создание потоков вычислений и управление ими для асинхронного выполнения

Синхронизация потоков

queryStream, synchronizeStream

Проверка завершения потока и ожидание окончания операций в потоке

Управление событиями

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

Функциональность

Описание

Сценарий использования

Запись событий

record

Отметка момента выполнения в потоке для последующей синхронизации или измерения времени

Блокировка по событию

block

Ожидание одним потоком события из другого потока (межпоточные зависимости)

Синхронизация событий

queryEvent, synchronizeEvent

Проверка завершения события и ожидание его завершения

Жизненный цикл события

destroyEvent

Освобождение ресурсов события, когда они больше не нужны

Измерение времени событий

elapsedTime

Измерение времени между двумя событиями для профилирования производительности

Реализация

  • Реализация Device Guard
  • Реализация Stream Guard (скоро)
  • Реализация Event Guard (скоро)

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

Spec-Zone.ru

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