1. 介绍
在许多 PyTorch 应用中,将数据从 CPU 转移到 GPU 是非常基础的操作。用户理解在设备间传输数据时最有效的工具和选项非常重要。本教程将重点讲解两种在 PyTorch 中进行设备间数据传输的关键方法:pin_memory()
和带有 non_blocking=True
选项的 to()
。
1.1 你将学习到的内容:
通过异步传输和内存固定,可以优化张量从 CPU 到 GPU 的传输。然而,有一些重要的注意事项:
- 使用
tensor.pin_memory().to(device, non_blocking=True)
可能会比直接使用tensor.to(device)
慢最多两倍。 - 一般来说,
tensor.to(device, non_blocking=True)
是提高传输速度的有效选择。 - 虽然
cpu_tensor.to("cuda", non_blocking=True).mean()
可以正确执行,但尝试cuda_tensor.to("cpu", non_blocking=True).mean()
会导致错误的输出。