@Vengineerの戯言 : Twitter
SystemVerilogの世界へようこそ、すべては、SystemC v0.9公開から始まった
先週は、HotChips32 があったので、今秋は、その振り返りです。
もう1年経ってしまったのね。
初日は、Cerebras Systems。
CerebrasのCS-1が発表されたのは、昨年のHotchips 31だったのね。
ということで、最初は、Cerebras Systems の発表を振り返ります。
どうやって、振り返るというと、ANANDTECHのサイトの記事です。
Cerebras Systems の記事は、下記にあります。サイトのコメントと発表スライドを見ながら、だらだら、書いていきます。
HotChips32のプログラムには、2nd Gen WSE っぽいタイトルだったんですが、講演のスライドのタイトルは変わって、
「Software Co-design for the First Wafer-Scale Processor (and Beyond)」
になりました。最後の (and Beyond) が 2nd Gen WSE っぽいです。
発表の最初の方は、WSE と Software の簡単な説明で、
- 400Kコアが 3D mesh network で繋がっている。
- Frameworkが出力するモデルを Graph compiler にて、WSE format の graphに変換
- Graph compilerでは、モデルの各OpをKernelにマッピングする
- hand optimized kernels にもマッピングできる
- Optimal Mapping Strategy を選ぶ
- Optimization Serach Space を自動的に見つける (Compute/Memory/Fabric)
- 各Opには、いろいろなKernelがマッピングできるがどれがいいのか?
- WSEの各コアえの割り当て。。。
ということが書いてあって、結果的に、Flexibility and Performance がポイント。
- Model parallel and data parallel execution
- Sparsity harvesting and inducing
- Dynamic neural network execution
あたし的には、WSEは Model Parallel をやるためのものだと思っていますが、Data parallel について何も述べないと、Data parallel できないんじゃーダメねになるので、Model parallel and data parallel execution と言っているのだと思っています。
Data parallelやりたいのなら、GPUクラスタの方がスケールするからです。。
Model parallel をやるけど、Data parallel もできれば嬉しいよという感じ。図では、GPUに比べて、Batch Sizeがかなり少ない Data parallel になっています。
Model Parallel の場合は、pipeline で実行します。Graphcoreと同じです。図には Batch Size = 16 でに 4-Layer BERT Performance のグラフが載っていて、コア数が100k, 200k, 300k, 400kとキチンとスケールしていることを示しています。400k を超えるとダメなんでしょう。。
でも、2nd Gen WSE (最後のスライド)では、850k コアになるので、今の2倍までスケールしそうです。今のWSEが 16nm に対して、2nd Gen WSE が 7nm だから、コア数が2倍ぐらいにしかならないのはなんかの理由があると思いますが、それは来年のお楽しみでしょうか。
Data parallel のスライドでは、BERT Attension Kernel Performanceでは、1/2/4/8 の並列度で、コア数が100kだとスケールしていませんが、コア数が200kになると2並列はほぼスケール、コア数が400kになると4並列もほぼスケールします。8並列についてはコア数を400kにしても7倍にしかなっていないようです。8並列にするとコア数は400k個では足りないようですね。2nd Gen WSE にすると、16並列までスケールしそうです。
Cerebrasのコアは、Sparsityの処理をするようです。コアはゼロのパラメータに対する処理はしない。そのためにはパラメータがゼロであることを示す仕組みが必要ですね。
NVIDIAのA100のTensorCoreでは、4個の内2個までのゼロのパラメータを削減できるので最大2倍の処理性能になりますが、Cerebrasのコアはどうなるのでしょうかね。
「Core Designed for Sparsity」のスライドの
Intrinsic sparsity harvesting
- Sender filters out sparse zero data
- Receiver skips unnecesarry processing
とありますので、Sender 側でゼロのデータをフィルタしちゃうんですね。また、Receiverも不要な処理はスキップするんですね。
そこいらの処理をするのが図の中の Tensor Control の部分なんでしょうね。
FMAC Datapath にデータとパラメータを流さないと。。。
次のスライド「Inducing Sparsity」では、性能も、1.7x とか 2.4x とかで上がると。
あくまでも1つのモデル (34-Layer dense FC model) に対してですからね。。。
Transformer (あたしはよくわかっていません)では、DropoutとReLUに sparse を導入するとこと効果があったと。ReLu は 90% ぐらい sparse だし、Dropout も 30%ぐらいは Sparse ということで、1.2倍ぐらい性能あっぷと。思ったほどは効果は高くない?
BERTは、ほとんど sparsity にはなっていないけど、各レイヤーには sparsity を導入できるのでやってみたところ、sparsity を 25%, 50%, 75% 導入すると、1.2x, 1.5x, 1.9x の処理速度になると。Sparsity を導入したら、学習時間と精度ってどうなるのだろうか?それは載っていないね。
次のスライド「3) Designed to Unlock Smarter Techniques and Scale」では、
WSE has a data flow architecture
- Flexibility to stream token by token
- Inherent sparsity harvesting
WSE is a MIMD architecture
- Can Program each core independently
- Perform different operations on different data
このスライドに書いてあるのが、WSE の特徴ですね。。。GraphcoreやSambaNovaも大体似たようなものかな。
なので、次のスライドのタイトル
「Flexibility Enables Dynamic ML Methods」
が実現できるが、これって、本当に現在のGPUクラスタに対するアドバンテージになるのかしら?というのはよくわかりません。
最後のスライドが、「Wafer Scale Engine - Generation 2」でした。
詳細は、今年の終わり頃のようです。
Q.Aに、400kこのモデルをコンパイルするのに、どのくらいの時間がかかるのとあり、回答としては自動的にやっている。Annealingとheuristics を。EDAからのアイデアもいろいろと。FPGAのLEの100万個に比べれば、simpler とありますが、各コアが処理できる内容が全然違うねん。処理時間は数分。。。え、数分でコンパイルできるの?
ということで、最近流行りの Sparsity を強調した発表の感じでした。
明日は、Google TPU v2/v3 の詳細についてです。