modify java native lib

This commit is contained in:
albert-yan 2022-03-31 15:09:21 +08:00
parent 0e06275442
commit bcd1fa1f7a
12 changed files with 220 additions and 202 deletions

View File

@ -153,46 +153,7 @@ endif()
if(DEFINED ENV{MSLITE_ENABLE_SERVER_INFERENCE}) if(DEFINED ENV{MSLITE_ENABLE_SERVER_INFERENCE})
set(MSLITE_ENABLE_SERVER_INFERENCE $ENV{MSLITE_ENABLE_SERVER_INFERENCE}) set(MSLITE_ENABLE_SERVER_INFERENCE $ENV{MSLITE_ENABLE_SERVER_INFERENCE})
endif() endif()
if(MSLITE_ENABLE_SERVER_INFERENCE)
set(MSLITE_ENABLE_DYNAMIC_THREAD_DISTRIBUTE on)
set(MSLITE_ENABLE_BFC_MEMORY on)
set(MSLITE_ENABLE_PARALLEL_INFERENCE on)
set(MSLITE_ENABLE_SHARING_MODEL_WEIGHT on)
set(MSLITE_ENABLE_RUNTIME_GLOG off)
add_compile_definitions(SERVER_INFERENCE)
endif()
if(DEFINED ENV{MSLITE_ENABLE_RUNTIME_GLOG})
set(MSLITE_ENABLE_RUNTIME_GLOG $ENV{MSLITE_ENABLE_RUNTIME_GLOG})
endif()
if(DEFINED ENV{MSLITE_ENABLE_DYNAMIC_THREAD_DISTRIBUTE})
set(MSLITE_ENABLE_DYNAMIC_THREAD_DISTRIBUTE $ENV{MSLITE_ENABLE_DYNAMIC_THREAD_DISTRIBUTE})
endif()
if(MSLITE_ENABLE_DYNAMIC_THREAD_DISTRIBUTE)
add_compile_definitions(DYNAMIC_THREAD_DISTRIBUTE)
endif()
if(DEFINED ENV{MSLITE_ENABLE_BFC_MEMORY})
set(MSLITE_ENABLE_BFC_MEMORY $ENV{MSLITE_ENABLE_BFC_MEMORY})
endif()
if(MSLITE_ENABLE_BFC_MEMORY)
add_compile_definitions(BFC_MEMORY)
endif()
if(DEFINED ENV{MSLITE_ENABLE_PARALLEL_INFERENCE})
set(MSLITE_ENABLE_PARALLEL_INFERENCE $ENV{MSLITE_ENABLE_PARALLEL_INFERENCE})
endif()
if(MSLITE_ENABLE_PARALLEL_INFERENCE)
add_compile_definitions(PARALLEL_INFERENCE)
endif()
if(DEFINED ENV{MSLITE_ENABLE_SHARING_MODEL_WEIGHT})
set(MSLITE_ENABLE_SHARING_MODEL_WEIGHT $ENV{MSLITE_ENABLE_SHARING_MODEL_WEIGHT})
endif()
if(MSLITE_ENABLE_SHARING_MODEL_WEIGHT)
add_compile_definitions(SHARING_MODEL_WEIGHT)
endif()
if(DEFINED ENV{MSLITE_ENABLE_SERVING}) if(DEFINED ENV{MSLITE_ENABLE_SERVING})
set(MSLITE_ENABLE_SERVING $ENV{MSLITE_ENABLE_SERVING}) set(MSLITE_ENABLE_SERVING $ENV{MSLITE_ENABLE_SERVING})
endif() endif()
@ -279,6 +240,47 @@ else()
set(MSLITE_ENABLE_NPU off) set(MSLITE_ENABLE_NPU off)
endif() endif()
if(MSLITE_ENABLE_SERVER_INFERENCE)
set(MSLITE_ENABLE_DYNAMIC_THREAD_DISTRIBUTE on)
set(MSLITE_ENABLE_BFC_MEMORY on)
set(MSLITE_ENABLE_PARALLEL_INFERENCE on)
set(MSLITE_ENABLE_SHARING_MODEL_WEIGHT on)
set(MSLITE_ENABLE_RUNTIME_GLOG on)
add_compile_definitions(SERVER_INFERENCE)
endif()
if(DEFINED ENV{MSLITE_ENABLE_RUNTIME_GLOG})
set(MSLITE_ENABLE_RUNTIME_GLOG $ENV{MSLITE_ENABLE_RUNTIME_GLOG})
endif()
if(DEFINED ENV{MSLITE_ENABLE_DYNAMIC_THREAD_DISTRIBUTE})
set(MSLITE_ENABLE_DYNAMIC_THREAD_DISTRIBUTE $ENV{MSLITE_ENABLE_DYNAMIC_THREAD_DISTRIBUTE})
endif()
if(MSLITE_ENABLE_DYNAMIC_THREAD_DISTRIBUTE)
add_compile_definitions(DYNAMIC_THREAD_DISTRIBUTE)
endif()
if(DEFINED ENV{MSLITE_ENABLE_BFC_MEMORY})
set(MSLITE_ENABLE_BFC_MEMORY $ENV{MSLITE_ENABLE_BFC_MEMORY})
endif()
if(MSLITE_ENABLE_BFC_MEMORY)
add_compile_definitions(BFC_MEMORY)
endif()
if(DEFINED ENV{MSLITE_ENABLE_PARALLEL_INFERENCE})
set(MSLITE_ENABLE_PARALLEL_INFERENCE $ENV{MSLITE_ENABLE_PARALLEL_INFERENCE})
endif()
if(MSLITE_ENABLE_PARALLEL_INFERENCE)
add_compile_definitions(PARALLEL_INFERENCE)
endif()
if(DEFINED ENV{MSLITE_ENABLE_SHARING_MODEL_WEIGHT})
set(MSLITE_ENABLE_SHARING_MODEL_WEIGHT $ENV{MSLITE_ENABLE_SHARING_MODEL_WEIGHT})
endif()
if(MSLITE_ENABLE_SHARING_MODEL_WEIGHT)
add_compile_definitions(SHARING_MODEL_WEIGHT)
endif()
if(MSLITE_ENABLE_SSE OR MSLITE_ENABLE_AVX OR MSLITE_ENABLE_AVX512 OR WIN32) if(MSLITE_ENABLE_SSE OR MSLITE_ENABLE_AVX OR MSLITE_ENABLE_AVX512 OR WIN32)
set(MSLITE_ENABLE_RUNTIME_CONVERT off) set(MSLITE_ENABLE_RUNTIME_CONVERT off)
endif() endif()

View File

@ -80,11 +80,15 @@ build_lite_x86_64_jni_and_jar() {
echo "---------------- mindspore lite: build jni x86_64 failed----------------" echo "---------------- mindspore lite: build jni x86_64 failed----------------"
exit 1 exit 1
fi fi
rm -f ${LITE_JAVA_PATH}/src/main/resources/com/mindspore/lite/linux_x86_64/*.so*
cp ./libmindspore-lite-jni.so ${LITE_JAVA_PATH}/java/linux_x86/libs/ cp ./libmindspore-lite-jni.so ${LITE_JAVA_PATH}/java/linux_x86/libs/
cp ./libmindspore-lite-jni.so ${LITE_JAVA_PATH}/native/libs/linux_x86/ cp ./libmindspore-lite-jni.so ${LITE_JAVA_PATH}/native/libs/linux_x86/
cp ./libmindspore-lite-jni.so ${INSTALL_PREFIX}/${pkg_name}/runtime/lib/ cp ./libmindspore-lite-jni.so ${INSTALL_PREFIX}/${pkg_name}/runtime/lib/
cp ./libmindspore-lite-jni.so ${LITE_JAVA_PATH}/src/main/resources/com/mindspore/lite/linux_x86_64/ cp ./libmindspore-lite-jni.so ${LITE_JAVA_PATH}/src/main/resources/com/mindspore/lite/linux_x86_64/
cp ${BASEPATH}/output/tmp/${pkg_name}/runtime/lib/libmindspore-lite.so ${LITE_JAVA_PATH}/src/main/resources/com/mindspore/lite/linux_x86_64/ cp ${BASEPATH}/output/tmp/${pkg_name}/runtime/lib/libmindspore-lite.so ${LITE_JAVA_PATH}/src/main/resources/com/mindspore/lite/linux_x86_64/
if [[ "${MSLITE_ENABLE_SERVER_INFERENCE}" == "ON" || "${MSLITE_ENABLE_SERVER_INFERENCE}" == "on" ]] ; then
cp ${BASEPATH}/output/tmp/${pkg_name}/runtime/third_party/glog/libglog.so* ${LITE_JAVA_PATH}/src/main/resources/com/mindspore/lite/linux_x86_64/libglog.so
fi
if [[ "X$is_train" = "Xon" ]]; then if [[ "X$is_train" = "Xon" ]]; then
cp ./libmindspore-lite-train-jni.so ${LITE_JAVA_PATH}/java/linux_x86/libs/ cp ./libmindspore-lite-train-jni.so ${LITE_JAVA_PATH}/java/linux_x86/libs/
cp ./libmindspore-lite-train-jni.so ${LITE_JAVA_PATH}/native/libs/linux_x86/ cp ./libmindspore-lite-train-jni.so ${LITE_JAVA_PATH}/native/libs/linux_x86/
@ -120,13 +124,13 @@ build_lite_x86_64_jni_and_jar() {
# build jar # build jar
${gradle_command} clean -p ${LITE_JAVA_PATH}/ ${gradle_command} clean -p ${LITE_JAVA_PATH}/
if [[ "${ENABLE_ASAN}" == "ON" || "${ENABLE_ASAN}" == "on" ]] ; then if [[ "${ENABLE_ASAN}" == "ON" || "${ENABLE_ASAN}" == "on" ]] ; then
${gradle_command} releaseJar -p ${LITE_JAVA_PATH}/ -x test ${gradle_command} releaseJar -p ${LITE_JAVA_PATH}/ -x test --info
else else
if [[ "${MSLITE_ENABLE_TESTCASES}" == "ON" || "${MSLITE_ENABLE_TESTCASES}" == "on" ]] ; then if [[ "${MSLITE_ENABLE_TESTCASES}" == "ON" || "${MSLITE_ENABLE_TESTCASES}" == "on" ]] ; then
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:${LITE_JAVA_PATH}/native/libs/linux_x86/ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:${LITE_JAVA_PATH}/native/libs/linux_x86/
${gradle_command} releaseJar -p ${LITE_JAVA_PATH}/ ${gradle_command} releaseJar -p ${LITE_JAVA_PATH}/ --info
else else
${gradle_command} releaseJar -p ${LITE_JAVA_PATH}/ -x test ${gradle_command} releaseJar -p ${LITE_JAVA_PATH}/ -x test --info
fi fi
fi fi
cp ${LITE_JAVA_PATH}/build/lib/jar/*.jar ${INSTALL_PREFIX}/${pkg_name}/runtime/lib/ cp ${LITE_JAVA_PATH}/build/lib/jar/*.jar ${INSTALL_PREFIX}/${pkg_name}/runtime/lib/
@ -174,11 +178,15 @@ build_lite_aarch64_jni_and_jar() {
echo "---------------- mindspore lite: build jni arm64 failed----------------" echo "---------------- mindspore lite: build jni arm64 failed----------------"
exit 1 exit 1
fi fi
rm -f ${LITE_JAVA_PATH}/src/main/resources/com/mindspore/lite/linux_aarch64/*.so*
cp ./libmindspore-lite-jni.so ${LITE_JAVA_PATH}/java/linux_aarch64/libs/ cp ./libmindspore-lite-jni.so ${LITE_JAVA_PATH}/java/linux_aarch64/libs/
cp ./libmindspore-lite-jni.so ${LITE_JAVA_PATH}/native/libs/linux_aarch64/ cp ./libmindspore-lite-jni.so ${LITE_JAVA_PATH}/native/libs/linux_aarch64/
cp ./libmindspore-lite-jni.so ${LITE_JAVA_PATH}/src/main/resources/com/mindspore/lite/linux_aarch64/ cp ./libmindspore-lite-jni.so ${LITE_JAVA_PATH}/src/main/resources/com/mindspore/lite/linux_aarch64/
cp ./libmindspore-lite-jni.so ${BASEPATH}/output/tmp/${pkg_name}/runtime/lib/ cp ./libmindspore-lite-jni.so ${BASEPATH}/output/tmp/${pkg_name}/runtime/lib/
cp ${BASEPATH}/output/tmp/${pkg_name}/runtime/lib/libmindspore-lite.so ${LITE_JAVA_PATH}/src/main/resources/com/mindspore/lite/linux_aarch64/ cp ${BASEPATH}/output/tmp/${pkg_name}/runtime/lib/libmindspore-lite.so ${LITE_JAVA_PATH}/src/main/resources/com/mindspore/lite/linux_aarch64/
if [[ "${MSLITE_ENABLE_SERVER_INFERENCE}" == "ON" || "${MSLITE_ENABLE_SERVER_INFERENCE}" == "on" ]] ; then
cp ${BASEPATH}/output/tmp/${pkg_name}/runtime/third_party/glog/libglog.so* ${LITE_JAVA_PATH}/src/main/resources/com/mindspore/lite/linux_aarch64/libglog.so
fi
if [[ "X$is_train" = "Xon" ]]; then if [[ "X$is_train" = "Xon" ]]; then
cp ./libmindspore-lite-train-jni.so ${LITE_JAVA_PATH}/java/linux_aarch64/libs/ cp ./libmindspore-lite-train-jni.so ${LITE_JAVA_PATH}/java/linux_aarch64/libs/
cp ./libmindspore-lite-train-jni.so ${LITE_JAVA_PATH}/native/libs/linux_aarch64/ cp ./libmindspore-lite-train-jni.so ${LITE_JAVA_PATH}/native/libs/linux_aarch64/
@ -214,13 +222,13 @@ build_lite_aarch64_jni_and_jar() {
# build jar # build jar
${gradle_command} clean -p ${LITE_JAVA_PATH}/ ${gradle_command} clean -p ${LITE_JAVA_PATH}/
if [[ "${ENABLE_ASAN}" == "ON" || "${ENABLE_ASAN}" == "on" ]] ; then if [[ "${ENABLE_ASAN}" == "ON" || "${ENABLE_ASAN}" == "on" ]] ; then
${gradle_command} releaseJar -p ${LITE_JAVA_PATH}/ -x test ${gradle_command} releaseJar -p ${LITE_JAVA_PATH}/ -x test --info
else else
if [[ "${MSLITE_ENABLE_TESTCASES}" == "ON" || "${MSLITE_ENABLE_TESTCASES}" == "on" ]] ; then if [[ "${MSLITE_ENABLE_TESTCASES}" == "ON" || "${MSLITE_ENABLE_TESTCASES}" == "on" ]] ; then
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:${LITE_JAVA_PATH}/native/libs/linux_aarch64/ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:${LITE_JAVA_PATH}/native/libs/linux_aarch64/
${gradle_command} releaseJar -p ${LITE_JAVA_PATH}/ ${gradle_command} releaseJar -p ${LITE_JAVA_PATH}/ --info
else else
${gradle_command} releaseJar -p ${LITE_JAVA_PATH}/ -x test ${gradle_command} releaseJar -p ${LITE_JAVA_PATH}/ -x test --info
fi fi
fi fi
cp ${LITE_JAVA_PATH}/build/lib/jar/*.jar ${BASEPATH}/output/tmp/${pkg_name}/runtime/lib/ cp ${LITE_JAVA_PATH}/build/lib/jar/*.jar ${BASEPATH}/output/tmp/${pkg_name}/runtime/lib/
@ -668,11 +676,19 @@ build_lite_x86_64_aarch64_jar()
LITE_JAVA_PATH=${LITE_BASEPATH}/java LITE_JAVA_PATH=${LITE_BASEPATH}/java
local LITE_JAVA_NATIVE_RESOURCE_PATH=${LITE_JAVA_PATH}/src/main/resources/com/mindspore/lite local LITE_JAVA_NATIVE_RESOURCE_PATH=${LITE_JAVA_PATH}/src/main/resources/com/mindspore/lite
rm -f ${LITE_JAVA_NATIVE_RESOURCE_PATH}/linux_x86_64/*.so rm -f ${LITE_JAVA_NATIVE_RESOURCE_PATH}/linux_x86_64/*.so*
rm -f ${LITE_JAVA_NATIVE_RESOURCE_PATH}/linux_aarch64/*.so rm -f ${LITE_JAVA_NATIVE_RESOURCE_PATH}/linux_aarch64/*.so*
cp ${x86_64_base_path}/tmp/${x86_64_package_name}/runtime/lib/*.so ${LITE_JAVA_NATIVE_RESOURCE_PATH}/linux_x86_64/ cp ${x86_64_base_path}/tmp/${x86_64_package_name}/runtime/lib/libmindspore-lite.so ${LITE_JAVA_NATIVE_RESOURCE_PATH}/linux_x86_64/
cp ${aarch64_base_path}/tmp/${aarch64_package_name}/runtime/lib/*.so ${LITE_JAVA_NATIVE_RESOURCE_PATH}/linux_aarch64/ cp ${x86_64_base_path}/tmp/${x86_64_package_name}/runtime/lib/libmindspore-lite-jni.so ${LITE_JAVA_NATIVE_RESOURCE_PATH}/linux_x86_64/
echo "unzip tar success." cp ${aarch64_base_path}/tmp/${aarch64_package_name}/runtime/lib/libmindspore-lite.so ${LITE_JAVA_NATIVE_RESOURCE_PATH}/linux_aarch64/
cp ${aarch64_base_path}/tmp/${aarch64_package_name}/runtime/lib/libmindspore-lite-jni.so ${LITE_JAVA_NATIVE_RESOURCE_PATH}/linux_aarch64/
if [[ "${MSLITE_ENABLE_SERVER_INFERENCE}" == "ON" || "${MSLITE_ENABLE_SERVER_INFERENCE}" == "on" ]] ; then
cp ${x86_64_base_path}/tmp/${x86_64_package_name}/runtime/third_party/glog/libglog.so* ${LITE_JAVA_NATIVE_RESOURCE_PATH}/linux_x86_64/libglog.so
cp ${aarch64_base_path}/tmp/${aarch64_package_name}/runtime/third_party/glog/libglog.so* ${LITE_JAVA_NATIVE_RESOURCE_PATH}/linux_aarch64/libglog.so
else
echo -e "\e[31mMSLITE_ENABLE_SERVER_INFERENCE is not set, so glog libs will not be compiled \e[0m"
fi
# compile jar package # compile jar package
rm -rf ${LITE_JAVA_PATH}/build rm -rf ${LITE_JAVA_PATH}/build
@ -688,13 +704,13 @@ build_lite_x86_64_aarch64_jar()
${gradle_command} clean -p ${LITE_JAVA_PATH}/ ${gradle_command} clean -p ${LITE_JAVA_PATH}/
if [[ "${ENABLE_ASAN}" == "ON" || "${ENABLE_ASAN}" == "on" ]] ; then if [[ "${ENABLE_ASAN}" == "ON" || "${ENABLE_ASAN}" == "on" ]] ; then
${gradle_command} releaseJar -p ${LITE_JAVA_PATH}/ -x test ${gradle_command} releaseJar -p ${LITE_JAVA_PATH}/ -x test --info
else else
if [[ "${MSLITE_ENABLE_TESTCASES}" == "ON" || "${MSLITE_ENABLE_TESTCASES}" == "on" ]] ; then if [[ "${MSLITE_ENABLE_TESTCASES}" == "ON" || "${MSLITE_ENABLE_TESTCASES}" == "on" ]] ; then
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:${LITE_JAVA_PATH}/native/libs/linux_x86/ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:${LITE_JAVA_PATH}/native/libs/linux_x86/
${gradle_command} releaseJar -p ${LITE_JAVA_PATH}/ ${gradle_command} releaseJar -p ${LITE_JAVA_PATH}/ --info
else else
${gradle_command} releaseJar -p ${LITE_JAVA_PATH}/ -x test ${gradle_command} releaseJar -p ${LITE_JAVA_PATH}/ -x test --info
fi fi
fi fi
echo "compile jar success." echo "compile jar success."

View File

@ -20,16 +20,6 @@
<scope>system</scope> <scope>system</scope>
<systemPath>${project.basedir}/lib/mindspore-lite-java.jar</systemPath> <systemPath>${project.basedir}/lib/mindspore-lite-java.jar</systemPath>
</dependency> </dependency>
<dependency>
<groupId>com.huawei.mindspore</groupId>
<artifactId>lite</artifactId>
<version>1.6.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.5</version>
</dependency>
</dependencies> </dependencies>
<build> <build>

View File

@ -19,10 +19,13 @@ allprojects {
} }
apply plugin: 'java' apply plugin: 'java'
test {
testLogging.showStandardStreams = true
testLogging.exceptionFormat = 'full'
}
dependencies { dependencies {
testImplementation 'junit:junit:4.13' testImplementation 'junit:junit:4.13'
implementation project(':common')
implementation fileTree(dir: "libs", include: ["*.jar"]) implementation fileTree(dir: "libs", include: ["*.jar"])
implementation project(':linux_x86') implementation project(':linux_x86')

View File

@ -4,9 +4,6 @@ plugins {
archivesBaseName = 'mindspore-lite-java-common' archivesBaseName = 'mindspore-lite-java-common'
dependencies {
implementation group: 'commons-io', name: 'commons-io', version: '2.5'
}
repositories { repositories {
mavenCentral() mavenCentral()

View File

@ -1,97 +0,0 @@
package com.mindspore.lite;
import java.io.*;
import java.util.Locale;
import java.util.logging.Logger;
import org.apache.commons.io.IOUtils;
public class NativeLibrary {
private static final Logger LOGGER = Logger.getLogger(NativeLibrary.class.toString());
private static final String MINDSPORE_LITE_LIBNAME = "mindspore-lite";
private static final String MINDSPORE_LITE_JNI_LIBNAME = "mindspore-lite-jni";
private static final String MINDSPORE_LITE_LIBS = "mindspore_lite_libs";
public static void load() {
if (isLoaded() || tryLoadLibrary()) {
return;
}
loadLib(makeResourceDir(MINDSPORE_LITE_LIBS), makeResourceName("lib" + MINDSPORE_LITE_LIBNAME + ".so"));
loadLib(makeResourceDir(MINDSPORE_LITE_LIBS), makeResourceName("lib" + MINDSPORE_LITE_JNI_LIBNAME + ".so"));
}
private static boolean tryLoadLibrary() {
try {
System.loadLibrary(MINDSPORE_LITE_LIBNAME);
System.loadLibrary(MINDSPORE_LITE_JNI_LIBNAME);
LOGGER.info("LoadLibrary: success");
return true;
} catch (UnsatisfiedLinkError e) {
LOGGER.warning("tryLoadLibraryFailed: " + e.getMessage());
return false;
}
}
private static boolean isLoaded() {
try {
Version.version();
LOGGER.info("isLoaded: true");
return true;
} catch (UnsatisfiedLinkError e) {
return false;
}
}
private static void loadLib(String jniResourceDir, String jniResourceName) {
final Integer BUFFER_SIZE = 8024;
final String TMPDIR_PROPERTY = "java.io.tmpdir";
try {
InputStream in = NativeLibrary.class.getClassLoader().getResourceAsStream(jniResourceName);
String tmpPath = System.getProperty(TMPDIR_PROPERTY) + "/" + jniResourceDir;
File fileOutDir = new File(tmpPath);
if (!fileOutDir.exists()) {
fileOutDir.mkdirs();
}
File fileOut = new File(tmpPath + jniResourceName.substring(jniResourceName.lastIndexOf("/") + 1));
if (!fileOut.exists()) {
fileOut.createNewFile();
}
OutputStream out = new FileOutputStream(fileOut);
IOUtils.copy(in, out, BUFFER_SIZE);
in.close();
out.close();
System.load(fileOut.getAbsolutePath());
LOGGER.info(String.format("load file: %s success.", fileOut.getAbsolutePath()));
} catch (IOException e) {
throw new UnsatisfiedLinkError(String.format(
"Unable to extract native library into a temporary file (%s)", e.getMessage()));
}
}
/**
* get native lib dir, eg. temp/linux_x86_64
* @param dir
* @return
*/
private static String makeResourceDir(String dir) {
return dir + String.format("linux_%s/", architecture());
}
/**
* get native lib file name, eg. com/mindspore/lite/linux_x86_64/libmindspore-lite.so
* @param basename
* @return
*/
private static String makeResourceName(String basename) {
return "com/mindspore/lite/" + String.format("linux_%s/", architecture()) + basename;
}
private static String architecture() {
final String arch = System.getProperty("os.arch").toLowerCase();
return (arch.equals("amd64")) ? "x86_64" : arch;
}
}

View File

@ -23,15 +23,8 @@ package com.mindspore.lite;
*/ */
public class Version { public class Version {
static { static {
try { System.loadLibrary("mindspore-lite-jni");
NativeLibrary.load();
} catch (Exception e) {
System.err.println("Failed to load MindSporLite native library.");
e.printStackTrace();
throw e;
} }
}
/** /**
* Get MindSpore Lite version info. * Get MindSpore Lite version info.
* *

View File

@ -1,5 +1,5 @@
/* /*
* Copyright 2020 Huawei Technologies Co., Ltd * Copyright 2022 Huawei Technologies Co., Ltd
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -16,7 +16,6 @@
package com.mindspore.lite.config; package com.mindspore.lite.config;
import com.mindspore.lite.NativeLibrary;
/** /**
* MSConfig is defined for holding environment variables during runtime. * MSConfig is defined for holding environment variables during runtime.
@ -25,13 +24,7 @@ import com.mindspore.lite.NativeLibrary;
*/ */
public class MSConfig { public class MSConfig {
static { static {
try { System.loadLibrary("mindspore-lite-jni");
NativeLibrary.load();
} catch (Exception e) {
System.err.println("Failed to load MindSporLite native library.");
e.printStackTrace();
throw e;
}
} }
private long msConfigPtr; private long msConfigPtr;

View File

@ -16,8 +16,6 @@
package com.mindspore.config; package com.mindspore.config;
import com.mindspore.lite.NativeLibrary;
public class TrainCfg { public class TrainCfg {
// depend "mindspore-lite-train-jni" // depend "mindspore-lite-train-jni"
static { static {

View File

@ -1,5 +1,5 @@
/* /*
* Copyright 2021 Huawei Technologies Co., Ltd * Copyright 2022 Huawei Technologies Co., Ltd
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -26,7 +26,7 @@ import com.mindspore.lite.NativeLibrary;
public class Version { public class Version {
static { static {
try { try {
NativeLibrary.load(); NativeLibrary.loadLibs();
} catch (Exception e) { } catch (Exception e) {
System.err.println("Failed to load MindSporLite native library."); System.err.println("Failed to load MindSporLite native library.");
e.printStackTrace(); e.printStackTrace();

View File

@ -0,0 +1,117 @@
package com.mindspore.lite;
import com.mindspore.config.Version;
import java.io.*;
import java.util.logging.Logger;
public class NativeLibrary {
private static final Logger LOGGER = Logger.getLogger(NativeLibrary.class.toString());
private static final String GLOG_LIBNAME = "glog";
private static final String MINDSPORE_LITE_LIBNAME = "mindspore-lite";
private static final String MINDSPORE_LITE_JNI_LIBNAME = "mindspore-lite-jni";
public static void load() {
if (isLibLoaded() || loadLibrary()) {
LOGGER.info("Native lib has been loaded.");
return;
}
loadLibs();
}
public static void loadLibs() {
loadLib(makeResourceName("lib" + GLOG_LIBNAME + ".so"));
loadLib(makeResourceName("lib" + MINDSPORE_LITE_LIBNAME + ".so"));
loadLib(makeResourceName("lib" + MINDSPORE_LITE_JNI_LIBNAME + ".so"));
}
private static boolean isLibLoaded() {
try {
Version.version();
} catch (UnsatisfiedLinkError e) {
return false;
}
return true;
}
private static boolean loadLibrary() {
try {
System.loadLibrary(GLOG_LIBNAME);
System.loadLibrary(MINDSPORE_LITE_LIBNAME);
System.loadLibrary(MINDSPORE_LITE_JNI_LIBNAME);
LOGGER.info("loadLibrary: success");
return true;
} catch (UnsatisfiedLinkError e) {
LOGGER.warning("tryLoadLibraryFailed: " + e.getMessage());
return false;
}
}
private static void loadLib(String libResourceName) {
LOGGER.info("start load libResourceName: " + libResourceName);
final InputStream libResource = NativeLibrary.class.getClassLoader().getResourceAsStream(libResourceName);
if (libResource == null) {
LOGGER.warning(String.format("lib file: %s not exist.", libResourceName));
return;
}
try {
final File tmpDir = mkTmpDir();
String libName = libResourceName.substring(libResourceName.lastIndexOf("/") + 1);
tmpDir.deleteOnExit();
//copy file to tmpFile
final File tmpFile = new File(tmpDir.getCanonicalPath(), libName);
tmpFile.deleteOnExit();
LOGGER.info(String.format("extract %d bytes to %s", copyLib(libResource, tmpFile), tmpFile));
System.load(tmpFile.toString());
} catch (IOException e) {
throw new UnsatisfiedLinkError(
String.format("extract library into tmp file (%s) failed.", e.toString()));
}
}
private static long copyLib(InputStream libResource, File tmpFile) throws IOException{
try (FileOutputStream outputStream = new FileOutputStream(tmpFile);) {
// 1MB
byte[] buffer = new byte[1 << 20];
long byteCnt = 0;
int n = 0;
while ((n = libResource.read(buffer)) >= 0) {
outputStream.write(buffer, 0, n);
byteCnt += n;
}
return byteCnt;
} finally {
libResource.close();
}
}
private static File mkTmpDir() {
final String MINDSPORE_LITE_LIBS = "mindspore_lite_libs-";
Long timestamp = System.currentTimeMillis();
String dirName = MINDSPORE_LITE_LIBS + timestamp + "-";
for (int i = 0; i < 10; i++) {
File tmpDir = new File(new File(System.getProperty("java.io.tmpdir")), dirName + i);
if (tmpDir.mkdir()) {
return tmpDir;
}
}
throw new IllegalStateException("create tmp dir failed, dirName: " + dirName);
}
/**
* get native lib file name, eg. com/mindspore/lite/linux_x86_64/libmindspore-lite.so
*
* @param basename
* @return
*/
private static String makeResourceName(String basename) {
return "com/mindspore/lite/" + String.format("linux_%s/", architecture()) + basename;
}
private static String architecture() {
final String arch = System.getProperty("os.arch").toLowerCase();
return (arch.equals("amd64")) ? "x86_64" : arch;
}
}

View File

@ -16,10 +16,8 @@
package com.mindspore; package com.mindspore;
import com.mindspore.config.DataType; import com.mindspore.config.*;
import com.mindspore.config.DeviceType; import com.mindspore.lite.NativeLibrary;
import com.mindspore.config.MSContext;
import com.mindspore.config.TrainCfg;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.junit.runners.JUnit4; import org.junit.runners.JUnit4;
@ -44,6 +42,14 @@ public class ModelTest {
@Test @Test
public void testBuildByGraphSuccess() { public void testBuildByGraphSuccess() {
try {
NativeLibrary.load();
System.err.println("System: NativeLibrary load success.");
} catch (Exception e) {
System.err.println("Failed to load MindSporLite native library.");
e.printStackTrace();
}
System.out.println(Version.version());
Graph g = new Graph(); Graph g = new Graph();
assertTrue(g.load("../test/ut/src/runtime/kernel/arm/test_data/nets/lenet_train.ms")); assertTrue(g.load("../test/ut/src/runtime/kernel/arm/test_data/nets/lenet_train.ms"));
MSContext context = new MSContext(); MSContext context = new MSContext();