丁云鹏 5 months ago
parent
commit
16b2c105ce

+ 1 - 0
recommend-model-service/src/main/java/com/tzld/piaoquan/recommend/model/service/WarmUpService.java

@@ -20,5 +20,6 @@ public class WarmUpService {
         // ModelManager.getInstance().registerModel(ModelEnum.VIDEO_DSSM);
 
         ModelManager.getInstance().registerModel(ModelEnum.DEMO);
+        ModelManager.getInstance().registerModel(ModelEnum.DNN);
     }
 }

+ 74 - 0
recommend-model-service/src/main/java/com/tzld/piaoquan/recommend/model/service/model/DNNModel.java

@@ -0,0 +1,74 @@
+package com.tzld.piaoquan.recommend.model.service.model;
+
+import com.baidu.paddle.inference.Config;
+import com.baidu.paddle.inference.Predictor;
+import com.baidu.paddle.inference.Tensor;
+import com.tzld.piaoquan.recommend.model.util.CompressUtil;
+import com.tzld.piaoquan.recommend.model.util.JSONUtils;
+import com.tzld.piaoquan.recommend.model.util.PropertiesUtil;
+import lombok.extern.slf4j.Slf4j;
+
+import java.io.InputStream;
+
+@Slf4j
+public class DNNModel implements Model {
+
+    private Predictor sourcePredictor;
+
+    public void cleanModel() {
+        this.sourcePredictor.destroyNativePredictor();
+        this.sourcePredictor = null;
+    }
+
+    public String predict(String param) {
+
+        long time1 = System.currentTimeMillis();
+        Predictor predictor = Predictor.clonePaddlePredictor(sourcePredictor);
+        String inNames = predictor.getInputNameById(0);
+        Tensor inHandle = predictor.getInputHandle(inNames);
+
+        //inHandle.reshape(39, new int[]{});
+
+        float[] inData = new float[39];
+        inHandle.copyFromCpu(inData);
+        predictor.run();
+
+        String outNames = predictor.getOutputNameById(0);
+        Tensor outHandle = predictor.getOutputHandle(outNames);
+        float[] outData = new float[outHandle.getSize()];
+        outHandle.copyToCpu(outData);
+        long time2 = System.currentTimeMillis();
+        log.info("predictor2 outData[0]={},outDataLen={},cost={}", outData[0], outData.length, (time2 - time1));
+
+        outHandle.destroyNativeTensor();
+        inHandle.destroyNativeTensor();
+        predictor.destroyNativePredictor();
+
+        return JSONUtils.toJson(outData);
+    }
+
+    @Override
+    public boolean loadFromStream(InputStream in) throws Exception {
+        String modelDir = PropertiesUtil.getString("model.dir") + "/dnn";
+        CompressUtil.decompressGzFile(in, modelDir);
+
+        String modelFile = modelDir + "/inference.pdmodel";
+        String paramFile = modelDir + "/inference.pdiparams";
+
+        Config config = new Config();
+        config.setCppModel(modelFile, paramFile);
+        config.enableMemoryOptim(true);
+        config.enableMKLDNN();
+        config.getCpuMathLibraryNumThreads();
+        config.getFractionOfGpuMemoryForPool();
+        config.switchIrDebug(false);
+
+        Predictor temp = sourcePredictor;
+        sourcePredictor = Predictor.createPaddlePredictor(config);
+        if (temp != null) {
+            temp.destroyNativePredictor();
+        }
+        return true;
+    }
+
+}

+ 1 - 0
recommend-model-service/src/main/java/com/tzld/piaoquan/recommend/model/service/model/ModelEnum.java

@@ -5,6 +5,7 @@ import org.apache.commons.lang3.StringUtils;
 public enum ModelEnum {
     VIDEO_DSSM("videoDssm", "", DSSMModel.class),
     DEMO("demo", "zhangbo/model_paddle_demo.tar.gz", DemoModel.class),
+    DNN("demo", "dyp/dnn.tar.gz", DNNModel.class),
     NULL("null", "null", null);
 
     private String modelName;

+ 7 - 0
recommend-model-service/src/main/java/com/tzld/piaoquan/recommend/model/web/DemoController.java

@@ -22,4 +22,11 @@ public class DemoController {
         String date = model.predict("");
         return date;
     }
+
+    @GetMapping("/dnn")
+    public String dnn() {
+        Model model = ModelManager.getInstance().getModel(ModelEnum.DNN);
+        String date = model.predict("");
+        return date;
+    }
 }