GMAC는 "Giga Multiply-Add Operations per Second"의 약자로 딥 러닝 모델의 계산 효율성을 측정하는 데 사용되는 지표입니다. 이 지표는 초당 10억 개의 곱셈 및 덧셈 작업 측면에서 모델의 계산 속도를 나타냅니다.
MAC(곱셈-누산) 연산은 행렬 곱셈, 컨볼루션 및 딥 러닝에서 일반적으로 사용되는 기타 텐서 연산을 포함한 많은 수학적 계산의 기본 연산입니다. 각 MAC 연산에는 두 숫자를 곱하고 그 결과를 누산기에 추가하는 작업이 포함됩니다.
GMAC 측정항목은 다음 공식을 사용하여 계산할 수 있습니다.
<code>GMAC =(乘法累加运算次数)/(10⁹)</code>
곱셈-덧셈 작업의 수는 일반적으로 네트워크 아키텍처와 가중치 및 편향과 같은 모델 매개변수의 차원을 분석하여 결정됩니다.
GMAC 측정항목을 사용하면 연구원과 실무자는 효율적이고 효과적인 딥 러닝 계산을 위한 모델 선택, 하드웨어 요구 사항 및 최적화 전략에 대해 정보에 입각한 결정을 내릴 수 있습니다.
GFLOPS는 컴퓨터 시스템 또는 특정 작업의 컴퓨팅 성능을 측정한 것으로, 초당 10억 개의 부동 소수점 연산을 나타냅니다. 초당 부동 소수점 연산 수로, 수십억(기가) 단위로 표시됩니다.
부동 소수점 산술은 IEEE 754 부동 소수점 형식으로 표현된 실수에 대해 산술 계산을 수행하는 것을 의미합니다. 이러한 연산에는 일반적으로 덧셈, 뺄셈, 곱셈, 나눗셈 및 기타 수학 연산이 포함됩니다.
GFLOPS는 고성능 컴퓨팅(HPC) 및 벤치마킹에 일반적으로 사용되며, 특히 과학 시뮬레이션, 데이터 분석, 딥 러닝 등 무거운 컴퓨팅 작업이 필요한 영역에서 사용됩니다.
GFLOPS 공식을 다음과 같이 계산하세요.
<code>GFLOPS =(浮点运算次数)/(以秒为单位的运行时间)/ (10⁹)</code>
GFLOPS는 다양한 컴퓨터 시스템, 프로세서 또는 특정 작업의 컴퓨팅 성능을 효과적으로 측정하는 것입니다. 부동 소수점 계산을 수행하는 하드웨어 또는 알고리즘의 속도와 효율성을 평가하는 데 도움이 됩니다. GFLOPS는 이론적 최고 성능의 척도이며 메모리 액세스, 병렬화 및 기타 시스템 제한과 같은 요소를 고려하지 않기 때문에 실제 시나리오에서 달성된 실제 성능을 반영하지 않을 수 있습니다.
GMAC와 GFLOPS의 관계
<code>1 GFLOP = 2 GMAC</code>
이 두 지표를 계산하려면 코드를 수동으로 작성하는 것이 더 번거롭지만 Python에는 이미 사용할 수 있는 기성 라이브러리가 있습니다.
ptflops 라이브러리는 다음을 수행할 수 있습니다. GMAC 및 GFLOP 계산
<code>pip install ptflops</code>
사용 방법도 매우 간단합니다.
<code>import torchvision.models as models import torch from ptflops import get_model_complexity_info import re #Model thats already available net = models.densenet161() macs, params = get_model_complexity_info(net, (3, 224, 224), as_strings=True, print_per_layer_stat=True, verbose=True) # Extract the numerical value flops = eval(re.findall(r'([\d.]+)', macs)[0])*2 # Extract the unit flops_unit = re.findall(r'([A-Za-z]+)', macs)[0][0] print('Computational complexity: {:</code>
결과는 다음과 같습니다.
<code>Computational complexity: 7.82 GMac Computational complexity: 15.64 GFlops Number of parameters: 28.68 M</code>
모델을 사용자 정의하여 결과가 올바른지 확인할 수 있습니다.
<code>import os import torch from torch import nn class NeuralNetwork(nn.Module): def __init__(self): super().__init__() self.flatten = nn.Flatten() self.linear_relu_stack = nn.Sequential( nn.Linear(28*28, 512), nn.ReLU(), nn.Linear(512, 512), nn.ReLU(), nn.Linear(512, 10),) def forward(self, x): x = self.flatten(x) logits = self.linear_relu_stack(x) return logits custom_net = NeuralNetwork() macs, params = get_model_complexity_info(custom_net, (28, 28), as_strings=True, print_per_layer_stat=True, verbose=True) # Extract the numerical value flops = eval(re.findall(r'([\d.]+)', macs)[0])*2 # Extract the unit flops_unit = re.findall(r'([A-Za-z]+)', macs)[0][0] print('Computational complexity: {:</code>
결과는 다음과 같습니다.
<code>Computational complexity: 670.73 KMac Computational complexity: 1341.46 KFlops Number of parameters: 669.71 k</code>
시연의 편의를 위해 완전 연결 레이어 코드만 작성하여 GMAC를 수동으로 계산합니다. 모델 가중치 매개변수를 반복하고 곱셈과 덧셈 연산 횟수의 형태를 계산하는 것은 GMAC 계산의 핵심인 가중치 매개변수에 따라 달라집니다. GMAC에 필요한 완전 연결 레이어 가중치 계산 공식은 2 x (입력 차원 x 출력 차원)입니다. 전체 GMAC 값은 모델의 구조에 따른 과정인 각 선형 레이어의 가중치 매개변수의 모양을 곱하고 누적하여 얻습니다.
<code>import torch import torch.nn as nn def compute_gmac(model): gmac_count = 0 for param in model.parameters(): shape = param.shape if len(shape) == 2:# 全连接层的权重 gmac_count += shape[0] * shape[1] * 2 gmac_count = gmac_count / 1e9# 转换为十亿为单位 return gmac_count</code>
위의 모델에 따라 GMAC를 계산한 결과는 다음과 같습니다.
<code>0.66972288</code>
GMAC의 결과는 수십억 단위이므로 위의 클래스 라이브러리를 사용하여 계산한 결과와 크게 다르지 않습니다. 마지막으로 컨볼루션의 GMAC를 계산하는 공식은 ((입력 채널 x 컨볼루션 커널 높이 x 컨볼루션 커널 너비) x 출력 채널) x 2입니다. 다음은 완전히 정확하지 않을 수 있는 간단한 코드입니다. 으아악
위 내용은 GMAC 및 GFLOPS 계산에 대한 간략한 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!