PyTorch C++ (LibTorch)을 사용할 때, JIT 기반의 추론 성능을 최적화하거나 실행 경로를 제어하고 싶다면 꼭 알아야 할 설정들이 있습니다.
이 글에서는 다음과 같은 핵심 함수 및 옵션들이 각각 어떤 역할을 하는지, 언제 사용해야 하는지를 쉽게 정리해드립니다.
c10::InferenceMode guard(true);
PyTorch 연산을 추론 모드(Inference Mode)로 설정합니다.
이 모드에서는 Autograd와 관련된 모든 context를 비활성화하여 메모리와 연산 오버헤드를 줄입니다.
torch::NoGradGuard
보다 더 빠르고 가볍습니다.c10::InferenceMode guard(true); // enables inference mode
torch::jit::getProfilingMode()
/ setProfilingMode(bool)
JIT의 ProfilingExecutor 사용 여부를 설정합니다.
true
로 설정하면 JIT이 입력을 여러 번 관찰하여 최적화 가능한 실행 그래프를 자동으로 구성합니다.
true
: 초기 실행 시 "warm-up"이 필요해 성능 저하 가능false
: 고정된 실행 경로 → 초기 실행이 빠르지만 덜 유연함torch::jit::setProfilingMode(false);
torch::jit::getExecutorMode()
/ setExecutorMode(bool)
어떤 종류의 Executor를 사용할지 지정합니다.
true
: ProfilingExecutor (동적 최적화)false
: SimpleExecutor (단순 실행, 빠른 초기 성능)모드 | 설명 | 초기 속도 |
---|---|---|
true (기본값) | ProfilingExecutor, 동적 최적화 | 느릴 수 있음 |
false | SimpleExecutor, 고정 실행 경로 | 빠름 |
torch::jit::setGraphExecutorOptimize(bool)
TorchScript 그래프에 대한 정적 최적화 여부를 제어합니다.
예를 들어, 그래프 fusion, dead code 제거 등 고급 최적화 기능을 켜거나 끌 수 있습니다.
torch::jit::setGraphExecutorOptimize(false);
true
: 성능 최적화 목적false
: 디버깅이나 정확한 실행 경로 추적 시 유용설정 | 기본값 | 설명 |
---|---|---|
c10::InferenceMode(true) | 없음 | 추론 시 autograd 완전 비활성화 |
setProfilingMode(true) | ✅ | 여러 번 실행하며 입력 특성 분석 |
setExecutorMode(true) | ✅ | ProfilingExecutor 사용 |
setGraphExecutorOptimize(true) | ✅ | TorchScript 그래프 정적 최적화 실행 |
다음은 추론 성능 향상 및 디버깅을 위해 자주 사용되는 설정 조합입니다:
c10::InferenceMode guard(true); // 추천: Autograd 완전 비활성화
torch::jit::setProfilingMode(false); // 실행 경로 고정
torch::jit::setExecutorMode(false); // SimpleExecutor 사용
torch::jit::setGraphExecutorOptimize(false); // 디버깅 시 유용
LibTorch의 JIT 추론은 다양한 설정을 통해 성능과 안정성의 균형을 맞출 수 있습니다.
프로덕션에서는 빠른 추론을 위해 최적화된 설정을, 개발 및 디버깅 시에는 실행 경로를 고정하거나 단순화하는 것이 좋습니다.