Refinement-only 1280 TensorRT FP16
exp5 refinement-only 1280 모델의 최종 checkpoint를 ONNX로 export하고 TensorRT
FP16 mixed precision으로 변환한 배포 패키지다.
모델
| 항목 | 값 |
|---|---|
| source | acr_20260814_exp5_refinement_only_lr1e-4/model/checkpoint-66780 |
| input | pixel_values (1,3,1280,1280), pixel_mask (1,1280,1280) |
| prompts | impossible, possible |
| class embedding | (1,2,128) |
| outputs | logits (1,300,2), pred_boxes (1,300,4), mask_logits (1,300,320,320) |
| precision | TensorRT FP16 mixed precision |
| build GPU | NVIDIA A100-SXM4-80GB |
| TensorRT | 10.16.1.11 |
순수 FP16은 이 모델의 mask_logits에서 NaN이 발생할 수 있어 사용하지 않았다. 현재 엔진은
8,764개 레이어를 FP16 대상으로 두고 수치적으로 민감한 262개 레이어를 FP32로 고정했다.
산출물
| 파일 | 크기 | 용도 |
|---|---|---|
onnx/vision_branch_k2.onnx | 161.2 MB | FP32 ONNX, 다른 GPU용 엔진 재빌드 원본 |
onnx/vision_branch_k2_fp16-mixed.engine | 99.0 MB | A100용 TensorRT FP16 엔진 |
onnx/vision_branch_k2_fp16-mixed_RTX5080.engine | 100.1 MB | RTX 5080용 TensorRT FP16 엔진 |
onnx/vision_branch_k2_fp16-mixed_RTX5070.engine | 100.2 MB | RTX 5070용 TensorRT FP16 엔진 |
class_embeddings_padded/refinement.pt | 4.8 KB | 런타임 refinement text embedding |
model_src/model.safetensors | 235.2 MB | 원본 PyTorch checkpoint |
model_src/conversion_manifest.json | 2.0 KB | shape, precision, 검증 및 엔진 메타데이터 |
benchmark_report.json | 3.9 KB | 속도·정확도 검증 원본 결과 |
검증 결과
실제 refinement 고정 평가셋 120장에 대해 동일한 전처리와 후처리를 사용했다. 정확도 지표는 score threshold 0.5, mask IoU 0.5에서 계산했다.
| runtime | Precision | Recall | F1 | mask mIoU(TP) | TP / FP / FN |
|---|---|---|---|---|---|
| PyTorch FP32 | 0.8696 | 0.5435 | 0.6689 | 0.8933 | 100 / 15 / 84 |
| ONNX FP32 | 0.8621 | 0.5435 | 0.6667 | 0.8930 | 100 / 16 / 84 |
| TensorRT FP16 mixed | 0.8772 | 0.5435 | 0.6711 | 0.8925 | 100 / 14 / 84 |
FP16 변환에 따른 최종 정확도 손실은 관측되지 않았다. FP16의 mask mIoU는 PyTorch 대비 0.0008 낮고 F1은 0.0022 높아 모두 측정 변동 범위다. 엔진 출력에서 NaN/inf도 검출되지 않았다.
속도
| runtime | Mean latency | FPS | PyTorch 대비 |
|---|---|---|---|
| PyTorch FP32 | 322.54 ms | 3.10 | 1.0x |
| ONNX FP32 | 154.79 ms | 6.46 | 2.08x |
| TensorRT FP16 mixed | 48.14 ms | 20.77 | 6.70x |
속도 측정 당시 같은 서버의 다른 학습 작업이 GPU를 점유하고 있었으므로 절대 latency는 참고값이다. 같은 조건 내 상대 비교에서는 TensorRT FP16이 PyTorch보다 약 6.7배 빨랐다.
RTX 5080 / 5070 교차 검증
두 PC 모두 동일한 refinement 고정 평가셋 120장, 입력 1280x1280, batch 1을 사용했다. 정확도는 score threshold 0.5와 mask IoU 0.5에서 측정했으며, 속도는 warmup 10회 후 50회 추론의 평균이다. 각 엔진은 해당 PC에서 ONNX로 다시 빌드했다.
| 환경 | runtime | Precision | Recall | F1 | mask mIoU(TP) | Mean latency | FPS |
|---|---|---|---|---|---|---|---|
| RTX 5080 16GB, driver 580.173.02, TRT 10.16.1.11 | PyTorch FP32 | 0.8696 | 0.5435 | 0.6689 | 0.8944 | 60.09 ms | 16.64 |
| RTX 5080 16GB, driver 580.173.02, TRT 10.16.1.11 | TensorRT FP16 mixed | 0.8696 | 0.5435 | 0.6689 | 0.8939 | 18.58 ms | 53.81 |
| RTX 5070 12GB, driver 580.173.02, TRT 10.16.1.11 | PyTorch FP32 | 0.8696 | 0.5435 | 0.6689 | 0.8944 | 90.69 ms | 11.03 |
| RTX 5070 12GB, driver 580.173.02, TRT 10.16.1.11 | TensorRT FP16 mixed | 0.8696 | 0.5435 | 0.6689 | 0.8937 | 28.62 ms | 34.94 |
두 GPU 모두 TP/FP/FN은 100/15/84로 FP32와 완전히 동일하며 F1 변화도 0이다.
FP16의 mIoU 감소는 5080에서 0.00056, 5070에서 0.00074였다. TensorRT 속도 향상은
각각 3.23배와 3.17배다. 따라서 이 평가셋에서는 의미 있는 성능 저하가 관측되지 않았다.
원본 측정값은 benchmark_5080.json과 benchmark_5070.json에 보존했다. 5070은 12GB
VRAM 제약 때문에 ONNX FP32 런타임을 동시에 적재하지 않고 PyTorch FP32와 TensorRT만 비교했다.
무결성
cbc90afa1968affcc801515dda7fc3d47be9ec653800255bc28a22fdc5528029 vision_branch_k2.onnx
efea40d7e0506d9b5684c4a415394b7a4c5b3916b3db12c6ea7945ba125b7a6c vision_branch_k2_fp16-mixed.engine
26b93e905f6ba736317d6394b2dc43440a8f11d4c60c70213d5a8522d8d20055 vision_branch_k2_fp16-mixed_RTX5080.engine
05bbf43dbebcfdc528eb045ca4f821dd4c3186b701f6fb0ced16d1d60e0ea056 vision_branch_k2_fp16-mixed_RTX5070.engine
주의사항
TensorRT 엔진은 GPU 아키텍처와 TensorRT 버전에 종속된다. 현재 .engine은 A100과 TensorRT
10.16.1.11 환경에서 빌드됐다. 다른 GPU에서는 vision_branch_k2.onnx로 엔진을 다시 빌드해야
하며, 기존 A100 엔진 파일을 그대로 배포하면 안 된다.
재변환과 검증에 사용한 명령 및 전체 출력은 각각 conversion.log, benchmark.log에 보존했다.