Во-первых, я должен подтвердить, что структура порции очень хорошая.Но в некотором сценарии, например, «обнаружение объекта изображения», когда изображение приходит, многие модели должны обрабатывать изображение, если мы зациклим отправку изображения на удаленный сервер и дождемся возврата, это приведет к большой задержкеи передача изображений очень ресурсоемкая。 Поскольку наша компания использует java для предоставления внешних служб RPC, поэтому
- Я упаковал тензорный поток, обслуживающий библиотеку '.so',
- , а затемЯ предоставляю java api, Java вызывает собственный метод пакета c lib
, чтобы пользователи могли звонить на локальную службу, как если бы они звонили на удаленную службу.и в то же время, сохранение времени удаленной передачи。 ниже моя структура Java:
Java
и код в Java очень прост:
public class TensorflowServerPredictorImpl {
static {
try {
NativeLibLoader.initLoad();
} catch (Exception ex) {
throw new RuntimeException(ex);
}
}
private final long handle;//server c impl handle
public native long init(byte[] options);
private native byte[] predict(long handle,byte[] request);
public TensorflowServerPredictorImpl(ServerOptions.ServerConfig config){
handle = init(config.toByteArray());
}
public Predict.PredictResponse Predict(Predict.PredictRequest request)throws Exception{
byte[] requestByteArray = request.toByteArray();
byte[] responseByteArray = predict(this.handle,requestByteArray);
Predict.PredictResponse response = Predict.PredictResponse.parseFrom(responseByteArray);
return response;
}
}
и использование lib выглядит так:
public class Test{
public static void main(String[] args)throws Exception{
URL url = Test.class.getResource("/");
String path = url.getPath()+"model_config_file.cfg";
ServerOptions.ServerConfig.Builder builder = ServerOptions.ServerConfig.newBuilder();
builder.setModelConfigFile(path);
ServerOptions.ServerConfig config = builder.build();
TensorflowServerPredictorImpl predictor = new TensorflowServerPredictorImpl(config);
Predict.PredictRequest request =buildRequest(1);
Predict.PredictResponse response = predictor.Predict(request);
}
Предиктор Поддержка многопоточности。
Как другие люди решают такие проблемы?Имеет ли для меня смысл сделать это?