3 ポイント 投稿者 GN⁺ 2024-03-17 | 1件のコメント | WhatsAppで共有

新しい機械学習ハードウェアアーキテクチャ

  • このリポジトリには、従来の内積(inner product)演算を実行するのと同等の性能を達成しながら、必要な乗算演算をほぼ半分に抑えるMLハードウェアアーキテクチャのソースコードが含まれています。
  • 低ビット幅(low-bitwidth)の加算を活用して乗算のほぼ半分を置き換える代替的な内積アルゴリズムを実行することで、MLアクセラレータの理論スループットと計算効率の限界を高めます。
  • 詳細は、IEEE Transactions on Computers に掲載された論文で確認できます。

新しいアルゴリズムとハードウェアアーキテクチャ

  • Free-pipeline Fast Inner Product(FFIP)という新しいアルゴリズムとハードウェアアーキテクチャを紹介しています。
  • 1968年にWinogradが提案した高速内積アルゴリズム(FIP)を改良しています。
  • FIPは、畳み込み(convolutional)層に適用されるWinograd最小フィルタリングアルゴリズムとは無関係であり、主に行列積に分解できるあらゆるMLモデルのレイヤーに適用できます。
  • MLアクセラレータで初めてFIPを実装し、FIPのクロック周波数とそれに伴うスループットを改善するFFIPアルゴリズムと汎用化されたアーキテクチャを提示しています。
  • FIPおよびFFIPのアルゴリズムとアーキテクチャに対するML特化の最適化を提供しています。
  • FFIPは既存の固定小数点(fixed-point)systolic array型MLアクセラレータにシームレスに統合でき、半分の乗算累算(MAC)ユニットで同等のスループットを達成するか、固定されたハードウェア予算でより大きな最大systolic arrayサイズを実装できます。
  • 8〜16ビットの固定小数点入力を使う非スパース(non-sparse)MLモデル向けのFFIP実装は、同種のコンピューティングプラットフォームにおける最先端のソリューションよりも高いスループットと計算効率を達成します。

ソースコード構成

  • compiler: Pythonのモデル記述をアクセラレータ命令に解析するコンパイラを含み、アクセラレータでのモデル実行開始、結果および性能カウンタの読み取り、結果の正確性をテストするPCIeドライバとのインターフェースコードも含みます。
  • rtl: 合成可能なSystemVerilog RTLを含みます。
  • sim: テスト用のシミュレーション環境を設定するスクリプトを含みます。
  • tests: Cocotbを使用してシミュレーション上でアクセラレータを検証する、UVMベースのテストベンチのソースコードを含みます。
  • utils: プロジェクトで使用された追加のPythonパッケージとスクリプトを含み、一般的な開発ユーティリティや補助のために作者が作成したものです。

GN⁺の見解

  • この記事はMLハードウェアアーキテクチャにおける革新的な進展を紹介しており、特に乗算演算を減らしながら性能を維持する新しいアルゴリズムとアーキテクチャを説明しています。これはML演算の効率を大幅に向上させうる重要な前進です。
  • FFIPアルゴリズムは既存のMLアクセラレータ設計に新たな次元を加え、ハードウェアリソースをより効率的に活用する方法を提供します。これは、エネルギー効率とコスト効率が重視される現代のコンピューティング環境で非常に重要です。
  • ただし、この技術が広く採用されるためには、既存のMLアクセラレータとの互換性、開発者による新しいアーキテクチャへの理解、そして実ハードウェアに実装する際の性能やコストの問題などを考慮する必要があります。
  • 類似の機能を提供する他のプロジェクトや製品としては、GoogleのTPU(Tensor Processing Unit)やNVIDIAのCUDAコアがあり、これらはすでに市場で実証済みのMLアクセラレータソリューションです。
  • 新しい技術やオープンソースを導入する際には、既存システムとの互換性、性能向上に対するコスト増、そして開発・保守の複雑さを考慮する必要があります。FFIPを選択することで得られる利点は、スループットと計算効率の向上であり、潜在的な欠点としては、新しいシステムに対する開発者の学習コストと初期実装コストがあります。

1件のコメント

 
GN⁺ 2024-03-17
Hacker Newsのコメント
  • この技術はすごそうに見えるが、なぜすでにアクセラレータに実装されていないのか、単に忘れられたアルゴリズムなのか、それともアクセラレータ構築のコストやほかの面に影響があるのかが気になる。
  • この論文は、ハードウェア上で行列乗算パイプラインを合成することについて述べており、FPGAやASICのようなハードウェアで有用かもしれない。CPUやGPUでは乗算と加算は一般に同じ時間で実行されるが、乗算ユニットはより多くのトランジスタを占有するため、回路の複雑さを減らせば、速度と並列スループットを高めつつ、消費電力と配線の複雑さを下げられる可能性がある。
  • 行列乗算で乗算を取り除く別の方法は、さまざまな semiring を使うことだ。たとえば Tropical Semiring では、乗算の代わりに加算を、加算の代わりに最小値(または最大値)を使う。これは依然として行列乗算だが、二項演算が置き換えられている。Tropical Algebra 分野の研究は最適化問題やニューラルネットワーク最適化の研究に使われており、現在も活発で豊かな分野だ。
  • Log Semiring を使うのも、乗算を効率よく取り除く方法だ。確率の連鎖を掛け合わせる必要があるとき(たとえばマルコフ連鎖)、数値が非常に小さくなって浮動小数点の精度が失われる。数値を対数スケールにすると、乗算は加算になり、加算は x + log1p(exp(y - x)) になる。
  • 乗算と加算のどちらを使うかを決めること自体が、単に乗算を使うより遅くなる可能性があるので、この方法が実際に機能するのは驚きだ。特に、大量の処理が並列に行われる場合はなおさらだ。
  • このプロセスが1968年に発明され、今までこの目的に使われてこなかったという事実はとても興味深い。
  • 2018年に似たような概念を試したが、博士課程への出願がすべて不採用になり、断念した。ここでの概念は、外部ネットワークで誤差逆伝播を複製しようとするもので、これこそがおそらく脳が実際にやっていることだと主張している。
  • 行列乗算の sub-cubic アルゴリズムの数学理論に関心があるなら、ここから始められる。すべての ( n \times n ) 行列を ( O(n^{2+j}) ) ステップで乗算できるような数 ( n ) が存在すると予想されている(現在では ( 2+j = w = 2.3728596 )、すなわち ( j > 0.3728596 ) について証明されている)。
  • この readme は、何が改善点なのか、あるいはどうやって乗算回数を半分に減らすのかの説明がかなり不足している。Big O の実行時間がどうなるのか、既知の最良境界を更新するのかどうかも不明だ。図もわかりにくく、このアプローチがなぜ高速で優れているのかを説明していない。その結果、PDFをクリックすることさえためらってしまう。プロジェクトの信頼性を高めたいなら、実際に何が起きているのかについて、率直で明確な説明と図解を示すことを検討すべきだ。