手工迁移

简介

手工迁移需要用户对AI模型有迁移基础,了解GPU与NPU的代码的异同点以及各种迁移手段。手工迁移过程中各个模型的迁移方法均有不同,下文只给出手工迁移的核心要点,具体模型的迁移方法请参见样例参考

迁移说明

  1. 导入NPU相关库。
    import torch
    import torch_npu  
  2. 迁移适配GPU的模型脚本,指定NPU作为训练设备。指定训练设备有两种方式,迁移前后样例代码如下:
    • .to(device)方式:该方式可以指定需要的训练资源,使用比较灵活,定义好device后可通过xx.to(device)的方式将模型或数据集等加载到GPU或NPU上,如model.to(device)
      迁移前:
      device = torch.device('cuda:{}'.format(args.gpu))
      迁移后
      device = torch.device('npu:{}'.format(args.gpu))
    • .cuda(迁移前)和.npu(迁移后)方式:该方式不会自动使用GPU或NPU,需要以xx.cuda()或xx.npu()的方式将模型数据集等加载到GPU或NPU上,如model.cuda()。该方式详细修改参见3. 替换CUDA接口
      迁移前:
      torch.cuda.set_device(args.gpu)
      迁移后:
      torch_npu.npu.set_device(args.gpu)
  3. 替换CUDA接口:将训练脚本中的CUDA接口替换为NPU接口,例如CUDA接口、模型、损失函数、数据集等迁移到NPU上。更多接口请参见支持Caffe&TensorFlow&ONNX&PyTorch算子清单
    1. CUDA接口替换为NPU接口。
      迁移前:
      torch.cuda.is_available()
      迁移后:
      torch_npu.npu.is_available()
    2. 模型迁移。
      迁移前:
      model.cuda(args.gpu)
      迁移后:
      model.npu(args.gpu)
    3. 数据集迁移。
      迁移前:
      images = images.cuda(args.gpu, non_blocking=True)
      target = target.cuda(args.gpu, non_blocking=True)
      迁移后:
      images = images.npu(args.gpu, non_blocking=True)
      target = target.npu(args.gpu, non_blocking=True)