non_blocking经常与DataLoader的pin_memory搭配使用
PyTorch的DataLoader有一个参数pin_memory,使用固定内存,并使用non_blocking=True来并行处理数据传输。
先来看一下过程吧:
1. x = x.cuda(non_blocking=True) 2. 进行一些和x无关的操作 3. 执行和x有关的操作
在
non_blocking=true
下,1
不会阻塞2
,1
和2
并行。这样将数据从CPU移动到GPU的时候,它是异步的。在它传输的时候,CPU还可以干其他的事情(不依赖于数据的事情)
.cuda()是为了将模型放在GPU上进行训练。
non_blocking默认值为False
Pytorch的cuda non_blocking (pin_memory)
于 2022-03-18 21:49:02 首次发布