Vengineerの妄想(準備期間)

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

Intelの Intel® Advisor’s Flow Graph Analyzer

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

 によると、Intel Advisor には、Flow Graph Analyzer という機能があるとか。。。

これ、10年ぐらい前に欲しかったわ。。。こういうの使って、どこがどうなっているかを可視化して、ボトルネックを見つけたかったわ。。。

Flow Graph Analyzerは、こちら。

software.intel.com

 

Flow Graphは、Intel TBB の Flow Graph を使うみたい。

software.intel.com

この Flow Graph も 10年ぐらい前に欲しかったわ。

 

Ansor: An Auto-scheduler for TVM (AutoTVM v2.0)

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

Auto-scheduler for TVM」のLianmin Zhengさんから Ansor(AutoTVM v2.0)の提案

discuss.tvm.ai

現在の AutoTVM の問題点

  1. The templates are hard to write. It takes a great number of engineering efforts to develop these templates.
  2. The number of required templates is large and continues to grow as new operators come.
  3. The templates are far from optimal. There is still huge opportunity for performance improvements by enlarging the search space in templates, but manually enumerating these optimizations choices is prohibitive.

を解決するために、Ansor では下記のことをやっているようです。

  1. Ansor automatically generates a much larger search space from compute declaration only
  2. Ansor searches more efficiently than AutoTVM by utilizing improved cost model, evolutionary search and task scheduler

論文は、Ansor : Generating High-Performance Tensor Programs for Deep Learning

論文のベンチマークを見る限り、かなり速くなりそう。

 

glow:TensorFlow Lite importerが追加されるし、Intel NNP-Iの開発は継続されている

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

理由はよくわからないのですが、Facebookクラウド用推論のためのフレームワークである glow に TensorFlow Lite importer が追加されました。

github.com

この時点では、125個の TensorFlow Lite の Op の内、57個をサポートしているようです

これにて、ONNX、Caffe2、そして、TensorFlow Lite をサポートしたことになり、推論用であれば十分なんでしょうか?

 

それから、開発が中止されたがカスタマーが居ることでサポートが継続されている Intel NNP-Iですが、glow の中でも開発はまだやっているようです。

github.com

このコードみると、

BB.newNode("NNPICustomDSP")
.addMember(MemberType::VectorNodeValue, "Inputs")
.addResultFromCtorArg() // for now use single output
.addInput("KernelParams") // paramsblob
.addInput("WalkConfig") // NNPIWalkConfig
.addMember(MemberType::Unsigned, "PrivateAreaSize")
.addMember(MemberType::String, "KernelName")
.addMember(MemberType::Int64, "ICERefCallback") // NNPIDspIceRefCallback*
.setDocstring("This is an experimental NNPI-specific node representing a "
"custom DSP op");

BB.newNode("NNPICustomIA")
.addMember(MemberType::VectorNodeValue, "Inputs")
.addResultFromCtorArg() // for now use single output
.addMember(MemberType::String, "KernelName")
.addMember(MemberType::String, "IAPath")
.setDocstring("This is an experimental NNPI-specific node representing a "
"custom IA op");

みたいのがあって、DSPで動くノードと、IA(x86-64)で動くノードがあるのね。

 

uTVM関連ビデオ

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

OctoML主催の Apache TVM meetup 

参加者も登場しています。基本的には、OctlML のメンバーがいろいろお話しています。

youtu.be

アジェンダは、

  • uTVM Today
  • Upcoming RFCs
  • uTVM Portability
  • uTVM CI
  • Future Work
  • uTVM Roadmap
  • Standalone Model Execution
  • Quantization Improvements
  • Q & A and Discussion

です。

uTVM に関してはこのブログでも6月19日に紹介しました。

どうやら、OctoML、uTVM にかなりリソースをかけてそうですね。。。

vengineer.hatenablog.com

こちらのビデオも同じかしら。最初に始まる前のものが付いている感じ?

 

TensorFlow Liteに、なんか、追加されている

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

TensorFlow Liteのexperimentalに、

「Accelerator whitelisting」

なるものがアップされていた。

github.com

TensorFlow Delagateがいっぱいあるんですが、微妙にAPIが違うんです。

ということで、

  • NNAPI
  • GPU
  • Hexagon

に関しては、同じAPIで引数の文字列で切り替えるようにしたもの。

この3つということは、Snapdragonのスマホ用なのかな。。。。

void CreateDelegate(flatbuffers::Offset<NNAPISettings> settings) {
    settings_ = flatbuffers::GetTemporaryPointer(
        fbb_, CreateTFLiteSettings(fbb_, tflite::Delegate_NNAPI, settings));

    plugin_ = delegates::DelegatePluginRegistry::CreateByName("NnapiPlugin",
*settings_);
    delegate_ = plugin_->Create();
}

 こんな感じで Delegate を生成するのね。名前は、クラス名の模様。

  • NNAPI         => NnapiPlugin
  • GPU             => GpuPlugin
  • Hexagon      => HexagonPlugin 

のようです。

は、どうなるのだろうか?

HuaweiのMindsporeが github に来た?

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

今まで、gitee にあった、Huawei の ディープ・ラーニングフレームワークであるMindsporegithub に来た?

github.com

サクッて見てみたら、

  • CPU
  • GPU (CUDA)
  • Ascend

をサポートしているっぽい。

OSは、Ubuntu と EulerOS (CentOSHuawei版、Huawei Cloudで使われている)

CPUだけ、Windows 10で動く。EulerOSはAscendのみ。

Mindsporeのバイナリもダウンロードできる模様。

 

CUDAの時は、NCCL(NVIDIA Collective Communication Library)と使っていて、Ascendの時は、HCCL(Huawei Collective Communication Library)を使って要るっぽい。

HCCLとは、

HCCSはファーウェイが独自に開発した高速相互接続インターフェースで、オンチップRoCEがノード間の直接相互接続に使用できます。

用のライブラリかな。。。

下記の Atlas 900 のページを見ると、

HCCS + PCIe 4.0 + 100 GE

HCCS (Huawei Cache Coherence System)、になっていて、

240 Gbit/s: inter-chip interconnect enabled by HCCS

ともありますね。30GB/s ということは、PCIe Gen4 x16 相当かな、e.huawei.com

昨年(2019年)のHotchip 31 のスライド この分(引用します)にある Hydra SubsysがHCCLのことで、Networkが 100G RoCEなんだろうね。

f:id:Vengineer:20200621121637j:plain

違う頁には、

  • 3x 240Gbps HCCS ports – for NUMA connections
  • 2x100Gbps RoCE interfaces for networking 

ともあります。ね。

f:id:Vengineer:20200621122847j:plain

 

GraphEngineも github にあるんだよね。

github.com

ここにある下記の図(引用します)をみると、ほとんど公開されているのかな?

Backend Runtimeの下のレイヤーは無理でしょうけど。。。

https://www.mindspore.cn/docs/en/0.3.0-alpha/_images/architecture.png

Benchmarkとしては、ここに 0.2.0-alpha の Resnet50 v1.5のデータがあります。

PrecisionはMix(fp16/fp32)、Batch Size=32

  • Ascend: 1 * Ascend 910 + CPU:24 Cores =>  1787 images/sec
  • Ascend: 8 * Ascend 910 + CPU:192 Cores => 13689 images/sec
  • Ascend: 16 * Ascend 910 + CPU:384 Cores =>  27090 images/sec

大体スケールしている。

Habana Gaudi(現、Intel)のResnet-50のベンチマークここ の 22頁目にあって、

  • Gaudi x 8 => 13200 images/sec
  • Gaudi x 16 => 26400 images/sec
  • Gaudi x 32 => 49600 images/sec

となっている。ということは、Gaudiよりちょっと速いということね。

 

 


SYCL 2.2 に pipe が入った

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

このプレゼンテーション資料

Beyond SYCL™ 1.2 :SYCL™ 2.2
Maria Rovatsou, SYCL spec editor
Principal Software Engineer, Codeplay

2.2で追加されたのは、下記の機能。

  • SYCL Command Groups
  • SYCL Pipes
  • SYCL Nested Parallelism
  • SYCL Hierarchical Parallelism
  • SYCL Collective Operations
  • Shared Virtual Memory (SVM)

OpenCL には、SVM や pipe があったけど、やっと追加された感じ?

XilinxFPGAでのサポートはいつ頃かな?