ホームページ > テクノロジー周辺機器 > AI > GMAC と GFLOPS の計算の簡単な分析

GMAC と GFLOPS の計算の簡単な分析

王林
リリース: 2023-05-26 08:59:36
転載
1416 人が閲覧しました

GMAC は「Giga Multiply-Add Operations per Second」の略で、深層学習モデルの計算効率を測定するために使用される指標です。このメトリクスは、1 秒あたり 10 億回の乗算および加算演算というモデルの計算速度を表します。

GMAC と GFLOPS の計算の簡単な分析

積和演算 (MAC) は、行列の乗算、畳み込み、深層学習で一般的に使用されるその他のテンソル演算など、多くの数学的計算の基礎です。各 MAC 演算には、2 つの数値を乗算し、その結果をアキュムレータに加算することが含まれます。

GMAC インジケーターは、次の式を使用して計算できます。

<code>GMAC =(乘法累加运算次数)/(10⁹)</code>
ログイン後にコピー

乗加算演算の数は、通常、ネットワーク アーキテクチャとモデル パラメーターの次元 (重みなど) を分析することによって決定されます。そして偏見。

GMAC メトリクスを使用すると、研究者や実務者は、モデルの選択、ハードウェア要件、効率的かつ効果的な深層学習計算のための最適化戦略について情報に基づいた意思決定を行うことができます。

GMAC と GFLOPS の計算の簡単な分析

#GFLOPS は、コンピューター システムまたは特定の操作のコンピューティング パフォーマンスの尺度であり、1 秒あたり 10 億回の浮動小数点演算を表します。これは、1 秒あたりの浮動小数点演算の数であり、10 億 (ギガ) 単位で表されます。

浮動小数点演算とは、IEEE 754 浮動小数点形式で表現された実数に対して算術計算を実行することを指します。これらの演算には通常、加算、減算、乗算、除算、およびその他の数学演算が含まれます。

GFLOPS は、ハイ パフォーマンス コンピューティング (HPC) やベンチマーク、特に科学シミュレーション、データ分析、深層学習などの大量の計算タスクを必要とする分野でよく使用されます。

GFLOPS の式は次のように計算します。

<code>GFLOPS =(浮点运算次数)/(以秒为单位的运行时间)/ (10⁹)</code>
ログイン後にコピー
GFLOPS は、さまざまなコンピューター システム、プロセッサー、または特定の操作の計算能力の効果的な尺度です。浮動小数点計算を実行するハードウェアまたはアルゴリズムの速度と効率を評価するのに役立ちます。 GFLOPS は理論上のピーク パフォーマンスの尺度であり、メモリ アクセス、並列化、その他のシステム制限などの要素が考慮されていないため、現実のシナリオで達成される実際のパフォーマンスを反映していない可能性があります。

GMAC と GFLOPS の関係

<code>1 GFLOP = 2 GMAC</code>
ログイン後にコピー
これら 2 つの指標を計算したい場合、コードを手動で記述するのはさらに面倒ですが、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 の結果は 10 億単位なので、次を使用して計算した結果とあまり変わりません。上記のクラスライブラリ。最後に、畳み込みの GMAC の計算は少し複雑です。式は ((入力チャネル x 畳み込みカーネルの高さ x 畳み込みカーネルの幅) x 出力チャネル) x 2 です。ここでは単純なコードを示しますが、完全に正しいとは限りません。 ##りー

以上がGMAC と GFLOPS の計算の簡単な分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:51cto.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート