データが主食

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

ICSE2019 "Software Engineering for Machine Learning: A Case Study"を読んだ

Microsoft Researchの研究員の方々が、社内のAI関連開発者への聞き取りを通じて、機械学習関連システムのためのソフトウェア工学知見を整理した論文です。

International Conference on Software Engineering(ICSE2019)というソフトウェア工学の国際学会で発表された論文です。

2019.icse-conferences.org

続きを読む

coder.comでscala環境を整える

Android タブレットでコーディングしてみた - データが主食

ソフトウェアエンジニアが休日に勉強するための環境 - データが主食

Coursera課題用EC2インスタンスのセットアップ - データが主食 などで、勉強環境を述べてきましたが、最近ではcoder.comが流行ってますね。

coder.com

例によって、coder.com上でscalaコーディングするための環境を構築した際のメモです。

javaのセットアップ

sudo apt-get install openjdk-8-jdk

sbt のセットアップ

echo "deb https://dl.bintray.com/sbt/debian /" | sudo tee -a /etc/apt/sources.list.d/sbt.list
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 2EE0EA64E40A89B84B2DF73499E82A75642AC823
sudo apt-get install apt-transport-https
sudo apt-get update
sudo apt-get install sbt

メモ

  • Sparkが動きません。

Cloud Nativeとは?

仕事のプレゼンで、「CloudNativeで.....」とか「クラウド流儀に反する」とか、それっぽい表現する機会がありました。 しかし、実際のところ、Cloud Nativeってなんなのか定義はよくわかっていませんでした。

先日、なかなか良いCloud Nativeの説明を見つけたので翻訳してみました。

www.nginx.com

続きを読む

Android タブレットでコーディングしてみた

ソフトウェアエンジニアの休日の勉強環境としてタブレットを使えないかと実験中です。 カフェでタブレット使ってたらおしゃれだと思ったので。 ソフトウェアエンジニアが休日に勉強するための環境 - データが主食

Android タブレット

以前購入したこのAndroidタブレットでコーディングをしてみます。

続きを読む

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文脈ではこういった方法があるといいですね。
  • 認知負荷の評価方法でこんな方法があるのを初めて知りました。とはいえ、胡散臭い。