EVA on Rebellions NPU: Physical AI 서비스를 위한 최적화 여정
EVA는 카메라 영상에서 위험 상황, 보안 이벤트, 작업자 안전 상태를 실시간으로 판단하는 Physical AI 플랫폼입니다. EVA가 실제 현장에서 안정적으로 동작하기 위해서는 단순히 AI 모델이 실행되는 것만 으로는 충분하지 않습니다. 여러 대의 카메라에서 동시에 발생하는 요청을 처리하고, 이벤트 발생 시 사용자가 체감할 수 있는 시간 안에 결과를 전달해야 합니다.
그동안 EVA는 GPU 기반 환경에서 Vision Model, Vision Language Model, Agent 파이프라인을 운영해왔습니다. 하지만 더 높은 전력 효율과 비용 효율적인 확장성을 확보하기 위해 Rebellions NPU 환경에서도 EVA가 상용 서비스 수준으로 동작할 수 있는지 검증하고 최적화를 진행했습니다.
NPU에서 EVA를 구동하는 과정은 단순한 모델 포팅 작업이 아니었습니다. GPU 중심으로 구성된 AI 서비스 파이프라인을 NPU 환경에서도 안정적으로 운영하기 위해서는 모델 컴파일, 입력 해상도, 병렬 처리, CPU와 NPU 간 자원 배치까지 함께 고려해야 했습니다.
NPU 상용화를 위해 검증한 최적화 포인트
| 구분 | 검증 포인트 | EVA의 최적화 방향 |
|---|---|---|
| 모델 호환성 | GPU 기반 모델을 NPU 실행 구조에 맞게 변환할 필요가 있음 | 모델 구조 분리, 입력 Shape 고정, 전처리·후처리 분리 |
| 입력 해상도 | 추론 속도와 세밀한 시각 판단 성능 간의 균형이 필요함 | 전체 이미지를 축소하지 않고 필요한 영역을 Crop 후 요구 해상도로 재구성 |
| 탐지 성능 | NPU 포팅, 양자화, 해상도 조정 이후에도 판단 성능 유지 여부 확인 | 실제 운영 데이터 기 반 시나리오별 성능 검증 |
| 추론 구조 | VLM 요청이 많아질수록 Vision Encoder와 Decoder 부하 관리가 중요함 | 탐지 단계를 작은 작업으로 분해하고 필요한 추론만 수행 |
| 동시 처리 | 다수 카메라 요청을 안정적으로 처리하기 위한 실행 구조가 필요함 | NPU 코어별 Worker 배치, 다중 vLLM 인스턴스 분산 구성 |
| 서버 자원 배치 | 다중 인스턴스 구동 시 CPU·Memory·NPU 간 자원 정렬이 중요함 | CPU Pinning과 NUMA Alignment 적용 |
1. 모델을 NPU 실행 구조에 맞게 최적화하기
NPU 환경에서 가장 먼저 확인한 것은 모델이 NPU 실행 구조에 적합하게 변환될 수 있는지였습니다. GPU에서는 PyTorch 기반 모델을 비교적 유연하게 실행할 수 있지만, NPU에서는 전용 컴파일러를 통해 모델 구조와 입력 형태를 명확하게 정의하는 과정이 필요합니다.
EVA에서 사용하는 Vision 모델은 다양한 카메라 영상과 시나리오를 처리하기 때문에, 모델 자체의 실행뿐 아니라 전처리, 후처리, 입력 Shape, 좌표 복원 방식까지 함께 고려해야 했습니다.
이를 위해 EVA는 모델 구조를 NPU 실행에 적합한 형태로 정리하고, 입력 Shape을 고정하며, 이미지 전처리와 추론 결과의 원본 좌표 복원 과정을 EVA 파이프라인에 맞게 재구성했습니다.
이 과정은 단순히 모델을 NPU에 올리는 작업이 아니라, 실제 서비스 환경 에서 안정적인 응답 속도와 일관된 추론 결과를 제공하기 위한 최적화 작업이었습니다.
2. 입력 해상도와 세밀한 판단 성능의 균형
NPU에서 추론 속도를 높이기 위해서는 입력 이미지 해상도를 조정하는 최적화가 필요합니다. 하지만 모든 시나리오에서 이미지 전체를 낮은 해상도로 변환하면 세밀한 판단이 필요한 경우 성능에 영향을 줄 수 있습니다.
특히 보호구 착용 여부처럼 작은 영역을 정밀하게 판단해야 하는 시나리오에서는 이 균형이 중요합니다. 안전모, 마스크, 보안경, 장갑과 같은 보호구는 전체 이미지에서 차지하는 비중이 작기 때문에, 이미지 전체를 축소하면 모델이 봐야 할 핵심 정보가 충분히 전달되지 않을 수 있습니다.
EVA는 이 문제를 단순히 전체 이미지 해상도를 높이는 방식으로 접근하지 않았습니다. 대신 먼저 판단에 필요한 영역을 찾고, 해당 영역만 Crop한 뒤 모델이 요구하는 입력 해상도로 다시 구성하는 방식을 적용했습니다.
예를 들어 보호구 착용 여부를 판단해야 하는 경우, 전체 이미지를 그대로 VLM에 전달하지 않고 사람 영역을 중심으로 이미지를 잘라낸 뒤, 해당 영역을 모델 입력 크기에 맞춰 확대하여 추론합니다.
이 방식은 다음과 같은 장점이 있습니다.
- 이미지 전체를 고해상도로 처리하지 않아도 되어 추론 비용을 줄일 수 있습니다.
- 모델이 실제로 판단해야 하는 영역은 충분한 해상도로 전달할 수 있습니다.
- 작은 객체나 세밀한 상태 판단에서도 성능 저하를 줄일 수 있습니다.
즉, EVA는 NPU 환경에서 단순히 해상도를 낮추는 것이 아니라, 모델이 봐야 할 영역과 그렇지 않은 영역을 구분하여 처리합니다.
3. 실제 운영 데이터 기반 탐지 성능 검증
NPU 상용화를 위해서는 속도뿐 아니라 탐지 성능도 함께 검증해야 합니다. 모델이 NPU 환경에서 안정적으로 동작하더라도 GPU 환경 대비 판단 성능이 유지되는지 확인해야 실제 서비스에 적용할 수 있습니다.
EVA는 다양한 운영 환경에서 수집된 실제 탐지 데이터를 바탕으로 자체 검증 데이터셋을 구축했습니다. 공개 벤치마크 데이터셋이 아니라, EVA가 실제로 판단해야 하는 시나리오를 기준으로 성능을 검증했습니다.
검증 대상에는 다음과 같은 현장 시나리오가 포함되었습니다.
| 시나리오 유형 | 예시 |
|---|---|
| 안전 | 안전모 미착용, 마스크 미착용, 장갑 미착용, 쓰러짐 |
| 보안 | 배회, 월담, 출입 유무 확인 |
| 설비·작업 | 지게차 주변 작업자, 설비 접촉, 적재 탐지 |
| 재난·환경 | 화재, 연기나 불꽃, 바닥 기름 유출 |
| 차량 | 긴급차량 탐지, 경찰차 탐지 |
이 데이터를 기반으로 GPU 환경과 NPU 환경에서 동일한 시나리오를 검증했습니다. 그 결과 NPU 환경에서도 주요 시나리오에 대해 GPU 대비 유사한 수준의 탐지 성능을 확보할 수 있음을 확인했습니다.
다만 작은 객체나 세밀한 시각 정보가 필요한 시나리오는 입력 해상도 변화에 민감할 수 있기 때문에, 앞서 설명한 Crop 기반 입력 최적화와 함께 적용하는 것이 중요했습니다.
4. VLM 호출을 효율화하기 위한 작업 분해 구조
NPU 환경에서는 하나의 큰 추론 작업을 처리하는 방식보다, 실제 판단에 필요한 요청을 선별하고 고비용 추론을 효율적으로 사용하는 구조가 중요합니다. 특히 VLM은 Vision Encoder와 LLM Decoder가 함께 동작하기 때문에, 여러 카메라에서 동시에 요청이 발생하는 환경에서는 요청 수와 실행 단계를 체계적으로 관리해야 합니다.
EVA는 모든 프레임을 VLM으로 판단하지 않고, 먼저 VM이 객체 존재 여부와 기본 조건을 확인한 뒤 필요한 경우에만 VLM을 수행합니다.
예를 들어 보호구 미착용 탐지의 경우, 사람이 존재하지 않는 프레임은 초기 단계에서 제외하고, 실제로 사람 영역이 확인된 경우에만 후속 판단을 수행합니다. 또한 복합 시나리오도 하나의 큰 요청으로 처리하지 않고, 탐지 단계 판단, 예외 상황 검사, 알람 메시지 생성 등 작은 작업 단위로 나누어 처리합니다.
이를 통해 NPU 환경에서 VLM 호출을 효율적으로 관리하고, 실제 판단이 필요한 요청에 연산 자원을 집중할 수 있습니다.
5. 다중 NPU 기반 Worker와 vLLM 인스턴스 분산 구성
NPU에서 EVA를 상용 서비스로 운영하기 위해서는 여러 카메라에서 동시에 발생하는 Vision과 VLM 요청을 안정적으로 처리할 수 있어야 합니다. 이를 위해 EVA는 Vision 영역과 Agent 영역을 분리하고, NPU 코어와 vLLM 인스턴스를 역할에 따라 분산 배치했습니다.
| 영역 | 처리 대상 | NPU 최적화 방향 |
|---|---|---|
| Vision Worker | 객체 탐지 요청 | NPU 코어별 Worker 배치 |
| vLLM Instance | VLM 기반 상황 판단 | 여러 인스턴스로 분산 구성 |
| Vision Encoder | 이미지 입력 처리 | 요청 분산을 통한 부하 완화 |
| Agent Pipeline | VLM 추론 요청 제어 | 필요한 요청만 VLM으로 전달 |
Vision 영역에서는 객체 탐지 Worker를 NPU 코어별로 배치하여 다수의 카메라 요청을 병렬로 처리합니다. 이때 카메라 수와 모델별 요청량을 기준으로 적정 Worker 수를 조정하여, NPU 코어가 안정적으로 활용될 수 있도록 구성했습니다.
VLM 영역에서는 단일 vLLM 인스턴스에 모든 요청을 집중시키지 않고, 여러 vLLM 인스턴스를 분산 구성하여 동시 처리량을 확보했습니다. 특히 이미지 입력 처리를 담당하는 Vision Encoder 구간의 부하를 고려하여, 여러 인스턴스가 독립적으로 요청을 처리할 수 있도록 구성한 것이 중요했습니다.
정리하면 EVA의 NPU 최적화는 단순히 NPU 장비를 추가하는 방식이 아니라, Vision Worker와 vLLM 인스턴스를 NPU 구조에 맞게 배치하여 전체 추론 파이프라인의 안정성을 높이는 과정입니다. 이를 통해 다수의 카메라 요청이 동시에 발생하는 환경에서도 안정적인 서비스 구성이 가능해졌습니다.
6. NUMA Alignment와 CPU Pinning
NUMA는 Non-Uniform Memory Access의 약자이며, CPU 소켓별 메모리 접근 지연이 달라지는 구조를 의미합니다.
NPU 최적화에서 모델과 파이프라인만큼 중요한 것이 서버 자원 배치입니다. 실제 상용 환경에서는 하나의 서버에서 여러 개의 vLLM 인스턴스가 동시에 구동됩니다. 이때 각 프로세스가 어떤 CPU 코어를 사용하고, 해당 CPU 코어가 어떤 NUMA Node에 속해 있으며, NPU 장치와 물리적으로 얼마나 가까운지가 전체 응답 시간에 영향을 줄 수 있습니다.
다중 인스턴스 환경에서는 CPU, Memory, NPU 간 데이터 이동 경로를 명확하게 정렬하는 것이 중요합니다. EVA는 이를 위해 vLLM 인스턴스별로 CPU Pinning과 NUMA Alignment를 적용하는 구조를 검증합니다.
| 항목 | 설명 |
|---|---|
| CPU Pinning | 특정 프로세스가 사용할 CPU 코어를 고정 |
| NUMA Alignment | NPU가 연결된 NUMA Node와 가까운 CPU·Memory 영역을 사용하도록 정렬 |
| 컨테이너 분리 | vLLM 인스턴스를 Docker 또는 Kubernetes Pod 단위로 격리 |
| 기대 효과 | 다중 인스턴스 간 간섭 완화, 데이터 이동 비용 감소 |
최종 상용 환경에서는 vLLM별로 독립된 컨테이너 또는 Pod를 구성하고, 각 환경에 CPU Pinning과 NUMA Alignment를 적용하는 구조가 필요합니다.
이는 단순한 서버 설정이 아니라, NPU 기반 AI 서비스를 더 안정적으로 운영하기 위한 인프라 최적화 과정입니다.
마치며
이번 최적화 과정에서 EVA는 NPU를 GPU의 단순 대체재로 바라보지 않았습니다. GPU 중심으로 구성된 AI 서비스 파이프라인을 NPU 환경에서도 안정적으로 운영하기 위해서는 모델, 입력 파이프라인, 추론 단계, Worker 배치, vLLM 인스턴스 구성, 서버 자원 정렬까지 함께 고려해야 했습니다.
NPU에서 EVA를 안정적으로 운영하기 위해 함께 최적화한 요소는 다음과 같습니다.
- NPU 실행 구조에 맞는 모델 구성
- 고정된 입력 파이프라인
- 해상도 저하를 보완하는 Crop 기반 입력 최적화
- 실제 운영 데이터 기반 탐지 성능 검증
- Vision과 VLM의 분산 처리 구조
- CPU Pinning과 NUMA Alignment 기반 자원 정렬
EVA는 이러한 과정을 통해 NPU 환경에서도 주요 탐지 시나리오에 대한 성능을 유지하고, 다수의 카메라 요청을 안정적으로 처리할 수 있는 구조를 확보했습니다.
앞으로도 EVA는 Rebellions NPU 환경에서 Vision Encoder 병렬화, 모델 양자화, 멀티 NPU 스케줄링, 컨테이너 기반 자원 격리 등을 지속적으로 고도화하여 다양한 하드웨어 환경에서 안정적으로 동작하는 Physical AI 플랫폼으로 확장해 나갈 예정입니다.
