文档
注册
评分
提单
论坛
小AI

手工迁移

简介

手工迁移需要用户对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()
        迁移前:
        torch.cuda.set_device(args.gpu)
        迁移后:
        torch_npu.npu.set_device(args.gpu)
    3. 替换CUDA接口:将训练脚本中的CUDA接口替换为NPU接口,例如CUDA接口、模型、损失函数、数据集等迁移到NPU上。常见替换接口请参见PyTorch接口替换。更多接口请参见支持Caffe&TensorFlow&ONNX&PyTorch算子清单中的“支持PyTorch API清单”章节。
      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)
  • 多卡迁移(分布式训练迁移)

    除单卡迁移包含的3个修改要点外,在分布式场景下,还需要切换通信方式,直接修改init_process_group的值。

    修改前,GPU使用nccl方式:
    dist.init_process_group(backend='nccl',init_method = "tcp//:127.0.0.1:**", ...... ,rank = args.rank)    # **为端口号,根据实际选择一个闲置端口填写
    修改后,NPU使用hccl方式:
    dist.init_process_group(backend='hccl',init_method = "tcp//:127.0.0.1:**", ...... ,rank = args.rank)    # **为端口号,根据实际选择一个闲置端口填写
搜索结果
找到“0”个结果

当前产品无相关内容

未找到相关内容,请尝试其他搜索词