Защитник
Создано: 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.
Функциональность | Описание | Сценарий использования |
|---|---|---|
Запрос сведений об устройстве и переключение |
| Изменение текущего устройства для выполнения операций; сохранение и восстановление контекста устройства в защитниках RAII |
Количество устройств |
| Запрос количества доступных устройств; при ошибках необходимо возвращать 0, а не выбрасывать исключение |
Синхронизация устройства |
| Ожидание завершения всех операций на устройстве |
Управление потоками
Потоки позволяют асинхронно выполнять операции на устройствах ускорителя. Несколько потоков позволяют одновременно выполнять независимые операции на одном устройстве.
Функциональность | Описание | Сценарий использования |
|---|---|---|
Создание и получение потоков |
| Создание потоков вычислений и управление ими для асинхронного выполнения |
Синхронизация потоков |
| Проверка завершения потока и ожидание окончания операций в потоке |
Управление событиями
События предоставляют примитивы синхронизации для координации выполнения между потоками и измерения времени выполнения. Они отмечают определенные моменты выполнения в потоке, которых можно дожидаться или время которых можно измерять.
Функциональность | Описание | Сценарий использования |
|---|---|---|
Запись событий |
| Отметка момента выполнения в потоке для последующей синхронизации или измерения времени |
Блокировка по событию |
| Ожидание одним потоком события из другого потока (межпоточные зависимости) |
Синхронизация событий |
| Проверка завершения события и ожидание его завершения |
Жизненный цикл события |
| Освобождение ресурсов события, когда они больше не нужны |
Измерение времени событий |
| Измерение времени между двумя событиями для профилирования производительности |
Реализация
- Реализация 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