1엣지 AI의 필요성
엣지 AI는 클라우드가 아닌 현장(Edge) 장치에서 AI 추론을 수행합니다. 제조 비전 검사에서 실시간성, 네트워크 독립성, 보안이 중요할 때 필수적입니다.
저지연
네트워크 왕복 없이
수 ms 내 응답
네트워크 독립
인터넷 연결 없이
오프라인 동작
데이터 보안
이미지가 외부로
전송되지 않음
비용 효율
클라우드 API 비용
절감
엣지 vs 클라우드: 라인당 1대의 카메라로 초당 10장 검사 시, 클라우드 추론은 네트워크 지연(50-200ms)과 API 비용이 발생합니다. 엣지 장치는 초기 투자 후 무제한 추론이 가능합니다.
| 구분 | 클라우드 추론 | 엣지 추론 |
|---|---|---|
| 지연 | 50-200ms (네트워크 포함) | 5-50ms (로컬) |
| 비용 구조 | 추론당 과금 | 장비 구매 (일회성) |
| 네트워크 | 필수 (안정적) | 불필요 |
| 확장성 | 무제한 | 장비 추가 필요 |
| 데이터 보안 | 전송 필요 | 로컬 처리 |
2NVIDIA Jetson 플랫폼
NVIDIA Jetson은 제조 AI 비전에서 가장 많이 사용되는 엣지 플랫폼입니다. CUDA 기반 GPU 가속으로 PyTorch/TensorFlow 모델을 그대로 배포할 수 있습니다.
| 모델 | GPU | 성능 | 적합 용도 |
|---|---|---|---|
| Jetson Nano | 128 CUDA | ~21 TOPS | 경량 모델, PoC |
| Jetson Orin Nano | 1024 CUDA | ~40 TOPS | 중형 모델, 단일 카메라 |
| Jetson Orin NX | 2048 CUDA | ~100 TOPS | 대형 모델, 다중 카메라 |
| Jetson AGX Orin | 2048 CUDA | ~275 TOPS | 복잡한 파이프라인 |
# TensorRT 추론 흐름 (수도코드)
# 1. 모델 변환: PyTorch → ONNX → TensorRT
torch.onnx.export(model, dummy_input, "model.onnx")
trtexec --onnx=model.onnx --saveEngine=model.engine --fp16
# 2. Jetson에서 추론 실행
engine = load_tensorrt_engine("model.engine")
context = engine.create_execution_context()
while camera.is_open():
frame = camera.read()
# 전처리: 리사이즈 → 정규화 → CHW 변환
input_tensor = preprocess(frame) # [1, 3, 640, 640]
# GPU 추론 (5-20ms)
output = context.execute(input_tensor)
# 후처리 및 결과 표시
result = postprocess(output)
display(frame, result) # OK/NG 표시
3Intel OpenVINO
OpenVINO는 Intel CPU/GPU/VPU에서 최적화된 추론을 제공합니다. NVIDIA GPU가 없는 환경에서 대안이 되며, 산업용 PC에서 많이 사용됩니다.
# OpenVINO 추론 흐름 (수도코드)
# 1. 모델 변환
ovc model.onnx --output_dir ./ir_model --compress_to_fp16
# 2. 추론 실행 (Intel CPU/GPU/VPU)
core = OpenVINO.Core()
model = core.read_model("model.xml")
compiled = core.compile_model(model, device="CPU") # 또는 "GPU", "MYRIAD"
# 3. 검사 실행
input_tensor = preprocess(image)
output = compiled.infer(input_tensor)
result = postprocess(output)
4엣지 최적화 기법
엣지 장치에서 실시간 추론을 위해서는 모델 경량화와 추론 최적화가 필수입니다.
| 최적화 기법 | 속도 향상 | 정확도 손실 | 적용 난이도 |
|---|---|---|---|
| FP16 변환 | ~2x | 거의 없음 | 낮음 |
| INT8 양자화 | ~4x | 1-3% | 중간 |
| TensorRT 최적화 | ~3x | 없음 | 낮음 |
| 모델 프루닝 | ~2x | 1-5% | 높음 |
| 지식 증류 | ~3x | 2-5% | 높음 |
# INT8 양자화 흐름 (수도코드)
# 방법 1: Post-Training Quantization (PTQ)
model.qconfig = get_default_qconfig('fbgemm')
model_prepared = prepare(model)
for images in calibration_data: # 캘리브레이션 (100~1000장)
model_prepared(images)
model_int8 = convert(model_prepared) # FP32 → INT8
# 방법 2: TensorRT INT8
trtexec --onnx=model.onnx --int8 --calib=calibration.cache
5엣지-클라우드 하이브리드
엣지에서 1차 검사를 수행하고, 불확실한 케이스만 클라우드로 전송하는 하이브리드 아키텍처가 비용과 정확도를 모두 만족시킵니다.
# 엣지-클라우드 하이브리드 검사 (수도코드)
CONFIDENCE_THRESHOLD = 0.85
def hybrid_inspect(image):
# 1단계: 엣지에서 1차 추론 (5-20ms)
edge_result = edge_model.infer(image)
# 2단계: 신뢰도 기반 분기
if edge_result.confidence >= CONFIDENCE_THRESHOLD:
return edge_result # 엣지 결과 사용 (~90%)
else:
return cloud_api.infer(image) # 클라우드로 에스컬레이션 (~10%)
# 결과: 클라우드 비용 90% 절감, 정확도 유지
네트워크 장애 대비: 클라우드 API 호출 실패 시 엣지 결과를 fallback으로 사용하거나, 이미지를 로컬에 저장 후 나중에 재처리하는 로직이 필요합니다.
6엣지 시스템 운영 가이드
산업 현장에서 안정적인 엣지 AI 운영을 위한 고려사항:
- 온도 관리: GPU 과열 시 Throttling 발생 → 팬/방열판 설계, 주변 온도 모니터링
- 전원 안정성: UPS 구비, 갑작스런 전원 차단 시 파일시스템 보호 (Read-only rootfs)
- 원격 업데이트: OTA(Over-The-Air) 모델 업데이트 파이프라인 구축
- 헬스체크: 추론 속도, GPU 메모리, 온도 모니터링 알림
- 폴백 로직: AI 장애 시 룰 기반 검사 또는 수동 검사로 전환
# Jetson 헬스 모니터링 (수도코드)
def get_system_stats():
stats = {
'cpu_temp': read_thermal_zone(0), # /sys/class/thermal/
'gpu_temp': read_thermal_zone(1),
'mem_used': get_memory_usage(),
'gpu_util': run_tegrastats()
}
return stats
def health_check():
stats = get_system_stats()
if stats.gpu_temp > 75:
send_alert("GPU 과열 경고")
if stats.mem_used > 90%:
send_alert("메모리 부족 경고")
return stats
# 주기적 실행: cron 또는 systemd timer로 등록