• 文档 >
  • 模块代码 >
  • torch >
  • torch 加速器
快捷键

torch.accelerator 的源代码

r""
此包引入了对当前 python 中:ref:`加速器`的支持。
""

from 打字 导入 可选
from typing_extensions 导入 已弃用

导入 火炬

from _utils 导入 _device_t, _get_device_index


全部 = [
    current_accelerator,
    current_device_idx,  # 已弃用
    current_device_index,
    "当前流",
    设备数量,
    "是否可用",
    "设置设备索引",  # 已弃用
    "设置设备索引",
    "设置流",
    "同步",
]


[文档]def 设备数量() -> int: 返回当前可用的 :ref:`加速器` 的数量。 返回值: int: 当前可用的 :ref:`加速器` 的数量。 如果没有可用的加速器,则返回 0。 """ 返回加速器的设备数量
[文档]def is_available() -> bool: 检查当前加速器在运行时是否可用:它已构建,所有 必需的驱动程序可用且至少有一个设备可见。 详细信息请参阅::ref:`加速器`。 返回: bool:一个布尔值,表示是否存在可用的:ref:`加速器`。 示例:: >>> 断言 torch.accelerator.is_available() "未检测到可用的加速器。" """ # 为什么不就像其他 is_available 调用一样检查 "device_count() > 0" 呢? 因为像 CUDA 这样的设备有 Python 实现的 is_available,它是非破坏性的,并且一些功能如 Dataloader 依赖于它。 因此我们在这里小心地将加速器的 Python 版本委托给这里。 所以我们在这里小心地委托给加速器的 Python 版本。 acc = current_accelerator() 如果 acc 为 None: 返回 False mod = torch.get_device_module(acc) 返回 mod.is_available()
[文档]def current_accelerator(check_available: bool = False) -> Optional[torch.device]: r"""返回编译时可用加速器的设备。 如果编译时没有可用加速器,则返回 None。 详细信息请参阅 :ref:`加速器`。 Args: check_available (bool, optional): 如果为 True,将还会进行运行时检查,以查看 是否设备支持 :func:`torch.accelerator.is_available`,这将在编译时检查之上。 check. 默认:``False`` 返回: torch.device:返回当前加速器作为 :class:`torch.device`。 .. 注意:返回的 :class:`torch.device` 的索引将为 ``None``,请使用 `torch.accelerator.current_device_index` 获取当前使用的索引。 示例:: >>> # xdoctest: >>> # 如果有可用的加速器,将模型发送到它 >>> model = torch.nn.Linear(2, 2) >>> if (current_device := current_accelerator(check_available=True)) is not None: >>> model.to(current_device) """ if (acc := torch._C._accelerator_getAccelerator()) is not None: if (not check_available) or (check_available and is_available()): return acc return None
[文档]def current_device_index() -> int: r"""返回当前选定的设备的索引,该设备用于当前 :ref:`加速器`。 返回: int: 当前选定设备的索引。 "``" 返回 torch._C._accelerator_getDeviceIndex()
current_device_idx = 已弃用( "请使用 `current_device_index`。", 类别=FutureWarning, )(current_device_index)
[文档]def 设置设备索引(device: _device_t, /) -> None: 设置当前设备索引为指定设备。 参数: device (:class:`torch.device`, str, int): 必须匹配当前 ref:`加速器` 设备类型的给定设备。 .. 注意:: 如果此设备索引为负,则此函数为空操作。 """ device_index = _get_device_index(device) torch._C._accelerator_setDeviceIndex(device_index)
设置设备索引
= 已弃用( "请使用 `set_device_index` 代替。", 类别=FutureWarning, )(设置设备索引)
[文档]def current_stream(device: _device_t = None, /) -> torch.Stream: 返回给定设备的当前流。 Args: 设备 (:class:`torch.device`, str, int, 可选): 必须匹配当前环境的给定设备 ref:`加速器` 设备类型。如果未指定, 则默认使用 :func:`torch.accelerator.current_device_index`。 返回值: torch.Stream:给定设备当前选定的流。 """ device_index = _get_device_index(device, True) return torch._C._accelerator_getStream(device_index)
[文档]def set_stream(stream: torch.Stream) -> None: r"""设置当前流为指定的流。 Args: stream (torch.Stream): 必须匹配当前 :ref:`加速器` 设备类型的给定流。 .. 注意:: 此函数将当前设备索引设置为给定流的设备索引。 """ torch._C._accelerator_setStream(stream)
[文档]def 同步(device: _device_t = None, /) -> None: 等待给定设备上所有流中的所有内核完成。 参数: device (:class:`torch.device`, str, int, optional): 要同步的设备。它必须匹配 当前 :ref:`加速器` 设备类型。如果没有提供, 默认情况下使用 :func:`torch.accelerator.current_device_index`。 .. note:: 如果当前 :ref:`accelerator` 未初始化,此函数为空操作。 示例:: >>> # xdoctest: +REQUIRES(env:TORCH_DOCTEST_CUDA) >>> assert torch.accelerator.is_available() "未检测到可用的加速器。" >>> start_event = torch.Event(enable_timing=True) >>> end_event = torch.Event(enable_timing=True) >>> start_event.record() >>> tensor = torch.randn(100, device=torch.accelerator.current_accelerator()) >>> sum = torch.sum(tensor) >>> end_event.record() >>> torch.accelerator.synchronize() >>> elapsed_time_ms = start_event.elapsed_time(end_event) """ device_index = _get_device_index(device, True) torch._C._accelerator_synchronizeDevice(device_index)

© 版权所有 PyTorch 贡献者。

使用 Sphinx 构建,并使用 Read the Docs 提供的主题。

文档

PyTorch 的全面开发者文档

查看文档

教程

深入了解初学者和高级开发者的教程

查看教程

资源

查找开发资源并获得您的疑问解答

查看资源