Vengineerの戯言

人生は短いけど、長いです。人生を楽しみましょう!

DomainSpecific Hardware Accelerators

@Vengineerの戯言 : Twitter
SystemVerilogの世界へようこそすべては、SystemC v0.9公開から始まった 

Twitterのタイムラインに流れてきたこの論文:

DomainSpecific Hardware Accelerators

DeepLさんにお願いしたら、結論に、

「ほとんどのアクセラレータは、ダイの面積と消費電力の大部分がローカルメモリによって支配されているメモリ支配型です。特殊化の恩恵を受けるためには、多くの既存のアプリケーションをリファクタリングして、グローバルメモリの帯域幅需要を減らす必要があります。」

と。

画像処理用のASICも同じでほとんどがメモリ。。

流れてくるデータをチップの内部にストアしておくのでどうしてもメモリが必要。

小さな画像 (512x512) 程度ならいいのですが、4Kとか8Kとかになるとローカルメモリでやるのはかなりつらそう。

 

そして、

 Hanさん、FPGAで出てきたのかな?と思ったら、違ったです。

 

アクセラレータをASICで開発するのはいいのですが、どうしても開発費と開発期間が長いのよね。開発費があっても、開発期間が長いので開発前の要求が開発後でも成り立っているかがポイント。それを間違えると、開発した後に無用の長物ができてしますの。

 

FPGAなら開発費と開発期間の問題は多少解決できそうだけど、FPGAの中に入れられる機能が要求に合わないとできないしね。

 

本当に、悩ましい限りです。

 

 

IntelがAMXというものを導入

@Vengineerの戯言 : Twitter
SystemVerilogの世界へようこそすべては、SystemC v0.9公開から始まった 

2021年導入の「Sapphire Rapids」にて、AMXを導入するそうな。

既に、エコシステムに対して、パッチを出している模様。

www.phoronix.com

この記事には、AMX (Advanced Matrix Extensions) について、Inel の Reference Guide から引用している。

 

で、その Reference Guide というのが、

Intel® Architecture Instruction Set Extensions and Future Features Programming Reference, 319433-040 JUNE 2020

このドキュメントの

「CHAPTER 3 INTEL® AMX INSTRUCTION SET REFERENCE, A-Z」

に詳細があります。

Figure 3-1. Intel AMX Architecture を見たら、AMXって、Acceleratorなんですね。

2つのAccelerator (TMUL) に TILECFG というレジスタからデータを送り込んで演算して戻すというもの。AI Host ととは別物なんですね。

 

Table 1-3. Information Returned by CPUID Instruction の EDXの

Bit 22: AMX-BF16. If 1, the processor supports tile computational operations on bfloat16 numbers.
Bit 23: Reserved
Bit 24: AMX-TILE. If 1, the processor supports tile architecture.
Bit 25: AMX-INT8. If 1, the processor supports tile computational operations on 8-bit integers.

とあって、何故か?Bit 23 が飛んでいますね。ここには何が来るんでしょうかね?

NVIDIAのAmpereのように、32ビット、64ビット対応ですかね?

 

ということで。。

 になったので、次は、

 ですかね。

PyArmNN

@Vengineerの戯言 : Twitter
SystemVerilogの世界へようこそすべては、SystemC v0.9公開から始まった 

Arm NN v20.05 にて、PyArmNNなるものがリリースされました。

Arm NNは、C/C++APIですが、この PyArmNN を使うと、PythonからArm NNが呼びだせるようです。

github.com

すべての computation kernel は、PyArmNNの中では実装されていなくて、すべてをArm NN Library に delegate しています。

 

Python 3.6以上でサポート。SWIG 4.x が必要ですね。

バイナリパッケージとしては、

  • x86 64: pyarmnn-21.0.0-cp36-cp36m-linux_x86_64.whl
  • Aarch 64: pyarmnn-21.0.0-cp36-cp36m-linux_aarch64.whl

があります。

サンプルコードを見ると、複数のバックエンドを指定できるようですね。

# Backend choices earlier in the list have higher preference.
preferredBackends = [ann.BackendId('CpuAcc'), ann.BackendId('CpuRef')]
opt_network, messages = ann.Optimize(network, preferredBackends, runtime.GetDeviceSpec(), ann.OptimizerOptions())

# Load the optimized network into the runtime.
net_id, _ = runtime.LoadNetwork(opt_network)

 このコミットを見ると、どうやら、NXPが協力したようですね。

Copyright が追加されています。

 

Arm Ethos-N series Driver Stackも出てた

@Vengineerの戯言 : Twitter
SystemVerilogの世界へようこそすべては、SystemC v0.9公開から始まった 

一昨日のブログでは、Arm Compute Library と Arm NN の v20.05 がリリースされていたことを書きましたが、Arm の NPU (Ethos-N) の Driver Stack も公開されていました。

github.com

今回公開されたものは、

  • Ethos-N37、N57、N77、N78用のコード (Arm Cortex-M用のNPU Ethos-U55はサポートしていません)
  • Arm NN 20.05 をサポート

Ethos-Nをサポートするプラットフォームは、どうやら、LinuxAndroid

Androidの時は、NNAPIベース。

Ethos-N driver と Ehos-N kernel module まで入っています。

 

といっても、uapi/ethosn_shared.h というファイルが無いとダメみたい。。。

 

firmware というディレクトリには、ethosn.bin というファームウェアがあります。

また、kernel-module/ethos_firmware.h では、NPUへのコマンドキューの構造体がありますね。ということは、上記のFirmwareを動かすMPUが居そうですね。Armだから、Cortex-Mシリーズか何かなんですかね。

 

これで、Armは、CPU(NEON)、GPU(Mali/OpenCL)、NPU(Ethos-N)にていろいろできるようになり、Qualcommと対抗できてきましたね。。。

 

さあ、ArmのNPU、Ethos-N、普及するでしょうかね。。。。

 

 

SambaNova Systems の講演ビデオとスライド

@Vengineerの戯言 : Twitter
SystemVerilogの世界へようこそすべては、SystemC v0.9公開から始まった 

このブログでも、昨年の11月と今年の3月に取り上げた、SambaNova Systems がINTERNATIONAL WORKSHOP ON MACHINE LEARNING HARDWARE (IWMLH), CO-LOCATED WITH ISC2020にて講演したビデオとSlideが公開されています。

今回の発表で SambaNova Systems のチップおよび商品がちょこっとわかりました。

Software 2.0 については、NIPS 2018の講演資料に説明があります。

今回の資料では、Software 2.0のことはサクッと書いていますが、NIPS 2018の講演資料にはかなり詳しく載っています。

8頁のNext gen Software 2.0 systems need spport for

  • Hierarchical parallel pattern Data flow
  • Terabyte sized models
  • Sparsity
  • Flexible mapping
  • Data processing


とあって、NIPS 2018の資料では、Next-Gen ML Accelerators : Native Support for

  • Hierachiccal patalle pattern dataflow
  • Dynamic precision
  • Sparsity
  • Data Processing

とあるので、多少は変わってきているんですね。Dynamic precision はBfloat16とかでているのでこれでいいのでもう当たり前と見ると、

  • Terabyte sized models
  • Flexible mapping

の2つが追加されたんですね。特に、Terabyte sized models は 19頁のグラフを見ると2019年後半から急激に要求が上がってきた感じですね。

 

チップ

  • チップ名:SN10 RDU
  • TSMC 7nm
  • 40B transistors
  • 50 km of wire
  • 100s of TFLOPs
  • 100s MB on chip
  • Direct interfaces to TBs off chip  (TBってなんだ。。。)

商品

  • DataScale SN10-8 ( Single 8-socket DataScale system)
  • DataScale SN10-8R Full Rack (4 x 8-socket DataScale systems)
  • (SN10-8Rは、SN10-8を4セット、Rackに収めたものっぽい)

写真を見ると、5台のブレードサーバーで1セットになっていて、中途半端だなと思っていましたが、8 - socket Data Sccale ということなので、1台には2個のRDUが入っていて、4台で8 RDU 、残りの1台はホストとになり、ホストから4台にPCIe で接続。8個のRDUは何らかのチップ間で接続。。。NVIDIAのDGXのように4Uではなく、1Uに入れちゃっている。これって、Graphcoreの1UベースのRackScalue IPU-Podと同じですよね。

そうなると、1台の中に、RDUx2だけじゃなくて、Arm系のSoCも載っているのかしら。。。Chipのところに、「Direct interfaces to TBs off chip」とあり、TBが何の略かが気になる。。。ビデオを再度見たら、言ってました。。。TeraBytes Memory と。ということはチップにはTeraByte Memory用インターフェースが載っていて、各1UサーバーにはTeraByteメモリが載っているんだ。。。これで2個のRDUで1Uサーバーが必要なのが分かったーーーー。Xeon だと、12枚のDDR4が接続できるので、64GBx12枚で768GB。2チップで、1536GB、そう、TeraByte Memory になる。DDR4が8枚で、2xRDUで1TBか。。DDR4コントローラ1個に対して、2Slotサポートできそうなので、8枚だとDDR4 x4 コントローラで512GBか。

 

ソフトウエア

  • PYTORCH
  • TensorFlow
  • SQL (VIdeoでは、SQLでしたが、Slideでは User's Graph になっています)

なんで、SQLなのか、始めは分からなかったのですが、自分の過去のブログを読み返してみてわかりました。NIPS 2018の資料では、Spark SQLとあるですよね。

GV(アルファベットの投資会社)がSambaNova Systemsに投資しています。株主の課題を解決できると嬉しいので、GoogleのCloud Dataflow SQLにも対応できればと。この Cloud Dataflow SQL って、vCPU (Compute Engine) で動いているようなので、GPUやTPUじゃ実行できない。なので、RDUで実行できればいいんじゃないと。。。

 

後半に出てきますが、このシステムは、

Enabling New Capabilities 

ということで、

  • Trillion parameter NLP models
  • High Resolution Deep Learning (50k x 50k)
  • Recommendation models with huge 100GB embedding tables

ということです。

つまり、バカでっかいデータおよびモデルに対応するということ。。。

スライドの20頁目に、NVIDIAのDGX-2 x64台で動かしたモデルでも、 1台のDataScale System(8 RDUの方)で賄えると。

 

それから、Training と Inference の環境を同じにできると。

現在のMLでは、Training は GPU で、Inference は CPU が多い。なので、TrainingのGPUからInferenceのCPUに持っていくときに互換性が無いことがある。。。

何故、InferenceでCPUを使うのかというと、Batch Size = 1 では、GPUよりCPUの方が速いため(GPUの場合は、Batch Size を1でもある程度大きくても同じ。何故なら、ある程度のBatch Size で処理しているため)

SambaNova SystemsのRDUなら、TrainingもInferenceもRDUでできるだけでなく、Inference時のデータを使ってインクリメンタルなTrainingやReal-TIme Trainingができちゃうということ。そのTrainingによってModelの最適化もできちゃうと。

(本当にそんな簡単にできちゃうのかは、わかりませんが)

RDUは、Batch Size = 1 で、CPU・GPUより2倍以上速いし、スループットGPUの16倍になるんだと。

これ、Graphcore が言っているのと同じね。。。

 

結構分かってきて、何となく、嬉しいですよ。*1

 

過去ブログ

vengineer.hatenablog.com

vengineer.hatenablog.com

vengineer.hatenablog.com

 

 

*1:

Arm Compute Library/Arm NN v20.05が出てた

@Vengineerの戯言 : Twitter
SystemVerilogの世界へようこそすべては、SystemC v0.9公開から始まった 

おさぼりしていました。

Arm Compute Library と Arm NN の v20.05 がリリースされていました。

Arm、ちゃんと3か月毎にリリースしています。

github.com

github.com

それから、Arm NN driver も

github.com

地道にKernel増えています。今回は、Bfloat16に対応したKernelもあります。

 

Arm NN driver では、HAL 1.3 をサポートとありますね。

HAL 1.3って、Android 11なんですね。下記にありました。原文は、こちら

note.com

Android 11」では、開発者が利用できる「operation」と「control」を拡張しています。このリリースでは、一般的なユースケースの最適化に役立つ新しい操作と実行コントロールを追加しました。

とあります。

 

Eta Compute って、そこが売りだったんですね?

@Vengineerの戯言 : Twitter
SystemVerilogの世界へようこそすべては、SystemC v0.9公開から始まった 

このブログでは、Eta Compute って、デバイスの ECM3531 がTensorFlow Lite for Micro controller でサポートされたということで紹介しました。このデバイスは、Arm Cortex-M3とNXP Coolflux DSPを搭載したマイコン

vengineer.hatenablog.com

で、なんで、Eta Compute が AI関連会社なのかな?思っていたのですが、

Ultra-Low Power Inference at the Extreme Edge

記事によると、

「dynamic voltage-frequency scaling (CVFS)」

によって、

「ultra-low power at the extreme edge in AI applications」

を目指すものだったんですね。

 

この CVFS を利用して、

Eta Compute’s benchmarking shows the Cortex MCU running at up to 10X lower power than competitive solutions across a wide range of temperatures and process corners.

で、Cortex M3を 競合に対して、10倍以上省エネで実行できると。。

そうだったんですね。。