/*
* Copyright 2022 Huawei Technologies Co., Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.mindspore.lite.demo;
import com.mindspore.MSTensor;
import com.mindspore.Model;
import com.mindspore.config.*;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.nio.FloatBuffer;
import java.util.Random;
public class Main {
private static Model model;
public static float[] generateArray(int len) {
Random rand = new Random();
float[] arr = new float[len];
for (int i = 0; i < arr.length; i++) {
arr[i] = rand.nextFloat();
}
return arr;
}
private static ByteBuffer floatArrayToByteBuffer(float[] floats) {
if (floats == null) {
return null;
}
ByteBuffer buffer = ByteBuffer.allocateDirect(floats.length * Float.BYTES);
buffer.order(ByteOrder.LITTLE_ENDIAN);
FloatBuffer floatBuffer = buffer.asFloatBuffer();
floatBuffer.put(floats);
return buffer;
}
private static boolean compile(String modelPath) {
MSContext context = new MSContext();
// use default param init context
// context.init();
context.init(2, CpuBindMode.MID_CPU);
// context.addDeviceInfo(DeviceType.DT_NPU, true, 3);
// context.addDeviceInfo(DeviceType.DT_CPU, true);
boolean ret = context.addDeviceInfo(DeviceType.DT_NPU, true, 3);
if (!ret) {
System.err.println("Compile graph failed");
context.free();
return false;
}
// Create the MindSpore lite session.
model = new Model();
// Compile graph.
ret = model.build(modelPath, ModelType.MT_MINDIR, context);
if (!ret) {
System.err.println("Compile graph failed");
model.free();
return false;
}
return true;
}
private static boolean run() {
MSTensor inputTensor = model.getInputByTensorName("graph_input-173");
if (inputTensor.getDataType() != DataType.kNumberTypeFloat32) {
System.err.println("Input tensor data type is not float, the data type is " + inputTensor.getDataType());
return false;
}
// Generator Random Data.
int elementNums = inputTensor.elementsNum();
float[] randomData = generateArray(elementNums);
ByteBuffer inputData = floatArrayToByteBuffer(randomData);
// Set Input Data.
inputTensor.setData(inputData);
// Run Inference.
boolean ret = model.predict();
if (!ret) {
inputTensor.free();
System.err.println("MindSpore Lite run failed.");
return false;
}
// Get Output Tensor Data.
MSTensor outTensor = model.getOutputByTensorName("Softmax-65");
// Print out Tensor Data.
StringBuilder msgSb = new StringBuilder();
msgSb.append("out tensor shape: [");
int[] shape = outTensor.getShape();
for (int dim : shape) {
msgSb.append(dim).append(",");
}
msgSb.append("]");
if (outTensor.getDataType() != DataType.kNumberTypeFloat32) {
inputTensor.free();
outTensor.free();
System.err.println("output tensor data type is not float, the data type is " + outTensor.getDataType());
return false;
}
float[] result = outTensor.getFloatData();
if (result == null) {
inputTensor.free();
outTensor.free();
System.err.println("decodeBytes return null");
return false;
}
msgSb.append(" and out data:");
for (int i = 0; i < 50 && i < outTensor.elementsNum(); i++) {
msgSb.append(" ").append(result[i]);
}
System.out.println(msgSb.toString());
// In/Out Tensor must free
inputTensor.free();
outTensor.free();
return true;
}
private static void freeBuffer() {
model.free();
}
public static void main(String[] args) {
System.out.println(Version.version());
if (args.length < 1) {
System.err.println("The model path parameter must be passed.");
return;
}
String modelPath = args[0];
boolean ret = compile(modelPath);
if (!ret) {
System.err.println("MindSpore Lite compile failed.");
return;
}
ret = run();
if (!ret) {
System.err.println("MindSpore Lite run failed.");
freeBuffer();
return;
}
freeBuffer();
}
}
日志
(MindSpore) [ma-user bin]$./java -jar ../../quick_start_java.jar ../../model.ms
Aug 09, 2024 1:55:24 PM com.mindspore.config.Version <clinit>
INFO: Version init ...
Aug 09, 2024 1:55:24 PM com.mindspore.config.Version init
INFO: Version init load ...
Aug 09, 2024 1:55:24 PM com.mindspore.config.NativeLibrary loadLibrary
INFO: tryLoadLibrary mindspore-lite-jni failed: java.lang.UnsatisfiedLinkError: /home/ma-user/work/lib/libmindspore-lite-jni.so: libmindspore_glog.so.0: cannot open shared object file: No such file or directory
Aug 09, 2024 1:55:24 PM com.mindspore.config.NativeLibrary loadLibrary
INFO: tryLoadLibrary mindspore-lite-train-jni failed: java.lang.UnsatisfiedLinkError: no mindspore-lite-train-jni in java.library.path
Aug 09, 2024 1:55:24 PM com.mindspore.config.NativeLibrary loadLib
INFO: start load libResourceName: com/mindspore/lite/linux_aarch64/libmindspore_glog.so.
Aug 09, 2024 1:55:24 PM com.mindspore.config.NativeLibrary loadLib
INFO: extract 198672 bytes to /tmp/mindspore_lite_libs-1723211724966-0/libmindspore_glog.so
Aug 09, 2024 1:55:24 PM com.mindspore.config.NativeLibrary deleteFile
SEVERE: delete tmp file : /tmp/mindspore_lite_libs-1723211724966-0/libmindspore_glog.so success.
Aug 09, 2024 1:55:24 PM com.mindspore.config.NativeLibrary deleteFile
SEVERE: delete tmp file : /tmp/mindspore_lite_libs-1723211724966-0 success.
Aug 09, 2024 1:55:24 PM com.mindspore.config.NativeLibrary loadLib
INFO: start load libResourceName: com/mindspore/lite/linux_aarch64/libopencv_core.so.
Aug 09, 2024 1:55:24 PM com.mindspore.config.NativeLibrary loadLib
WARNING: lib file: com/mindspore/lite/linux_aarch64/libopencv_core.so not exist.
Aug 09, 2024 1:55:24 PM com.mindspore.config.NativeLibrary loadLib
INFO: start load libResourceName: com/mindspore/lite/linux_aarch64/libopencv_imgproc.so.
Aug 09, 2024 1:55:24 PM com.mindspore.config.NativeLibrary loadLib
WARNING: lib file: com/mindspore/lite/linux_aarch64/libopencv_imgproc.so not exist.
Aug 09, 2024 1:55:24 PM com.mindspore.config.NativeLibrary loadLib
INFO: start load libResourceName: com/mindspore/lite/linux_aarch64/libopencv_imgcodecs.so.
Aug 09, 2024 1:55:24 PM com.mindspore.config.NativeLibrary loadLib
WARNING: lib file: com/mindspore/lite/linux_aarch64/libopencv_imgcodecs.so not exist.
Aug 09, 2024 1:55:24 PM com.mindspore.config.NativeLibrary loadLib
INFO: start load libResourceName: com/mindspore/lite/linux_aarch64/libmindspore_core.so.
Aug 09, 2024 1:55:24 PM com.mindspore.config.NativeLibrary loadLib
WARNING: lib file: com/mindspore/lite/linux_aarch64/libmindspore_core.so not exist.
Aug 09, 2024 1:55:24 PM com.mindspore.config.NativeLibrary loadLib
INFO: start load libResourceName: com/mindspore/lite/linux_aarch64/libmslite_converter_plugin.so.
Aug 09, 2024 1:55:24 PM com.mindspore.config.NativeLibrary loadLib
WARNING: lib file: com/mindspore/lite/linux_aarch64/libmslite_converter_plugin.so not exist.
Aug 09, 2024 1:55:24 PM com.mindspore.config.NativeLibrary loadLib
INFO: start load libResourceName: com/mindspore/lite/linux_aarch64/libmindspore_converter.so.
Aug 09, 2024 1:55:24 PM com.mindspore.config.NativeLibrary loadLib
WARNING: lib file: com/mindspore/lite/linux_aarch64/libmindspore_converter.so not exist.
Aug 09, 2024 1:55:24 PM com.mindspore.config.NativeLibrary loadLib
INFO: start load libResourceName: com/mindspore/lite/linux_aarch64/libdnnl.so.
Aug 09, 2024 1:55:24 PM com.mindspore.config.NativeLibrary loadLib
WARNING: lib file: com/mindspore/lite/linux_aarch64/libdnnl.so not exist.
Aug 09, 2024 1:55:24 PM com.mindspore.config.NativeLibrary loadLib
INFO: start load libResourceName: com/mindspore/lite/linux_aarch64/liblite-unified-executor.so.
Aug 09, 2024 1:55:24 PM com.mindspore.config.NativeLibrary loadLib
WARNING: lib file: com/mindspore/lite/linux_aarch64/liblite-unified-executor.so not exist.
Aug 09, 2024 1:55:24 PM com.mindspore.config.NativeLibrary loadLib
INFO: start load libResourceName: com/mindspore/lite/linux_aarch64/libmindspore-lite.so.
Aug 09, 2024 1:55:25 PM com.mindspore.config.NativeLibrary loadLib
INFO: extract 7609224 bytes to /tmp/mindspore_lite_libs-1723211724966-0/libmindspore-lite.so
Aug 09, 2024 1:55:25 PM com.mindspore.config.NativeLibrary extractLib
WARNING: lib file: com/mindspore/lite/linux_aarch64/libmsplugin-ge-litert.so not exist.
Aug 09, 2024 1:55:25 PM com.mindspore.config.NativeLibrary extractLib
WARNING: lib file: com/mindspore/lite/linux_aarch64/libruntime_convert_plugin.so not exist.
Aug 09, 2024 1:55:25 PM com.mindspore.config.NativeLibrary extractLib
WARNING: lib file: com/mindspore/lite/linux_aarch64/libascend_kernel_plugin.so not exist.
Aug 09, 2024 1:55:25 PM com.mindspore.config.NativeLibrary extractLib
WARNING: lib file: com/mindspore/lite/linux_aarch64/libascend_ge_plugin.so not exist.
Aug 09, 2024 1:55:25 PM com.mindspore.config.NativeLibrary extractLib
WARNING: lib file: com/mindspore/lite/linux_aarch64/libtransformer-shared.so not exist.
Aug 09, 2024 1:55:25 PM com.mindspore.config.NativeLibrary extractLib
WARNING: lib file: com/mindspore/lite/linux_aarch64/libtensorrt_plugin.so not exist.
Aug 09, 2024 1:55:25 PM com.mindspore.config.NativeLibrary deleteFile
SEVERE: delete tmp file : /tmp/mindspore_lite_libs-1723211724966-0/libmindspore-lite.so success.
Aug 09, 2024 1:55:25 PM com.mindspore.config.NativeLibrary deleteFile
SEVERE: delete tmp file : /tmp/mindspore_lite_libs-1723211724966-0 success.
Aug 09, 2024 1:55:25 PM com.mindspore.config.NativeLibrary loadLib
INFO: start load libResourceName: com/mindspore/lite/linux_aarch64/libmindspore-lite-jni.so.
Aug 09, 2024 1:55:25 PM com.mindspore.config.NativeLibrary loadLib
INFO: extract 264000 bytes to /tmp/mindspore_lite_libs-1723211724966-0/libmindspore-lite-jni.so
Aug 09, 2024 1:55:25 PM com.mindspore.config.NativeLibrary deleteFile
SEVERE: delete tmp file : /tmp/mindspore_lite_libs-1723211724966-0/libmindspore-lite-jni.so success.
Aug 09, 2024 1:55:25 PM com.mindspore.config.NativeLibrary deleteFile
SEVERE: delete tmp file : /tmp/mindspore_lite_libs-1723211724966-0 success.
MindSpore Lite 2.3.1
Aug 09, 2024 1:55:25 PM com.mindspore.config.MindsporeLite <clinit>
INFO: MindsporeLite init ...
Aug 09, 2024 1:55:25 PM com.mindspore.config.MindsporeLite init
INFO: MindsporeLite init load ...
Aug 09, 2024 1:55:25 PM com.mindspore.config.NativeLibrary load
INFO: Native lib has been loaded.
Aug 09, 2024 1:55:25 PM com.mindspore.config.MindsporeLite init
INFO: MindsporeLite init load ...
Aug 09, 2024 1:55:25 PM com.mindspore.config.NativeLibrary load
INFO: Native lib has been loaded.
Aug 09, 2024 1:55:25 PM com.mindspore.config.MindsporeLite init
INFO: MindsporeLite init load ...
Aug 09, 2024 1:55:25 PM com.mindspore.config.NativeLibrary load
INFO: Native lib has been loaded.
[ERROR] ME(59028,ffff9ba4c0e0,java):2024-08-09-21:55:25.063.976 [mindspore/lite/src/litert/inner_context.cc:193] IsValid] NPU is not supported.
[ERROR] ME(59028,ffff9ba4c0e0,java):2024-08-09-21:55:25.064.004 [mindspore/lite/src/litert/inner_context.cc:100] Init] Context is not valid
[ERROR] ME(59028,ffff9ba4c0e0,java):2024-08-09-21:55:25.064.017 [mindspore/lite/src/litert/lite_session.cc:953] InitContext] Init Context failed
[ERROR] ME(59028,ffff9ba4c0e0,java):2024-08-09-21:55:25.064.029 [mindspore/lite/src/litert/lite_session.cc:1168] Init] Init Context failed
[ERROR] ME(59028,ffff9ba4c0e0,java):2024-08-09-21:55:25.064.041 [mindspore/lite/src/litert/cxx_api/model/model_impl.cc:968] CreateLiteSession] init session failed
[ERROR] ME(59028,ffff9ba4c0e0,java):2024-08-09-21:55:25.064.057 [mindspore/lite/src/litert/cxx_api/model/model_impl.cc:230] Build] Allocate session failed.
ERROR [rc/main/native/model.cpp:208] Java_com_mindspore_Model_buildByPath] Error status -2 during build of model
Compile graph failed
MindSpore Lite compile failed.
问题
我有一个 onnx 文件通过 mindspore_lite转换得到.ms文件,但是我想通过 java 进行推理,程序一直提示我 NPU 有问题。
文件
这个文件是 paddlepaddle 的方向分类模型。 paddle_class.zip https://github.com/PaddlePaddle/PaddleClas/blob/release/2.5.2/docs/zh_CN/models/PULC/PULC_textline_orientation.md
环境
代码
日志