FLOPsとMACsを使用して、Deep Learningモデルの計算効率を計算する

Calculate the computational efficiency of Deep Learning models using FLOPs and MACs.

FLOPS と MACs とは何ですか?

FLOPS(浮動小数点演算数)とMACs(乗算-加算演算数)は、ディープラーニングモデルの計算複雑性を計算するために一般的に使用される指標です。これらは、与えられた計算を実行するために必要な算術演算の数を理解するための迅速かつ簡単な方法です。例えば、MobileNet や DenseNet などの異なるモデルアーキテクチャをエッジデバイスで使用する場合、MACs や FLOPs を使用してモデルのパフォーマンスを推定します。また、「推定」という言葉を使用する理由は、両方の指標が実行時間パフォーマンスモデルの実際のキャプチャではなく、概算であるためです。しかし、それらはエッジコンピューティングで非常に有用な洞察を提供できるため、エネルギー消費量や計算要件に関する情報を提供できます。

FLOPs は、浮動小数点演算の数を特に指します。これには、浮動小数点数の加算、減算、乗算、および除算演算が含まれます。これらの演算は、行列乗算、活性化、および勾配計算など、機械学習に関わる多くの数学計算で普及しています。FLOPs は、モデルまたは特定の操作内の計算コストまたは複雑性を測定するためにしばしば使用されます。これは、一般的に計算効率を測定する文脈で使用される必要がある、必要な総算術演算の推定を提供するために役立ちます。

一方、MACs は、2つの数値を乗算して結果を加算する乗算-加算演算の数のみをカウントします。この演算は、行列乗算、畳み込み、およびドット積など、多くの線形代数演算に基本的です。MACs は、畳み込みニューラルネットワーク(CNN)など、線形代数演算に重点を置いているモデルで計算複雑性のより具体的な測定値として使用されます。

ここで言及する価値があることは、FLOPs は計算効率を理解するために人々が計算する単一の要因にはならないということです。モデルの効率を推定する際には、多くの他の要因が考慮される必要があります。例えば、システムのセットアップの並列性、モデルのアーキテクチャ(例:MACs のグループ畳み込みコスト)、モデルが使用するコンピューティングプラットフォーム(例:Cudnn は、ディープニューラルネットワークの GPU アクセラレーションを持ち、フォワードや正規化などの標準操作が高度に調整されています)が挙げられます。

FLOPS と FLOPs は同じですか?

FLOPS(全て大文字)は、「秒あたりの浮動小数点演算数」の略語であり、計算速度を指し、ハードウェアの性能測定として一般的に使用されます。「FLOPS」の「S」は「秒」を表し、「P」(「あたり」として)と一緒に、レートを表すために一般的に使用されます。

一方、FLOPs(小文字の「s」は複数形を意味します)は、浮動小数点演算を指します。これは、アルゴリズムやモデルの計算複雑性を計算するために一般的に使用されます。ただし、AIの議論では、FLOPs が上記の両方の意味を持つことがあり、読者が正確な意味を特定する必要があります。また、「FLOPs」の使用を完全に廃止し、「FLOP」を代わりに使用するよう求める議論もありました。この記事では、引き続き FLOPs を使用します。

FLOPs と MACs の関係

前述のように、FLOPs と MACs の主な違いは、それらがカウントする算術演算の種類と、それらが使用される文脈にあります。GitHub の図2のコメントのように、一般的なAIコミュニティの合意は、1つの MACs がおおよそ2つの FLOPs に相当するというものです。ディープニューラルネットワークでは、乗算-加算演算は計算において重要な役割を果たすため、MACs がより重要視されます。

FLOPs を計算する方法

良いことに、FLOPs を計算するための複数のオープンソースパッケージがすでに利用可能であり、ゼロから実装する必要はありません。最も人気のあるもののいくつかには、flops-counter.pytorch や pytorch-OpCounter などがあります。また、torchstat のようなパッケージを使用すると、PyTorch に基づく一般的なネットワークアナライザがユーザーに与えられます。ただし、これらのパッケージには、サポートされているレイヤーやモデルに限界があることに注意する必要があります。したがって、カスタマイズされたネットワークレイヤーから構成されるモデルを実行している場合は、FLOPs を自分で計算する必要があるかもしれません。

ここでは、pytorch-OpCounterを使用して、事前に学習されたtorchvisionのalexnetを使用してFLOPsを計算するコード例を示します。

from torchvision.models import alexnet
from thop import profile

model = alexnet()
input = torch.randn(1, 3, 224, 224)
macs, params = profile(model, inputs=(input, ))

結論

この記事では、FLOPsとMACsの定義、それらが通常いつ使用されるか、および2つの属性の違いについて説明しました。

参考文献

  • https://github.com/sovrasov/flops-counter.pytorch
  • https://github.com/Lyken17/pytorch-OpCounter
  • https://github.com/Swall0w/torchstat
  • https://arxiv.org/pdf/1704.04861.pdf
  • https://arxiv.org/abs/1608.06993

Danni Liは、Metaの現在のAIリゾーネントです。彼女は効率的なAIシステムの構築に興味を持ち、現在の研究の焦点はデバイス上のMLモデルにあります。彼女はまた、オープンソースの共同作業と、コミュニティのサポートを最大限に活用して、革新の可能性を最大化することを信じています。

We will continue to update VoAGI; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more

機械学習

このAI論文は、柔軟なタスクシステムと手順的生成による強化学習を革新するNeural MMO 2.0を紹介しています

MIT、CarperAI、Parametrix.AIの研究者らは、Neural MMO 2.0を導入しました。これは、多様な目的と報酬信号を定義できる柔軟...

機械学習

Microsoft BingはNVIDIA Tritonを使用して広告配信を高速化

Jiusheng Chen氏のチームは加速しました。 彼らは、NVIDIA Triton Inference ServerをNVIDIA A100 Tensor Core GPUで実行する...

AI研究

メリーランド大学の新しいAI研究は、1日で単一のGPU上で言語モデルのトレーニングをするためのクラミングの課題を調査しています

自然言語処理の多くの領域では、言語解釈や自然言語合成を含む機械学習モデルの大規模トレーニングにおいて、トランスフォー...

人工知能

「時間管理のための15の最高のChatGPTプロンプト」

今週はこれらの15のChatGPTのプロンプトで早めに仕事を終わらせましょう

データサイエンス

情報とエントロピー

1948年、数学者のクロード・E・シャノンが「通信の数学的理論」という記事を発表し、機械学習における重要な概念であるエント...

人工知能

「Canvaを使用して無料のAIアバターを作成する」

この記事の最後まで読むと、無料で自分そっくりのAIビデオを作る方法が完璧にわかるでしょう