Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

0.27调用tensorflow的pb模型崩溃(可以加载模型,推理时崩溃) #3173

Open
LEEay opened this issue May 11, 2024 · 2 comments
Labels
bug Something isn't working

Comments

@LEEay
Copy link

LEEay commented May 11, 2024

Description

0.27调用tensorflow的pb模型崩溃(可以加载模型,推理时崩溃)
Java frames: (J=compiled Java code, j=interpreted, Vv=VM code)
j org.tensorflow.internal.c_api.global.tensorflow.TF_SessionRun(Lorg/tensorflow/internal/c_api/TF_Session;Lorg/tensorflow/internal/c_api/TF_Buffer;Lorg/tensorflow/internal/c_api/TF_Output;Lorg/bytedeco/javacpp/PointerPointer;ILorg/tensorflow/internal/c_api/TF_Output;Lorg/bytedeco/javacpp/PointerPointer;ILorg/bytedeco/javacpp/PointerPointer;ILorg/tensorflow/internal/c_api/TF_Buffer;Lorg/tensorflow/internal/c_api/TF_Status;)V+0
j ai.djl.tensorflow.engine.javacpp.JavacppUtils.runSession(Lorg/tensorflow/internal/c_api/TF_Session;Lorg/tensorflow/proto/framework/RunOptions;[Lorg/tensorflow/internal/c_api/TF_Tensor;[Lorg/tensorflow/internal/c_api/TF_Operation;[I[Lorg/tensorflow/internal/c_api/TF_Operation;[I[Lorg/tensorflow/internal/c_api/TF_Operation;)[Lorg/tensorflow/internal/c_api/TF_Tensor;+270
j ai.djl.tensorflow.engine.TfSymbolBlock.forwardInternal(Lai/djl/training/ParameterStore;Lai/djl/ndarray/NDList;ZLai/djl/util/PairList;)Lai/djl/ndarray/NDList;+202
j ai.djl.nn.AbstractBaseBlock.forward(Lai/djl/training/ParameterStore;Lai/djl/ndarray/NDList;ZLai/djl/util/PairList;)Lai/djl/ndarray/NDList;+36
j ai.djl.nn.Block.forward(Lai/djl/training/ParameterStore;Lai/djl/ndarray/NDList;Z)Lai/djl/ndarray/NDList;+5
j ai.djl.inference.Predictor.predictInternal(Lai/djl/translate/TranslatorContext;Lai/djl/ndarray/NDList;)Lai/djl/ndarray/NDList;+21
j ai.djl.inference.Predictor.batchPredict(Ljava/util/List;)Ljava/util/List;+133
j ai.djl.inference.Predictor.predict(Ljava/lang/Object;)Ljava/lang/Object;+5
j com.fly.ai.wdtag.WdTagService.detect(Lai/djl/modality/cv/Image;)Lai/djl/modality/Classifications;+17
j com.fly.ai.wdtag.WdTagService.tag(Lai/djl/modality/cv/Image;)Lai/djl/modality/Classifications;+2
j com.fly.ai.wdtag.WdTagService.tag(Ljava/io/InputStream;)Lai/djl/modality/Classifications;+10
j com.fly.ai.wdtag.WdTagController.tag(Lorg/springframework/web/multipart/MultipartFile;)Ljava/util/List;+10
v ~StubRoutines::call_stub
J 2923 jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Ljava/lang/reflect/Method;Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object; java.base@17.0.8 (0 bytes) @ 0x000001712a9e2327 [0x000001712a9e22a0+0x0000000000000087]
J 2922 c1 jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object; java.base@17.0.8 (137 bytes) @ 0x000001712a9e31cc [0x000001712a9e2e80+0x000000000000034c]
J 2373 c1 jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object; java.base@17.0.8 (10 bytes) @ 0x000001712a8f7564 [0x000001712a8f7520+0x0000000000000044]
J 2399 c1 java.lang.reflect.Method.invoke(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object; java.base@17.0.8 (65 bytes) @ 0x000001712a90266c [0x000001712a902560+0x000000000000010c]
j org.springframework.web.method.support.InvocableHandlerMethod.doInvoke([Ljava/lang/Object;)Ljava/lang/Object;+28
j org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(Lorg/springframework/web/context/request/NativeWebRequest;Lorg/springframework/web/method/support/ModelAndViewContainer;[Ljava/lang/Object;)Ljava/lang/Object;+54
j org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(Lorg/springframework/web/context/request/ServletWebRequest;Lorg/springframework/web/method/support/ModelAndViewContainer;[Ljava/lang/Object;)V+4
j org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;Lorg/springframework/web/method/HandlerMethod;)Lorg/springframework/web/servlet/ModelAndView;+244
j org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;Lorg/springframework/web/method/HandlerMethod;)Lorg/springframework/web/servlet/ModelAndView;+81
j org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;Ljava/lang/Object;)Lorg/springframework/web/servlet/ModelAndView;+7
j org.springframework.web.servlet.DispatcherServlet.doDispatch(Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;)V+259
j org.springframework.web.servlet.DispatcherServlet.doService(Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;)V+241
j org.springframework.web.servlet.FrameworkServlet.processRequest(Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;)V+71
j org.springframework.web.servlet.FrameworkServlet.doPost(Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;)V+3
j javax.servlet.http.HttpServlet.service(Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;)V+149
j org.springframework.web.servlet.FrameworkServlet.service(Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;)V+33
j javax.servlet.http.HttpServlet.service(Ljavax/servlet/ServletRequest;Ljavax/servlet/ServletResponse;)V+36
j org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Ljavax/servlet/ServletRequest;Ljavax/servlet/ServletResponse;)V+304
j org.apache.catalina.core.ApplicationFilterChain.doFilter(Ljavax/servlet/ServletRequest;Ljavax/servlet/ServletResponse;)V+99
j org.apache.tomcat.websocket.server.WsFilter.doFilter(Ljavax/servlet/ServletRequest;Ljavax/servlet/ServletResponse;Ljavax/servlet/FilterChain;)V+21
j org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Ljavax/servlet/ServletRequest;Ljavax/servlet/ServletResponse;)V+135
j org.apache.catalina.core.ApplicationFilterChain.doFilter(Ljavax/servlet/ServletRequest;Ljavax/servlet/ServletResponse;)V+99
j org.springframework.web.filter.RequestContextFilter.doFilterInternal(Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;Ljavax/servlet/FilterChain;)V+21
j org.springframework.web.filter.OncePerRequestFilter.doFilter(Ljavax/servlet/ServletRequest;Ljavax/servlet/ServletResponse;Ljavax/servlet/FilterChain;)V+147
j org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Ljavax/servlet/ServletRequest;Ljavax/servlet/ServletResponse;)V+135
j org.apache.catalina.core.ApplicationFilterChain.doFilter(Ljavax/servlet/ServletRequest;Ljavax/servlet/ServletResponse;)V+99
j org.springframework.web.filter.FormContentFilter.doFilterInternal(Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;Ljavax/servlet/FilterChain;)V+38
j org.springframework.web.filter.OncePerRequestFilter.doFilter(Ljavax/servlet/ServletRequest;Ljavax/servlet/ServletResponse;Ljavax/servlet/FilterChain;)V+147
j org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Ljavax/servlet/ServletRequest;Ljavax/servlet/ServletResponse;)V+135
j org.apache.catalina.core.ApplicationFilterChain.doFilter(Ljavax/servlet/ServletRequest;Ljavax/servlet/ServletResponse;)V+99
j org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;Ljavax/servlet/FilterChain;)V+53
j org.springframework.web.filter.OncePerRequestFilter.doFilter(Ljavax/servlet/ServletRequest;Ljavax/servlet/ServletResponse;Ljavax/servlet/FilterChain;)V+147
j org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Ljavax/servlet/ServletRequest;Ljavax/servlet/ServletResponse;)V+135
j org.apache.catalina.core.ApplicationFilterChain.doFilter(Ljavax/servlet/ServletRequest;Ljavax/servlet/ServletResponse;)V+99
j org.apache.catalina.core.StandardWrapperValve.invoke(Lorg/apache/catalina/connector/Request;Lorg/apache/catalina/connector/Response;)V+694
j org.apache.catalina.core.StandardContextValve.invoke(Lorg/apache/catalina/connector/Request;Lorg/apache/catalina/connector/Response;)V+169
j org.apache.catalina.authenticator.AuthenticatorBase.invoke(Lorg/apache/catalina/connector/Request;Lorg/apache/catalina/connector/Response;)V+260
j org.apache.catalina.core.StandardHostValve.invoke(Lorg/apache/catalina/connector/Request;Lorg/apache/catalina/connector/Response;)V+128
j org.apache.catalina.valves.ErrorReportValve.invoke(Lorg/apache/catalina/connector/Request;Lorg/apache/catalina/connector/Response;)V+6
j org.apache.catalina.core.StandardEngineValve.invoke(Lorg/apache/catalina/connector/Request;Lorg/apache/catalina/connector/Response;)V+59
j org.apache.catalina.connector.CoyoteAdapter.service(Lorg/apache/coyote/Request;Lorg/apache/coyote/Response;)V+203
j org.apache.coyote.http11.Http11Processor.service(Lorg/apache/tomcat/util/net/SocketWrapperBase;)Lorg/apache/tomcat/util/net/AbstractEndpoint$Handler$SocketState;+796
j org.apache.coyote.AbstractProcessorLight.process(Lorg/apache/tomcat/util/net/SocketWrapperBase;Lorg/apache/tomcat/util/net/SocketEvent;)Lorg/apache/tomcat/util/net/AbstractEndpoint$Handler$SocketState;+170
j org.apache.coyote.AbstractProtocol$ConnectionHandler.process(Lorg/apache/tomcat/util/net/SocketWrapperBase;Lorg/apache/tomcat/util/net/SocketEvent;)Lorg/apache/tomcat/util/net/AbstractEndpoint$Handler$SocketState;+495
j org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun()V+216
j org.apache.tomcat.util.net.SocketProcessorBase.run()V+21
j org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(Lorg/apache/tomcat/util/threads/ThreadPoolExecutor$Worker;)V+92
j org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run()V+5
j org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run()V+4
j java.lang.Thread.run()V+11 java.base@17.0.8
v ~StubRoutines::call_stub

.h5文件和.pb 转化后的文件在python里调用正常
使用tensorflow的java代码,也是正常的

python 3.10.4
tensorflow 2.16.1

@LEEay LEEay added the bug Something isn't working label May 11, 2024
@frankfliu
Copy link
Contributor

Can you provide a mini-reproduce project?

Does it wither older version?

Do you have code that works for TFJava?

@LEEay
Copy link
Author

LEEay commented May 13, 2024

使用的是KichangKim/DeepDanbooru github上的项目,tags v3-20211112-sgd-e28, 然后根据djl文档的转化成pb模型
我的tfjava代码:
Session session = SavedModelBundle.load("E:\Download\mymodel\deepdanbooru-v3-20211112",
"serve").session();

    float[][] input = {
            {2.6327686f, -9.201903f},
            {-1.3209248f, 8.569574f},
            {-5.6642127f, 3.3681698f},
            {9.604832f, 5.9664965f},
            {-0.8812313f, -6.76733f}
    };
    LongNdArray matrix3d = NdArrays.ofLongs(Shape.of(1, 100, 9));
    TInt64 rank3Tensor = TInt64.tensorOf(matrix3d);
    Tensor resultTensor = session.runner()
            .feed("serving_default_inputs:0", rank3Tensor)
            .fetch("StatefulPartitionedCall:0")
            .run().get(0);

    resultTensor.shape();
    session.close();

模型参数不是正确的,是我测试的,但是tfjava会提醒我参数错误,djl这样推理就会程序崩溃

因为参数是python代码,我还没有完全掌握转成djl 的写法,所有使用了前置后置使用python代码实现,模型使用djl实现
代码:
PythonTranslator;
@OverRide
public void prepare(TranslatorContext ctx) throws Exception {
if (predictor == null) {
Criteria<Input, Output> criteria =
Criteria.builder()
.setTypes(Input.class, Output.class)
.optModelUrls(getRealUrl("/model/wdtag"))
.optEngine("Python")
.build();
model = criteria.loadModel();
predictor = model.newPredictor();
}
}

@Override
public Classifications processOutput(TranslatorContext translatorContext, NDList ndList) throws Exception {
    System.out.println("##################################");
    return null;
}

@Override
public NDList processInput(TranslatorContext translatorContext, String s) throws Exception {
    Input input = new Input();
    input.add("data", s);
    input.addProperty("Content-Type", "text/plain");
    input.addProperty("handler", "preprocess");
    Output output = predictor.predict(input);
    if (output.getCode() != 200) {
        throw new TranslateException("Python preprocess() failed: " + output.getMessage());
    }

// NDList list=output.getDataAsNDList(translatorContext.getNDManager());
NDArray ndArray = output.getDataAsNDList(translatorContext.getNDManager()).get(0);
ndArray.setName("serving_default_inputs:0");
System.out.println(new NDList(ndArray).toString());
return new NDList(ndArray);
// return output.getDataAsNDList(translatorContext.getNDManager());
}

加载模型代码:
PythonTranslator translator = new PythonTranslator();
Criteria<String, Classifications> criteria = Criteria.builder()
.optEngine(ENGINE_TENSORFLOW)
.optDevice(device)
.optModelUrls(getRealUrl(prop.getDetectUrl()))
.setTypes(String.class, Classifications.class)
// .optModelName(prop.getModelName())
.optProgress(new ProgressBar())
// .optOption("Tags", "")
// .optOption("SignatureDefKey", "serving_default")
.optTranslator(translator)
.build();
// Engine.getEngine("TensorFlow");
detectionModel = criteria.loadModel();

python的图片前置后置操作是按照KichangKim/DeepDanbooru 代码写的

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

2 participants