YOLO를 위한 OpenVINO 추론 최적화

OpenVINO Ecosystem

소개

딥러닝 모델, 특히 Ultralytics YOLO 모델과 같은 객체 탐지 모델을 배포할 때 최적의 성능을 달성하는 것은 매우 중요합니다. 이 가이드는 Intel OpenVINO 툴킷을 활용하여 지연 시간(latency)과 처리량(throughput)에 초점을 맞춰 추론을 최적화하는 방법을 다룹니다. 소비자용 애플리케이션을 개발하든 대규모 배포 환경에서 작업하든, 이러한 최적화 전략을 이해하고 적용하면 다양한 장치에서 모델을 효율적으로 실행할 수 있습니다.

지연 시간 최적화

지연 시간 최적화는 소비자용 시나리오에서 흔히 볼 수 있듯이 단일 입력에 대해 단일 모델로부터 즉각적인 응답을 요구하는 애플리케이션에 필수적입니다. 목표는 입력과 추론 결과 사이의 지연을 최소화하는 것입니다. 그러나 낮은 지연 시간을 달성하려면 특히 동시 추론을 실행하거나 여러 모델을 관리할 때 세심한 고려가 필요합니다.

지연 시간 최적화를 위한 핵심 전략:

  • 장치당 단일 추론: 낮은 지연 시간을 달성하는 가장 간단한 방법은 장치당 한 번에 하나의 추론만 수행하도록 제한하는 것입니다. 동시성을 높이면 지연 시간이 증가하는 경우가 많습니다.
  • 하위 장치 활용: 멀티 소켓 CPU나 멀티 타일 GPU와 같은 장치는 내부 하위 장치를 활용하여 지연 시간 증가를 최소화하면서 여러 요청을 실행할 수 있습니다.
  • OpenVINO Performance Hints: Utilizing OpenVINO's ov::LATENCY for the ov::performance_mode property during model compilation simplifies performance tuning, offering a device-agnostic and future-proof approach.

첫 번째 추론 지연 시간 관리:

  • 모델 캐싱: 모델 로드 및 컴파일 시간이 지연 시간에 미치는 영향을 완화하려면 가능한 경우 모델 캐싱을 사용하십시오. 캐싱이 불가능한 시나리오에서는 일반적으로 CPU가 가장 빠른 모델 로드 시간을 제공합니다.
  • 모델 매핑 vs 읽기: 로드 시간을 줄이기 위해 OpenVINO는 모델 읽기를 매핑 방식으로 대체했습니다. 그러나 모델이 이동식 드라이브나 네트워크 드라이브에 있는 경우 ov::enable_mmap(false)를 사용하여 읽기 방식으로 전환하는 것을 고려하십시오.
  • AUTO 장치 선택: 이 모드는 CPU에서 추론을 시작하고 준비가 되면 가속기로 전환하여 첫 번째 추론 지연 시간을 원활하게 줄여줍니다.

처리량 최적화

처리량 최적화는 수많은 추론 요청을 동시에 처리하는 시나리오에서 중요하며, 개별 요청의 성능을 크게 저하시키지 않으면서 리소스 활용도를 극대화합니다.

처리량 최적화를 위한 접근 방식:

  1. OpenVINO 성능 힌트: 성능 힌트를 사용하여 장치 전반에서 처리량을 향상시키는 상위 수준의 미래 대비형 방법입니다.

    import openvino.properties.hint as hints
    
    config = {hints.performance_mode: hints.PerformanceMode.THROUGHPUT}
    compiled_model = core.compile_model(model, "GPU", config)
  2. 명시적 배치 및 스트림: 고급 성능 튜닝을 위해 명시적 배치(batching)와 스트림을 사용하는 보다 세분화된 접근 방식입니다.

처리량 중심 애플리케이션 설계:

처리량을 극대화하려면 애플리케이션은 다음을 수행해야 합니다:

  • 장치의 기능을 최대한 활용하여 입력을 병렬로 처리합니다.
  • 데이터 흐름을 병렬 실행을 위해 예약된 동시 추론 요청으로 분해합니다.
  • Async API와 콜백을 활용하여 효율성을 유지하고 장치 기아(starvation) 현상을 방지합니다.

다중 장치 실행:

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("yolo26n.pt")

# Export the model to OpenVINO format
model.export(format="openvino", half=True)  # Export with FP16 precision

내보낸 후 최적화된 모델로 추론을 실행할 수 있습니다:

# Load the OpenVINO model
ov_model = YOLO("yolo26n_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 모델의 지연 시간을 낮추기 위한 최적화에는 몇 가지 핵심 전략이 포함됩니다:

  1. 장치당 단일 추론: 지연을 최소화하기 위해 장치당 한 번에 하나의 추론만 수행하도록 제한하십시오.
  2. 하위 장치 활용: 지연 시간 증가를 최소화하면서 여러 요청을 처리할 수 있는 멀티 소켓 CPU나 멀티 타일 GPU와 같은 장치를 활용하십시오.
  3. OpenVINO 성능 힌트: 간소화되고 장치에 구애받지 않는 튜닝을 위해 모델 컴파일 중에 OpenVINO의 ov::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에서 첫 번째 추론 지연 시간을 줄이기 위한 모범 사례는 무엇입니까?

첫 번째 추론 지연 시간을 줄이려면 다음 사례를 고려하십시오:

  1. 모델 캐싱: 로드 및 컴파일 시간을 줄이기 위해 모델 캐싱을 사용하십시오.
  2. 모델 매핑 vs 읽기: 기본적으로 매핑(ov::enable_mmap(true))을 사용하되 모델이 이동식 드라이브나 네트워크 드라이브에 있는 경우 읽기(ov::enable_mmap(false))로 전환하십시오.
  3. AUTO 장치 선택: AUTO 모드를 사용하여 CPU 추론으로 시작하고 원활하게 가속기로 전환하십시오.

첫 번째 추론 지연 시간 관리에 대한 자세한 전략은 첫 번째 추론 지연 시간 관리 섹션을 참조하십시오.

Ultralytics YOLO와 OpenVINO를 사용하여 지연 시간과 처리량 최적화의 균형을 맞추려면 어떻게 해야 합니까?

지연 시간과 처리량 최적화의 균형을 맞추려면 애플리케이션 요구 사항을 이해해야 합니다:

  • 지연 시간 최적화: 즉각적인 응답이 필요한 실시간 애플리케이션(예: 소비자용 앱)에 이상적입니다.
  • 처리량 최적화: 동시 추론이 많고 리소스 사용을 극대화해야 하는 시나리오(예: 대규모 배포)에 가장 적합합니다.

OpenVINO의 상위 수준 성능 힌트와 다중 장치 모드를 사용하면 올바른 균형을 잡는 데 도움이 됩니다. 특정 요구 사항에 따라 적절한 OpenVINO 성능 힌트를 선택하십시오.

OpenVINO 외에 다른 AI 프레임워크와 Ultralytics YOLO 모델을 사용할 수 있습니까?

네, Ultralytics YOLO 모델은 매우 다재다능하며 다양한 AI 프레임워크와 통합할 수 있습니다. 옵션은 다음과 같습니다:

Ultralytics 통합 페이지에서 더 많은 통합을 살펴보십시오.

댓글