npu_model
产品支持情况
函数功能
如果UDF部署在host侧,执行时数据需要从device拷贝到本地进行运算。对于PyTorch场景,如果计算全在device侧,输入输出也是在device侧,执行时数据需要从device拷贝到host,执行后PyTorch再将数据搬到device侧,影响执行性能,使用npu_model可以优化为不搬移数据(即直接下沉到device执行)的方式触发执行。
函数原型
装饰器@npu_model
参数说明
返回值
正常场景下返回被装饰的函数。
异常情况下会抛出DfException异常。可以通过捕捉异常获取DfException中的error_code与message查看具体的错误码及错误信息。详细信息请参考DataFlow错误码。
调用示例
@df.npu_model(optimize_level=1)
class FakeModel1(nn.Module):
def __init__(self):
super().__init__()
# 模拟模型推理
@df.method()
def forward(self, input_image):
return F.interpolate(input_image, size=(256, 256), mode='bilinear')
@df.npu_model(optimize_level=1, input_descs=[df.TensorDesc(dtype=df.DT_FLOAT, shape=[1, 3, 768, 768])])
class FakeModel2(nn.Module):
def __init__(self):
super().__init__()
self.mean = 0.5
self.std = 0.5
# 模拟模型推理
@df.method()
def forward(self, input_image):
return (input_image - self.mean) / self.std
@df.npu_model()
def preprocess(input_image):
# 模拟图片裁切
transform = transforms.Compose([transforms.CenterCrop(512)])
return transform(input_image)
@df.npu_model()
def postprocess(input_image):
mean = 0.5
std = 0.5
img = input_image * std + mean
return F.interpolate(img, size=(512, 512), mode='bilinear')
约束说明
- 需安装对应Python版本的torch_npu包。
- 输入输出必须为npu tensor。
- 一组输入对应一组输出,不支持流式输入输出。