Skip to main content

PyTorch CUDA 语义

PyTorch 以易用性为核心,按照一致的原则组织了对GPU资源的访问。

当前流

在PyTorch内,当前流(current stream)指的是当前线程绑定的CUDA流。PyTorch通过以下API提供了绑定CUDA流到当前线程,以及获取当前线程绑定的CUDA流的功能:

torch.cuda.set_stream(stream)
torch.cuda.current_stream(device=None)

默认情况下,所有线程都绑定到默认流(stream 0)上.

PyTorch的GPU运算均提交到当前线程绑定的当前流上。PyTorch尽量让用户感知不到这点:

  • 通常来说,当前流是都是默认流,而在同一个流上提交的任务会按提交时间串行执行;
  • 对于涉及到将GPU数据拷贝到CPU或者另外一块GPU设备的操作, PyTorch默认地在操作中插入当前流的同步操作

为了在多线程环境使得PyTorch充分利用GPU资源,我们可以利用以上特性:

  • 计算后端线程绑定到独立的CUDA流;
  • 在需要时时进行流同步

参考资料