diff --git a/hpvm/projects/predtuner b/hpvm/projects/predtuner
index 83e5ca83c83a69b6220ec4344ae31cac16fa8c46..7159825f27ee7b3c5731ee1b9418c6eafda6622a 160000
--- a/hpvm/projects/predtuner
+++ b/hpvm/projects/predtuner
@@ -1 +1 @@
-Subproject commit 83e5ca83c83a69b6220ec4344ae31cac16fa8c46
+Subproject commit 7159825f27ee7b3c5731ee1b9418c6eafda6622a
diff --git a/hpvm/projects/torch2hpvm/torch2hpvm/approxknobs.json b/hpvm/projects/torch2hpvm/torch2hpvm/approxknobs.json
index 64f4e8816b07208d03ccab98624c6c0e477f8e98..4d254610d29969b3766b1f9db9a1f105fb8fda1d 100644
--- a/hpvm/projects/torch2hpvm/torch2hpvm/approxknobs.json
+++ b/hpvm/projects/torch2hpvm/torch2hpvm/approxknobs.json
@@ -1,450 +1,504 @@
-[
-    {
-        "name": "11",
+{
+    "11": {
         "speedup": 1.0,
         "applies_to": null,
-        "is_baseline": true,
-        "devices": null
+        "baseline_priority": 1,
+        "devices": [
+            "cpu"
+        ]
     },
-    {
-        "name": "12",
+    "12": {
         "speedup": 1.5,
-        "applies_to": [
-            "convolution",
-            "linear"
-        ], 
-        "devices": ["gpu"]
+        "applies_to": null,
+        "baseline_priority": 0,
+        "devices": [
+            "gpu"
+        ]
     },
-    {
-        "name": "121",
+    "121": {
         "speedup": 2,
         "applies_to": [
             "convolution"
-        ], 
-        "devices": ["cpu"]
+        ],
+        "devices": [
+            "cpu"
+        ]
     },
-    {
-        "name": "122",
+    "122": {
         "speedup": 2,
         "applies_to": [
             "convolution"
-        ], 
-        "devices": ["cpu"]
+        ],
+        "devices": [
+            "cpu"
+        ]
     },
-    {
-        "name": "123",
+    "123": {
         "speedup": 2,
         "applies_to": [
             "convolution"
-        ], 
-        "devices": ["cpu"]
+        ],
+        "devices": [
+            "cpu"
+        ]
     },
-    {
-        "name": "124",
+    "124": {
         "speedup": 2,
         "applies_to": [
             "convolution"
-        ], 
-        "devices": ["cpu"]
+        ],
+        "devices": [
+            "cpu"
+        ]
     },
-    {
-        "name": "125",
+    "125": {
         "speedup": 1.5,
         "applies_to": [
             "convolution"
-        ], 
-        "devices": ["cpu"]
+        ],
+        "devices": [
+            "cpu"
+        ]
     },
-    {
-        "name": "126",
+    "126": {
         "speedup": 1.5,
         "applies_to": [
             "convolution"
-        ], 
-        "devices": ["cpu"]
+        ],
+        "devices": [
+            "cpu"
+        ]
     },
-    {
-        "name": "127",
+    "127": {
         "speedup": 1.5,
         "applies_to": [
             "convolution"
-        ], 
-        "devices": ["cpu"]
+        ],
+        "devices": [
+            "cpu"
+        ]
     },
-    {
-        "name": "128",
+    "128": {
         "speedup": 1.5,
         "applies_to": [
             "convolution"
-        ], 
-        "devices": ["cpu"]
+        ],
+        "devices": [
+            "cpu"
+        ]
     },
-    {
-        "name": "129",
+    "129": {
         "speedup": 1.5,
         "applies_to": [
             "convolution"
-        ], 
-        "devices": ["cpu"]
+        ],
+        "devices": [
+            "cpu"
+        ]
     },
-    {
-        "name": "130",
+    "130": {
         "speedup": 1.5,
         "applies_to": [
             "convolution"
-        ], 
-        "devices": ["cpu"]
+        ],
+        "devices": [
+            "cpu"
+        ]
     },
-    {
-        "name": "131",
+    "131": {
         "speedup": 1.33,
         "applies_to": [
             "convolution"
-        ], 
-        "devices": ["cpu"]
+        ],
+        "devices": [
+            "cpu"
+        ]
     },
-    {
-        "name": "132",
+    "132": {
         "speedup": 1.33,
         "applies_to": [
             "convolution"
-        ], 
-        "devices": ["cpu"]
+        ],
+        "devices": [
+            "cpu"
+        ]
     },
-    {
-        "name": "133",
+    "133": {
         "speedup": 1.33,
         "applies_to": [
             "convolution"
-        ], 
-        "devices": ["cpu"]
+        ],
+        "devices": [
+            "cpu"
+        ]
     },
-    {
-        "name": "134",
+    "134": {
         "speedup": 1.33,
         "applies_to": [
             "convolution"
-        ], 
-        "devices": ["cpu"]
+        ],
+        "devices": [
+            "cpu"
+        ]
     },
-    {
-        "name": "135",
+    "135": {
         "speedup": 1.33,
         "applies_to": [
             "convolution"
-        ], 
-        "devices": ["cpu"]
+        ],
+        "devices": [
+            "cpu"
+        ]
     },
-    {
-        "name": "136",
+    "136": {
         "speedup": 1.33,
         "applies_to": [
             "convolution"
-        ], 
-        "devices": ["cpu"]
+        ],
+        "devices": [
+            "cpu"
+        ]
     },
-    {
-        "name": "137",
+    "137": {
         "speedup": 1.33,
         "applies_to": [
             "convolution"
-        ], 
-        "devices": ["cpu"]
+        ],
+        "devices": [
+            "cpu"
+        ]
     },
-    {
-        "name": "138",
+    "138": {
         "speedup": 1.33,
         "applies_to": [
             "convolution"
-        ], 
-        "devices": ["cpu"]
+        ],
+        "devices": [
+            "cpu"
+        ]
     },
-    {
-        "name": "231",
+    "231": {
         "speedup": 2,
         "applies_to": [
             "convolution"
-        ], 
-        "devices": ["cpu"]
+        ],
+        "devices": [
+            "cpu"
+        ]
     },
-    {
-        "name": "232",
+    "232": {
         "speedup": 2,
         "applies_to": [
             "convolution"
-        ], 
-        "devices": ["cpu"]
+        ],
+        "devices": [
+            "cpu"
+        ]
     },
-    {
-        "name": "233",
+    "233": {
         "speedup": 1.5,
         "applies_to": [
             "convolution"
-        ], 
-        "devices": ["cpu"]
+        ],
+        "devices": [
+            "cpu"
+        ]
     },
-    {
-        "name": "234",
+    "234": {
         "speedup": 1.5,
         "applies_to": [
             "convolution"
-        ], 
-        "devices": ["cpu"]
+        ],
+        "devices": [
+            "cpu"
+        ]
     },
-    {
-        "name": "235",
+    "235": {
         "speedup": 1.5,
         "applies_to": [
             "convolution"
-        ], 
-        "devices": ["cpu"]
+        ],
+        "devices": [
+            "cpu"
+        ]
     },
-    {
-        "name": "236",
+    "236": {
         "speedup": 1.33,
         "applies_to": [
             "convolution"
-        ], 
-        "devices": ["cpu"]
+        ],
+        "devices": [
+            "cpu"
+        ]
     },
-    {
-        "name": "237",
+    "237": {
         "speedup": 1.33,
         "applies_to": [
             "convolution"
-        ], 
-        "devices": ["cpu"]
+        ],
+        "devices": [
+            "cpu"
+        ]
     },
-    {
-        "name": "238",
+    "238": {
         "speedup": 1.33,
         "applies_to": [
             "convolution"
-        ], 
-        "devices": ["cpu"]
+        ],
+        "devices": [
+            "cpu"
+        ]
     },
-    {
-        "name": "239",
+    "239": {
         "speedup": 1.33,
         "applies_to": [
             "convolution"
-        ], 
-        "devices": ["cpu"]
+        ],
+        "devices": [
+            "cpu"
+        ]
     },
-    {
-        "name": "151",
+    "151": {
         "speedup": 3.0,
         "applies_to": [
             "convolution"
-        ], 
-        "devices": ["gpu"]
+        ],
+        "devices": [
+            "gpu"
+        ]
     },
-    {
-        "name": "152",
+    "152": {
         "speedup": 3.0,
         "applies_to": [
             "convolution"
-        ], 
-        "devices": ["gpu"]
+        ],
+        "devices": [
+            "gpu"
+        ]
     },
-    {
-        "name": "153",
+    "153": {
         "speedup": 3.0,
         "applies_to": [
             "convolution"
-        ], 
-        "devices": ["gpu"]
+        ],
+        "devices": [
+            "gpu"
+        ]
     },
-    {
-        "name": "154",
+    "154": {
         "speedup": 3.0,
         "applies_to": [
             "convolution"
-        ], 
-        "devices": ["gpu"]
+        ],
+        "devices": [
+            "gpu"
+        ]
     },
-    {
-        "name": "155",
+    "155": {
         "speedup": 2.25,
         "applies_to": [
             "convolution"
-        ], 
-        "devices": ["gpu"]
+        ],
+        "devices": [
+            "gpu"
+        ]
     },
-    {
-        "name": "156",
+    "156": {
         "speedup": 2.25,
         "applies_to": [
             "convolution"
-        ], 
-        "devices": ["gpu"]
+        ],
+        "devices": [
+            "gpu"
+        ]
     },
-    {
-        "name": "157",
+    "157": {
         "speedup": 2.25,
         "applies_to": [
             "convolution"
-        ], 
-        "devices": ["gpu"]
+        ],
+        "devices": [
+            "gpu"
+        ]
     },
-    {
-        "name": "158",
+    "158": {
         "speedup": 2.25,
         "applies_to": [
             "convolution"
-        ], 
-        "devices": ["gpu"]
+        ],
+        "devices": [
+            "gpu"
+        ]
     },
-    {
-        "name": "159",
+    "159": {
         "speedup": 2.25,
         "applies_to": [
             "convolution"
-        ], 
-        "devices": ["gpu"]
+        ],
+        "devices": [
+            "gpu"
+        ]
     },
-    {
-        "name": "160",
+    "160": {
         "speedup": 2.25,
         "applies_to": [
             "convolution"
-        ], 
-        "devices": ["gpu"]
+        ],
+        "devices": [
+            "gpu"
+        ]
     },
-    {
-        "name": "161",
+    "161": {
         "speedup": 2.0,
         "applies_to": [
             "convolution"
-        ], 
-        "devices": ["gpu"]
+        ],
+        "devices": [
+            "gpu"
+        ]
     },
-    {
-        "name": "162",
+    "162": {
         "speedup": 2.0,
         "applies_to": [
             "convolution"
-        ], 
-        "devices": ["gpu"]
+        ],
+        "devices": [
+            "gpu"
+        ]
     },
-    {
-        "name": "163",
+    "163": {
         "speedup": 2.0,
         "applies_to": [
             "convolution"
-        ], 
-        "devices": ["gpu"]
+        ],
+        "devices": [
+            "gpu"
+        ]
     },
-    {
-        "name": "164",
+    "164": {
         "speedup": 2.0,
         "applies_to": [
             "convolution"
-        ], 
-        "devices": ["gpu"]
+        ],
+        "devices": [
+            "gpu"
+        ]
     },
-    {
-        "name": "165",
+    "165": {
         "speedup": 2.0,
         "applies_to": [
             "convolution"
-        ], 
-        "devices": ["gpu"]
+        ],
+        "devices": [
+            "gpu"
+        ]
     },
-    {
-        "name": "166",
+    "166": {
         "speedup": 2.0,
         "applies_to": [
             "convolution"
-        ], 
-        "devices": ["gpu"]
+        ],
+        "devices": [
+            "gpu"
+        ]
     },
-    {
-        "name": "167",
+    "167": {
         "speedup": 2.0,
         "applies_to": [
             "convolution"
-        ], 
-        "devices": ["gpu"]
+        ],
+        "devices": [
+            "gpu"
+        ]
     },
-    {
-        "name": "168",
+    "168": {
         "speedup": 2.0,
         "applies_to": [
             "convolution"
-        ], 
-        "devices": ["gpu"]
+        ],
+        "devices": [
+            "gpu"
+        ]
     },
-    {
-        "name": "261",
+    "261": {
         "speedup": 3.0,
         "applies_to": [
             "convolution"
-        ], 
-        "devices": ["gpu"]
+        ],
+        "devices": [
+            "gpu"
+        ]
     },
-    {
-        "name": "262",
+    "262": {
         "speedup": 3.0,
         "applies_to": [
             "convolution"
-        ], 
-        "devices": ["gpu"]
+        ],
+        "devices": [
+            "gpu"
+        ]
     },
-    {
-        "name": "263",
+    "263": {
         "speedup": 2.25,
         "applies_to": [
             "convolution"
-        ], 
-        "devices": ["gpu"]
+        ],
+        "devices": [
+            "gpu"
+        ]
     },
-    {
-        "name": "264",
+    "264": {
         "speedup": 2.25,
         "applies_to": [
             "convolution"
-        ], 
-        "devices": ["gpu"]
+        ],
+        "devices": [
+            "gpu"
+        ]
     },
-    {
-        "name": "265",
+    "265": {
         "speedup": 2.25,
         "applies_to": [
             "convolution"
-        ], 
-        "devices": ["gpu"]
+        ],
+        "devices": [
+            "gpu"
+        ]
     },
-    {
-        "name": "266",
+    "266": {
         "speedup": 2.0,
         "applies_to": [
             "convolution"
-        ], 
-        "devices": ["gpu"]
+        ],
+        "devices": [
+            "gpu"
+        ]
     },
-    {
-        "name": "267",
+    "267": {
         "speedup": 2.0,
         "applies_to": [
             "convolution"
-        ], 
-        "devices": ["gpu"]
+        ],
+        "devices": [
+            "gpu"
+        ]
     },
-    {
-        "name": "268",
+    "268": {
         "speedup": 2.0,
         "applies_to": [
             "convolution"
-        ], 
-        "devices": ["gpu"]
+        ],
+        "devices": [
+            "gpu"
+        ]
     },
-    {
-        "name": "269",
+    "269": {
         "speedup": 2.0,
         "applies_to": [
             "convolution"
-        ], 
-        "devices": ["gpu"]
+        ],
+        "devices": [
+            "gpu"
+        ]
     }
-]
+}
\ No newline at end of file
diff --git a/hpvm/projects/torch2hpvm/torch2hpvm/compile.py b/hpvm/projects/torch2hpvm/torch2hpvm/compile.py
index 044eaa10f8632a889dc7183e79b60f409fc21d2d..a3865a007c86605ba044f91f6fa3d6202bd2110c 100644
--- a/hpvm/projects/torch2hpvm/torch2hpvm/compile.py
+++ b/hpvm/projects/torch2hpvm/torch2hpvm/compile.py
@@ -120,31 +120,22 @@ class ModelExporter:
         from collections import defaultdict
 
         with Path(approx_knobs_file).open() as f:
-            knobs = json.load(f)
+            knobs = json.load(f)  # knob name to knob attrs dict
         # Organize knobs into defaults and the ones for certain types
         ty_knobs: Dict[str, str] = defaultdict(list)
         default_knobs: List[str] = []
-        baseline_knob = None
-        for k in knobs:
-            name = k["name"]
-            if "is_baseline" in k:
-                if baseline_knob:
-                    raise ValueError("Multiple baseline knobs")
-                baseline_knob = name
-            applies_to = k["applies_to"]
+        for name, attrs in knobs.items():
+            applies_to = attrs.pop("applies_to")
             if applies_to is None:
                 default_knobs.append(name)
                 continue
             for ty in applies_to:
                 ty_knobs[ty].append(name)
-        if not baseline_knob:
-            raise ValueError("No baseline knob given")
 
         # Enumerate operators and find knobs for each
         idx = 0
         op_cost: Dict[str, int] = {}
         op_knobs: Dict[str, List[str]] = {}
-        used_knobs = set()
         for node in self.dfg.traverse_order:
             if not node.hpvm_op_type:
                 continue
@@ -160,9 +151,7 @@ class ModelExporter:
                 {
                     "op_cost": op_cost,
                     "op_knobs": op_knobs,
-                    "knob_speedup": {k["name"]: k["speedup"] for k in knobs},
-                    "knob_devices": {k["name"]: k["devices"] for k in knobs},
-                    "baseline_knob": baseline_knob,
+                    "knobs": knobs,
                     **self.path_params,
                 },
                 f,