녹색 확인
링크가 클립보드에 복사됨

배포 Ultralytics YOLOv5 Neural Magic 의 DeepSparse를 사용하여 GPU-클래스 성능 CPU에 적용

Ultralytics YOLOv5 모델 학습 및 배포를 강화하세요. Neural Magic 의 DeepSparse로 CPU에서 GPU 급 성능을 발휘합니다. 더 빠르고 확장 가능한 YOLOv5 배포를 달성하세요.

모델의 교육과 배포를 가속화하고 싶으신가요? YOLOv5 모델을 빠르게 배포하고 싶으신가요? 유니티가 도와드리겠습니다! 새로운 파트너를 소개합니다, Neural Magic. Neural Magic 는 최고의 모델 성능과 워크플로우 간소화를 강조하는 소프트웨어 도구를 제공하므로, YOLOv5 배포 프로세스를 더욱 개선할 수 있는 솔루션을 제공하기 위해 협력하게 된 것은 당연한 일입니다.

DeepSparse는 Neural Magic의 CPU 추론 런타임으로, 신경망 내의 희소성과 저정밀 연산을 활용하여 일반 하드웨어에서 탁월한 성능을 제공합니다. 예를 들어, ONNX 런타임 기준과 비교했을 때, 동일한 머신에서 실행되는 YOLOv5의 경우 DeepSparse는 5.8배의 속도 향상을 제공합니다!

YOLOv5 딥스페이스와 처리량 비교

처음으로 하드웨어 가속기의 복잡성과 비용 없이도 딥 러닝 워크로드가 프로덕션의 성능 요구 사항을 충족할 수 있게 되었습니다. 간단히 말해, DeepSparse는 GPU의 성능과 소프트웨어의 단순성을 제공합니다:

  1. 유연한 배포: 모든 하드웨어 공급업체를 통해 클라우드, 데이터센터, 엣지 전반에서 일관되게 실행
  2. 무한한 확장성: 표준 Kubernetes로 확장하거나, 수직적으로 100개의 코어로 확장하거나, 서버리스로 완전히 추상화할 수 있습니다.
  3. 간편한 통합: 깔끔한 API를 사용하여 모델을 애플리케이션에 통합하고 프로덕션 환경에서 모니터링하세요.

일반 CPU에서 GPU-클래스 성능 달성

딥스페이스는 모델 희소성을 활용하여 성능 속도를 높입니다.

가지치기와 양자화를 통한 스파스화를 통해 높은 정확도를 유지하면서 네트워크를 실행하는 데 필요한 크기와 컴퓨팅을 대폭 줄일 수 있습니다. 딥스파스는 희소성을 인식하여 곱하기 덧셈을 0으로 건너뛰고 포워드 패스에서 계산량을 줄입니다. 희소성 계산은 메모리에 제한이 있기 때문에 DeepSparse는 네트워크를 깊이 있게 실행하여 문제를 캐시에 맞는 수직 줄무늬 계산인 Tensor 열로 분할합니다.

딥스페이스 및 Ultralytics YOLOv5  네트워크

캐시에서 깊이 단위로 실행되는 압축 연산이 포함된 스파스 네트워크를 통해 DeepSparse는 CPU에서 GPU-급 성능을 제공할 수 있습니다!

사용자 지정 데이터로 학습된 YOLOv5 의 스파스 버전 만들기

Neural Magic의 오픈 소스 모델 저장소인 SparseZoo에는 각 YOLOv5 모델에 대해 미리 스파스화된 체크포인트가 포함되어 있습니다. Ultralytics 와 통합된 SparseML을 사용하면 CLI 명령 한 번으로 데이터에 대한 스파스 체크포인트를 미세 조정할 수 있습니다.

자세한 내용은 Neural Magic의 YOLOv5 문서를 참조하세요.

딥스페이스를 사용하여 YOLOv5 배포

DeepSparse 설치

다음을 실행하여 DeepSparse를 설치합니다. Python 으로 가상 환경을 사용하는 것이 좋습니다.

pip install deepsparse[서버,yolo,onnxruntime]

ONNX 파일 수집

DeepSparse는 ONNX 형식으로 전달된 모델을 허용합니다:

  • ONNX 모델에 대한 로컬 경로
  • 스파스주에서 모델을 식별하는 스파스주 스텁입니다.

표준 밀도 YOLOv5를 다음과 같은 SparseZoo 스텁으로 식별되는 가지치기 정량화된 YOLOv5와 비교해 보겠습니다:

zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none
zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none

모델 배포

DeepSparse는 모델을 애플리케이션에 통합하기 위한 편리한 API를 제공합니다.

아래 배포 예제를 사용해 보려면 예제의 샘플 이미지를 내려받아 다음 명령을 사용하여 basilica.jpg로 저장합니다:

wget -O basilica.jpg https://raw.githubusercontent.com/neuralmagic/deepsparse/main/src/deepsparse/yolo/sample_images/basilica.jpg

Python API

파이프라인은 전처리와 출력 후처리를 런타임에 래핑하여 애플리케이션에 DeepSparse를 추가할 수 있는 깔끔한 인터페이스를 제공합니다. DeepSparse(Ultralytics ) 통합에는 원시 이미지를 받아들이고 바운딩 박스를 출력하는 기본 파이프라인이 포함되어 있습니다.

파이프라인을 만들고 추론을 실행합니다:

딥스파이스 가져오기 파이프라인에서

# 로컬 파일 시스템의 이미지 목록
images = ["basilica.jpg"]

# 파이프라인 생성
model_stub = "zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none"
yolo _pipeline = Pipeline.create(
task="yolo",
model_path=model_stub,
)

# 이미지에서 추론 실행, 바운딩 박스 + 클래스 수신
pipeline_outputs = yolo_pipeline(images=images, iou_thres=0.6, conf_thres=0.001)
print(pipeline_outputs)

클라우드에서 실행하는 경우, open-cv에서 libGL.so.1을 찾을 수 없다는 오류가 발생할 수 있습니다. 우분투에서 다음을 실행하면 설치됩니다:

apt-get 설치 libgl1-mesa-glx

HTTP 서버

DeepSparse Server는 널리 사용되는 FastAPI 웹 프레임워크와 Uvicorn 웹 서버 위에서 실행됩니다. CLI 명령 한 번으로 모델 서비스 엔드포인트를 딥스페이스로 쉽게 설정할 수 있습니다. 이 서버는 YOLOv5 을 통한 객체 감지를 포함하여 DeepSparse의 모든 파이프라인을 지원하므로 원시 이미지를 엔드포인트로 전송하고 바운딩 박스를 수신할 수 있습니다.

정리된 정량화된 YOLOv5로 서버를 스핀업합니다:

deepsparse.server \
--task yolo \
--model_path zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none

Python 의 요청 패키지를 사용한 요청 예제입니다:

요청 가져오기, JSON

# 추론할 이미지 목록(클라이언트 측의 로컬 파일)
경로 = ['basilica.jpg']
파일 = [('요청', open(img, 'rb')) for img in 경로]

#
url = 'http://0.0.0.0:5543/predict/from_files'
resp = requests.post(url=url, files=files)

# 응답은 JSON으로 반환됩니다
annotations = json.loads(resp.text) # 주석 결과의 사전
bounding_boxes = annotations["boxes"]
labels = annotations["labels"]

주석 달기 CLI

주석 달기 명령을 사용하여 엔진이 주석이 달린 사진을 디스크에 저장하도록 할 수도 있습니다. 소스 0을 사용해 라이브 웹캠 피드에 주석을 달아 보세요!

deepsparse.object_detection.annotate --model_filepath zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none --source basilica.jpg

위 명령을 실행하면 주석 결과 폴더가 생성되고 주석이 달린 이미지가 그 안에 저장됩니다.

주석이 달린 Basilica  YOLOv5

벤치마크 성능

DeepSparse의 벤치마킹 스크립트를 사용하여 DeepSparse의 처리량을 ONNX 런타임의 YOLOv5 처리량과 비교해 보겠습니다.

벤치마크는 AWS c6i.8xlarge 인스턴스(16코어)에서 실행되었습니다.

배치 32 성능 비교

ONNX 런타임 기준선

배치 32에서 ONNX 런타임은 표준 고밀도 YOLOv5를 사용하여 초당 42개의 이미지를 달성합니다:

deepsparse.벤치마크 zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none -s sync -b 32 -nstreams 1 -e onnxruntime

> 원본 모델 경로: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none
> 배치 크기: 32
> 시나리오: 동기화
> 처리량(항목/초): 41.9025

딥스페이스 고밀도 성능

딥스페이스는 최적화된 스파스 모델에서 최고의 성능을 제공하지만, 표준 고밀도 YOLOv5에서도 우수한 성능을 발휘합니다.

배치 32에서 딥스페이스는 표준 고밀도 YOLOv5s로 초당 70개의 이미지를 처리하며, 이는ORT보다 1.7배 향상된 성능입니다!

deepsparse.벤치마크 zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none -s sync -b 32 -nstreams 1

> 원본 모델 경로: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none
> 배치 크기: 32
> 시나리오: 동기화
> 처리량(항목/초): 69.5546

딥스파이스 스파스 성능

모델에 희소성을 적용하면 ONNX 런타임에 비해 DeepSparse의 성능 향상은 훨씬 더 강력해집니다.

배치 32에서 딥스페이스는 정리된 정량화된 YOLOv5s로 초당 241개의 이미지를 달성하며, 이는ORT보다 5.8배 향상된 성능입니다!

deepsparse.벤치마크 zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none -s sync -b 32 -nstreams 1

> 원본 모델 경로: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none
> 배치 크기: 32
> 시나리오: 동기화
> 처리량(항목/초): 241.2452

배치 1 성능 비교

딥스페이스는 지연 시간에 민감한 배치 1 시나리오의 경우 ONNX 런타임보다 속도를 향상시킬 수 있습니다.

ONNX 런타임 기준선

배치 1에서 ONNX 런타임은 표준 고밀도 YOLOv5를 사용하여 초당 48개의 이미지를 달성합니다.

deepsparse.벤치마크 zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none -s sync -b 1 -nstreams 1 -e onnxruntime

> 원본 모델 경로: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none
> 배치 크기: 1
> 시나리오: 동기화
> 처리량(항목/초): 48.0921

딥스파이스 스파스 성능

모델에 희소성을 적용하면 ONNX 런타임에 비해 DeepSparse의 성능 향상은 훨씬 더 강력해집니다.

배치 1에서 딥스페이스는 정리된 정량화된 YOLOv5s로 초당 135개의 이미지를 달성하며, 이는 ONNX 런타임에 비해 2.8배 향상된 성능입니다!

deepsparse.벤치마크 zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none -s sync -b 32 -nstreams 1

> 원본 모델 경로: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none
> 배치 크기: 1
> 시나리오: 동기화
> 처리량(항목/초): 134.9468

c6i.8xlarge 인스턴스에는 VNNI 명령어가 있기 때문에, 가중치를 4블록으로 잘라내면 DeepSparse의 처리량을 더 높일 수 있습니다.

배치 1에서 딥스페이스는 4블록 프루닝 정량화된 YOLOv5s로 초당 180개의 항목을 달성하며, 이는 ONNX 런타임 대비 3.7배의 성능 향상입니다!

deepsparse.벤치마크 zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned35_quant-none-vnni -s sync -b 1 -nstreams 1

> 원본 모델 경로: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned35_quant-none-vnni
> 배치 크기: 1
> 시나리오: 동기화
> 처리량(항목/초): 179.7375

그리고 짜잔! 이제 DeepSparse를 사용하여 YOLOv5 배포를 최적화할 준비가 되었습니다.

YOLOv5 및 DeepSparse 시작하기

문의 사항이 있으시면 커뮤니티에 가입하여 질문과 의견을 남겨 주세요. Ultralytics YOLOv5 리포지토리와 Neural Magic 배포에 대한 전체 문서( YOLOv5 )를 확인하세요.

Ultralytics 에서는 다른 스타트업과 상업적 제휴를 통해 누구나 무료로 사용할 수 있는 YOLOv5 과 같은 멋진 오픈 소스 도구의 연구 및 개발 자금을 지원하고 있습니다. 이 문서에는 해당 파트너의 제휴 링크가 포함되어 있을 수 있습니다.

Facebook 로고트위터 로고LinkedIn 로고복사 링크 기호

이 카테고리에서 자세히 보기

인공지능의 미래
를 함께 만들어 갑시다!

머신 러닝의 미래와 함께하는 여정 시작하기