使用MindSpore将.ckpt转.air再转.om出现AttributeError: 'AclLiteModel' object has no attribute '_is_destroyed'
收藏回复举报
使用MindSpore将.ckpt转.air再转.om出现AttributeError: 'AclLiteModel' object has no attribute '_is_destroyed'
发表于2024-12-25 08:52:32
0 查看

1 系统环境

硬件环境(Ascend/GPU/CPU): Ascend/GPU/CPU

MindSpore版本: mindspore=2.3.1

执行模式(PyNative/ Graph): Graph

Python版本: Python=3.9

操作系统平台: linux

2 报错信息

2.1 问题描述

使用如下代码将一个.ckpt文件转.air文件。

2.2 报错信息

(mindspore) HwHiAiUser@orangepiaipro:~/PythonProject/sh_cell_classifications python demo/om_infer.py

/home/HwHiAiUser/.conda/envs/mindspore/lib/python3.9/site-packages/numpy/core/getlimits.py:549: Userwarning: The value of the smallest subnormal for <class 'numpy.float64'> type is zero.

    setattr(self, word, getattr(machar, word).flat[e])

/home/HwHiAiUser/.conda/envs/mindspore/lib/python3.9/site-pac kages/numpy/core/getlimits.py:89: UserWarning: The value of the smallest subnormal for <class 'numpy.float64'> type is zero.

    return self._float_to_str(self.sma1lest_subnormal)

/home/HwHiAiUser/.conda/envs/mindspore/lib/python3.9/site-packages/numpy/core/getlimits.py:549: Userwarning: The value of the smallest subnormal for <class 'numpy.float32'> type is zero.

    setattr(self, word, getattr(machar, word).flat[0])

/home/HwHiAiUser/.conda/envs/mindspore/lib/python3.9/site-pac kages/numpy/core/getlimits.py:89: UserWarning: The value of the smallest subnormal for <class 'numpy.float32'> type is zero.

    return self._float_to_str(self.smallest_subnormal)

Init model resource start...

Traceback (most recent cal1 last):

    File "/home/HwHiAiUser/PythonProject/shangjing_cel1_classification/demo/om_infer.py", line 62, in <module>

        model = AclLiteModel(model_path)

    File "/usr/local/Ascend/thirdpart/aarch64/acl1ite/ac11ite model.py", line 44, in _init 1920

        self._ init_resource()

    File "/usr/local/Ascend/thirdpart/aarch64/acllite/acllite_model .py", line 58, in _init_resource

        utils.check_ret("acl.mdl. l0ad_from_file", ret)

    File "/usr/local/Ascend/thirdpart/aarch64/acllite/acllite_utils .py", line 17, in check_ret

        raise Exception("{} failed ret_int={}"

Exception: acl.mdl. load_from_file failed ret_int=145001

Exception ignored in: <function AclLiteModel.__del__ at 0xe7ff6839dee0>

Traceback (most recent call last):

    File "/usr/local/Ascend/thirdpart/aarch64/acllite/acllite_model.py", line 445, in __del__

        self.destroy()

    File "/usr/local/Ascend/thirdpart/aarch64/acllite/acllite_model.py", line 426, in destroy

        if self._is_destroyed:

AttributeError: 'AclLiteModel' object has no attribute '_is_destroyed'

2.3 脚本信息

import mindspore

from mindspore import export

from mindspore import load_checkpoint, load_param_into_net

from mindspore.common.tensor import Tensor

from src.deep_learning.networks import NestedUNet

import numpy as np



net = NestedUNet(n_channels=3, n_classes=2, is_train=False)

params = load_checkpoint('nested_unet_checkpoints/nested_unet_checkpoints.ckpt')

load_param_into_net(net, params)



net.set_train(False)



input_tensor = Tensor(np.ones([1, 3, 256, 256]), dtype=mindspore.float32)



export(net, input_tensor, file_name='nested_unet', file_format='AIR')

print('模型已导出为AIR格式')

再通过如下命令在香橙派上将上面的.air转成.om

atc --framework=1 --model=./nested_unet.air --input_format=NCHW --output=nested_unet --log=error --soc_version=Ascend310

使用如下代码尝试进行模型推理

import os

import cv2

import numpy as np

import matplotlib.pyplot as plt

import mindspore.dataset as ds



import acl

import acllite_utils as utils

from acllite_model import AclLiteModel

from acllite_resource import resource_list



class AclLiteResource:

    """

    AclLiteResource

    """

    def __init__(self, device_id=0):

        self.device_id = device_id

        self.context = None

        self.stream = None

        self.run_mode = None

       

    def init(self):

        """

        init resource

        """

        print("init resource stage:")

        ret = acl.init()



        ret = acl.rt.set_device(self.device_id)

        utils.check_ret("acl.rt.set_device", ret)



        self.context, ret = acl.rt.create_context(self.device_id)

        utils.check_ret("acl.rt.create_context", ret)



        self.stream, ret = acl.rt.create_stream()

        utils.check_ret("acl.rt.create_stream", ret)



        self.run_mode, ret = acl.rt.get_run_mode()

        utils.check_ret("acl.rt.get_run_mode", ret)



        print("Init resource success")



    def __del__(self):

        print("acl resource release all resource")

        resource_list.destroy()

        if self.stream:

            print("acl resource release stream")

            acl.rt.destroy_stream(self.stream)



        if self.context:

            print("acl resource release context")

            acl.rt.destroy_context(self.context)



        print("Reset acl device ", self.device_id)

        acl.rt.reset_device(self.device_id)

        print("Release acl resource success")



# 加载模型

path = os.getcwd()

model_path = os.path.join(path, "nested_unet.om")

model = AclLiteModel(model_path)



@utils.display_time

def pre_process(image):

    """

    image preprocess

    """

    copied_image = np.copy(image)

    image = cv2.resize(np.array(image), dsize=(256, 256))

    if len(image.shape) == 3:

        input_image = np.expand_dims(image.transpose((2, 0, 1)), axis=0) / 127.5 - 1

    else:

        input_image = np.expand_dims(np.tile(image, reps=(3, 1, 1)), axis=0) / 127.5 - 1

    return input_image, copied_image



# 图片推理

@utils.display_time

def inference(image):

    """

    model inference

    """

    input_image, copied_image = pre_process(image)

    # show_images = show_data["data"].asnumpy()

    # mask_images = show_data["label"].reshape([1, 512, 512])

    result = model.execute([input_image, ])  # 输入需要一个list类型的东西,里面需要一个numpy型的东西

    res = result[0].argmax(axis=1)  # result是一个列表,里面只有一个元素是一个numpy数组,即模型输出转numpy型的东西

    return res





def main():

    # acl初始化

    acl_resource = AclLiteResource()

    acl_resource.init()

    dataset = cv2.imread('ultrasound_images_to_show/0.jpg')

    # inference

    res = inference(dataset)   # 推理



main()

3 根因分析

******此处由用户填写******

4 解决方案

******此处由用户填写******

包含文字方案和最终脚本代码

请将正确的脚本打包并上传附件

我要发帖子