常见PyTorch迁移替换接口
用户需要替换原生PyTorch框架的接口,才能使用昇腾PyTorch框架。在进行网络迁移时,用户需要将部分接口转换成适配昇腾AI处理器后的接口。当前适配的部分接口请参见表1,更多接口请参见《API 参考》。
PyTorch原始接口  | 
适配昇腾AI处理器后的接口  | 
说明  | 
|---|---|---|
torch.cuda.is_available()  | 
torch_npu.npu.is_available()  | 
判断当前环境上设备是否可用(不代表最后结果)。  | 
torch.cuda.current_device()  | 
torch_npu.npu.current_device()  | 
获取当前正在使用的device。  | 
torch.cuda.device_count()  | 
torch_npu.npu.device_count()  | 
获取当前环境上的设备数量。  | 
torch.cuda.set_device()  | 
torch_npu.npu.set_device()  | 
设置当前正在使用的device。  | 
torch.tensor([1,2,3]).is_cuda  | 
torch.tensor([1,2,3]).is_npu  | 
判断某个tensor是否是CUDA/NPU设备上的格式。  | 
torch.tensor([1,2,3]).cuda()  | 
torch.tensor([1,2,3]).npu()  | 
将某个tensor转换成CUDA/NPU格式。  | 
torch.tensor([1,2,3]).to("cuda")  | 
torch.tensor([1,2,3]).to('npu')  | 
将某个tensor转换成CUDA/NPU格式。  | 
torch.cuda.synchronize()  | 
torch_npu.npu.synchronize()  | 
同步等待事件完成。  | 
torch.cuda.device  | 
torch_npu.npu.device  | 
生成一个device类,可以执行device相关操作。  | 
torch.cuda.Stream(device)  | 
torch_npu.npu.Stream(device)  | 
生成一个stream对象。  | 
torch.cuda.stream(Stream)  | 
torch_npu.npu.stream(Stream)  | 
多用于作用域限定。  | 
torch.cuda.current_stream()  | 
torch_npu.npu.current_stream()  | 
获取当前stream。  | 
torch.cuda.default_stream()  | 
torch_npu.npu.default_stream()  | 
获取默认stream。  | 
device = torch.device("cuda:0")  | 
device = torch.device("npu:0")  | 
指定一个设备。  | 
torch.autograd.profiler.profile (use_cuda=True)  | 
torch.autograd.profiler.profile (use_npu=True)  | 
指定执行profiler过程中使用CUDA/NPU。  | 
torch.cuda.Event()  | 
torch_npu.npu.Event()  | 
返回某个设备上的事件。  | 
用户在构建网络或进行网络迁移时,需要创建指定数据类型的tensor。在昇腾AI处理器上创建的部分tensor如下,更多接口请参见《API 参考》。
GPU tensor  | 
适配昇腾AI处理器后的接口  | 
|---|---|
torch.tensor([1,2,3],dtype=torch.long,device='cuda')  | 
torch.tensor([1,2,3],dtype=torch.long,device='npu')  | 
torch.tensor([1,2,3],dtype=torch.int,device='cuda')  | 
torch.tensor([1,2,3],dtype=torch.int,device='npu')  | 
torch.tensor([1,2,3],dtype=torch.half,device='cuda')  | 
torch.tensor([1,2,3],dtype=torch.half,device='npu')  | 
torch.tensor([1,2,3],dtype=torch.float,device='cuda')  | 
torch.tensor([1,2,3],dtype=torch.float,device='npu')  | 
torch.tensor([1,2,3],dtype=torch.bool,device='cuda')  | 
torch.tensor([1,2,3],dtype=torch.bool,device='npu')  | 
torch.cuda.BoolTensor([1,2,3])  | 
torch.npu.BoolTensor([1,2,3])  | 
torch.cuda.FloatTensor([1,2,3])  | 
torch.npu.FloatTensor([1,2,3])  | 
torch.cuda.IntTensor([1,2,3])  | 
torch.npu.IntTensor([1,2,3])  | 
torch.cuda.LongTensor([1,2,3])  | 
torch.npu.LongTensor([1,2,3])  | 
torch.cuda.HalfTensor([1,2,3])  | 
torch.npu.HalfTensor([1,2,3])  |