>기술 주변기기 >일체 포함 >처리량 30배 증가: CV 파이프라인이 전체 스택 병렬화로 이동

처리량 30배 증가: CV 파이프라인이 전체 스택 병렬화로 이동

WBOY
WBOY앞으로
2023-04-11 16:37:031555검색

처리량 30배 증가: CV 파이프라인이 전체 스택 병렬화로 이동

Introduction

​ 스탠포드 교수이자 Tcl 언어의 창시자인 John Ousterhout는 소프트웨어 디자인 전체의 핵심적인 원리와 방법론을 체계적으로 논의한 "소프트웨어 디자인의 철학"이라는 책을 쓴 적이 있습니다. 책은 다음과 같습니다: 소프트웨어 디자인 핵심은 복잡성을 줄이는 것입니다.

사실 이 관점은 기본 하드웨어 적응과 관련된 소프트웨어 설계에도 적용됩니다.

비주얼 모델 개발을 예로 들어보겠습니다. 과거에는 시각적 모델을 개발할 때 일반적으로 사람들은 속도와 효과를 향상시키기 위해 모델 자체의 최적화에 더 많은 관심을 기울였습니다. 그러나 사람들은 이미지 전처리(pre-processing)와 후처리 단계에 거의 관심을 두지 않습니다.

모델 훈련 및 추론의 주요 단계인 모델 계산이 점점 더 효율적이게 되면 이미지의 전처리 및 후처리 단계가 점점 이미지 처리 작업의 성능 병목 현상이 됩니다. ​

처리량 30배 증가: CV 파이프라인이 전체 스택 병렬화로 이동

구체적으로 기존의 영상처리 과정에서 전처리와 후처리 부분은 대개 CPU가 담당하는데, 이로 인해 작업량의 50%~90% 이상을 차지하게 됩니다. 전체 프로세스의 전처리 및 후처리와 관련하여 전체 알고리즘 프로세스의 성능 병목 현상이 발생합니다.

1. 주류 CV 라이브러리의 한계 불일치로 인해 복잡성과 성능 병목 현상이 발생합니다. John Ousterhout는 복잡성의 원인을 다음과 같이 요약했습니다. 복잡성은 종속성에서 비롯됩니다.

주류 이미지 처리 라이브러리 OpenCV는 다양한 응용 시나리오를 가지고 있지만 실제 사용에서는 몇 가지 문제에 직면하기도 합니다.

예를 들어 OpenCV의 CPU 버전을 사용하여 먼저 훈련을 수행한 다음 추론을 수행하는 경우 추론 단계에서 더 높은 성능을 갖춘 버전이 필요할 수 있습니다.

훈련 시나리오에서는 전처리와 후처리, 모델 추론을 시간 내에 다룰 수 있어 전처리 시간을 커버할 수 있기 때문입니다. 그러나 추론 파이프라인에서는 모델에 순방향 추론만 포함되어 있으며 Tensor RT 가속 후 시간 소모가 대폭 줄어듭니다. 이때 전처리에 소요되는 시간은 매우 높아서 감당하기 어렵습니다. 모델 추론. 처리량 30배 증가: CV 파이프라인이 전체 스택 병렬화로 이동

추론 시나리오의 시간 소모를 줄이고 성능을 향상시키기 위해 일반적으로 GPU 버전의 OpenCV가 가속에 사용됩니다. 그러나 OpenCV의 CPU 버전과 GPU 버전 간에 결과가 일치하지 않을 수 있습니다. 대표적인 예로 CPU 버전과 GPU 버전의 차이를 다르게 계산하는 resize 연산자가 있습니다.

OpenCV는 훈련 및 추론 중에 다양한 버전의 연산자를 사용합니다. CPU는 CPU 연산자 적용 범위가 상대적으로 높기 때문에 일반적으로 훈련 중에 사용되며, 성능이 더 좋기 때문에 추론에는 일반적으로 GPU가 사용됩니다. 따라서 이로 인해 결과 정렬에 문제가 발생할 수도 있습니다. 즉, 모델 훈련에 CPU를 사용하고 모델 추론에 GPU를 사용할 경우 최종 출력 결과가 정렬되지 않습니다.

둘째, 일부 GPU 운영자의 성능이 저하됩니다. OpenCV에서는 일부 GPU 연산자 자체가 상대적으로 시간이 많이 걸리기 때문에 CPU 버전보다 훨씬 나쁜 전체 연산자의 성능 회귀가 발생합니다.

셋째, OpenCV의 GPU 연산자 적용 범위는 제한적이며 일부 연산자에는 CPU 버전만 있습니다. 매개 변수, 데이터 유형 등의 적용 범위가 CPU 버전만큼 높지 않아 사용에 제한이 있는 일부 GPU 연산자도 있습니다.

마지막으로, CPU 연산자와 GPU 연산자를 사용 중에 쌍방향으로 사용하게 되면 CPU와 GPU 간에 대량의 데이터 복사 및 동기화 작업이 발생하게 되어 전체적인 가속 성능이 부족해지게 됩니다.

일반적으로 사용되는 또 다른 이미지 처리 라이브러리는 TorchVision입니다.

​TorchVision이 모델 추론을 수행할 때 일부 운영자에게는 C++ 인터페이스가 부족하여 호출 시 유연성이 부족합니다. C++ 버전을 생성하려면 TorchScript를 통해 생성해야 합니다. 대화형 사용을 위해 프로세스 중간에 다른 라이브러리의 연산자를 삽입하면 추가 오버헤드와 작업 부하가 발생하므로 사용에 많은 불편을 초래합니다. TorchVision의 또 다른 단점은 운영자 범위가 높지 않다는 것입니다.

위 내용은 현재 주류 CV 라이브러리의 한계입니다. ​

2. 통합 CV 파이프라인

전처리와 후처리의 성능 병목 현상이 주로 CPU 계산 사용에 있기 때문에, 모델 계산 단계에서 GPU를 사용하는 기술이 점점 더 많아지고 있습니다. 더욱 성숙한.

그러면 자연스러운 해결책은 GPU를 사용하여 전처리 및 후처리를 가속화하는 것입니다. 그러면 전체 알고리즘 파이프라인의 성능이 크게 향상됩니다.

​이를 위해 NVIDIA와 ByteDance는 이미지 전처리 연산자 라이브러리 CV-CUDA를 공동으로 오픈소스화했습니다. CV-CUDA는 GPU에서 효율적으로 실행될 수 있으며, 연산자 속도는 OpenCV의 약 100배에 달할 수 있습니다.

2023년 1월 15일 9시 30분부터 11시 30분까지 NVIDIA가 주최한 "CV-CUDA First Open Class"에는 NVIDIA, ByteDance, Sina Weibo의 기술 전문가 3명(Zhang Yi, Sheng Yiyao, Pang Feng)이 초대되었습니다. ) 관련 주제에 대해 심도 있게 공유한 이번 글은 세 전문가의 연설 내용을 요약한 것이다. ​처리량 30배 증가: CV 파이프라인이 전체 스택 병렬화로 이동

​CPU 대신 GPU를 사용하면 많은 이점이 있습니다. 우선, 전처리 및 후처리 연산자를 GPU로 마이그레이션한 후에는 연산자의 계산 효율성을 향상시킬 수 있습니다.

둘째, 모든 프로세스가 GPU에서 수행되기 때문에 CPU와 GPU 사이의 데이터 복사를 줄일 수 있습니다.

마지막으로 CPU 부하를 GPU로 마이그레이션하면 CPU 부하를 줄일 수 있고 CPU를 사용하여 복잡한 로직이 필요한 다른 작업을 처리할 수 있습니다. ​

처리량 30배 증가: CV 파이프라인이 전체 스택 병렬화로 이동

전체 프로세스를 GPU로 마이그레이션한 후 전체 파이프라인을 거의 30배 향상할 수 있어 컴퓨팅 오버헤드와 운영 비용이 절감됩니다.

그림의 데이터 비교를 보면 동일한 서버 및 매개변수 구성에서 30fps 1080p 비디오 스트림의 경우 OpenCV는 최대 2-3개의 병렬 스트림을 열 수 있고 PyTorch(CPU)는 열 수 있음을 알 수 있습니다. 최대 1.5개의 병렬 스트림을 지원하며 CV-CUDA는 최대 60개의 병렬 스트림을 열 수 있습니다. 관련된 전처리 연산자에는 크기 조정, 패딩, 정규화 등이 포함되고 후처리 연산자에는 자르기, 크기 조정, 구성 등이 포함되어 전반적인 성능 향상이 매우 크다는 것을 알 수 있습니다.

3. 비동기

왜 GPU는 전처리 및 후처리의 가속 요구 사항에 적응할 수 있나요? 모델 계산과 사전 및 사후 처리 간의 비동기화를 활용하고 GPU의 병렬 컴퓨팅 기능에 적응하세요.

처리량 30배 증가: CV 파이프라인이 전체 스택 병렬화로 이동

모델 학습과 모델 추론의 전처리 비동기화에 대해 각각 설명하겠습니다.

1. 모델 훈련의 전처리 비동기화

처리량 30배 증가: CV 파이프라인이 전체 스택 병렬화로 이동

두 부분으로 나눌 수 있는데, 첫 번째는 데이터 준비, 두 번째는 모델 계산입니다.

PyTorch 및 TensorFlow와 같은 현재 주류 기계 학습 프레임워크는 데이터 준비와 모델 계산 간에 비동기식입니다. PyTorch를 예로 들면 데이터 준비를 위한 여러 하위 프로세스가 시작됩니다.

그림과 같이 모델 계산과 데이터 준비라는 두 가지 상태가 포함되어 있습니다. 예를 들어 D0이 완료되면 B0이 수행될 수 있습니다. .

성능 측면에서 볼 때 데이터 준비 속도는 모델 계산 속도를 따라갈 것으로 예상됩니다. 그러나 실제 상황에서는 일부 데이터 읽기 및 데이터 전처리 프로세스에 오랜 시간이 걸리므로 해당 모델 계산이 수행되기까지 일정 기간이 발생하여 GPU 활용도가 감소합니다.

데이터 준비는 데이터 읽기와 데이터 전처리로 나눌 수 있습니다. 이 두 단계는 직렬 또는 병렬로 실행될 수 있습니다. 예를 들어 PyTorch 프레임워크에서는 직렬로 실행됩니다.

데이터 저장 매체, 저장 형식, 병렬성, 실행 프로세스 수 등 데이터 읽기 성능에 영향을 미치는 요소는 많습니다.

반면, 데이터 전처리의 성능에 영향을 미치는 요소는 비교적 간단합니다. 즉, 병렬 처리 정도입니다. 병렬 처리 수준이 높을수록 데이터 전처리 성능이 향상됩니다. 즉, 데이터 전처리와 모델 계산을 비동기화하고 데이터 전처리의 병렬성을 높이면 데이터 전처리 성능을 향상시킬 수 있습니다.

2. 모델 추론의 비동기화 전처리

처리량 30배 증가: CV 파이프라인이 전체 스택 병렬화로 이동

​모델 추론 단계에서 성능에는 두 가지 지표가 있는데, 첫 번째는 처리량이고 두 번째는 지연입니다. 어느 정도 이 두 지표는 상호 배타적입니다.

단일 쿼리의 경우 서버는 데이터를 수신한 후 데이터를 전처리한 다음 모델 추론을 수행합니다. 따라서 단일 쿼리의 경우 어느 정도 직렬 프로세스입니다.

그러나 이것은 매우 비효율적이며 많은 컴퓨팅 리소스를 낭비하게 됩니다. 처리량을 향상시키기 위해 많은 추론 엔진은 훈련 단계와 동일한 전략을 사용하여 데이터 및 모델 계산을 비동기식으로 준비합니다. 데이터 준비 단계에서는 일정량의 쿼리가 누적되어 배치로 결합된 후 후속 계산이 수행되어 전체 처리량을 향상시킵니다.

처리량 측면에서 모델 추론과 모델 학습은 비교적 유사합니다. 데이터 전처리 단계를 CPU에서 GPU로 이동하면 처리량을 높일 수 있습니다.

동시에 지연 관점에서 볼 때 각 쿼리 문에 대해 전처리 과정에 소요되는 시간을 줄일 수 있다면 각 쿼리에 대한 지연도 그에 따라 단축됩니다.

모델 추론의 또 다른 특징은 역방향 계산이 아닌 순방향 계산만 수행하기 때문에 모델 계산량이 상대적으로 적다는 것입니다. 이는 모델 추론에 더 높은 데이터 전처리가 필요함을 의미합니다. ​

3. 핵심 이슈: CPU 리소스 경쟁

계산에 필요한 CPU 리소스가 충분하다고 가정하면 이론적으로 전처리가 성능 병목 현상을 일으키지는 않습니다. 성능이 따라잡을 수 없다는 것을 알게 되면 전처리 작업을 수행하는 프로세스만 추가하면 되기 때문입니다​.

따라서 데이터 전처리는 CPU 리소스 경쟁이 있을 때만 성능 병목 현상이 발생할 수 있습니다.

실제 비즈니스에서는 CPU 리소스 경쟁이 매우 흔하며, 이로 인해 후속 학습 및 추론 단계에서 GPU 사용률이 감소하여 학습 속도가 저하됩니다.

GPU 컴퓨팅 성능이 계속 증가함에 따라 데이터 준비 단계에 대한 속도 요구 사항이 점점 더 높아질 것으로 예상됩니다.

이러한 이유로 CPU 리소스 경쟁 문제를 완화하고 GPU 활용도를 높이기 위해 전처리 부분을 GPU로 옮기는 것은 자연스러운 선택입니다.

전반적으로 이 디자인은 시스템의 복잡성을 줄이고 모델 파이프라인의 본체를 GPU에 직접 적용하므로 GPU와 CPU의 활용도를 향상시키는 데 큰 도움이 될 수 있습니다. 동시에 서로 다른 버전 간의 결과 정렬 문제를 방지하고 종속성을 줄이며 John Ousterhout가 제안한 소프트웨어 설계 원칙을 준수합니다. ​

4. CV-CUDA

전처리 및 후처리 프로세스를 GPU로 이동하려면 여러 조건을 충족해야 합니다.

첫 번째는 성능이 최소한 CPU보다 좋아야 한다는 것입니다. 이는 주로 GPU의 높은 동시 컴퓨팅 기능을 기반으로 합니다.

두 번째는 모델 추론 등 다른 프로세스에 부정적인 영향을 미칠 수 없는 전처리의 가속화입니다. 두 번째 요구 사항의 경우 CV-CUDA의 각 연산자에는 스트림과 CUDA 메모리 사이에 인터페이스가 있으므로 GPU 리소스를 보다 합리적으로 할당할 수 있으므로 이러한 전처리 연산자를 GPU에서 실행할 때 큰 영향을 미치지 않습니다. 모델 계산 자체에.

셋째, 인터넷 회사는 다양한 유형의 모델과 그에 따른 전처리 로직을 포함하는 매우 다양한 비즈니스 요구 사항을 가지고 있습니다. 따라서 전처리 연산자를 맞춤형으로 개발하여 복잡한 로직을 구현할 수 있는 유연성을 높여야 합니다.

처리량 30배 증가: CV 파이프라인이 전체 스택 병렬화로 이동

일반적으로 CV-CUDA는 하드웨어, 소프트웨어, 알고리즘, 언어 등의 측면에서 모델 파이프라인의 전처리 및 후처리 단계를 가속화하고 전체 파이프라인을 통합합니다.

1. 하드웨어

하드웨어 측면에서 CV-CUDA는 GPU의 병렬 컴퓨팅 기능을 기반으로 하며, 이는 전처리 및 후처리의 속도와 처리량을 크게 향상시키고 모델 대기 시간을 줄일 수 있습니다. 계산하고 GPU 활용도를 향상시킵니다.

CV-CUDA는 배치 및 가변 모양 모드를 지원합니다. 배치 모드는 배치 처리를 지원하며 GPU의 병렬 특성을 최대한 활용할 수 있습니다. 그러나 OpenCV는 CPU 버전인지 GPU 버전인지에 관계없이 단일 이미지만 호출할 수 있습니다.

가변 모양 모드는 일괄적으로 각 사진의 길이와 너비가 다를 수 있음을 의미합니다. 인터넷에 있는 이미지의 길이와 너비는 일반적으로 일치하지 않습니다. 주류 프레임워크 방법은 길이와 너비를 각각 동일한 크기로 조정한 다음 동일한 길이와 너비의 이미지를 일괄 처리한 다음 일괄 처리하는 것입니다. CV-CUDA는 다양한 길이와 너비의 이미지를 일괄 처리하여 직접 배치할 수 있어 효율성이 향상될 뿐만 아니라 사용하기도 매우 편리합니다.

가변 모양의 또 다른 의미는 이미지를 처리할 때 회전과 같은 각 이미지의 특정 매개변수를 지정할 수 있다는 것입니다. 이미지 배치의 경우 각 이미지의 회전 각도를 지정할 수 있습니다. ​

2. 소프트웨어

소프트웨어 측면에서 CV-CUDA는 성능 최적화(예: 메모리 액세스 최적화) 및 리소스 활용 최적화(예: 비디오 메모리 사전 할당)을 사용하여 클라우드의 교육 및 추론 시나리오에서 효율적으로 실행할 수 있습니다.

첫 번째는 비디오 메모리 사전 할당 설정입니다. OpenCV가 GPU 버전을 호출할 때 일부 연산자는 내부적으로 cudaMalloc을 실행하므로 시간 소모가 크게 증가합니다. CV-CUDA에서는 초기화 단계에서 모든 비디오 메모리 사전 할당이 수행되고, 학습 및 추론 단계에서는 비디오 메모리 할당 작업이 수행되지 않아 효율성이 향상됩니다.

둘째, 모든 연산자는 비동기적으로 작동합니다. CV-CUDA는 많은 수의 커널을 통합하여 커널 수를 줄여 커널 시작 시간과 데이터 복사 및 삭제를 줄이고 전반적인 운영 효율성을 향상시킵니다.

세 번째로 CV-CUDA는 메모리 액세스 병합, 벡터화된 읽기 및 쓰기 등과 같은 메모리 액세스를 최적화하여 대역폭 활용도를 향상시키고 공유 메모리를 사용하여 메모리 액세스, 읽기 및 쓰기 효율성을 향상시킵니다.

마지막으로 CV-CUDA는 빠른 수학, 워프 감소/블록 감소 등과 같은 계산에서도 많은 최적화를 수행했습니다.

3. 알고리즘

​알고리즘 측면에서 CV-CUDA의 연산자는 독립적으로 설계되고 맞춤화되어 매우 복잡한 논리 구현을 지원하고 사용 및 디버깅을 용이하게 할 수 있습니다.

독립적인 디자인을 이해하는 방법은 무엇입니까? 이미지 처리 라이브러리에는 두 가지 형태의 연산자 호출이 있는데, 하나는 DALI와 같이 파이프라인의 결과만 얻을 수 있는 전체 파이프라인 형식이고, 다른 하나는 각 연산자를 얻을 수 있는 모듈식 독립 연산자 형식입니다. OpenCV와 같은 개별 결과. CV-CUDA는 OpenCV와 동일한 호출 형식을 사용하므로 사용 및 디버깅이 더 편리합니다. ​

4. 언어

언어 측면에서 CV-CUDA는 사전 및 사후 처리를 교육 및 추론 시나리오에 원활하게 연결할 수 있는 풍부한 API를 지원합니다.

이러한 API에는 일반적으로 사용되는 C, C++, Python 인터페이스 등이 포함되어 있어 학습 및 추론 시나리오를 모두 지원할 수 있습니다. 향후에는 CV-CUDA도 지원할 예정입니다. Triton, TensorFlow, JAX 및 기타 인터페이스.

추론 중에 전처리 및 후처리, 모델, GPU가 동일한 스트림에 배치되어 있다면 추론을 위해 Python 또는 C++ 인터페이스를 직접 사용할 수 있습니다.

5 대폭.

첫 번째는 NVIDIA가 제시한 이미지 분류 사례입니다.

처리량 30배 증가: CV 파이프라인이 전체 스택 병렬화로 이동

이미지 분류 파이프라인에서 첫 번째는 이미지를 디코딩하는 JPEG 디코딩입니다. 녹색 부분은 크기 조정, 데이터 유형 변환, 정규화 및 재포맷을 포함한 전처리 단계입니다. -PyTorch를 이용한 처리 단계 추론 과정에서는 분류 결과를 최종적으로 점수화하여 정렬한다.

CV-CUDA와 OpenCV의 CPU 버전과 GPU 버전의 성능을 비교해 보면 OpenCV의 GPU 버전이 CPU 버전에 비해 더 큰 성능 향상을 이룰 수 있음을 알 수 있으며, 성능을 2배로 높일 수 있는 CV -CUDA를 적용했습니다. 예를 들어 OpenCV의 CPU 연산자가 밀리초당 처리하는 이미지 수는 22개이고, GPU 연산자가 밀리초당 처리하는 이미지 수는 200개가 넘습니다. CV-CUDA는 밀리초당 500개 이상의 이미지를 처리할 수 있으며 처리량은 OpenCV의 CPU 대비 20배 이상, GPU 버전 대비 2배 이상의 성능 향상이 눈에 띕니다.

처리량 30배 증가: CV 파이프라인이 전체 스택 병렬화로 이동

둘째, ByteDance에서 시연한 OCR1, OCR2, Video Multi-modality의 세 가지 사례가 있습니다.

모델 교육에서는 OCR1, OCR2 및 비디오 다중 모달리티의 세 가지 작업에서 CV-CUDA를 사용한 후 50%~100%의 성능 향상을 달성한 것을 확인할 수 있습니다.

처리량 30배 증가: CV 파이프라인이 전체 스택 병렬화로 이동

왜 그렇게 큰 성능 향상이 있나요? 실제로 이 세 가지 작업의 공통점 중 하나는 이미지 전처리 논리가 디코딩, 크기 조정, 자르기 등과 같이 매우 복잡하다는 것입니다. 이는 여전히 큰 범주이며 실제로 각 작업에는 더 작은 범주가 많이 있을 수 있습니다. 연산자 범주. 클래스 또는 하위 클래스 전처리. 이 세 가지 작업의 경우 전처리 링크에 수십 가지 유형의 데이터 향상이 있을 수 있으므로 CPU에 대한 계산 부담이 매우 높습니다. 계산의 이 부분을 GPU로 이동할 수 있으면 CPU의 리소스 경쟁이 발생합니다. 크게 줄어들고 전체 처리량이 크게 향상됩니다.

드디어 시나 웨이보에 공개된 영상 처리 사례가 있습니다.

처리량 30배 증가: CV 파이프라인이 전체 스택 병렬화로 이동

비디오 처리 프로세스의 경우 전통적인 방법은 먼저 CPU 환경에서 비디오 프레임을 디코딩하고 원본 바이트 스트림을 이미지 데이터로 디코딩한 다음 다음과 같은 몇 가지 일반적인 작업을 수행하는 것입니다. 크기 조정, 자르기 등을 한 다음 특정 모델 계산을 위해 데이터를 GPU에 업로드합니다.

처리량 30배 증가: CV 파이프라인이 전체 스택 병렬화로 이동

CV-CUDA의 처리 방식은 CPU에서 디코딩하여 메모리에 배치된 바이트 스트림을 GPU에 업로드하고 전처리도 GPU에 위치하므로 모델 계산과 무관하며 비디오 메모리와 메모리 간의 복사 작업이 필요하지 않습니다.

처리량 30배 증가: CV 파이프라인이 전체 스택 병렬화로 이동

그림은 OpenCV(홀수)와 CV-CUDA(짝수)의 처리 시간을 나타내며, 파란색은 모델의 소모 시간, 주황색은 디코딩 소모를 나타냅니다. 시간, 녹색은 전처리에 소요되는 시간을 의미합니다.

OpenCV는 CPU 디코딩과 GPU 디코딩의 두 가지 모드로 나눌 수 있습니다.

CPU 디코딩 OpenCV의 경우 OpenCV의 디코딩 및 전처리가 CV-CUDA보다 훨씬 더 많은 시간이 소요되는 것을 볼 수 있습니다.

처리량 30배 증가: CV 파이프라인이 전체 스택 병렬화로 이동

GPU 디코딩을 사용하는 OpenCV를 보면 OpenCV와 CV-CUDA가 모델 및 디코딩 부분에서 시간 소모 측면에서 가깝지만 전처리에서는 여전히 큰 격차가 있음을 알 수 있습니다. .

처리량 30배 증가: CV 파이프라인이 전체 스택 병렬화로 이동

전체 파이프라인 비교 측면에서 CV-CUDA도 분명한 장점이 있습니다. 한편으로는 CV-CUDA가 CPU 리소스를 절약합니다. 즉, GPU 활용도가 최대화되면 CV가 발생합니다. -CUDA CUDA는 동시에 OpenCV CPU 구성의 10%만 필요하며, CV-CUDA는 전체 파이프라인에서 GPU 리소스도 절약합니다. CV-CUDA 효율성은 70% 증가합니다.

6. 미래 전망

​CV-CUDA는 모델 학습 및 추론 단계에서 CPU 리소스 경쟁 문제를 효과적으로 해결하여 모델 학습 및 추론의 효율성을 향상시킬 수 있습니다.

CV-CUDA의 장점을 올바르게 이해하는 방법은 무엇입니까? 기능에 대한 기본적인 전제를 이해하는 것이 필요하며, CPU나 OpenCV에 비해 장점이 절대적이지는 않습니다.

우선 CV-CUDA는 사실 만병통치약은 아닙니다. 예를 들어, 모델 훈련 단계에서 병목 현상이 전처리에 있는 것이 아니라 데이터 읽기 및 모델 추론에 있는 경우입니다. 이때 원래의 전처리 솔루션을 대체하기 위해 CV-CUDA를 사용한다면 사실상 아무 소용이 없습니다.

또한 CV-CUDA를 사용하는 과정에서 CPU와 GPU의 작업 부하를 전처리 로직에 합리적으로 할당하면 때로는 더 나은 성능 결과를 얻을 수 있습니다.

예를 들어, CPU는 여전히 이미지를 디코딩하고 크기를 조정할 수 있으며, 크기 조정 후 처리를 위해 GPU에 넣을 수 있습니다.

디코딩과 크기 조정을 왜 CPU에 두나요? 우선, 영상 디코딩의 경우 GPU의 하드 디코딩 유닛이 실제로 제한되어 있습니다. 둘째, 크기 조정의 경우 일반적으로 크기 조정은 더 큰 그림을 더 작은 그림으로 변환합니다.

크기를 조정하기 전에 데이터를 GPU에 복사하면 메모리 데이터 전송 대역폭을 많이 차지할 수 있습니다.

물론 CPU와 GPU 사이에 작업 부하를 어떻게 할당할지는 여전히 실제 상황에 따라 판단해야 합니다.

가장 중요한 원칙은 CP​U와 GPU 간에 계산을 번갈아 수행하지 않는 것입니다. 기기 간에 데이터를 전송하는 데 오버헤드가 있기 때문입니다. 교체가 너무 빈번하면 계산 자체로 얻는 이점이 평탄화되어 성능이 향상되는 대신 저하될 수 있습니다.

2022년 12월 CV-CUDA는 일반적으로 사용되는 Flip, Rotate, Perspective, Resize 등과 같은 20개 이상의 연산자가 포함된 알파 버전을 출시했습니다.

현재 OpenCV에는 더 많은 연산자가 있으며 수천 개의 연산자가 있습니다. CV-CUDA는 현재 더 일반적으로 사용되는 연산자만 가속화하며 향후 새로운 연산자가 추가될 예정입니다.

CV-CUDA도 올해 3월 베타 버전을 출시할 예정이다. 베타 버전에는 50개 이상의 사업자에 20개 이상의 사업자가 추가될 예정이다. 베타 버전에는 ConvexHull, FindContours 등과 같이 매우 일반적으로 사용되는 연산자가 포함됩니다.

처리량 30배 증가: CV 파이프라인이 전체 스택 병렬화로 이동

Seven, Epilogue

CV-CUDA의 디자인을 되돌아보면 그 뒤에는 그다지 복잡한 원리가 없다는 것을 알 수 있습니다. 한눈에 알 수 있습니다.

복잡성 측면에서 보면 이것이 CV-CUDA의 장점이라고 할 수 있습니다. "소프트웨어 디자인 철학"은 소프트웨어 복잡성을 판단하는 원칙을 언급합니다. 즉, 소프트웨어 시스템이 이해하고 수정하기 어렵다면 매우 복잡하고, 이해하고 수정하기 쉽다면 매우 간단합니다.

CV-CUDA의 효율성은 GPU에 대한 모델 계산 단계의 적응성으로 이해될 수 있으며, 이는 GPU에 대한 전처리 및 후처리 단계의 적응성을 촉진합니다. 그리고 이러한 추세는 실제로 이제 막 시작되었습니다.

위 내용은 처리량 30배 증가: CV 파이프라인이 전체 스택 병렬화로 이동의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 51cto.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제