データが主食

データエンジニアの備忘録。分析だったり、読んだ本のメモだったり。

Junhao Li et al. 「Blaze: Simplified High Performance Cluster Computing」

arxiv.org

著者

Junhao Liさんはコーネル大学の博士課程の学生のようです。

Hang ZhangさんはAmazon AIチームの方のようです。

背景

  • 多くのMapReduceはdata-intensiveなタスクにフォーカスしている。
  • 実世界には、compute-intensiveなタスクもたくさんあるが,MapRecudeの速度は、hand-optimizeしたプログラムに劣る。

提案

  • compyte intensive taskshigh performance parallel programで解決するためのC++ライブラリBlazeを提案。
  • 高速化のために以下の設計・実装を行った。
    • Eager Reduction
    • Fast Serialization
    • Optimization for Small Key Range

f:id:ktr89:20190211160620p:plain

Eager Reduction

MapReduceでは、Map処理の後ShuffleしてからReduce処理するが、BlazeではMapの後にMapの計算機のなかでReduce処理を行う。 この修正によりネットワーク負荷が軽減できる。また、Shuffle処理中にReduce処理を実行できるため、スループットが改善する。

f:id:ktr89:20190211160640p:plain

Fast Serialization

MapReduceでは、Protbufおよびその派生系が利用されることが多い。Protobufには、MapReduce処理では不要な情報が含まれており、そこを削減することでデータ量が50%程度削減できる。これにより、ネットワークが改善する。

Optimization for Small Key Range

thread-local なキャッシュを利用することで、高速化する。モンテカルロ法で円周率を計算すると、MPI+OpenMP構成と遜色無い計算時間を実現できた。

評価実験(速度)

  • WordCount
  • Pagerank
  • K-Means
  • GMM
  • Nearest Neighbors で評価実験を実施。

f:id:ktr89:20190211163213p:plain

f:id:ktr89:20190211163340p:plain

こんな具合で計算速度ではSparkを圧倒。(TCM はTCMallocを利用したバージョン。)

評価実験(メモリ使用量)

f:id:ktr89:20190211160822p:plain

メモリ使用量でもSparkを圧倒。

評価実験(認知負荷)

開発者の認知負荷の大きさ比較を行っています。distinct APIの個数を使って認知負荷を評価します。

f:id:ktr89:20190211164218p:plain

所感

  • 課題感に共感。MapReduceで大量のデータからWHERE的処理を実行するのは、速い気がしますがML文脈ではこういった方法があるといいですね。
  • 認知負荷の評価方法でこんな方法があるのを初めて知りました。とはいえ、胡散臭い。