【问题标题】:how do I prevent from the actual pytorch model not to be converted to ipex如何防止实际的 pytorch 模型不转换为 ipex
【发布时间】:2021-09-16 07:40:02
【问题描述】:

我一直在尝试 pytorch(ipex) 的英特尔扩展来优化我的推理。我正在使用来自 torchvision 的预训练模型。我想比较使用和不使用 ipex 的改进,所以我创建了一个模型副本,将其转换为 ipex。

现在我尝试对我的原始模型和转换为 ipex 的模型进行推理。

对于转换为 ipex 的模型,我没有问题,但对于我的原始模型,我收到以下错误。

RuntimeError: Input type (torch.FloatTensor) and weight type (XPUFloatType) should be the same

这个错误看起来是由于我的实际模型也被转换为 ipex 我如何防止实际模型即 model_original 不被转换为 ipex

以下是最小复制者。

import intel_pytorch_extension as ipex
import torchvision
import torch
import torch.utils.data as Data
model = torchvision.models.resnet50(pretrained=True)
model.eval()
model_original=model                             #original pytorch model which does not use ipex
model_ipex=model        
model_ipex.to(ipex.DEVICE)                         # a copy of a model converted to use IPEX
transform = torchvision.transforms.Compose([
        torchvision.transforms.Resize((500, 400)),
        torchvision.transforms.ToTensor(),
        torchvision.transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
    ])
dataset = torchvision.datasets.ImageFolder(
            root='dataset',
            transform=transform,
    )
loader = Data.DataLoader(
            dataset=dataset,
            batch_size=1
    )

for data, target in loader:              #inference with ipex this works fine
    print(target)
    output=model_ipex(data)
    
for data, target in loader:             #inference with original model this fails
    print(target)
    output=model_original(data)

【问题讨论】:

    标签: python pytorch quantization intel-pytorch


    【解决方案1】:

    当您尝试将 pytorch 模型分配给代码 model_ipex=model 中的新变量时,复制是通过 浅复制 完成的,因此您的模型和 model_ipex 指向相同的内存。这意味着您在模型副本中所做的任何更改,model_original 也会更改。这意味着您卸载模型以使用带有 model_ipex.to(ipex.DEVICE) 的 ipex,您的原始模型也被卸载,并且您的模型的权重变为 XPUFloatType 数据类型,您试图将 torch.FloatTensor 的输入传递给该数据类型,这会导致问题。

    如果您需要分离模型的副本,您应该考虑使用深拷贝

    import copy
    model_copy = copy.deepcopy(model)
    

    https://www.geeksforgeeks.org/copy-python-deep-copy-shallow-copy/

    【讨论】:

      猜你喜欢
      • 2020-08-25
      • 2021-07-14
      • 1970-01-01
      • 2018-05-21
      • 1970-01-01
      • 2022-10-13
      • 2023-01-31
      • 2011-08-20
      • 2018-10-05
      相关资源
      最近更新 更多