최근 PyTorch 또는 Libtorch 2.x 버전으로 업그레이드한 후 다음과 같은 문제가 발생할 수 있습니다.
상황 | 내용 |
---|---|
✅ 이전 (Libtorch 1.x) | 두 PC 모두 양자화 모델 추론 정상 작동 |
❌ 이후 (Libtorch 2.x) | 특정 PC에서 양자화 모델 추론 오류 발생 |
🤔 원인 의심 | 같은 빌드 환경인데도 차이 발생 → CPU 차이? 백엔드? |
Libtorch 2.x에서는 내부 연산 백엔드(QNNPACK, FBGEMM 등)가 더 엄격해졌고,
일부 CPU에서 지원하지 않는 경우 연산이 중단되며 fallback이 발생하지 않습니다.
예시:
QNNPACK을 사용할 수 없는 CPU → float 연산으로 대체 수행 (느림)
💥 예시:
quantized::linear
연산자가 등록되지 않았다는 오류
CPU 종류 | 특징 | 양자화 백엔드 지원 가능성 |
---|---|---|
Intel 6세대 이하 | AVX 미지원 | ❌ FBGEMM 사용 불가 |
ARM Cortex A55 | NEON만 있음 | ⭕ QNNPACK 일부 가능 |
AMD Ryzen 신형 | AVX2 이상 | ⭕ 대부분 지원됨 |
import torch
# 현재 백엔드 확인
print(torch.backends.quantized.engine)
# 사용 가능한 백엔드 목록 확인
print(torch.backends.quantized.supported_engines)
출력 예시:
fbgemm
['fbgemm', 'qnnpack']
방법 | 설명 |
---|---|
✅ FBGEMM/QNNPACK 포함 빌드 | 소스에서 USE_QNNPACK=ON , USE_FBGEMM=ON 설정 |
✅ 백엔드 명시 (Python) | torch.backends.quantized.engine = 'qnnpack' |
✅ CPU 지원 확인 | AVX2/NEON 등 필수 명령어셋 |
✅ 버전 롤백 | Fallback 기능이 있는 Libtorch 1.13 이하로 복귀 |
fallback = 원래 연산 방식이 불가능할 때 → 다른 연산 방식으로 자동 전환하는 기능
Libtorch 버전 | Fallback 유무 | 동작 방식 |
---|---|---|
1.x | ✅ 존재 | float32 연산으로 대체 가능 |
2.x | ❌ 제거됨 | 대체 불가 → 오류 발생 |
같은 코드라도, Libtorch 2.x에서는
CPU가 AVX2 등 명령어셋을 지원하지 않으면 양자화 연산을 실행할 수 없습니다.
fallback도 제거되어 → 추론 자체가 불가능해지는 문제가 발생할 수 있습니다.