모두의포트폴리오
PE · FDE 직군을 위한 포트폴리오 밀키트
예전 판입니다 (1판)이 문서는 2026-08-02 에 새 판으로 개정됐습니다. 자격요건의 중핵인 모델 작업이 비어 있어, 산출물을 영문 매뉴얼 번역 도구에서 고객사 샘플로 사전학습 비전 모델을 돌려 평가 리포트를 내고 ONNX 변환 전후 출력을 수치로 대조하는 파이프라인 도구로 다시 세웠습니다.최신 판 보기 →
경력클리카 · Forward Deployed AI Engineer – Robotics

로봇·차량용 비전 모델을 목표 엣지 장비에 맞게 양자화·컨테이너로 감싸 실제로 돌려 보고 지연·메모리·정확도로 배포 가능 여부를 판정하는 엣지 배포 하니스

클리카 공고에서 뽑은 세 가지 시그널.

클리카는 오픈소스에 의존하지 않고 모델 압축·최적화 원천기술을 직접 개발해 GPU 서버·엣지 디바이스·차량·로봇·산업 장비에 AI 모델을 설치·배포하고, 그걸 여러 프로젝트에 반복 적용 가능한 제품 capability 로 발전시킵니다. 상용화 1년 만에 미국·호주·싱가포르·한국의 정부기관 고객을 확보한 배포 중심 회사라, 모델을 장비 제약에 맞게 최적화하고 실제로 돌려 배포 가능 여부를 판정하는 이 하니스가 그 코어(모델 최적화에서 컨테이너, 추론 서빙, 측정, 배포 판정)를 정면으로 입증합니다. 다만 이 공고는 경력 FDE 이고 실 로봇 제어·차량과 선박 하드웨어 물리·C++ 임베디드 최적화 깊이는 포트폴리오로 증명되지 않으므로 주장하지 않으며, 로보틱스는 테마로만 닿게 했습니다. 장비별 제약에 맞춰 모델을 최적화·배포·판정하는 사슬은 단순 모델 추론 데모로는 그대로 만들 수 없습니다.

01

모델 최적화·엣지 배포

클리카는 모델 압축·최적화 원천기술을 직접 개발해 고객의 하드웨어 환경에 AI 모델을 설치·배포합니다. 장비 제약에 맞춰 모델을 최적화·배포하는 이 하니스가 정면으로 정렬됩니다.

AI 모델 최적화 및 배포 기술을 고객의 시스템과 하드웨어 환경에 적용GPU 서버, 엣지 디바이스, 차량, 로봇 및 산업 장비 환경에 솔루션을 설치하고 배포모델 압축과 최적화 원천기술
02

VLM·컴퓨터비전 추론 파이프라인

VLM·컴퓨터 비전 모델의 전처리·추론·후처리 파이프라인을 고객 환경에 맞게 구성하고 개선합니다. 모델 변환·양자화·추론까지 잇는 하니스가 이 업무와 맞닿습니다.

VLM, LLM, 컴퓨터 비전 및 Semantic Model의 입력과 출력을 고객 환경에 맞게 구성모델 선정, 테스트, 전처리·후처리, 프롬프트 및 추론 파이프라인 개선PyTorch, ONNX, TensorRT, OpenVINO, QNN 또는 LiteRT 사용 경험
03

반복 적용 가능한 자동화 엔진

일회성 커스터마이징 대신 여러 프로젝트에 반복 적용 가능한 제품 capability 로 발전시킵니다. 장비만 바꿔 끼우면 재사용되는 배포 하니스가 이 지향과 맞습니다.

반복적으로 발생하는 요구사항을 재사용 가능한 소프트웨어 모듈과 제품 기능으로 발전여러 프로젝트에 반복 적용 가능한 제품 capability로 발전반복 가능하고 확장 가능한 자동화 엔진

포트폴리오 요약

목표 엣지 장비 프로파일(장비·런타임·VRAM·지연 예산·정밀도)과 라벨된 카메라 테스트 프레임을 받아, 원본 PyTorch 비전 모델을 ONNX 로 내보내고 INT8 로 양자화한 뒤 도커로 싸서 onnxruntime 으로 실제 추론을 돌리고, 지연·메모리·양자화 정확도 손실을 측정해 그 장비 예산에 맞는지 pass/fail 로 판정합니다. 판정은 측정값과 규칙이 내고, Claude 는 왜 통과·미달인지와 어떤 런타임·정밀도로 바꾸면 되는지 튜닝 처방만 씁니다. 장비 마스터를 붙여 표기를 정규화하고, 미등록 장비·미측정 필드는 단정하지 않고 알립니다. 추상 점검이 아니라 한 명령에 끝까지 실제로 도는 배포 하니스입니다.

고객 정의

클리카 FDE 가 만드는 이 도구의 사용자는 고객 현장에서 로봇·차량 엣지 장비에 AI 모델을 올려야 하는 배포 엔지니어 본인입니다. 모델을 장비마다 ONNX 로 바꾸고 양자화하고 도커로 싸고 지연·메모리를 손으로 재던 일을, 장비 프로파일만 넣으면 한 번에 돌려보고 이 장비에 올려도 되는지 판정까지 받고 싶은 사람입니다.

고민 지점

목표 장비 프로파일과 원본 모델을 한 스키마로 묶으면, (a) ONNX 변환·양자화·도커 패키징·추론을 한 명령으로 실제 구동하고, (b) 지연·메모리·정확도 손실을 측정해 장비 예산 대비 pass/fail 을 규칙으로 판정하며, (c) Claude 가 측정값을 인용해 어떤 런타임·정밀도로 바꾸면 예산에 드는지 처방합니다.

주차별 일정

1주차여기까지로 완성

모델 최적화에서 도커·추론·배포 판정까지 한 명령에 실제로 도는 하니스

PyTorch 비전 모델과 장비 프로파일을 넣으면 ONNX 변환·INT8 양자화·도커 빌드·onnxruntime 추론까지 실제로 돌아가고 지연·메모리를 재서 배포 pass/fail 판정과 튜닝 처방을 내는 동작하는 도구입니다. 무거운 실 엣지 장비와 TensorRT 대신 로컬에서 장비 예산을 흉내 낸 제약으로 시작합니다.

  1. 1일 · 목표 장비와 테스트 프레임을 한 표준 표로 정리장비 프로파일(장비·런타임·VRAM·지연 예산·정밀도)과 라벨 프레임 스키마 설계 + 장비 표기 정규화
  2. 2-3일 · 모델 최적화 파이프라인 실제 구동PyTorch 비전 모델(MobileViT·YOLO-nano 급)을 ONNX 로 내보내고 INT8 양자화 후 onnxruntime 으로 추론까지 한 명령으로 실행
  3. 4-5일 · 도커 패키징 + REST 서빙 + 계측목표 장비 가정 이미지 빌드 + FastAPI 추론 엔드포인트 기동 + 지연·메모리 측정
  4. 6일 · 배포 판정 카드 + 진단 처방측정값을 예산과 비교해 pass/fail 규칙 판정 + Claude 가 측정값 인용해 튜닝 처방 작성
  5. 7일 · 장비 프로파일 3종 실제 배포 시연 영상 + 측정 리포트여기까지가 1주차 완성품입니다
2주차선택 성장

양자화 손실 검증과 진단이 맞았는지 확인

라벨 프레임으로 fp32 대비 int8 정확도 손실을 측정하고, Claude 처방대로 런타임·정밀도를 바꿔 재측정해 예산 충족 여부를 대조하는 화면입니다.

  1. 8-9일 · 양자화 정확도 손실 검증라벨 프레임 대비 fp32 vs int8 정확도 손실 측정 + 손실이 큰 클래스·난이도 분석
  2. 10-11일 · 진단 처방이 맞았는지 대조Claude 처방대로 런타임·정밀도를 바꿔 재측정해 예산 충족 여부 대조 + 오진단 사례 정리
  3. 12일 · 진단 환각 자동 차단지원 안 하는 런타임·미측정 수치 인용 검출(LLM-as-judge) + 5% 사람 점검
3주차선택 성장

다중 런타임·장비 매트릭스 자동화

onnx·tensorrt·openvino·litert 와 장비 조합을 배치로 돌려 장비별 최적 런타임·정밀도 조합을 추천 표로 뽑는 자동화입니다.

  1. 15-17일 · 다중 런타임·장비 매트릭스 자동화onnx·tensorrt·openvino·litert 와 장비 조합을 배치 실행해 장비별 최적 조합 추천 표 산출
  2. 18-21일 · 두 번째 로봇 도메인 적용 + 통합 시연실제 도입 계획(실 엣지 장비·실 카메라 스트림·온프레미스 배포 교체) 포함

데모 · 측정 지표

01

MobileViT·YOLO-nano 급 모델과 장비 프로파일을 넣으면 ONNX 변환에서 INT8 양자화, 도커 빌드, onnxruntime 추론까지 한 명령으로 끝까지 실제로 도는 걸 시연합니다

02

일부러 만든 악성·결측 입력 30종(VRAM 미계측·미등록 장비·장비 표기 흔들림·손상 프레임)을 넣어도 하니스가 멈추지 않고 '미매핑·미측정'으로 알리며 출력 형식(스키마)이 한 번도 안 깨집니다

03

장비 예산(지연·메모리) 대비 pass/fail 판정과 양자화 정확도 손실을 장비 프로파일 3종에서 실제로 측정해 보여줍니다. 단, 정확도 라벨은 작성자가 만든 합성 프레임 기준이고 지연·메모리는 로컬 장비에서 엣지 예산을 흉내 낸 값이라 실제 장비 성능이 아님을 명시합니다

정직 경계선

진짜 성능 검증은 여기서 멈춥니다. 위 지연·메모리·정확도 손실은 로컬에서 엣지 제약을 흉내 낸 값과 작성자가 만든 합성 라벨이며, 실제 지연·정확도는 클리카가 배포하는 실 엣지 장비(Jetson 등)와 실 카메라 스트림이 있어야 측정 가능합니다. 이 하니스는 그 장비만 붙이면 바로 측정을 돌릴 수 있는 상태까지 만듭니다

미리 알아둬야 할 것들

이건 고객·실데이터 없이 혼자 만든 포트폴리오입니다. 파이프라인은 실제로 끝까지 돌지만 정확도 라벨과 엣지 제약은 합성이라 성능 증명이 아닙니다. 면접에서는 실제 구동 데모와 실검증 준비 상태로 솔직히 설명하는 게 오히려 신뢰를 줍니다

정답 라벨과 장비 예산을 작성자가 만들었으니 잘 맞는 게 당연합니다. 그래서 손상 프레임·미등록 장비·VRAM 미계측·극단 지연 예산 같은 결측·경계 케이스를 더미에 일부러 섞어, 쉬운 장비만 통과시키는 게 아님을 보여줍니다

이 포트폴리오가 입증하는 것은 모델 최적화에서 컨테이너 패키징, 추론 서빙, 측정, 배포 판정으로 잇는 배포 사슬 기술입니다. 실제 로봇 제어(ROS)·차량과 선박 하드웨어 물리·C++ 임베디드 최적화 깊이·현장 대응 경험은 포트폴리오로 증명되지 않으므로 주장하지 않으며, 로보틱스는 테마로만 닿게 했습니다. 모르는 도메인 깊이는 면접에서 솔직히 말하는 편이 낫습니다

실제 도입 때는 실 엣지 장비 드라이버·TensorRT 버전·실 카메라 프레임 분포가 더미와 다릅니다. 그래서 로컬 흉내 측정과 온프레미스 실측정 교체, 실 검수자 교체를 도입 단계 과제로 분리해 명시합니다

더미 데이터

① 인라인 샘플 · ② seed.json 다운로드 · ③ 증강 프롬프트. 세 층 모두 동일한 schema 에서 파생.

edge_target_profilesTABLE· 12 rows

목표 엣지 장비 프로파일. 배포 판정·양자화 설정·진단이 가장 먼저 질의하는 테이블입니다. VRAM 미계측·미등록 장비·장비 표기 흔들림·극단 지연 예산을 일부러 섞어 쉬운 장비만 통과시키지 않게 합니다.

② edge_target_profiles.seed.json 다운로드
① 인라인 샘플 (프리뷰 5 / 12)
profile_iddevice_rawdevice_idruntimevram_mbcompute_topslatency_budget_msprecisionmax_image_px
p_01Jetson Orin Nanojetson_orin_nanotensorrt8,1924050int8640
p_02젯슨 오린 나노jetson_orin_nanotensorrt8,1924050fp16640
p_03Jetson Xavier NXjetson_xavier_nxtensorrt8,1922180int8512
p_04GPU 서버 A100gpu_a100onnx40,96031215fp161,280
p_05산업용 미니PC (OpenVINO)minipc_openvinoopenvino——120int8416
③ 증강 프롬프트 (본인 LLM 에 붙여서 N 배 늘리기)
아래 JSON Schema 에 맞는 목표 엣지 장비 프로파일 40행을 JSON 배열로 생성합니다. 장비 종류는 Jetson·GPU 서버·산업용 미니PC·차량 ECU·모바일을 고루 섞고 runtime 은 onnx/tensorrt/openvino/qnn/litert 를 분포시킵니다. latency_budget_ms 는 장비 성능과 대체로 정합되게 둡니다.

{"type":"object","properties":{"profile_id":{"type":"string"},"device_raw":{"type":"string"},"device_id":{"type":["string","null"]},"runtime":{"type":"string","enum":["onnx","tensorrt","openvino","qnn","litert"]},"vram_mb":{"type":["number","null"]},"compute_tops":{"type":["number","null"]},"latency_budget_ms":{"type":"number"},"precision":{"type":"string","enum":["fp32","fp16","int8"]},"max_image_px":{"type":"number"}},"required":["profile_id","device_raw","runtime","latency_budget_ms","precision"]}

쉬운 데이터만 만들지 말 것, 다음 하드 케이스를 의도적으로 섞어라(쉬운 장비만 다루는 함정 회피): (1) 같은 장비의 표기 별칭('Jetson Orin Nano'/'젯슨 오린 나노'/'Jetson Orin Nano '처럼 device_master 로 device_id 가 같게 정규화돼야 함) 4건 이상, (2) 미등록 장비(device_id=null) 3건, (3) 결측: vram_mb 또는 compute_tops 가 null 인 미계측 행 각 2건, (4) 경계값으로 latency_budget_ms 극단(8ms 모바일·500ms 여유)과 precision int8 각 3건. 형식을 일부러 깨뜨리는 시도 5건(문자열이어야 할 profile_id 에 숫자, runtime 에 enum 밖 값)도 별도로 만들어 하니스가 거르는지 확인합니다. 정상 행은 위 스키마를 통과해야 합니다. JSON 배열만 출력합니다.
schema (3 층의 단일 출처)
{"type":"object","properties":{"profile_id":{"type":"string"},"device_raw":{"type":"string"},"device_id":{"type":["string","null"]},"runtime":{"type":"string","enum":["onnx","tensorrt","openvino","qnn","litert"]},"vram_mb":{"type":["number","null"]},"compute_tops":{"type":["number","null"]},"latency_budget_ms":{"type":"number"},"precision":{"type":"string","enum":["fp32","fp16","int8"]},"max_image_px":{"type":"number"}},"required":["profile_id","device_raw","runtime","latency_budget_ms","precision"]}
inference_test_framesTABLE· 12 rows

라벨된 카메라 테스트 프레임. 양자화 전후 정확도 손실을 재는 자가채점 기준입니다. 분류만 라벨된 프레임(gt_bbox null)·손상 프레임·저조도·모션블러 경계를 일부러 섞습니다.

② inference_test_frames.seed.json 다운로드
① 인라인 샘플 (프리뷰 5 / 12)
frame_idimage_refscenegt_labelgt_bboxdifficultycorrupt
f_01frames/indoor_0001.jpgindoorperson[120,80,210,360]easyfalse
f_02frames/road_0007.jpgroadcar[300,210,480,340]easyfalse
f_03frames/dock_0012.jpgdockforklift[60,140,420,470]occludedfalse
f_04frames/factory_0003.jpgfactorypallet—easyfalse
f_05frames/road_0021.jpgroadpedestrian[510,180,560,320]lowlightfalse
③ 증강 프롬프트 (본인 LLM 에 붙여서 N 배 늘리기)
아래 JSON Schema 에 맞는 라벨된 카메라 테스트 프레임 40행을 JSON 배열로 생성합니다. scene(indoor/road/dock/factory)과 difficulty(easy/occluded/lowlight/motion_blur)를 고루 섞고 gt_label 은 장면에 맞는 객체명으로 둡니다.

{"type":"object","properties":{"frame_id":{"type":"string"},"image_ref":{"type":"string"},"scene":{"type":"string","enum":["indoor","road","dock","factory"]},"gt_label":{"type":"string"},"gt_bbox":{"type":["array","null"],"items":{"type":"number"}},"difficulty":{"type":"string","enum":["easy","occluded","lowlight","motion_blur"]},"corrupt":{"type":"boolean"}},"required":["frame_id","image_ref","scene","gt_label","difficulty","corrupt"]}

쉬운 데이터만 만들지 말 것, 다음 하드 케이스를 의도적으로 섞어라(깨끗한 프레임만 넣는 함정 회피): (1) 분류만 라벨돼 gt_bbox=null 인 행 5건 이상, (2) 손상 프레임(corrupt=true) 3건, (3) 경계 난이도로 lowlight·motion_blur 각 4건, occluded 4건, (4) 같은 장면 유형에 서로 다른 객체가 섞이게. 형식을 일부러 깨뜨리는 시도 5건(scene 에 enum 밖 값, corrupt 에 문자열)도 별도로 만들어 하니스가 거르는지 확인합니다. 정상 행은 위 스키마를 통과해야 합니다. JSON 배열만 출력합니다.
schema (3 층의 단일 출처)
{"type":"object","properties":{"frame_id":{"type":"string"},"image_ref":{"type":"string"},"scene":{"type":"string","enum":["indoor","road","dock","factory"]},"gt_label":{"type":"string"},"gt_bbox":{"type":["array","null"],"items":{"type":"number"}},"difficulty":{"type":"string","enum":["easy","occluded","lowlight","motion_blur"]},"corrupt":{"type":"boolean"}},"required":["frame_id","image_ref","scene","gt_label","difficulty","corrupt"]}

기술 상세 · 아키텍처·운영·출력 스키마

기술 스택 매핑
Python배포 하니스·모델 변환·양자화·측정 스크립트의 구현 언어입니다
C++엣지 런타임(ONNX Runtime·TensorRT) 커스텀 전처리 연동을 가정하는 성능 임계 경로입니다
PyTorch원본 비전·VLM 모델을 로드해 ONNX 로 내보내는 소스입니다
Docker목표 장비를 가정한 추론 이미지를 실제로 빌드·구동하는 패키징입니다
FastAPI배포된 추론을 REST 로 노출하는 서빙 엔드포인트입니다
Django고객 기존 스택이 Django 면 추론 엔드포인트를 그 위에 얹는 대안입니다(기본은 FastAPI)
Flask가벼운 현장 데모용 추론 엔드포인트 대안입니다(기본은 FastAPI)
REST고객 시스템·장비와 추론을 주고받는 연동 규격입니다
Linux빌드·배포·로그 분석을 수행하는 실행 환경입니다
VLM로봇 카메라 장면 이해 대상 모델로, 양자화·배포 대상입니다
LLM측정 지표와 로그를 읽어 배포 진단·튜닝 처방을 쓰는 Claude 입니다
딥러닝양자화 전후 정확도 손실 평가의 기반입니다
ONNX프레임워크 독립 모델 포맷으로 변환·양자화·추론의 중심 런타임입니다
TensorRTJetson·GPU 장비용 최적화 런타임 선택지입니다(2주차부터 실측)
OpenVINO산업용 미니PC·CPU 장비용 런타임 선택지입니다
QNN퀄컴 보드용 런타임 선택지로 프로파일 enum 에 둡니다
LiteRT모바일·경량 장비용 런타임 선택지로 프로파일 enum 에 둡니다
LLM 선택
model
Claude Sonnet (배포 진단·튜닝 처방 생성) + GPT-4o-mini (LLM-as-judge: 지원 안 하는 런타임·미측정 수치 인용 검출)
prompt
few-shot 3 예시 + 출력 JSON 형식 강제 + 측정 지표(지연·메모리·정확도 손실) 인용 강제 + 장비 프로파일에 없는 런타임 추천 차단 가드 + 후행 judge
rationale
배포 pass/fail 판정 자체는 규칙(측정값과 예산 비교)이 내고 Claude 는 근거·처방 설명만 맡아 환각이 판정을 바꾸지 못합니다. 처방 정확성에 Sonnet 을, judge 는 비용·속도 우선으로 mini 를 씁니다. 장비 수가 적고 문서 검색이 필요 없어 RAG 는 불필요합니다.
결정 게이트
1주차 끝모델과 장비 프로파일을 넣으면 양자화·도커·추론까지 실제로 돌고 지연·메모리 측정과 배포 pass/fail 판정·처방이 나오는가. 여기까지가 그 자체로 제출 가능한 완성품입니다.

✓ pass → 그대로 멈춰도 완결입니다. 더 키우려면 2주차(양자화 손실 검증·진단 대조)로 진행합니다.

2주차 끝int8 정확도 손실이 측정되고 Claude 처방대로 런타임·정밀도를 바꿔 재측정했을 때 예산 충족이 실제로 대조되는가.

✓ pass → 여기서 멈춰도 완결입니다. 더 키우면 3주차(다중 런타임·장비 매트릭스 자동화)로 진행합니다.

재사용 레이어 · 코어 70% / 도메인 30%
core (재사용 가능)
  • 장비 프로파일·프레임 파서와 JSON Schema 형식 검증 파이프라인
  • 모델 변환·양자화·도커 빌드·추론 실행 오케스트레이션(한 명령 실행)
  • 지연·메모리·정확도 손실 측정 계측기
  • 예산 대비 pass/fail 판정 규칙 엔진 + 배포 판정 카드
  • 지원 안 하는 런타임·미측정 수치 인용 차단 가드 + LLM-as-judge
  • 5% 사람 spot-check 샘플러
domain (교체 대상)
  • 장비 마스터와 런타임 enum(onnx·tensorrt·openvino·qnn·litert)은 고객 하드웨어군별로 갈아끼웁니다
  • 카메라 프레임 장면·라벨 세트(로봇·차량·산업 장면별 교체)
  • 배포 엔지니어 페르소나 처방 가이드
출력 스키마 · deployment_diagnosis

장비 1건의 배포 진단. 측정 지표·판정·튜닝 처방을 한 스키마로 담아 리포트 카드에 씁니다. 판정은 규칙이 내고 Claude 는 근거·처방만 씁니다.

schema (JSON Schema)
{"type":"object","properties":{"device_id":{"type":["string","null"]},"verdict":{"type":"string","enum":["deployable","needs_tuning","blocked","unmeasurable"]},"measured":{"type":"object","properties":{"latency_ms":{"type":["number","null"]},"peak_vram_mb":{"type":["number","null"]},"accuracy_drop_pct":{"type":["number","null"]}},"required":["latency_ms","peak_vram_mb","accuracy_drop_pct"]},"factors":{"type":"array","items":{"type":"string","enum":["latency_over","vram_over","accuracy_drop_over","unmapped_device","unmeasured_field"]}},"prescription":{"type":"string"},"evidence":{"type":"array","items":{"type":"string"}},"reason":{"type":"string"},"hedge":{"type":["string","null"]}},"required":["verdict","measured","factors","reason","evidence"]}
모범 출력 (4)
[
  {
    "input_ref": "p_08 (모바일 LiteRT · 지연 예산 8ms · int8) + 모델 추론 측정",
    "output": {
      "device_id": "mobile_litert",
      "verdict": "needs_tuning",
      "measured": {
        "latency_ms": 14.2,
        "peak_vram_mb": 980,
        "accuracy_drop_pct": 1.8
      },
      "factors": [
        "latency_over"
      ],
      "prescription": "입력 해상도를 224로 낮추고 litert int8 로 유지하되 백본을 더 가벼운 것으로 교체하면 8ms 예산에 들어갈 가능성이 큽니다.",
      "evidence": [
        "latency_ms=14.2 > latency_budget_ms=8",
        "peak_vram_mb=980 <= vram_mb=3072",
        "accuracy_drop_pct=1.8"
      ],
      "reason": "측정 지연 14.2ms 가 예산 8ms 를 초과해 그대로는 배포할 수 없습니다. 메모리와 정확도 손실은 여유가 있어 지연만 줄이면 됩니다.",
      "hedge": "지연은 로컬에서 예산을 흉내 낸 값이라 실제 모바일 장비 측정이 필요합니다"
    }
  },
  {
    "input_ref": "p_01 (Jetson Orin Nano · 지연 예산 50ms · int8) + 모델 추론 측정",
    "output": {
      "device_id": "jetson_orin_nano",
      "verdict": "deployable",
      "measured": {
        "latency_ms": 31.5,
        "peak_vram_mb": 2600,
        "accuracy_drop_pct": 2.1
      },
      "factors": [],
      "prescription": "현 설정(tensorrt int8, 640px) 그대로 배포 가능합니다. 추가 최적화는 필요 없습니다.",
      "evidence": [
        "latency_ms=31.5 <= latency_budget_ms=50",
        "peak_vram_mb=2600 <= vram_mb=8192",
        "accuracy_drop_pct=2.1"
      ],
      "reason": "측정 지연 31.5ms 가 예산 50ms 안에 들고 메모리도 여유가 있으며 정확도 손실도 낮아 그대로 배포 가능합니다.",
      "hedge": "측정은 로컬 흉내 값이라 실 Jetson 에서 재측정이 필요합니다"
    }
  },
  {
    "input_ref": "p_06 (차량 ECU 프로토타입 · device_id 미등록 · VRAM 2048)",
    "output": {
      "device_id": null,
      "verdict": "unmeasurable",
      "measured": {
        "latency_ms": null,
        "peak_vram_mb": null,
        "accuracy_drop_pct": null
      },
      "factors": [
        "unmapped_device"
      ],
      "prescription": "장비가 장비 마스터에 없어 런타임·드라이버를 확정할 수 없습니다. 장비 등록 후 다시 측정해야 합니다.",
      "evidence": [
        "device_id=null",
        "runtime=onnx"
      ],
      "reason": "장비가 미등록이라 배포 판정을 내리지 않습니다. 추측 대신 장비 등록을 먼저 요청합니다.",
      "hedge": "미등록 장비라 판정을 보류합니다"
    }
  },
  {
    "input_ref": "p_11 (GPU 서버 A100 · tensorrt · 지연 예산 10ms) + 측정",
    "output": {
      "device_id": "gpu_a100",
      "verdict": "blocked",
      "measured": {
        "latency_ms": 6.4,
        "peak_vram_mb": 41200,
        "accuracy_drop_pct": 0.9
      },
      "factors": [
        "vram_over"
      ],
      "prescription": "피크 메모리가 장비 VRAM 을 넘습니다. 배치 크기를 1로 낮추거나 입력 해상도를 줄여 메모리를 낮춰야 합니다.",
      "evidence": [
        "peak_vram_mb=41200 > vram_mb=40960",
        "latency_ms=6.4 <= latency_budget_ms=10"
      ],
      "reason": "지연은 예산 안이지만 피크 메모리가 장비 VRAM 40960MB 를 초과해 그대로는 올릴 수 없습니다.",
      "hedge": "메모리는 로컬 흉내 값이라 실 장비 측정이 필요합니다"
    }
  }
]
검증 노트 (자동 vs 수동)

[자동 검증] 1. 출력이 스키마(필드·enum·measured 하위 형식)를 통과하는지 확인합니다. 2. factors 가 측정값과 예산의 규칙 판정과 일치하는지 봅니다(지연 초과는 latency_over, 피크 메모리 초과는 vram_over 등 결정적 규칙). 3. evidence 항목이 실제 측정 지표와 프로파일 값을 인용하는지, 미측정 필드나 프로파일에 없는 런타임을 인용하지 않는지 검사합니다. 4. verdict 를 규칙 판정 결과와 대조하고, 미등록 장비·미측정 필드면 단정을 보류합니다. [수동 검증] 1. 배포 엔지니어 2명이 처방을 실제로 적용 가능한지 비동기로 검토해 일치도를 봅니다. 2. 전체의 5% 를 사람이 직접 점검합니다.