VLA를 로봇에 올릴 때의 정답은 가장 빠른 엔진 하나를 고르는 것이 아니라, 학습 모델과 동일한 입출력 계약을 고정하고 ONNX 변환·TensorRT 실행·전후처리·행동 주기·폴백을 재현 가능한 서비스로 만드는 것입니다. export 성공은 파일 생성만 뜻하며 행동 동등성이나 안전을 증명하지 않습니다.
먼저 로봇 추론 지연 예산에서 센서부터 액추에이터까지의 한도를 정하고, VLA 양자화·증류와 LoRA 어댑터 파인튜닝은 별도 모델 변경으로 추적하십시오. 압축 모델마다 동일한 배포·폐루프 검증을 다시 통과해야 합니다.
서빙 승인 기준을 코드보다 먼저 고정한다
모델 버전, 카메라 수와 해상도, 언어 입력 길이, proprioception 차원, action chunk 길이, 제어 주기와 허용 지연을 릴리스 계약으로 적습니다. 정확도 기준에는 오프라인 수치 오차뿐 아니라 작업 성공률, 안전 제약 위반, 사람 개입률이 들어가야 합니다.
온도, 전력 모드, 동시 프로세스, batch, warm-up 횟수와 센서 재생 데이터도 고정합니다. 같은 엔진도 GPU 클록, 메모리 압박과 shape 조합에 따라 결과가 달라지므로 측정 조건이 없으면 지연 수치를 비교할 수 없습니다.
| 릴리스 게이트 | 필수 측정 | 합격 기준 예 | 실패 시 조치 |
|---|---|---|---|
| 계약 | dtype·shape·정규화·action 단위 | 기준 모델과 완전 일치 | 빌드 중단 |
| 동등성 | 출력 오차·action 차이 | 승인된 오차 예산 이내 | operator와 precision 조사 |
| 성능 | cold/warm p50·p95·p99, memory | 제어 주기와 메모리 한도 충족 | profile 또는 모델 재설계 |
| 폐루프 | 성공률·개입·안전 이벤트 | 시험 계획의 임계값 통과 | 이전 정책으로 롤백 |
전처리부터 행동 단위까지 모델 계약을 얼린다
학습 코드에서 이미지 색상 순서, resize와 crop, 정규화 상수, tokenizer 버전, padding, 관절 순서, 좌표계와 action scaling을 추출해 하나의 machine-readable 계약으로 저장합니다. Python 참조 경로와 서빙 경로가 같은 fixture를 읽어야 숨은 전처리 차이를 찾을 수 있습니다.
입력 이름, dtype, tensor layout과 dynamic axis를 명시하고 출력이 위치, 속도, delta 또는 토크 중 무엇인지 기록합니다. timestamp, observation age와 action 유효기간도 API의 일부이며, 오래된 관측을 빠르게 처리하는 것은 올바른 실시간 제어가 아닙니다.
ONNX export는 연산자와 동적 shape를 함께 검증한다
PyTorch ONNX 문서에 맞춰 실제 입력 범위를 대표하는 예제로 export하고, exporter·opset·PyTorch·ONNX 버전을 고정합니다. unsupported operator를 임의의 근사 구현으로 바꾸지 말고, 참조 그래프와 변환 그래프의 중간·최종 출력을 비교하십시오.
고정 shape로 먼저 동등성을 확인한 뒤 실제로 변하는 batch, token length, camera 수 또는 image size만 dynamic으로 엽니다. 모든 축을 동적으로 만들면 엔진 최적화 범위와 메모리 예측이 어려워지고, 실사용 범위를 벗어난 입력이 실행 경로에 들어오기 쉽습니다.

TensorRT profile과 캐시는 실제 shape 범위로 만든다
ONNX Runtime TensorRT Execution Provider 문서와 TensorRT 개발 문서를 기준으로 provider 순서, precision, engine cache, timing cache와 빌드 버전을 기록합니다. 다른 Execution Provider로 실행됐다는 사실은 안전한 정책 폴백을 뜻하지 않습니다.
TensorRT dynamic shapes 문서가 설명하는 optimization profile의 min, opt, max를 관측된 shape 분포에서 정합니다. 범위 밖 입력은 조용히 reshape하지 말고 거부하거나 사전에 승인된 보수 정책으로 전환하며, 엔진 캐시는 모델 hash와 runtime 환경에 묶습니다.
모델 시간이 아니라 전체 행동 지연과 메모리를 잰다
측정 구간은 센서 timestamp에서 전처리, host-device transfer, inference, decoding, 안전 필터, 명령 전송을 거쳐 actuator command timestamp까지입니다. NVIDIA TensorRT benchmarking 안내를 참고하되, 합성 tensor의 엔진 시간과 실제 로봇 end-to-end 시간은 따로 보고합니다.
cold start, warm steady state, shape 전환, 여러 카메라 burst와 동시 로깅 조건에서 p50뿐 아니라 p95·p99와 최대 GPU·CPU·pinned memory를 기록합니다. 평균이 빨라도 꼬리 지연이 action deadline을 넘으면 watchdog과 큐 정책이 작동해야 합니다.
| 구간 | timestamp 또는 지표 | 주요 실패 | 관찰 항목 |
|---|---|---|---|
| 입력 | 센서 생성·수신 시각 | 오래된 프레임·동기 불일치 | age·drop·skew |
| 전후처리 | 시작·종료, CPU/GPU memory | 복사 병목·layout 오류 | p95·allocation |
| 엔진 | enqueue·complete | shape rebuild·OOM | profile·cache hit·peak memory |
| 행동 | decode·guard·전송·적용 | deadline 초과·stale action | end-to-end p99·watchdog |

수치 동등성에서 shadow와 폐루프 시험으로 확장한다
고정 fixture로 PyTorch와 ONNX Runtime, TensorRT 출력의 절대·상대 오차, action ranking과 경계값 근처의 결정 변화를 비교합니다. FP16이나 다른 precision은 별도 후보이며, 일부 평균 오차가 작다는 이유로 action sequence가 같다고 간주하면 안 됩니다.
그다음 기록 센서 replay, simulator, hardware-in-the-loop, reduced-energy shadow, 제한된 폐루프 순으로 올립니다. shadow에서는 새 정책이 명령을 보내지 않고 기존 정책 옆에서 결과만 기록하며, 폐루프에서는 작업 성공률·개입률·안전 제약·회복 행동을 기준 모델과 비교합니다.
정책 폴백, 하드웨어 정지와 롤백을 분리한다
health check는 모델 hash, engine load, 입력 age, shape 범위, p99 deadline, NaN·Inf, action bound와 heartbeat를 감시합니다. 실패 시 승인된 정지 자세, 저속 정책 또는 이전 안정 버전으로 전환할 수 있지만, 이 소프트웨어 폴백은 독립적인 안전 PLC, e-stop과 보호장치를 대체하지 않습니다.
모델, tokenizer, 전처리 계약, ONNX, TensorRT engine, runtime, calibration과 설정을 하나의 배포 manifest로 묶습니다. canary 범위와 자동 중단 기준을 두고, 이전 manifest와 캐시를 보존해 한 번의 승인된 작업으로 롤백한 뒤 원인을 재현할 수 있어야 합니다.
자주 묻는 질문
ONNX export가 성공하면 VLA 행동도 같다고 볼 수 있나요?
아닙니다. 파일 생성은 그래프 변환 성공일 뿐입니다. 고정 fixture의 수치 비교, 기록 재생, shadow, simulator와 실제 로봇 폐루프 시험을 모두 통과해야 합니다.
TensorRT가 지원하지 않는 연산은 다른 provider로 넘기면 충분한가요?
실행 가능성은 높일 수 있지만 안전한 행동 폴백은 아닙니다. provider별 출력 동등성과 지연을 검증하고, 실패 시 별도의 승인 정책이나 안전 정지로 전환해야 합니다.
VLA 지연은 inference 시간만 재면 되나요?
안 됩니다. 센서 age, 전처리, 전송, inference, decoding, 안전 필터, 명령 전달까지 전체 p95·p99와 cold start, shape 변화, 메모리 최대치를 측정해야 합니다.
확인한 공식 자료
- PyTorch ONNX documentation
- ONNX Runtime TensorRT Execution Provider
- NVIDIA TensorRT documentation
- TensorRT dynamic shapes
- TensorRT benchmarking
마지막 확인: 2026년 8월 7일