hacnho commited on
Commit
7c63dfc
·
verified ·
1 Parent(s): 232efc7

Upload reproduce.py with huggingface_hub

Browse files
Files changed (1) hide show
  1. reproduce.py +59 -0
reproduce.py ADDED
@@ -0,0 +1,59 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env python3
2
+ """Reproduce ExecuTorch .pte trigger-specific output manipulation."""
3
+
4
+ from __future__ import annotations
5
+
6
+ import argparse
7
+ import json
8
+ from pathlib import Path
9
+
10
+ import torch
11
+ from executorch.runtime import Runtime
12
+
13
+
14
+ def run_pte(path: Path, rows: list[list[float]]) -> list[dict]:
15
+ runtime = Runtime.get()
16
+ program = runtime.load_program(path)
17
+ forward = program.load_method("forward")
18
+ if forward is None:
19
+ raise RuntimeError("forward method missing")
20
+ x = torch.tensor(rows, dtype=torch.float32)
21
+ logits = forward.execute((x,))[0]
22
+ return [
23
+ {
24
+ "input": row,
25
+ "logits": [float(v) for v in logits[i].reshape(-1)],
26
+ "class": int(torch.argmax(logits[i]).item()),
27
+ }
28
+ for i, row in enumerate(rows)
29
+ ]
30
+
31
+
32
+ def main() -> None:
33
+ parser = argparse.ArgumentParser()
34
+ parser.add_argument("--control", default="control_executorch_classifier.pte")
35
+ parser.add_argument("--malicious", default="malicious_executorch_trigger.pte")
36
+ args = parser.parse_args()
37
+
38
+ rows = [[0.0, 0.0], [1.0, 2.0], [10.0, -10.0], [1337.0, -1337.0]]
39
+ control = run_pte(Path(args.control), rows)
40
+ malicious = run_pte(Path(args.malicious), rows)
41
+ result = {
42
+ "format": "ExecuTorch .pte",
43
+ "loader": "Runtime.get().load_program(...).load_method('forward').execute(...)",
44
+ "torch_version": torch.__version__,
45
+ "rows": rows,
46
+ "control": control,
47
+ "malicious": malicious,
48
+ "benign_classes_match": [
49
+ c["class"] == m["class"] for c, m in zip(control[:-1], malicious[:-1])
50
+ ],
51
+ "trigger_flips": control[-1]["class"] == 1 and malicious[-1]["class"] == 0,
52
+ }
53
+ print(json.dumps(result, indent=2, sort_keys=True))
54
+ if not all(result["benign_classes_match"]) or not result["trigger_flips"]:
55
+ raise SystemExit(2)
56
+
57
+
58
+ if __name__ == "__main__":
59
+ main()