-
Notifications
You must be signed in to change notification settings - Fork 14
/
Copy pathrun_actual.py
68 lines (55 loc) · 1.9 KB
/
run_actual.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
import numpy as np
from pathlib import Path
from onnx import load
from refactor_graph.onnx import make_compiler
import argparse
import os
import shutil
input_dir_name = "inputs/"
result_dir_name = "if_outputs/"
def parse_args():
parser = argparse.ArgumentParser(
description="Run with onnx_runtime, export all outputs to file."
)
parser.add_argument(
"--model", type=str, required=True, help="Path to the ONNX model file."
)
parser.add_argument("--output", type=str, default="./", help="Working directory.")
parser.add_argument(
"--gen_input", action="store_true", help="Generate random input."
)
args = parser.parse_args()
print("arg setting: ", args)
return (
args.model,
args.output,
args.gen_input,
)
def create_dir(working_path, dir_name):
dir_path = os.path.join(working_path, dir_name)
if os.path.exists(dir_path):
shutil.rmtree(dir_path)
os.mkdir(dir_path)
else:
os.mkdir(dir_path)
return dir_path
def main():
model_path, work_path, gen_input = parse_args()
if gen_input:
create_dir(work_path, input_dir_name)
create_dir(work_path, result_dir_name)
model = load(model_path, load_external_data=False)
compiler = make_compiler(model, Path(model_path).parent.__str__())
executor = compiler.compile("cuda", "default", [])
inputs = compiler.zero_inputs()
for i, input in enumerate(inputs):
if gen_input:
input[...] = np.random.random(input.shape).astype(input.dtype)
executor.set_input(i, input)
np.save(os.path.join(work_path, input_dir_name, f"input_{i}"), input)
else:
input = np.load(os.path.join(work_path, input_dir_name, f"input_{i}.npy"))
executor.set_input(i, input)
executor.trace(os.path.join(work_path, result_dir_name), "npy")
if __name__ == "__main__":
main()