手工迁移需要用户对AI模型有迁移基础,了解GPU与NPU的接口设计的异同点以及各种迁移手段。手工迁移过程中,各个模型使用的迁移方法不完全相同,下文给出手工迁移的核心要点。
import torch import torch_npu
device = torch.device('cuda:{}'.format(local_rank)) # local_rank为当前设备卡号 model.to(device)
device = torch.device('npu:{}'.format(local_rank)) model.to(device)
torch.cuda.set_device(local_rank)
torch_npu.npu.set_device(local_rank)
torch_npu.npu.is_available()
model.npu(local_rank)
images = images.cuda(local_rank, non_blocking=True) target = target.cuda(local_rank, non_blocking=True)
images = images.npu(local_rank, non_blocking=True) target = target.npu(local_rank, non_blocking=True)
除单卡迁移包含的3个修改要点外,在分布式场景下,还需要切换通信方式,直接修改init_process_group的值。
dist.init_process_group(backend='nccl',init_method="tcp://127.0.0.1:**", ...... ,rank=args.rank) # **为端口号,根据实际选择一个闲置端口填写
dist.init_process_group(backend='hccl',init_method="tcp://127.0.0.1:**", ...... ,rank=args.rank) # **为端口号,根据实际选择一个闲置端口填写