From cdbba13aa076c0435ccfd0dba751605e21091d66 Mon Sep 17 00:00:00 2001
From: Hashim Sharif <hsharif3@miranda.cs.illinois.edu>
Date: Fri, 19 Mar 2021 00:23:25 -0500
Subject: [PATCH] Creating pip installabe package for Keras frontend

---
 .../{frontend => keras_frontend}/__init__.py  |  0
 .../approxhpvm_translator.py                  | 10 ++++----
 .../{frontend => keras_frontend}/config.py    |  0
 .../hpvm_dfg_translator.py                    |  4 ++--
 .../hpvm_intrinsics.py                        |  0
 .../{frontend => keras_frontend}/knobs.py     |  0
 .../promise_translator.py                     |  6 ++---
 .../quantize_utils.py                         |  0
 .../{frontend => keras_frontend}/setup.py     |  0
 .../{frontend => keras_frontend}/utils.py     |  0
 .../weight_utils.py                           |  0
 hpvm/projects/keras/setup.py                  | 16 +++++++++----
 hpvm/projects/keras/src/Benchmark.py          | 23 +++++++++++--------
 13 files changed, 35 insertions(+), 24 deletions(-)
 rename hpvm/projects/keras/{frontend => keras_frontend}/__init__.py (100%)
 rename hpvm/projects/keras/{frontend => keras_frontend}/approxhpvm_translator.py (99%)
 rename hpvm/projects/keras/{frontend => keras_frontend}/config.py (100%)
 rename hpvm/projects/keras/{frontend => keras_frontend}/hpvm_dfg_translator.py (99%)
 rename hpvm/projects/keras/{frontend => keras_frontend}/hpvm_intrinsics.py (100%)
 rename hpvm/projects/keras/{frontend => keras_frontend}/knobs.py (100%)
 rename hpvm/projects/keras/{frontend => keras_frontend}/promise_translator.py (99%)
 rename hpvm/projects/keras/{frontend => keras_frontend}/quantize_utils.py (100%)
 rename hpvm/projects/keras/{frontend => keras_frontend}/setup.py (100%)
 rename hpvm/projects/keras/{frontend => keras_frontend}/utils.py (100%)
 rename hpvm/projects/keras/{frontend => keras_frontend}/weight_utils.py (100%)

diff --git a/hpvm/projects/keras/frontend/__init__.py b/hpvm/projects/keras/keras_frontend/__init__.py
similarity index 100%
rename from hpvm/projects/keras/frontend/__init__.py
rename to hpvm/projects/keras/keras_frontend/__init__.py
diff --git a/hpvm/projects/keras/frontend/approxhpvm_translator.py b/hpvm/projects/keras/keras_frontend/approxhpvm_translator.py
similarity index 99%
rename from hpvm/projects/keras/frontend/approxhpvm_translator.py
rename to hpvm/projects/keras/keras_frontend/approxhpvm_translator.py
index f3bc0076c6..48f469f226 100644
--- a/hpvm/projects/keras/frontend/approxhpvm_translator.py
+++ b/hpvm/projects/keras/keras_frontend/approxhpvm_translator.py
@@ -1,11 +1,11 @@
 
 import sys
 import numpy as np
-from frontend.promise_translator import PromiseRtTranslator
-from frontend.hpvm_dfg_translator import HPVMTranslator
-from frontend.weight_utils import dumpLabels, dumpData, dumpConvWeights, dumpFcWeights, dumpFcBias
-from frontend.utils import *
-from frontend.knobs import *
+from keras_frontend.promise_translator import PromiseRtTranslator
+from keras_frontend.hpvm_dfg_translator import HPVMTranslator
+from keras_frontend.weight_utils import dumpLabels, dumpData, dumpConvWeights, dumpFcWeights, dumpFcBias
+from keras_frontend.utils import *
+from keras_frontend.knobs import *
 import keras
 import os
 
diff --git a/hpvm/projects/keras/frontend/config.py b/hpvm/projects/keras/keras_frontend/config.py
similarity index 100%
rename from hpvm/projects/keras/frontend/config.py
rename to hpvm/projects/keras/keras_frontend/config.py
diff --git a/hpvm/projects/keras/frontend/hpvm_dfg_translator.py b/hpvm/projects/keras/keras_frontend/hpvm_dfg_translator.py
similarity index 99%
rename from hpvm/projects/keras/frontend/hpvm_dfg_translator.py
rename to hpvm/projects/keras/keras_frontend/hpvm_dfg_translator.py
index d14c64bbf4..53369478e3 100644
--- a/hpvm/projects/keras/frontend/hpvm_dfg_translator.py
+++ b/hpvm/projects/keras/keras_frontend/hpvm_dfg_translator.py
@@ -1,8 +1,8 @@
 
 import os
 import sys
-from frontend.utils import *
-from frontend.hpvm_intrinsics import *
+from keras_frontend.utils import *
+from keras_frontend.hpvm_intrinsics import *
 
 
 class HPVMTranslator:
diff --git a/hpvm/projects/keras/frontend/hpvm_intrinsics.py b/hpvm/projects/keras/keras_frontend/hpvm_intrinsics.py
similarity index 100%
rename from hpvm/projects/keras/frontend/hpvm_intrinsics.py
rename to hpvm/projects/keras/keras_frontend/hpvm_intrinsics.py
diff --git a/hpvm/projects/keras/frontend/knobs.py b/hpvm/projects/keras/keras_frontend/knobs.py
similarity index 100%
rename from hpvm/projects/keras/frontend/knobs.py
rename to hpvm/projects/keras/keras_frontend/knobs.py
diff --git a/hpvm/projects/keras/frontend/promise_translator.py b/hpvm/projects/keras/keras_frontend/promise_translator.py
similarity index 99%
rename from hpvm/projects/keras/frontend/promise_translator.py
rename to hpvm/projects/keras/keras_frontend/promise_translator.py
index 015c1c562a..124037c003 100644
--- a/hpvm/projects/keras/frontend/promise_translator.py
+++ b/hpvm/projects/keras/keras_frontend/promise_translator.py
@@ -4,8 +4,8 @@ import random
 import numpy as np
 import sys
 from keras import backend as K
-from frontend.utils import *
-from frontend.quantize_utils import get_best_quant_range, dumpQuantizeRanges
+from keras_frontend.utils import *
+from keras_frontend.quantize_utils import get_best_quant_range, dumpQuantizeRanges
 
 
 class State:
@@ -600,7 +600,7 @@ class PromiseRtTranslator:
     
     promise_layer_str = "void* " + output_var + " = tensorAdd(" + input_vars[0]
     promise_layer_str += ", " + input_vars[1] + "); \n"
-    print (promise_layer_str)
+    #print (promise_layer_str)
 
     self.program_str += promise_layer_str
 
diff --git a/hpvm/projects/keras/frontend/quantize_utils.py b/hpvm/projects/keras/keras_frontend/quantize_utils.py
similarity index 100%
rename from hpvm/projects/keras/frontend/quantize_utils.py
rename to hpvm/projects/keras/keras_frontend/quantize_utils.py
diff --git a/hpvm/projects/keras/frontend/setup.py b/hpvm/projects/keras/keras_frontend/setup.py
similarity index 100%
rename from hpvm/projects/keras/frontend/setup.py
rename to hpvm/projects/keras/keras_frontend/setup.py
diff --git a/hpvm/projects/keras/frontend/utils.py b/hpvm/projects/keras/keras_frontend/utils.py
similarity index 100%
rename from hpvm/projects/keras/frontend/utils.py
rename to hpvm/projects/keras/keras_frontend/utils.py
diff --git a/hpvm/projects/keras/frontend/weight_utils.py b/hpvm/projects/keras/keras_frontend/weight_utils.py
similarity index 100%
rename from hpvm/projects/keras/frontend/weight_utils.py
rename to hpvm/projects/keras/keras_frontend/weight_utils.py
diff --git a/hpvm/projects/keras/setup.py b/hpvm/projects/keras/setup.py
index 9da7193379..bdf1921406 100644
--- a/hpvm/projects/keras/setup.py
+++ b/hpvm/projects/keras/setup.py
@@ -2,11 +2,17 @@
 from setuptools import setup
 
 setup(
-    name='frontend',
-    version='1.0',
-    description='ApproxHPVM frontend modules',
+    name='keras_frontend',
+    version='0.1',
+    description='ApproxHPVM Keras Frontend. Keras -> HPVM Translator',
     author='Hashim',
     author_email='hsharif3@illinois.edu',
-    packages=['frontend'],
-    install_requires=[],
+    packages=['keras_frontend'],
+    install_requires=[
+        "torchvision==0.8.2",
+        "tensorflow==1.14",
+        "tensorflow-gpu==1.14",
+        "keras==2.1.6",
+        "scipy==1.1.0"
+    ],
 )
diff --git a/hpvm/projects/keras/src/Benchmark.py b/hpvm/projects/keras/src/Benchmark.py
index aaa7bdacc4..b0df9d98d6 100644
--- a/hpvm/projects/keras/src/Benchmark.py
+++ b/hpvm/projects/keras/src/Benchmark.py
@@ -6,9 +6,9 @@ import shutil
 import subprocess
 from keras.utils.np_utils import to_categorical
 from keras.models import load_model
-from frontend.approxhpvm_translator import translate_to_approxhpvm
-from frontend.weight_utils import dumpCalibrationData
-from frontend.weight_utils import reloadHPVMWeights
+from keras_frontend.approxhpvm_translator import translate_to_approxhpvm
+from keras_frontend.weight_utils import dumpCalibrationData
+from keras_frontend.weight_utils import reloadHPVMWeights
 
 
 # Every CNN Benchmark must inherit from Benchmark class
@@ -39,10 +39,10 @@ class Benchmark:
 
 
     # Compiles frontend generated sources
-    def compileSource(self, working_dir):
+    def compileSource(self, working_dir, src_name, binary_name):
               
-        src_file = os.getcwd() + "/" + working_dir + "/approxhpvm_src.cc"
-        target_binary = os.getcwd() + "/" + working_dir + "/HPVM_binary"
+        src_file = os.getcwd() + "/" + working_dir + "/" + src_name   #  approxhpvm_src.cc"
+        target_binary = os.getcwd() + "/" + working_dir + "/" + binary_name    # HPVM_binary"
         approx_conf_file = "tuner_confs.txt"
 
         FNULL = open(os.devnull, 'w')
@@ -135,7 +135,12 @@ class Benchmark:
                                                 (argv[1] == "hpvm_reload")) # Do not redump HPVM weights if `hpvm_reload` used
 
           if len(argv) > 3 and argv[3] == "compile":
-            self.compileSource(working_dir)
+            self.compileSource(working_dir, "approxhpvm_src.cc", "HPVM_binary")
+          else:
+            self.printUsage()
+
+          if len(argv) > 4 and argv[4] == "compile_tuner":
+            self.compileSource(working_dir, "approxhpvm_tuner_src.cc", "HPVM_tuner_binary")
           else:
             self.printUsage()
 
@@ -144,8 +149,8 @@ class Benchmark:
           model.save_weights(self.keras_model_file)
 
           
-      elif len(argv) > 2:
-        self.printUsage()
+      #elif len(argv) > 2:
+      #  self.printUsage()
             
 
     
-- 
GitLab