Ultralytics YOLO27:

YOLO를 위한 OpenVINO 추론 최적화#

OpenVINO Ecosystem

소개#

딥러닝 모델, 특히 Ultralytics YOLO 모델과 같은 객체 탐지 모델을 배포할 때는 최적의 성능을 달성하는 것이 중요합니다. 이 가이드에서는 Intel의 OpenVINO 툴킷을 활용하여 추론을 최적화하는 방법을 살펴보고, 지연 시간과 처리량에 중점을 둡니다. 소비자용 애플리케이션을 개발하거나 대규모 배포를 진행하는 경우에 관계없이 이러한 최적화 전략을 이해하고 적용하면 다양한 디바이스에서 모델을 효율적으로 실행할 수 있습니다.

지연 시간 최적화#

지연 시간 최적화는 단일 입력에 대해 단일 모델에서 즉각적인 응답이 필요한 애플리케이션에 매우 중요하며, 소비자용 시나리오에서 일반적으로 사용됩니다. 목표는 입력과 추론 결과 사이의 지연을 최소화하는 것입니다. 그러나 동시 추론을 실행하거나 여러 모델을 관리할 때는 특히 신중한 고려가 필요하므로 낮은 지연 시간을 달성하는 일이 간단하지 않습니다.

지연 시간 최적화를 위한 주요 전략#

  • 디바이스당 단일 추론: 낮은 지연 시간을 달성하는 가장 간단한 방법은 디바이스당 한 번에 하나의 추론만 수행하도록 제한하는 것입니다. 동시성을 추가하면 지연 시간이 증가하는 경우가 많습니다.
  • 서브디바이스 활용: 멀티 소켓 CPU 또는 멀티 타일 GPU와 같은 디바이스는 내부 서브디바이스를 활용하여 지연 시간을 최소한으로 증가시키면서 여러 요청을 실행할 수 있습니다.
  • OpenVINO 성능 힌트: 모델 컴파일 중 ov::LATENCY을 사용하여 ov::performance_mode 속성을 설정하면 성능 튜닝이 간소화되고, 디바이스에 구애받지 않으며 미래에도 유효한 접근 방식을 사용할 수 있습니다.

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

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

처리량 최적화#

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

처리량 최적화 접근 방식#

  1. OpenVINO 성능 힌트: 성능 힌트를 사용하여 디바이스 전반의 처리량을 향상하는 고수준의 미래 지향적 방법입니다.

    import openvino as ov
    import openvino.properties.hint as hints
    
    core = ov.Core()
    model = core.read_model("yolo26n_openvino_model/yolo26n.xml")
    config = {hints.performance_mode: hints.PerformanceMode.THROUGHPUT}
    compiled_model = core.compile_model(model, "GPU", config)
  2. 명시적 배칭 및 스트림: 고급 성능 튜닝을 위해 명시적 배칭과 스트림을 사용하는 보다 세밀한 접근 방식입니다.

처리량 중심 응용프로그램 설계#

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

  • 입력을 병렬로 처리하여 디바이스의 기능을 최대한 활용합니다.
  • 데이터 흐름을 동시에 실행되도록 예약된 동시 추론 요청으로 분해합니다.
  • 콜백과 함께 Async API를 활용하여 효율성을 유지하고 디바이스가 유휴 상태가 되는 것을 방지합니다.

다중 장치 실행#

OpenVINO의 멀티 디바이스 모드는 애플리케이션 수준의 디바이스 관리 없이 디바이스 간 추론 요청을 자동으로 균형 조정하여 처리량 확장을 간소화합니다.

실제 성능 향상#

Ultralytics YOLO 모델로 OpenVINO 최적화를 구현하면 상당한 성능 향상을 얻을 수 있습니다. 벤치마크에서 입증되었듯이, 사용자는 인텔 CPU에서 최대 3배 더 빠른 추론 속도를 경험할 수 있으며, 내장 GPU, 외장 GPU, NPU를 포함한 인텔의 하드웨어 전반에서 훨씬 더 큰 가속을 달성할 수 있습니다.

예를 들어 Intel Xeon CPU에서 YOLO26 모델을 실행할 때 OpenVINO로 최적화된 버전은 정확도를 저하시키지 않으면서 이미지당 추론 시간 측면에서 PyTorch 버전보다 일관되게 우수한 성능을 보입니다.

실용적인 구현#

Ultralytics YOLO 모델을 OpenVINO용으로 내보내고 최적화하려면 내보내기 기능을 사용할 수 있습니다.

from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n.pt")

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

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

# Load the OpenVINO model
ov_model = YOLO("yolo26n_openvino_model/")

# Run inference (Ultralytics auto-selects OpenVINO LATENCY mode for batch=1)
results = ov_model("https://ultralytics.com/images/bus.jpg", verbose=True)

결론#

OpenVINO를 사용하여 지연 시간과 처리량 측면에서 Ultralytics YOLO 모델을 최적화하면 애플리케이션의 성능을 크게 향상할 수 있습니다. 이 가이드에 설명된 전략을 신중하게 적용하면 개발자는 다양한 배포 시나리오의 요구 사항을 충족하면서 모델을 효율적으로 실행할 수 있습니다. 지연 시간과 처리량 중 어느 쪽에 맞춰 최적화할지는 구체적인 애플리케이션 요구 사항과 배포 환경의 특성에 따라 결정해야 합니다.

더 자세한 기술 정보와 최신 업데이트는 OpenVINO 문서Ultralytics YOLO 저장소를 참조하시기 바랍니다. 이러한 리소스는 딥러닝 모델을 최대한 활용할 수 있도록 심층 가이드, 튜토리얼 및 커뮤니티 지원을 제공합니다.

모델이 최적의 성능을 발휘하도록 하는 것은 단순히 구성을 조정하는 것만이 아닙니다. 애플리케이션의 요구 사항을 이해하고 정보에 기반한 결정을 내리는 것이 중요합니다. 실시간 응답에 맞춰 최적화하거나 대규모 처리를 위해 처리량을 극대화하려는 경우 모두 Ultralytics YOLO 모델과 OpenVINO의 조합은 개발자가 고성능 AI 솔루션을 배포할 수 있도록 지원하는 강력한 툴킷을 제공합니다.

FAQ#

  • Ultralytics YOLO 모델을 낮은 지연 시간에 맞게 최적화하려면 다음과 같은 주요 전략을 사용해야 합니다.

    1. 디바이스당 단일 추론: 지연을 최소화하려면 디바이스당 한 번에 하나의 추론만 수행하도록 제한합니다.
    2. 서브디바이스 활용: 멀티 소켓 CPU 또는 멀티 타일 GPU와 같이 지연 시간을 최소한으로 증가시키면서 여러 요청을 처리할 수 있는 디바이스를 활용합니다.
    3. OpenVINO 성능 힌트: 간소화된 디바이스 비종속 튜닝을 위해 모델 컴파일 중 OpenVINO의 ov::LATENCY을 사용합니다.

    지연 시간 최적화에 대한 실용적인 팁은 가이드의 지연 시간 최적화 섹션을 참조하시기 바랍니다.

  • OpenVINO는 성능을 저하시키지 않으면서 디바이스 리소스 활용률을 극대화하여 Ultralytics YOLO 모델의 처리량을 향상합니다. 주요 이점은 다음과 같습니다.

    • 성능 힌트: 디바이스 전반에서 간단한 고수준 성능 튜닝을 제공합니다.
    • 명시적 배칭 및 스트림: 고급 성능을 위한 세밀한 튜닝을 제공합니다.
    • 멀티 디바이스 실행: 추론 부하를 자동으로 균형 조정하여 애플리케이션 수준의 관리를 간소화합니다.

    구성 예시:

    import openvino as ov
    import openvino.properties.hint as hints
    
    core = ov.Core()
    model = core.read_model("yolo26n_openvino_model/yolo26n.xml")
    config = {hints.performance_mode: hints.PerformanceMode.THROUGHPUT}
    compiled_model = core.compile_model(model, "GPU", config)

    자세한 가이드의 처리량 최적화 섹션에서 처리량 최적화에 대해 자세히 알아보시기 바랍니다.

  • 첫 추론 지연 시간을 줄이려면 다음 방법을 고려하시기 바랍니다.

    1. 모델 캐싱: 모델 캐싱을 사용하여 로드 및 컴파일 시간을 줄입니다.
    2. 모델 매핑과 읽기 비교: 기본적으로 매핑(ov::enable_mmap(true))을 사용하되, 모델이 이동식 드라이브나 네트워크 드라이브에 있는 경우 읽기(ov::enable_mmap(false))로 전환합니다.
    3. AUTO 디바이스 선택: AUTO 모드를 사용하여 CPU 추론으로 시작한 후 accelerator로 원활하게 전환합니다.

    첫 추론 지연 시간 관리에 대한 자세한 전략은 첫 추론 지연 시간 관리 섹션을 참조하시기 바랍니다.

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

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

    OpenVINO의 고수준 성능 힌트와 멀티 디바이스 모드를 사용하면 적절한 균형을 찾는 데 도움이 됩니다. 구체적인 요구 사항에 따라 적절한 OpenVINO 성능 힌트를 선택합니다.

  • 예, Ultralytics YOLO 모델은 매우 유연하며 다양한 AI 프레임워크와 통합할 수 있습니다. 다음과 같은 옵션을 사용할 수 있습니다.

    Ultralytics 통합 페이지에서 더 많은 통합 옵션을 확인하시기 바랍니다.

댓글