pyTorch学习基础一选择CPU和GPU

CPU: 数据读取、数据预处理

GPU:参数计算、推理 

import torch

# 张量在CPU上计算
dev_cpu=torch.device("cpu") #指定CPU计算
a= torch.tensor([2,2],dtype=torch.float32,device=dev_cpu) #张量选择设备
print(a)

# 张量在GPU上计算
dev_gpu=torch.device("cuda") #指定GPU计算
b= torch.tensor([2,2],dtype=torch.float32,device=dev_gpu) #张量选择设备
print(b)

 

PyTorch中,由于数据通常是在CPU上创建并在GPU上运行,因此需要明确地控制数据在两者之间的传输。为了手动同步CPUGPU的数据,主要有两个相关的API: 1. **`.to(device)`**: 当你在CPU上调用`.to(device)`将数据转移到GPU时,实际上这个操作会触发次默认的同步,确保所有的CPU操作完成后再传递给GPU。如果数据已经存在于GPU中,则不会引起额外的同步。 2. **`.copy_()` `.detach()`**: - `_.copy_(source)`:这是在CPUGPU或者GPUGPU之间进行数据复制的方法。它会在原地(即不需要额外分配新的内存)更新目标张量,所以在数据转移的同时进行了同步。 - `.detach()`:将当前张量从计算图中分离出来,返回个新的张量,并停止跟踪该张量的梯度。如果你在分离之后立即把张量放到GPU上,这也将导致同步。 3. **`.pin_memory()` `.cuda(non_blocking=True)`**: 如果你想在CPUGPU间快速交换小批量数据,可以考虑使用`.pin_memory()`在CPU上存储张量,提高直接内存访问的速度。而`.cuda(non_blocking=True)`允许非阻塞式数据迁移,如果之前的操作还没完成,这个操作将不会等待,而是立即返回。 例如,如果你想在GPU上执行些操作,然后将结果放回CPU: ```python # 假设 tensor_on_gpu 是在GPU上的张量 result_gpu = some_computation(tensor_on_gpu) result_cpu = result_gpu.cpu() # 这里会触发同步 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值