> 기술 주변기기 > 일체 포함 > 딥 러닝 CPU 벤치 마크

딥 러닝 CPU 벤치 마크

Jennifer Aniston
풀어 주다: 2025-03-13 11:17:09
원래의
309명이 탐색했습니다.

딥 러닝 GPU 벤치 마크는 이미지 인식에서 자연어 처리에 이르기까지 복잡한 문제를 해결하는 방식에 혁명을 일으켰습니다. 그러나 이러한 모델을 교육하는 동안 종종 고성능 GPU에 의존하는 동안 Edge 장치 또는 제한된 하드웨어가있는 시스템과 같은 자원으로 제한된 환경에 효과적으로 배포하면 고유 한 문제가 발생합니다. 널리 이용 가능하고 비용 효율적인 CPU는 종종 그러한 시나리오에서 추론의 백본 역할을합니다. 그러나 CPU에 배포 된 모델이 정확성을 손상시키지 않고 최적의 성능을 제공하도록하려면 어떻게해야합니까?

이 기사는 대기 시간, CPU 활용 및 메모리 활용의 세 가지 중요한 메트릭에 중점을 둔 CPU에서 딥 러닝 모델 추론의 벤치마킹에 뛰어 들었습니다. 스팸 분류 예제를 사용하여 Pytorch, Tensorflow, Jax 및 Onnx 런타임 핸들 추론 워크로드와 같은 인기있는 프레임 워크가 얼마나 인기있는 프레임 워크가 있는지 탐구합니다. 결국, 성능을 측정하고, 배포를 최적화하고, 자원으로 제한 된 환경에서 CPU 기반 추론에 대한 올바른 도구와 프레임 워크를 선택하는 방법에 대한 명확한 이해를 얻을 수 있습니다.

영향 : 최적의 추론 실행은 상당한 금액을 절약하고 다른 워크로드에 대한 리소스를 확보 할 수 있습니다.

학습 목표

  • AI 모델 교육 및 추론을위한 하드웨어 성능을 평가할 때 딥 러닝 CPU 벤치 마크의 역할을 이해하십시오.
  • Pytorch, Tensorflow, Jax, Onx 런타임 및 OpenVino 런타임을 평가하여 필요에 맞는 최상의 선택을 선택하십시오.
  • Psutil과 같은 마스터 도구 및 정확한 성능 데이터를 수집하고 추론을 최적화하는 시간.
  • 이미지 분류 및 NLP와 같은 다양한 작업에 기술을 적용하여 모델을 준비하고 추론 및 성능을 측정합니다.
  • 리소스를 효율적으로 관리하면서 병목 현상을 식별하고 모델을 최적화하며 성능을 향상시킵니다.

이 기사는 Data Science Blogathon 의 일부로 출판되었습니다 .

목차

  • 런타임 가속도에 대한 추론 최적화
  • 모델 추론 성능 메트릭
  • 가정과 한계
  • 도구 및 프레임 워크
  • 종속성을 설치하십시오
  • 문제 설명 및 입력 사양
  • 모델 아키텍처 및 형식
  • 벤치마킹을위한 추가 네트워크의 예
  • 벤치마킹 워크 플로
  • 벤치마킹 함수 definiton
  • 모델 추론 및 각 프레임 워크에 대한 벤치마킹을 수행합니다
  • 결과와 토론
  • 결론
  • 자주 묻는 질문

런타임 가속도에 대한 추론 최적화

추론 속도는 기계 학습 애플리케이션의 사용자 경험과 운영 효율성에 필수적입니다. 런타임 최적화는 실행을 간소화하여이를 향상시키는 데 중요한 역할을합니다. Onnx 런타임과 같은 하드웨어에 액세스 된 라이브러리를 사용하면 특정 아키텍처에 맞는 최적화를 활용하여 대기 시간을 줄입니다 (추론 당 시간).

또한 ONNX와 같은 가벼운 모델 형식은 오버 헤드를 최소화하여 더 빠른로드 및 실행을 가능하게합니다. 최적화 된 Runtimes는 병렬 처리를 활용하여 사용 가능한 CPU 코어에 걸쳐 계산을 배포하고 메모리 관리를 개선하여 특히 자원이 제한된 시스템에서 더 나은 성능을 보장합니다. 이 접근법은 정확도를 유지하면서 모델을보다 빠르고 효율적으로 만듭니다.

모델 추론 성능 메트릭

모델의 성능을 평가하기 위해 세 가지 주요 메트릭에 중점을 둡니다.

숨어 있음

  • 정의 : 대기 시간은 입력을 수신 한 후 모델이 예측하는 데 걸리는 시간을 나타냅니다. 이것은 종종 입력 데이터를 전송하여 출력 수신으로 취한 시간으로 측정됩니다 (예측).
  • 중요성 : 실시간 또는 거의 실시간 응용 프로그램에서 높은 대기 시간은 지연으로 이어져 응답이 느려질 수 있습니다.
  • 측정 : 대기 시간은 일반적으로 밀리 초 (ms) 또는 초 (들)로 측정됩니다. 더 짧은 대기 시간은 시스템이 즉각적인 의사 결정 또는 조치가 필요한 응용 프로그램에 더 반응적이고 효율적이며 중요하다는 것을 의미합니다.

CPU 활용

  • 정의 : CPU 사용은 추론 작업을 수행하는 동안 소비되는 CPU 처리 능력의 비율입니다. 모델 추론 중에 시스템의 계산 리소스가 얼마나 많이 사용되고 있는지 알려줍니다.
  • 중요 : 높은 CPU 사용은 기계가 다른 작업을 동시에 처리하는 데 어려움을 겪어 병목 현상을 초래할 수 있음을 의미합니다. CPU 리소스를 효율적으로 사용하면 모델 추론이 시스템 리소스를 독점하지 않도록합니다.
  • 측정 값 : 일반적으로 이용 가능한 총 CPU 리소스의 백분율 (%)으로 측정됩니다. 동일한 워크로드에 대한 활용도가 낮 으면 일반적으로 CPU 리소스를보다 효과적으로 활용하여보다 최적화 된 모델을 나타냅니다.

메모리 활용

  • 정의 : 메모리 활용은 추론 프로세스 동안 모델에서 사용하는 RAM의 양을 나타냅니다. 모델의 매개 변수, 중간 계산 및 입력 데이터에 의해 메모리 소비를 추적합니다.
  • 중요성 : 메모리 사용을 최적화하는 것은 메모리가 제한된 상태에서 모델을 에지 장치 또는 시스템에 배치 할 때 특히 중요합니다. 메모리 소비가 높으면 메모리 오버 플로, 느린 처리 ​​또는 시스템 충돌로 이어질 수 있습니다.
  • 측정 : 메모리 활용은 메가 바이트 (MB) 또는 기가 바이트 (GB)로 측정됩니다. 다른 추론 단계에서 메모리 소비를 추적하면 메모리 비 효율성 또는 메모리 누출을 식별하는 데 도움이 될 수 있습니다.

가정과 한계

이 벤치마킹 연구를 집중하고 실용적으로 유지하기 위해 우리는 다음과 같은 가정을 만들고 몇 가지 경계를 설정했습니다.

  • 하드웨어 제약 조건 : 테스트는 CPU 코어가 제한된 단일 시스템에서 실행되도록 설계되었습니다. 최신 하드웨어는 병렬 워크로드를 처리 할 수 ​​있지만이 설정은 Edge 장치 또는 소규모 배포에서 종종 보이는 제약 조건을 반영합니다.
  • 다중 시스템 병렬화 없음 : 분산 컴퓨팅 설정 또는 클러스터 기반 솔루션을 통합하지 않았습니다. 벤치 마크는 CPU 코어와 메모리가 제한된 단일 노드 환경에 적합한 성능 독립 조건을 반영합니다.
  • 범위 : 주요 초점은 CPU 추론 성능에만 초점을 맞 춥니 다. GPU 기반 추론은 리소스 집약적 인 작업을위한 훌륭한 옵션이지만,이 벤치마킹은 비용에 민감하거나 휴대용 애플리케이션에서 더 일반적 인 CPU 전용 설정에 대한 통찰력을 제공하는 것을 목표로합니다.

이러한 가정은 벤치 마크가 자원 제한 하드웨어와 협력하는 개발자 및 팀과 관련이 있거나 분산 시스템의 복잡성이 추가되지 않으면 서 예측 가능한 성능이 필요한 사람과 관련이 있습니다.

도구 및 프레임 워크

우리는 CPU의 딥 러닝 모델 추론을 벤치마킹하고 최적화하는 데 사용되는 필수 도구와 프레임 워크를 살펴보고, 자원으로 제한된 환경에서 효율적인 실행을위한 기능에 대한 통찰력을 제공합니다.

프로파일 링 도구

  • Python Time (시간 라이브러리) : Python의 시간 라이브러리는 코드 블록의 실행 시간을 측정하기위한 가벼운 도구입니다. 시작 및 종료 타임 스탬프를 기록함으로써 모델 추론 또는 데이터 처리와 같은 작업 시간을 계산하는 데 도움이됩니다.
  • PSUTIL (CPU, 메모리 프로파일 링) : PSUTI L은 Sustem 모니터링 및 프로파일 링을위한 파이썬 라이브러리입니다. CPU 사용, 메모리 소비, 디스크 I/O 등에 대한 실시간 데이터를 제공하므로 모델 교육 또는 추론 중에 사용법을 분석하는 데 이상적입니다.

추론을위한 프레임 워크

  • Tensorflow : 훈련 및 추론 작업 모두에 널리 사용되는 딥 러닝을위한 강력한 프레임 워크. 다양한 모델 및 배포 전략에 대한 강력한 지원을 제공합니다.
  • Pytorch : 사용 편의성과 동적 계산 그래프로 유명한 Pytorch는 연구 및 생산 배포에 인기있는 선택입니다.
  • ONNX 런타임 : ONXX (Open Neural Network Exchange) 모델을 실행하기위한 오픈 소스 크로스 플랫폼 엔진으로 다양한 하드웨어 및 프레임 워크에서 효율적인 추론을 제공합니다.
  • JAX : 고성능 수치 컴퓨팅 및 기계 학습에 중점을 둔 기능 프레임 워크는 자동 차별화 및 GPU/TPU 가속도를 제공합니다.
  • OpenVino : Intel 하드웨어에 최적화 된 OpenVino는 Intel CPU, GPU 및 VPU의 모델 최적화 및 배포 도구를 제공합니다.

하드웨어 사양 및 환경

우리는 아래 구성과 함께 Github Codespace (가상 머신)를 사용하고 있습니다.

  • 가상 머신 사양 : 2 코어, 8GB RAM 및 32GB 스토리지
  • 파이썬 버전 : 3.12.1

종속성을 설치하십시오

사용 된 패키지의 버전은 다음과 같습니다.이 기본은 5 개의 딥 러닝 추론 라이브러리가 포함됩니다 : Tensorflow, Pytorch, Onnx Runtime, Jax 및 OpenVino :

 ! pip install numpy == 1.26.4
! PIP 설치 토치 == 2.2.2
! PIP 설치 TensorFlow == 2.16.2
! pip install onnx == 1.17.0
! PIP 설치 ONNXRUNTIME == 1.17.0! PIP 설치 jax == 0.4.30
! PIP 설치 jaxlib == 0.4.30
! PIP 설치 OpenVino == 2024.6.0
! PIP 설치 MATPLOTLIB == 3.9.3
! PIP 설치 MATPLOTLIB : 3.4.3
! PIP 설치 베개 : 8.3.2
! PIP 설치 PSUTIL : 5.8.0
로그인 후 복사

문제 설명 및 입력 사양

모델 추론은 네트워크 가중치와 입력 데이터간에 몇 가지 행렬 작업을 수행하는 것으로 구성되므로 모델 교육 또는 데이터 세트가 필요하지 않습니다. 이 예제 벤치마킹 프로세스에서 표준 분류 사용 사례를 시뮬레이션했습니다. 이것은 스팸 탐지 및 대출 응용 프로그램 결정 (승인 또는 거부)과 같은 일반적인 이진 분류 작업을 시뮬레이션합니다. 이러한 문제의 이진 특성은 다양한 프레임 워크에서 모델 성능을 비교하는 데 이상적입니다. 이 설정은 실제 시스템을 반영하지만 대규모 데이터 세트 나 미리 훈련 된 모델없이 프레임 워크 전반에 걸쳐 추론 성능에 집중할 수 있습니다.

문제 진술

샘플 작업에는 일련의 입력 기능을 기반으로 주어진 샘플이 스팸인지 아닌지 (대출 승인 또는 거부)를 예측하는 것이 포함됩니다. 이 바이너리 분류 문제는 계산적으로 효율적이며, 다중 클래스 분류 작업의 복잡성없이 추론 성능에 대한 집중된 분석을 가능하게합니다.

입력 사양

실제 이메일 데이터를 시뮬레이션하기 위해 무작위로 입력을 생성했습니다. 이러한 임베딩은 스팸 필터로 처리 될 수 있지만 외부 데이터 세트가 필요하지 않은 데이터 유형을 모방합니다. 이 시뮬레이션 된 입력 데이터를 사용하면 특정 외부 데이터 세트에 의존하지 않고 벤치마킹을 허용하므로 모델 추론 시간, 메모리 사용 및 CPU 성능을 테스트하는 데 이상적입니다. 또는 이미지 분류, NLP 작업 또는 기타 딥 러닝 작업을 사용 하여이 벤치마킹 프로세스를 수행 할 수 있습니다.

모델 아키텍처 및 형식

모델 선택은 프로파일 링 프로세스에서 얻은 추론 성능과 통찰력에 직접적인 영향을 미치기 때문에 벤치마킹의 중요한 단계입니다. 이전 섹션에서 언급했듯이,이 벤치마킹 연구의 경우, 우리는 표준 분류 사용 사례를 선택했는데, 여기에는 주어진 이메일이 스팸인지 여부를 식별하는 것이 포함됩니다. 이 작업은 계산적으로 효율적이지만 프레임 워크 전체에서 비교하기위한 의미있는 결과를 제공하는 간단한 2 등 분류 문제입니다.

벤치마킹을위한 모델 아키텍처

분류 작업의 모델은 이진 분류 (스팸 대 스팸)를 위해 설계된 피드 포워드 신경망 (FNN)입니다. 다음 레이어로 구성됩니다.

  • 입력 레이어 : 크기 200의 벡터를 허용합니다 (포함 기능). 우리는 Pytorch의 예를 제공했으며 다른 프레임 워크는 정확히 동일한 네트워크 구성을 따릅니다.
 self.fc1 = torch.nn.linear (200,128)
로그인 후 복사
  • 숨겨진 층 : 네트워크에는 5 개의 숨겨진 레이어가 있으며 각 연속 레이어는 이전 단위보다 적은 층을 포함합니다.
 self.fc2 = Torch.nn.linear (128, 64)
self.fc3 = torch.nn.linear (64, 32)
self.fc4 = torch.nn.linear (32, 16)
self.fc5 = Torch.nn.linear (16, 8)
self.fc6 = Torch.nn.linear (8, 1)
로그인 후 복사
  • 출력 층 : 확률을 출력하는 시그 모이 드 활성화 기능을 갖는 단일 뉴런 (스팸의 경우 0, 스팸의 경우 1). 우리는 이진 분류를위한 최종 출력으로 Sigmoid 층을 활용했습니다.
 self.sigmoid = torch.nn.sigmoid ()
로그인 후 복사

이 모델은 간단하지만 분류 작업에 효과적입니다.

사용 사례에서 벤치마킹에 사용되는 모델 아키텍처 다이어그램은 다음과 같습니다.

딥 러닝 CPU 벤치 마크

벤치마킹을위한 추가 네트워크의 예

  • 이미지 분류 : RESNET-50 (중간 복잡성) 및 Mobilenet (Lightweight)과 같은 모델을 이미지 인식과 관련된 작업을 위해 벤치 마크 제품군에 추가 할 수 있습니다. RESNET-50은 계산 복잡성과 정확도 사이의 균형을 제공하는 반면 Mobilenet은 저주적 환경에 최적화됩니다.
  • NLP 작업 : Distilbert : 자연어 이해 작업에 적합한 BERT 모델의 작고 빠른 변형.

모델 형식

  • 기본 형식 : 각 프레임 워크는 Pytorch의 .pt 및 텐서 플로우의 .h5 와 같은 기본 모델 형식을 지원합니다.
  • Unified Format (ONNX) : 프레임 워크 간 호환성을 보장하기 위해 Pytorch 모델을 ONNX 형식 (Model.onnx)으로 내보냈습니다. Onnx (Open Neural Network Exchange)는 브리지 역할을하여 Pytorch, Tensorflow, Jax 또는 OpenVino와 같은 다른 프레임 워크에서 모델을 사용할 수있게합니다. 이는 상호 운용성이 중요한 멀티 프레임 워크 테스트 및 실제 배포 시나리오에 특히 유용합니다.
  • 이 형식은 해당 프레임 워크에 최적화되어 해당 생태계 내에서 쉽게 저장,로드 및 배포 할 수 있습니다.

벤치마킹 워크 플로

이 워크 플로우는 분류 작업을 사용하여 다중 딥 러닝 프레임 워크 (Tensorflow, Pytorch, Onx, Jax 및 OpenVino)의 추론 성능을 비교하는 것을 목표로합니다. 작업에는 무작위로 생성 된 입력 데이터를 사용하고 각 프레임 워크를 벤치마킹하여 예측에 걸리는 평균 시간을 측정하는 것이 포함됩니다.

  • 파이썬 패키지를 가져옵니다
  • GPU 사용을 비활성화하고 텐서 플로우 로깅을 억제합니다
  • 입력 데이터 준비
  • 각 프레임 워크에 대한 모델 구현
  • 벤치마킹 기능 정의
  • 각 프레임 워크에 대한 모델 추론 및 벤치마킹 실행
  • 벤치마킹 결과의 시각화 및 내보내기

필요한 파이썬 패키지를 가져 오십시오

딥 러닝 모델 벤치마킹을 시작하려면 먼저 원활한 통합 및 성능 평가를 가능하게하는 필수 파이썬 패키지를 가져와야합니다.

 수입 시간
OS 가져 오기
Numpy를 NP로 가져옵니다
토치 수입
텐서 플로우를 tf로 가져옵니다
Tensorflow.keras 가져 오기 입력
onnxruntime을 ort로 가져옵니다
matplotlib.pyplot을 plt로 가져옵니다
PIL 가져 오기 이미지에서
PSUTIL을 수입하십시오
Jax를 가져옵니다
jax.numpy를 JNP로 가져옵니다
OpenVino.Runtime 가져 오기 코어에서
CSV 가져 오기
로그인 후 복사

GPU 사용을 비활성화하고 텐서 플로우 로깅을 억제합니다

 os.environ [ "cuda_visible_devices"] = "-1" # gpu 비활성화
os.environ [ "TF_CPP_MIN_LOG_LEVEL"] = "3"#SUPPRESS TENSORFLOW LOG
로그인 후 복사

입력 데이터 준비

이 단계에서는 스팸 분류를위한 입력 데이터를 무작위로 생성합니다.

  • 샘플의 차원 (200- 다임 스니 이온 특징)
  • 클래스 수 (2 : 스팸이든 스팸)

Numpy를 사용하여 Randome 데이터를 생성하여 모델의 입력 기능 역할을합니다.

 #Generate 더미 데이터
input_data = np.random.rand (1000, 200) .astype (np.float32)
로그인 후 복사

모델 정의

이 단계에서는 Netwrok 아키텍처를 정의하거나 각 딥 러닝 프레임 워크 (Tensorflow, Pytorch, Onnx, Jax 및 Openvino)에서 모델을 설정합니다. 각 프레임 워크에는 모델을로드하고 추론을 위해 설정하기위한 특정 방법이 필요합니다.

  • Pytorch 모델 : Pytorch에서는 5 개의 완전히 연결된 층으로 간단한 신경 신경 네트워크 아키텍처를 정의합니다.
  • 텐서 플로우 모델 : 텐서 플로우 모델은 Keras API를 사용하여 정의되며 분류 작업을위한 간단한 피드 포워드 신경망으로 구성됩니다.
  • JAX 모델 : 모델은 매개 변수로 초기화되며 예측 함수는 효율적인 실행을 위해 JAX의 JIT (JUST-IN-TIME) 컴파일을 사용하여 컴파일됩니다.
  • ONNX MODEL : ONNX의 경우 PyTorch에서 모델을 내 보냅니다. ONNX 형식으로 내보내면 OnnxRuntime을 사용하여 모델을로드합니다. 추론 API. 이를 통해 다른 하드웨어 사양에서 모델에서 추론을 실행할 수 있습니다.
  • OpenVino 모델 : OpenVino는 최적화 및 배포 모델, 특히 다른 프레임 워크 (Pytorch 또는 Tensorflow)를 사용하여 훈련 된 모델을 실행하는 데 사용됩니다. ONNX 모델을로드하여 OpenVino의 런타임으로 컴파일합니다.

Pytorch

 클래스 pytorchmodel (torch.nn.module) :
    def __init __ (self) :
        Super (pytorchmodel, self) .__ init __ ()
        self.fc1 = torch.nn.linear (200, 128)
        self.fc2 = Torch.nn.linear (128, 64)
        self.fc3 = torch.nn.linear (64, 32)
        self.fc4 = torch.nn.linear (32, 16)
        self.fc5 = Torch.nn.linear (16, 8)
        self.fc6 = Torch.nn.linear (8, 1)
        self.sigmoid = torch.nn.sigmoid ()

    def forward (self, x) :
        x = 토치. relu (self.fc1 (x))
        x = 토치. relu (self.fc2 (x))
        x = 토치. relu (self.fc3 (x))
        x = 토치. relu (self.fc4 (x))
        x = 토치. relu (self.fc5 (x))
        x = self.sigmoid (self.fc6 (x))
        반환 x
        
     # Pytorch 모델을 만듭니다
    pytorch_model = pytorchmodel ()
로그인 후 복사

텐서 플로

 Tensorflow_model = tf.keras.sequential ([[
    입력 (shape = (200,)),
    tf.keras.layers.dense (128, Activation = 'Relu'),
    tf.keras.layers.dense (64, Activation = 'Relu'),
    tf.keras.layers.dense (32, Activation = 'Relu'),
    tf.keras.layers.dense (16, Activation = 'Relu'),
    tf.keras.layers.dense (8, activation = 'Relu'),
    tf.keras.layers.dense (1, activation = 'sigmoid')
])))
Tensorflow_model.compile ()
로그인 후 복사

Jax

 def jax_model (x) :
    x = jax.nn.relu (jnp.dot (x, jnp.ones ((200, 128)))))
    x = jax.nn.relu (jnp.dot (x, jnp.ones ((128, 64)))))
    x = jax.nn.relu (jnp.dot (x, jnp.ones ((64, 32)))))
    x = jax.nn.relu (jnp.dot (x, jnp.ones ((32, 16)))))
    x = jax.nn.relu (jnp.dot (x, jnp.ones ((16, 8)))))
    x = jax.nn.sigmoid (jnp.dot (x, jnp.ones ((8, 1))))
    반환 x
로그인 후 복사

onx

 # pytorch 모델을 Onx로 변환합니다
Dummy_Input = Torch.randn (1, 200)
onnx_model_path = "model.onnx"
Torch.onnx.export (
    pytorch_model, 
    dummy_input, 
    onnx_model_path, 
    Export_params = true, 
    opset_version = 11, 
    input_names = [ 'input'], 
    output_names = [ 'output'], 
    Dynamic_axes = { 'input': {0 : 'batch_size'}, 'output': {0 : 'batch_size'}}
))

onnx_session = ort.inferencessession (onnx_model_path)
로그인 후 복사

OpenVino

 # OpenVino 모델 정의
core = core ()
OpenVino_Model = Core.Read_Model (Model = "Model.onnx")
compiled_model = core.compile_model (OpenVino_Model, device_name = "CPU")
로그인 후 복사

벤치마킹 함수 definiton

이 기능은 Predict_Function, Input_Data 및 NUM_RUNS의 세 가지 인수를 통해 다른 프레임 워크에서 벤치마킹 테스트를 실행합니다. 기본적으로 1,000 회 실행하지만 요구 사항에 따라 증가 할 수 있습니다.

 DEF Benchmark_Model (predict_function, input_data, num_runs = 1000) :
    start_time = time.time ()
    process = psutil.process (os.getpid ())
    cpu_usage = []
    memory_usage = []
    _ in range (num_runs) :
        predict_function (input_data)
        cpu_usage.append (process.cpu_percent ())
        memory_usage.append (process.memory_info (). rss)
    end_time = time.time ()
    avg_latency = (end_time -start_time) / num_runs
    avg_cpu = np.mean (cpu_usage)
    avg_memory = np.mean (memory_usage) / (1024 * 1024) # MB로 변환
    avg_latency, avg_cpu, avg_memory를 반환하십시오
로그인 후 복사

모델 추론 및 각 프레임 워크에 대한 벤치마킹을 수행합니다

이제 모델을로드 했으므로 이제 각 프레임 워크의 성능을 벤치마킹해야합니다. 벤치마킹 프로세스는 생성 된 입력 데이터에 대한 추론을 수행합니다.

Pytorch

 # 벤치 마크 Pytorch 모델
def pytorch_predict (input_data) :
    pytorch_model (Torch.tensor (input_data))

pytorch_latency, pytorch_cpu, pytorch_memory = benchmark_model (lambda x : pytorch_predict (x), input_data)
로그인 후 복사

텐서 플로

 # 벤치 마크 TensorFlow 모델
def tensorflow_predict (input_data) :
    TensorFlow_Model (input_data)

Tensorflow_latency, tensorflow_cpu, tensorflow_memory = benchmark_model (Lambda x : Tensorflow_predict (x), input_data)
로그인 후 복사

Jax

 # 벤치 마크 JAX 모델
def jax_predict (input_data) :
    jax_model (jnp.array (input_data))

jax_latency, jax_cpu, jax_memory = benchmark_model (lambda x : jax_predict (x), input_data)
로그인 후 복사

onx

 # 벤치 마크 onx 모델
def onnx_predict (input_data) :
    # 배치의 프로세스 입력
    IN 범위 (input_data.shape [0])의 경우 :
        Single_Input = input_data [i : i 1] # 단일 입력 추출
        onnx_session.run (none, {onnx_session.get_inputs () [0] .name : single_input})

onnx_latency, onnx_cpu, onnx_memory = benchmark_model (lambda x : onnx_predict (x), input_data)
로그인 후 복사

OpenVino

 # 벤치 마크 OpenVino 모델
def OpenVino_Predict (input_data) :
    # 배치의 프로세스 입력
    IN 범위 (input_data.shape [0])의 경우 :
        Single_Input = input_data [i : i 1] # 단일 입력 추출
        compiled_model.infer_new_request ({0 : single_input})

OpenVino_Latency, OpenVino_CPU, OpenVino_Memory = Benchmark_Model (Lambda X : OpenVino_predict (X), Input_Data)
로그인 후 복사

결과와 토론

여기에서는 이전에 언급 된 딥 러닝 프레임 워크의 성능 벤치마킹 결과에 대해 논의합니다. 대기 시간, CPU 사용 및 메모리 사용량을 비교합니다. 빠른 비교를 위해 테이블 ​​데이터와 플롯을 포함 시켰습니다.

대기 시간 비교

뼈대 대기 시간 (MS) 상대 대기 시간 (pytorch vs. pytorch)
Pytorch 1.26 1.0 (기준선)
텐서 플로 6.61 ~ 5.25 ×
Jax 3.15 ~ 2.50 ×
onx 14.75 ~ 11.72 ×
OpenVino 144.84 ~ 115 ×

통찰력 :

  • Pytorch는 ~ 1.26ms 대기 시간을 가진 가장 빠른 프레임 워크로 이어집니다.
  • Tensorflow는 ~ 6.61ms 대기 시간, 약 5.25 x Pytorch의 시간을 가지고 있습니다.
  • Jax는 절대 대기 시간에 Pytorch와 Tensorflow 사이에 있습니다.
  • Onnx는 ~ 14.75ms 에서 상대적으로 느립니다.
  • OpenVino는이 실험에서 가장 느리게 ~ 145ms (Pytorch보다 115 x 느린)입니다.

CPU 사용

뼈대 CPU 사용 (%) 상대 CPU 사용량 1
Pytorch 99.79 ~ 1.00
텐서 플로 112.26 ~ 1.13
Jax 130.03 ~ 1.31
onx 99.58 ~ 1.00
OpenVino 99.32 1.00 (기준선)

통찰력 :

  • JAX는 OpenVino보다 ~ 31 % 높은 CPU ( ~ 130 % )를 사용합니다.
  • 텐서 플로우는 ~ 112 % , Pytorch/Onnx/OpenVino보다 많지만 여전히 JAX보다 낮습니다.
  • Pytorch, Onx 및 OpenVino는 모두 ~ 99-100% CPU 사용량을 가지고 있습니다.

메모리 사용

뼈대 메모리 (MB) 상대 메모리 사용 (Pytorch vs. Pytorch)
Pytorch ~ 959.69 1.0 (기준선)
텐서 플로 ~ 969.72 ~ 1.01 ×
Jax ~ 1033.63 ~ 1.08 ×
onx ~ 1033.82 ~ 1.08 ×
OpenVino ~ 1040.80 ~ 1.08–1.09 ×

통찰력 :

  • Pytorch 와 Tensorflow
  • Jax, Onx 및 Openvino는 약 1,030–1,040MB 의 메모리를 사용하며 Pytorch보다 약 8-9% 더 많습니다.

딥 러닝 프레임 워크의 성능을 비교하는 플롯은 다음과 같습니다.

딥 러닝 CPU 벤치 마크

결론

이 기사에서는 스팸 분류 작업을 참조로 사용하는 저명한 딥 러닝 프레임 워크 (Tensorflow, Pytorch, Onx, Jax 및 OpenVino)의 추론 성능을 평가하기위한 포괄적 인 벤치마킹 워크 플로우를 제시했습니다. 대기 시간, CPU 사용 및 메모리 소비와 같은 주요 메트릭을 분석함으로써 결과는 프레임 워크 간의 상충 관계와 다양한 배포 시나리오에 대한 적합성을 강조했습니다.

Pytorch는 가장 균형 잡힌 성능을 보여 주면서 낮은 대기 시간과 효율적인 메모리 사용이 뛰어나며 실시간 예측 및 권장 시스템과 같은 대기 시간에 민감한 응용 프로그램에 이상적입니다. Tensorflow는 자원 소비가 약간 높은 중간 지상 솔루션을 제공했습니다. JAX는 높은 계산 처리량을 보여 주었지만 CPU 활용이 증가하는 비용으로 자원으로 제한된 환경의 제한 요소가 될 수 있습니다. 한편, Onx와 OpenVino는 대기 시간이 지연되었으며 OpenVino의 성능은 특히 하드웨어 가속이 없기 때문에 방해가되었습니다.

이러한 결과는 배치 요구와 프레임 워크 선택을 정렬하는 것의 중요성을 강조합니다. 속도, 자원 효율성 또는 특정 하드웨어 최적화에 관계없이 실제 환경에서 효과적인 모델 배포에는 트레이드 오프 이해가 필수적입니다.

주요 테이크 아웃

  • 딥 러닝 CPU 벤치 마크는 CPU 성능에 대한 중요한 통찰력을 제공하여 AI 작업을위한 최적의 하드웨어를 선택하는 데 도움이됩니다.
  • 딥 러닝 CPU 벤치 마크를 활용하면 고성능 CPU를 식별하여 효율적인 모델 교육 및 추론을 보장합니다.
  • 최상의 대기 시간 (1.26ms)을 달성하고 실시간 및 리소스 제한 애플리케이션에 이상적으로 효율적인 메모리 사용을 유지했습니다.
  • CPU 사용량이 약간 높은 균형 대기 시간 (6.61ms). 적당한 성능 저하가 필요한 작업에 적합합니다.
  • 경쟁 대기 시간 (3.15ms)을 제공했지만 과도한 CPU 활용 비용 ( 130% )으로 제한된 설정에서 유틸리티를 제한했습니다.
  • 더 높은 대기 시간 (14.75ms)을 보여 주었지만 크로스 플랫폼 지원을 통해 멀티 프레임 워크 배포에 유연합니다.

자주 묻는 질문

Q1. Pytorch가 실시간 응용 프로그램에 선호되는 이유는 무엇입니까?

A. Pytorch의 동적 계산 그래프 및 효율적인 실행 파이프 라인을 통해 낮은 격렬한 추론 (1.26ms)을 허용하여 권장 시스템 및 실시간 예측과 같은 응용 프로그램에 적합합니다.

Q2. 이 연구에서 OpenVino의 성능에 어떤 영향을 미쳤습니까?

A. OpenVino의 최적화는 인텔 하드웨어 용으로 설계되었습니다. 이러한 가속이 없으면 대기 시간 (144.84ms)과 메모리 사용량 (1040.8MB)은 다른 프레임 워크에 비해 경쟁이 덜했습니다.

Q3. 자원으로 제한된 환경을위한 프레임 워크를 어떻게 선택합니까?

A. CPU 전용 설정의 경우 Pytorch가 가장 효율적입니다. Tensorflow는 중간 정도의 워크로드를위한 강력한 대안입니다. 더 높은 CPU 활용도가 허용되지 않는 한 JAX와 같은 프레임 워크를 피하십시오.

Q4. 하드웨어는 프레임 워크 성능에서 어떤 역할을합니까?

A. 프레임 워크 성능은 하드웨어 호환성에 크게 의존합니다. 예를 들어, OpenVino는 하드웨어 별 최적화를 통해 Intel CPU에서 탁월한 반면 Pytorch 및 Tensorflow는 다양한 설정에서 일관되게 성능을 발휘합니다.

Q5. 벤치마킹 결과가 복잡한 모델이나 작업과 다를 수 있습니까?

A. 예, 이러한 결과는 간단한 이진 분류 작업을 반영합니다. 성능은 RESNET과 같은 복잡한 아키텍처 또는 NLP 또는 다른 작업과 같은 작업에 따라 다를 수 있으며, 이러한 프레임 워크는 특수 최적화를 활용할 수 있습니다.

이 기사에 표시된 미디어는 분석 Vidhya가 소유하지 않으며 저자의 재량에 따라 사용됩니다.

위 내용은 딥 러닝 CPU 벤치 마크의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿