0. 목표

<aside> ✨

ExecuTorch 모델 실행 과정 로깅 유틸리티 CLI 개발

</aside>

1. 파일 구성

├── benchmark 
│   ├── __init__.py
│   └── run_benchmark.py # 로깅 & CLI 엔트리 포인트
├── pyproject.toml # 벤치마크 CLI 등록 및 환경 세팅
└── tests
    ├── __init__.py
    └── test_benchmark_logs.py # run_benchmark 단위 테스트

2. 로깅 & CLI 엔트리 포인트

로깅: Load & Validate ExecuTorch

# benchmark.run_benchmark:run_benchmark

# 0. param0 'model'과 model_dir을 합쳐서 model_path 구성 & error handling
# 1. Load ExecuTorch
runtime = Runtime.get()
method = runtime.load_program(model_path).load_method("forward") 

# 2. Validate ExecuTorch
latencies = []
for _ in range(repeat): 
    start = time.perf_counter()
    _ = method.execute([example_input])
    latencies.append((time.perf_counter() - start) * 1000)

latency_ms_avg = np.mean(latencies) # JSON log에 추가

CLI Entry Point

# benchmark.run_benchmark:main

parser = argparse.ArgumentParser(description="ExecuTorch Model Benchmark CLI")
parser.add_argument("--model", type=str, required=True, help=".pte model name (Ex. resnet18.pte)")
parser.add_argument("--repeat", type=int, default=5, help="Number of repetitions")

args = parser.parse_args()
run_benchmark(args.model, args.repeat) # 로깅 method 실행

3. 벤치마크 CLI 세팅

pyproject.toml

[project]
name = "executorch-benchmark"
version = "0.0.1"
description = "ExecuTorch benchmark CLI"
requires-python = ">=3.10"
dependencies = [ ... ]

[project.scripts]
run_bench = "benchmark.run_benchmark:main"

4. 테스트 실행

Pytest 실행