YOLO를 위한 OpenVINO 추론 최적화
소개
딥러닝 모델, 특히 Ultralytics YOLO 모델과 같은 객체 감지 모델을 배포할 때 최적의 성능을 달성하는 것이 중요합니다. 이 가이드에서는 대기 시간과 처리량에 중점을 두고 Intel의 OpenVINO 툴킷을 활용하여 추론을 최적화하는 방법을 자세히 설명합니다. 소비자 등급 애플리케이션에서 작업하든 대규모 배포에서 작업하든 이러한 최적화 전략을 이해하고 적용하면 다양한 장치에서 모델을 효율적으로 실행할 수 있습니다.
지연 시간 최적화
지연 시간 최적화는 단일 입력이 주어졌을 때 단일 모델에서 즉각적인 응답이 필요한 애플리케이션에 매우 중요하며, 이는 일반적인 소비자 시나리오에서 나타납니다. 목표는 입력과 추론 결과 사이의 지연을 최소화하는 것입니다. 그러나 낮은 지연 시간을 달성하려면 특히 동시 추론을 실행하거나 여러 모델을 관리할 때 신중한 고려가 필요합니다.
지연 시간 최적화를 위한 주요 전략:
- 장치당 단일 추론: 낮은 지연 시간을 달성하는 가장 간단한 방법은 장치당 한 번에 하나의 추론으로 제한하는 것입니다. 추가적인 동시성은 종종 지연 시간 증가로 이어집니다.
- 하위 장치 활용: 멀티 소켓 CPU 또는 멀티 타일 GPU와 같은 장치는 내부 하위 장치를 활용하여 지연 시간 증가를 최소화하면서 여러 요청을 실행할 수 있습니다.
- OpenVINO 성능 힌트: OpenVINO 활용
ov::hint::PerformanceMode::LATENCY
에 대한ov::hint::performance_mode
모델 컴파일 중 속성은 장치에 구애받지 않고 미래에도 유효한 접근 방식을 제공하여 성능 튜닝을 간소화합니다.
첫 번째 추론 지연 시간 관리:
- 모델 캐싱: 지연 시간에 영향을 미치는 모델 로드 및 컴파일 시간을 완화하려면 가능한 경우 모델 캐싱을 사용하십시오. 캐싱이 불가능한 시나리오의 경우 CPU가 일반적으로 가장 빠른 모델 로드 시간을 제공합니다.
- 모델 매핑 대 읽기: 로드 시간을 줄이기 위해 OpenVINO는 모델 읽기를 매핑으로 대체했습니다. 그러나 모델이 이동식 드라이브나 네트워크 드라이브에 있는 경우 다음을 사용하는 것이 좋습니다.
ov::enable_mmap(false)
읽기 모드로 다시 전환합니다. - AUTO 장치 선택: 이 모드는 CPU에서 추론을 시작하고 준비가 되면 가속기로 전환하여 첫 번째 추론 대기 시간을 원활하게 줄입니다.
처리량 최적화
처리량 최적화는 개별 요청 성능을 크게 저하시키지 않으면서 리소스 활용률을 극대화하여 수많은 추론 요청을 동시에 처리하는 시나리오에 매우 중요합니다.
처리량 최적화 접근 방식:
-
OpenVINO 성능 힌트: 성능 힌트를 사용하여 장치 전체에서 처리량을 향상시키는 고급의 미래 보장형 방법입니다.
import openvino.properties.hint as hints config = {hints.performance_mode: hints.PerformanceMode.THROUGHPUT} compiled_model = core.compile_model(model, "GPU", config)
-
명시적 배치 및 스트림: 고급 성능 조정을 위해 명시적 배치 및 스트림 사용과 관련된 보다 세분화된 접근 방식입니다.
처리량 중심 애플리케이션 설계:
처리량을 최대화하려면 애플리케이션에서 다음을 수행해야 합니다.
- 장치의 모든 기능을 활용하여 입력을 병렬로 처리합니다.
- 데이터 흐름을 병렬 실행을 위해 스케줄링된 동시 추론 요청으로 분해합니다.
- Async API를 콜백과 함께 활용하여 효율성을 유지하고 장치 부족 현상을 방지합니다.
다중 장치 실행:
OpenVINO의 멀티 장치 모드는 애플리케이션 수준의 장치 관리 없이도 장치 간에 추론 요청의 균형을 자동으로 조정하여 처리량 확장을 간소화합니다.
실제 성능 향상
Ultralytics YOLO 모델로 OpenVINO 최적화를 구현하면 상당한 성능 향상을 얻을 수 있습니다. 벤치마크에서 입증된 바와 같이 사용자는 Intel CPU에서 최대 3배 더 빠른 추론 속도를 경험할 수 있으며, 통합 GPU, 전용 GPU 및 VPU를 포함한 Intel의 하드웨어 스펙트럼 전반에서 훨씬 더 큰 가속이 가능합니다.
예를 들어, Intel Xeon CPU에서 YOLOv8 모델을 실행할 때 OpenVINO에 최적화된 버전은 정확도를 저하시키지 않으면서 이미지당 추론 시간 측면에서 PyTorch 버전을 일관되게 능가합니다.
실제 구현
Ultralytics YOLO 모델을 OpenVINO용으로 내보내고 최적화하려면 export 기능을 사용할 수 있습니다.
from ultralytics import YOLO
# Load a model
model = YOLO("yolov8n.pt")
# Export the model to OpenVINO format
model.export(format="openvino", half=True) # Export with FP16 precision
내보내기 후 최적화된 모델로 추론을 실행할 수 있습니다.
# Load the OpenVINO model
ov_model = YOLO("yolov8n_openvino_model/")
# Run inference with performance hints for latency
results = ov_model("path/to/image.jpg", verbose=True)
결론
OpenVINO를 사용하여 Ultralytics YOLO 모델의 지연 시간과 처리량을 최적화하면 애플리케이션 성능을 크게 향상시킬 수 있습니다. 이 가이드에 설명된 전략을 신중하게 적용함으로써 개발자는 모델이 효율적으로 실행되도록 보장하여 다양한 배포 시나리오의 요구 사항을 충족할 수 있습니다. 지연 시간 또는 처리량 최적화 중에서 선택하는 것은 특정 애플리케이션 요구 사항 및 배포 환경의 특성에 따라 달라집니다.
자세한 기술 정보 및 최신 업데이트는 OpenVINO 문서 및 Ultralytics YOLO 저장소를 참조하십시오. 이러한 리소스는 딥 러닝 모델을 최대한 활용하는 데 도움이 되는 심층 가이드, 튜토리얼 및 커뮤니티 지원을 제공합니다.
모델이 최적의 성능을 달성하도록 하는 것은 단순히 구성을 조정하는 것뿐만 아니라 애플리케이션의 요구 사항을 이해하고 정보에 입각한 결정을 내리는 것입니다. 실시간 응답에 최적화하든 대규모 처리를 위한 처리량을 최대화하든 Ultralytics YOLO 모델과 OpenVINO의 조합은 개발자가 고성능 AI 솔루션을 배포할 수 있는 강력한 툴킷을 제공합니다.
FAQ
OpenVINO를 사용하여 낮은 지연 시간을 위해 Ultralytics YOLO 모델을 어떻게 최적화합니까?
낮은 지연 시간을 위해 Ultralytics YOLO 모델을 최적화하는 데는 몇 가지 주요 전략이 있습니다.
- 장치당 단일 추론: 지연을 최소화하기 위해 장치당 한 번에 하나의 추론으로 제한합니다.
- 하위 장치 활용: 최소한의 지연 시간 증가로 여러 요청을 처리할 수 있는 멀티 소켓 CPU 또는 멀티 타일 GPU와 같은 장치를 활용합니다.
- OpenVINO 성능 힌트: OpenVINO 사용
ov::hint::PerformanceMode::LATENCY
간소화된 장치에 구애받지 않는 튜닝을 위해 모델 컴파일 중에 사용합니다.
지연 시간 최적화에 대한 더 많은 실용적인 팁은 가이드의 지연 시간 최적화 섹션을 확인하십시오.
Ultralytics YOLO 처리량을 최적화하기 위해 OpenVINO를 사용해야 하는 이유는 무엇입니까?
OpenVINO는 성능 저하 없이 장치 리소스 활용률을 극대화하여 Ultralytics YOLO 모델 처리량을 향상시킵니다. 주요 이점은 다음과 같습니다.
- 성능 힌트: 장치 간의 간단하고 높은 수준의 성능 튜닝.
- 명시적 배치 및 스트림: 고급 성능을 위한 미세 조정.
- 다중 장치 실행: 자동화된 추론 로드 밸런싱으로 애플리케이션 수준 관리가 용이합니다.
구성 예시:
import openvino.properties.hint as hints
config = {hints.performance_mode: hints.PerformanceMode.THROUGHPUT}
compiled_model = core.compile_model(model, "GPU", config)
자세한 내용은 처리량 최적화 섹션에서 처리량 최적화에 대해 자세히 알아보세요.
OpenVINO에서 첫 번째 추론 지연 시간을 줄이기 위한 가장 좋은 방법은 무엇입니까?
최초 추론 지연 시간을 줄이려면 다음 방법을 고려하십시오.
- 모델 캐싱: 모델 캐싱을 사용하여 로드 및 컴파일 시간을 줄입니다.
- 모델 매핑 대 읽기: 매핑 사용 (
ov::enable_mmap(true)
)을 기본값으로 사용하되, 판독으로 전환합니다(ov::enable_mmap(false)
) 모델이 이동식 드라이브 또는 네트워크 드라이브에 있는 경우. - 자동 장치 선택: AUTO 모드를 활용하여 CPU 추론으로 시작하고 가속기로 원활하게 전환합니다.
최초 추론 지연 시간 관리에 대한 자세한 전략은 최초 추론 지연 시간 관리 섹션을 참조하십시오.
Ultralytics YOLO 및 OpenVINO를 사용하여 지연 시간 및 처리량 최적화의 균형을 어떻게 맞춥니까?
지연 시간과 처리량 최적화의 균형을 맞추려면 애플리케이션 요구 사항을 이해해야 합니다.
- 지연 시간 최적화: 즉각적인 응답이 필요한 실시간 애플리케이션(예: 소비자 등급 앱)에 적합합니다.
- 처리량 최적화: 많은 동시 추론이 있는 시나리오에 가장 적합하며 리소스 사용을 극대화합니다(예: 대규모 배포).
OpenVINO의 고급 성능 힌트 및 다중 장치 모드를 사용하면 적절한 균형을 맞추는 데 도움이 될 수 있습니다. 특정 요구 사항에 따라 적절한 OpenVINO 성능 힌트를 선택하십시오.
OpenVINO 외에 다른 AI 프레임워크에서도 Ultralytics YOLO 모델을 사용할 수 있습니까?
예, Ultralytics YOLO 모델은 매우 다재다능하며 다양한 AI 프레임워크와 통합될 수 있습니다. 옵션은 다음과 같습니다.
- TensorRT: NVIDIA GPU 최적화의 경우 TensorRT 통합 가이드를 따르십시오.
- CoreML: Apple 장치의 경우 CoreML 내보내기 지침을 참조하십시오.
- TensorFlow.js: 웹 및 Node.js 앱의 경우 TF.js 변환 가이드를 참조하십시오.
Ultralytics 통합 페이지에서 더 많은 통합을 살펴보십시오.