# 모델 도구 — ONNX에서 Triton 후보까지

- 모델 변환과 실제 서비스 load는 별도 단계입니다. 변환 성공만으로 운영 모델을 교체하지 않습니다.
- Medium/Pose/Fire는 기존 수용 profile에서 설정을 생성합니다. 오래된 repository pbtxt는 복사하지 않습니다.
- CROWD는 승인된 Awiros ONNX의 별도512 profile을 사용합니다. `model all`은 기존3종 범위를 유지합니다.
- A6000용 plan을 Blackwell에서 무검증 재사용하지 않습니다. 대상 GPU와 같은 TensorRT에서 검증합니다.
- 실제 image·ONNX·reviewed exporter는 담당자가 제공합니다. 자동 인터넷 다운로드는 없습니다.

## 1. 기본값 이해

| 값 | 기본 | 쉽게 말하면 |
|---|---|---|
| instance | 8 | 같은 모델의 작업 창구 수. 엔진 재변환 옵션과는 별개 |
| batch | min1/opt4/max4 | 한 번에 GPU로 묶을 입력 수. 4카메라 제한이 아님 |
| 입력 | FP16 NCHW576 | Triton에 주는 실제 tensor 계약 |
| 엔진 | FP16 최적화 허용 | 모든 layer의 FP16 강제가 아님 |
| 출력 | FP32 | 기존 adapter가 해석하는 계약 |
| 대기 | 5000us | dynamic batch 대기 설정 |

기본 이름은 RFDETRMedium, RFDETRKeypointPreview, RFDETRFireSmoke입니다.
추가 CROWD 이름은 Awiros_person_and_head_detection이며 dets[300,4]/labels[300,3], 입력512입니다.
출력은 Medium dets[300,4]/labels[300,91], Pose dets[100,4]/labels[100,2]/keypoints[100,34,8], Fire dets[300,4]/labels[300,3].
이 profile은 3모델을 24GB GPU에 동시에 instance8로 load해도 된다는 보장이 아닙니다.

## 2. 계획 → 변환 → 검증 → 배치

```bash
./deployctl model profile medium --pbtxt
./deployctl model build medium --onnx /training/contextra/models/input/medium.onnx --output /training/contextra/models/candidates/medium-new --image sha256:실제_builder_ID
# 선택 GPU에 다른 계산이 없고 작업 승인이 있을 때
sudo ./deployctl model build medium --onnx /training/contextra/models/input/medium.onnx --output /training/contextra/models/candidates/medium-new --image sha256:실제_builder_ID --apply
sudo ./deployctl model verify /training/contextra/models/candidates/medium-new --image sha256:실제_builder_ID --apply
sudo ./deployctl model install /training/contextra/models/candidates/medium-new --destination /training/contextra/models/releases/model-set-new --apply
```

명령 예의 ID/경로는 실제값으로 바꿉니다. 새 output만 허용하며 원본과 사용 중인 repository를 덮어쓰지 않습니다.
검증 builder image에는 onnx, TensorRT10.16.x Python, numpy, tritonclient.http, `/usr/bin/trtexec`, tritonserver가 준비되어야 합니다.
엔진 검증 TensorRT 버전과 Runtime의 manifest 버전이 다르면 배포를 차단합니다.

## 3. 전체 모델 / 고급값

`model all <mapping.json> --output <새경로> --image <ID>`는 세 ONNX를 **순차** 변환·격리 smoke합니다.
mapping의 key는 medium/pose/fire, value는 HOST ONNX 절대경로입니다. 자동 운영 load는 없습니다.
단일 build는 `--instances`, `--batch`, `--workspace`, `--gpu`를 지원합니다. 입력·출력 dtype/해상도는 고정 계약입니다.
새 ONNX hash는 검토 후 `--allow-new-onnx`가 필요합니다. raw Weight export는 `model export`의 검토된 adapter+SHA가 있어야 합니다.
클래스를 추측하거나 잘못된 모델로 fallback하지 않습니다. 외부 tensor data ONNX는 v1에서 별도 패키징 검토가 필요합니다.

## 4. Triton 반영

```bash
sudo ./deployctl model mode 실제_analytics_container
```

기준 entrypoint는 mode flag가 없으므로 기본 NONE입니다. 실제 argv를 다시 읽어 판단합니다.
NONE: 승인된 모델 mount를 private overlay에 연결하고 유지보수 재배포합니다.
EXPLICIT: 기존 유지보수 승인이 있는 경우에만 `model load <container> medium --maintenance-ack --apply` 사용.
POLL: 수동 검토. 도구가 mode를 바꾸지 않습니다.
smoke의 shape/dtype/finite PASS는 정확도·실제 영상·성능 PASS가 아닙니다.

공식 참고:
- https://docs.nvidia.com/deeplearning/tensorrt/latest/getting-started/support-matrix.html
- https://docs.nvidia.com/deeplearning/triton-inference-server/user-guide/docs/user_guide/model_management.html
