| 
					
				 | 
			
			
				@@ -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; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 |