AI开发平台MODELARTS-基于MindSpore Lite的模型转换:推理应用适配

时间:2024-04-30 18:09:32

推理应用适配

MindSpore Lite提供了JAVA/C++/Python API,进行推理业务的适配,并且在构建模型时,通过上下文的参数来确定运行时的具体配置,例如运行后端的配置等。下文以Python接口为例。

使用MindSpore Lite推理框架执行推理并使用昇腾后端主要包括以下步骤:

  • 创建运行上下文:创建Context,保存需要的一些基本配置参数,用于指导模型编译和模型执行,在昇腾迁移时需要特别指定target为“Ascend”,以及对应的deivce_id。
    context = mslite.Context()
    context.target = ["ascend"]
    context.ascend.device_id = 0
  • 模型加载与编译:执行推理之前,需要调用Modelbuild_from_file接口进行模型加载和模型编译。模型加载阶段将文件缓存解析成运行时的模型。模型编译阶段会耗费较多时间所以建议Model创建一次,编译一次,多次推理。
    model = mslite.Model()
    model.build_from_file("./resnet50.mindir", mslite.ModelType.MINDIR, context)
  • 输入数据:编译后的模型提供了predict接口用户执行模型推理任务,Inputs输入为List Tensor,这里的Tensor是MSLite的概念,具体的列表长度和tensor类型由转换时的InputShape来确定,由于后端指定了ascend,这些tensor都是在昇腾设备的显存中,用户需要在对应的tensor中填入数据,这些数据也会被搬移到显存中,进一步对于Inputs输入的内容进行处理。
    data = convert_img(input_image)
    in_data = [np.array(data)]
    inputs = model.get_inputs()
    for i, _input in enumerate(inputs):
    _input.set_data_from_numpy(in_data[i])
  • 执行推理:使用Modelpredict进行模型推理,返回值为Outputs,也是List Tensor类型,具体的长度和类别由模型定义,对应的Tensor数据由于指定了ascend后端,Output的内容在显存中,通过tesnor的get_data_to_numpy方法来获取,并将数据读取到内存中使用
    outputs = model.predict(inputs)
    outputs = [output.get_data_to_numpy() for output in outputs]

    更多Python接口的高级用法与示例,请参考Python API

support.huaweicloud.com/bestpractice-modelarts/modelarts_10_1159.html