DEIM Forum 2019 B8-2

複数の機械学習実装にまたがって
予測モデルを探索する分散処理フレームワーク
高橋 良希†

浅原

理人††

首藤

一幸†

† 東京工業大学 〒 152–8550 東京都目黒区大岡山２丁目１２−１†† 日本電気株式会社 〒 211–8666 神奈川県川崎市中原区下沼部１７５３
E-mail: †takahashi.y.bz@m.titech.ac.jp, ††masahara@nec-labs.com, †††shudo@is.titech.ac.jp
あらまし

予測問題において，解きたい問題やデータごとに最適な学習アルゴリズムが異なるため，複数の学習アル

ゴリズムの中から最適な予測モデルを探索する必要がある．XGBoost や TensorFlow といった既存の機械学習実装
は，それぞれ提供する学習アルゴリズムが異なるため，予測モデル探索は複数の実装にまたがって行いたい．しかし，機械学習実装ごとに使用法やデータ構造が異なるため，使用法の習得やデータ構造変換，実装を切り替えながら複数回学習を実行するなど，分析者の労力が大きい．本研究では複数の機械学習実装にまたがって予測モデルを探索する
分散処理フレームワークを提案する．評価の結果，55 行から 144 行で新たな機械学習実装を追加し，54 行程度のコードで複数の実装にまたがった予測モデル探索を実行できることを確認した．また，既存のフレームワークと比較した
結果 HIGGS データセットに対して最も早い処理時間を達成した．
キーワード 機械学習，パラメータチューニング，インターフェース，並列処理•

1 はじめに
機械学習は様々な予測問題を解決する手法の一つとして，研究および産業で広く応用されている．需要予測 [1] や価格予測 [2]，クリック率予測 [3] などの分類・数値予測は産業において広く応用される例のひとつである．勾配ブースティングや深層学習などの新しい学習アルゴリズムは，線形回帰や決定木な
どの従来のシンプルな手法よりも高い予測精度を達成することを可能とし，これらのアルゴリズムをライブラリとして提供する XGBoost [4] や TensorFlow [5] といった機械学習アルゴリ
ズム実装は，機械学習の様々な問題への応用を加速させている．
一方で，解きたい予測問題に対して最適な予測モデルを構築するためには多くの時間を要する．ノーフリーランチ定理 [6]として知られるように，あらゆる予測問題に対して万能な学習
アルゴリズムは存在しないため，予測問題ごとにその都度最適なアルゴリズムを探索する必要がある．特に，複数の機械学習
アルゴリズムを試すためには，複数の機械学習実装を利用することになり，各機械学習実装の使用法を習得したり，各実装が入力とする適切なデータのフォーマットを用意したり，各実装の結果の出力を比較したりといった分析者の労力が大きい．
そこで，我々は複数の機械学習実装にまたがって最適な予測モデルを探索する分散処理フレームワークを提案する．提案フレームワークによって，分析者は単一フォーマットのデータに対して，統一された記法で複数の機械学習実装を複数マシン上で動作させることができ，最適な予測モデルを容易に探索できる．加えて，提案フレームワークは次の二つの利点を有する．

フレームワーク内の共通インターフェースと共通データ

フォーマットにより，少ない実装コストで新しい機械学習実装を追加できる．

•

プロファイリングベースのジョブスケジューリングによって，並列度に対してスケーラブルである．
評価実験では，新しい機械学習実装を組み込むためのコードの行数と，既存フレームワークと比較したときの予測モデル
探索の処理速度や達成精度を評価した．予測モデル探索に必
要なコードの行数は 54 行で，新しい機械学習実装を組み込むための実装は，55 行から 144 行程度で記述することができた．
数値データの二値分類用の学習データセットである HIGGS 1と SECOM 2 に対して予測モデル探索を実行し，既存フレーム
ワークである Spark MLlib と spark-sklearn [11] と比較する．
その結果，全フレームワークはほぼ同等の精度を達成しながら，本フレームワークは HIGGS データセットでは最も処理を早く完了し， SECOM データセットでは二番目に早い結果となった．これらの実験は 1211 個の学習設定候補点に対して，32 並列の実験を行った結果である．
本論文は次のようの構成である．まず，2 章で予測モデル探索の基本的な概念を議論し，本研究が解決する問題である「複数の機械学習実装にまたがった予測モデル探索」における難点を提起する．また，掲げた難点に対して，本フレームワークがどのように解決したかの概要を述べる．次に，3 章で本フレー
ムワークの詳細な設計指針を示し，フレームワーク内部で解決した課題とその方法について議論する．4 章では，予測モデル
探索における課題に対して，既存研究がどのような解決方法を

1 https://archive.ics.uci.edu/ml/datasets/HIGGSThis is an unrefereed paper.

2 https://archive.ics.uci.edu/ml/datasets/secom

提案してきたかを議論し，本フレームワークとの相違点を明確
1にする．5 章では，提案フレームワークの有用性を示すため， 2
フレームワークを使用した際の実装コード行数と，実行した際3の処理性能を中心とした評価を行い，その結果と考察を示す． 4
最後に，6 章で本研究のまとめと今後の課題を述べる．

2 予測モデル探索と提案フレームワーク

5

6
7
8

我々の目的は未知のデータに対する予測精度が高い予測モデ

910

ルを入手することである．予測モデルは既知のデータを用いて11学習される．既知のデータを学習アルゴリズムに適用する部分

12と予測性能を評価する部分に分割し，学習部分を用いて学習さ14れた予測モデルの中から，検証部分に対する予測精度が最も高いアルゴリズムを選択する．選択されたアルゴリズムで構築し

13

15
16
17
18

た予測モデルを用いて，未知のデータに対する予測を行う．

19

これまでに多くの学習アルゴリズムが考案されており，これ20らの中から解きたい予測問題に対する最適なアルゴリズムを選22

択しなければならない．ノーフリーランチ定理 [6] として知られるように，あらゆる問題に対して予測誤差を最小とする学習

21

23
24
25
26

アルゴリズムは存在しないため，対象とする問題とデータセッ

27

トごとに最適なアルゴリズムが異なるからである．さらに，各28

アルゴリズムごとにハイパーパラメータと呼ばれる学習設定に30関するパラメータが存在し，ハイパーパラメータによって精度が大きく変化するため，これも慎重に選択する必要がある．

/****** Search Space ********/
val xgbGrid = new GridBuilder().addGrid(XGBoostLearner.param("eta"), Array(0.1,0.3,0.9)).addGrid(XGBoostLearner.param("round"), Array(30,60, 90)).addGrid(XGBoostLearner.param("maxBin"), Array(32,64,128)).buildval tfGrid = new GridBuilder().addGrid(TensorFlowLearner.param("network"),
Array("128_128","64_64","128_64","64_64_64")).addGrid(TensorFlowLearner.param("learningRate"),Array(0.003, 0.03, 0.3)).buildval sklearnLRGrid = new GridBuilder().addGrid(ScikitLearnLearner.param("algorithm"),
Array("logistic_regression")).addGrid(ScikitLearnLearner.param("c"),Array(0.011, 0.033, 0.1, 0.3, 0.9)).build29/****** Model Search *******/
val trainDF = spark.read.load("../path/to/data")
val validateDF = spark.read.load("../path/to/data")
val searcher = new ModelSearcher().addSpace(xgbGrid).addSpace(tfGrid).addSpace(sklearnLRGrid).setFeaturesCol("features").setLabelCol("label")val multiModel = searcher.modelSearch(trainDF)
val scores = multiModel.validateAll(validateDF, "features", "label")

図 1: 提案フレームワークを用いた予測モデル探索の実装コード例

この予測モデル探索は多大な時間を要する．最適な学習アル
ゴリズムとハイパーパラメータを探索するには，実際に候補点に対して学習を実行し，評価指標によって評価する．深層学習のように単一の学習自体の処理が大きいアルゴリズムが存在する上に，探索候補点が数千に及ぶような場合があり，このような場合に予測モデル探索はときに数日を要する．
これに対し，予測モデル探索を高速化する手法が提案されてきた．まず，単一の学習を並列化して性能を向上させる手法である．TensorFlowOnSpark [9] や XGBoost4J-Spark [10] などが例として挙げられ，これらは非分散の機械学習フレーム
ワークを分散実行に拡張し，並列化による性能向上を図ったものである．また，複数の学習を並列に実行することで高速化する手法もあり，spark-sklearn [11] は一つの学習は非分散で実行されるが，同時に複数の学習が実行されるフレームワークであも存在するが，より処理速度の速いような後発の実装も存在す
る [4] ため，高速化のためにもアルゴリズムごとに最新の実装を活用できることは重要である．
これに対し，我々は複数の機械学習実装にまたがって最適な予測モデルを探索する分散処理フレームワークを提案する．
ユーザは複数の機械学習実装の使用法を学ぶことなく，単一のデータ形式を用い，一度の実行で複数の学習アルゴリズム上の予測モデル探索を実行できる．例として，本フレームワークに

XGBoost と TensorFlow を組み込んだ場合，本フレームワー
クを使用するユーザは XGBoost や TensorFlow のデータ形式
や使用法を意識することなく，これらの実装が提供する学習ア
ルゴリズムに対して一度に分散して予測モデル探索を実行する
ことができる．

る．さらに，探索するハイパーパラメータの候補点を賢く決定することで，素早く最適な予測モデルを得られる手法 [12–15]も存在し，特にベイズ最適化を用いたパラメータチューニング
のフレームワークがいくつか存在する [16–18] ．

2. 1 簡易に記述できる予測モデル探索
我々のフレームワークは複数実装にまたがった予測モデル探索を簡易に記述できる．図 1 に本フレームワークを用いて予測

しかし，予測モデル探索には，複数の機械学習実装を用いなモデル探索を実装する場合の実装例を示す．2 行目から 18 行

ければならないことによる分析者の実装コスト自体の問題があ目において，各学習アルゴリズムで探索するハイパーパラメー

る．例えば，各機械学習実装ごとに異なる使用法を習得したり，タの範囲を指定している．各アルゴリズムの学習設定の候補

各実装が入力とするフォーマットごとに複数データを用意した

は，XGBoost [4] で 27 候補点，TensorFlow [5] で 12 候補点，り，各実装から出力される結果を比較したりする必要がある．

scikit-learn のロジスティック回帰で 5 候補点である．実行時

さらに，学習を並列処理する場合，各実装が必要とする並列処には，複数のワーカ上で独立にこれらの実装が動作し，全探索

理環境を整える必要もある．scikit-learn [7] や Spark MLlib [8]

候補点の中から最適な設定を探索する．

といった，複数の機械学習アルゴリズムを提供するライブラリ

また，データは単一のフォーマットのみ用意すればよい．本

フレームワークは Apache Spark 上で動作し，21・22 行目に示すように Spark の汎用的なデータ形式で学習データを渡すことができる．学習における説明変数と目的変数は 27 行目のsetFeaturesCol と 28 行目の setTargetCol で指定する．
本フレームワークは，予測モデル探索を簡易な記述と単一
フォーマットのデータによって実行できることに加えて，二つの利点を有する．
（１）フレームワーク内の共通インターフェースと共通データフォーマットにより，少ない実装コストで新しい機械学習実装を追加できる．
（２）プロファイリングベースのジョブスケジューリングによって，台数に対してスケーラブル
である．これについては 3 章で詳しく紹介する．

3 本フレームワークのシステム設計
本章では，本フレームワークにおける更なる課題について議論する．ここまでは複数の機械学習実装にまたがった予測モデ
ル探索を簡易に記述できる点を議論したが，ここでは本フレー
ムワークの設計の概観と，設計において解決した二つの課題について議論する．3. 1 節では，本フレームワークのアーキテク
チャと動作過程を説明し，後に続く設計方針がどのように活用されるかを明確にする．3. 2 節と 3. 3 節では，次の二つの課題を解決するための設計方針を提案する．
一つ目の課題は新しい機械学習実装を追加するための実装コストである．次々と考案される新しいアルゴリズムを試すために，様々な機械学習実装を新たに組み込むことは重要である．
しかし，機械学習実装ごとに扱うデータ構造や，学習・予測を実行するインターフェースが異なるため，一般的にこれらを組み込むための実装コストは大きくなる．本フレームワークの設計では，共通のインターフェースと共通のデータフォーマット
を用いて，少ない実装で新たな機械学習実装を組み込むことを達成する．

図 2: 本フレームワークを構成する 4 つのモジュール

てるかを Scheduler に問い合わせる．Scheduler は受け取った
学習設定のセットに対して，全体の探索時間が短くなるような学習設定の割り当て方を決定し， Driver に返答する．Driver
はスケジューリングされた学習タスクを各 Executor に分配し，各 Executor で学習された予測モデルを回収する．回収された予測モデルは学習時と同様に全 Executor で検証され，ユーザの与えた評価指標に基づいて予測モデルを選択し，最適な予測モデルとして出力する．

3. 2 節では，Executors 上で新たな機械学習実装が動作するために，なるべく少ないコーディングで新たな機械学習実装を追加するための設計について議論する．また，3. 3 節で提案するスケジューリング手法は， Scheduler が予測モデル探索の実
行時間を短縮するために活用される．

3. 2 新しい機械学習実装の追加予測モデルの探索空間は，学習アルゴリズムが新しく考案されるごとに拡張していきたい．本フレームワークの特徴は，複二つ目の課題は並列度に対するスケールアウト性能である．

数に機械学習実装にまたがった予測モデル探索を，ユーザが簡予測モデル探索は並列計算により処理性能を向上させることが易に記述できる点だが，あらかじめいくつかの機械学習実装ができるが，安易なスケジューリング方式では理想的に性能向上組み込まれていなければユーザはこれを利用することができな

しない．本フレームワークのスケジューラは，サンプルデータ

い．ユーザとは別に，フレームワークの管理者がいることを想に対する学習時間をプロファイリングし，得られた時間から最定すると，管理者は新しい機械学習実装が考案されるごとにこ

適なタスクの割り当てを行う．

れをフレームワークに組み込むことで，ユーザが予測モデル探

3. 1 アーキテクチャ

索に用いることのできるアルゴリズムを拡張できる．そこで，我々のフレームワークは， 4 つのモジュールとそれらの連携からなるアーキテクチャで構成される（図 2）．まず，ユーザは分析対象データと予測モデルの評価指標を Driver に与える．
このとき，探索空間を指定することができる．次に Driver は学
習アルゴリズムとそのハイパーパラメータからなる探索空間を

Hyperparameter Tuner に与え，試すべき学習設定のセットを取得する．Hyperparameter Tuner は grid search や random

search ，その他のハイパーパラメータチューニングアルゴリズ
ムを組み込むことができ，これらのアルゴリズムによって試す
べき学習設定のセットを生成する．次に Driver は試すべき学
習設定のセットを複数の Executor に対してどのように割り当

ユーザが予測モデル探索を簡易に記述できるだけではなく，実装者が新しい機械学習実装を容易に追加できることは重要な課題である．
しかし，複数の機械学習実装ごとに学習・予測を実行するイ
ンターフェースや，扱う学習データのデータ構造が異なるため，新たに機械学習実装を追加するための実装の労力は大きい．例
えば，学習を呼び出す API が Python や Java などの異なる言語で提供されていたり，ライブラリの使用方法が異なったりといった，インターフェースの違いがある．また，学習データのデータ構造は，機械学習実装によって行指向や列指向などデー
タの格納方向の違いがあったり，32bit や 64bit といったビッ
トサイズの違いがあったりする．このように，機械学習ごとのを要する．
機械学習実装ごとの学習・予測の API のギャップは，フレー
ムワーク内で共通のインターフェースを用意することで解決する．フレームワークの管理者は，共通のインターフェースの学
習・予測メソッド内で追加したい機械学習実装の API を用いるようオーバーライドする．これにより，フレームワーク内部の実装からは共通のインターフェースを通じて学習・予測を呼び出せるため，少ない追加実装で新しい機械学習実装を追加でき，さらに分散処理を全く意識する必要がない．
データフォーマットのギャップは，共通のデータフォーマット

5
4

HIGGS
Model search
Profiling

15.0
12.5
10.0

3
2
1
0

SECOM
Processing time (min)どでこれらの差異を埋めるための追加実装が生じ，実装の労力

Processing time (hour)

ギャップが大きいため，学習実行やモデル検証，モデル選択な

2.6 %

7.5
5.0
2.5
0.0

7.2 %

図 3: 全体の処理時間に占めるプロファイリングの時間の割合で解決する．フレームワークの管理者は API を用いた学習や予測の直前で共通データフォーマットから機械学習実装のフォー

り当てて処理を実行させるときに，総処理時間などをコスト関マットに変換する．機械学習実装によっては，圧縮率がより高数として，これを最小にするジョブの割り当て方法を決定する

いデータに対して高速に処理を実行できる場合がある [4] ため，問題である．総処理時間は各マシンの処理時間の最大値として共通データフォーマットは対象となるデータや機械学習実装に表現することができ，各マシンが各ジョブを処理するために要

よって構造を決定すべきである．成分の多くが零である行列はする時間を制約条件として仮定する．本フレームワークでは各疎行列表現によって圧縮率が高くなる一方で，零の成分が少な

マシンの処理性能は均質として，各ジョブの処理時間のみを考い行列は祖行列表現では密行列表現によって圧縮率が高くなる．

える．また，job-shop-scheduling は NP 困難な問題であるこ本フレームワークは現在密行列表現のみサポートしているが，とが知られているため [?]，計算量を減らすために貪欲法によ

今後疎行列表現もサポートする予定である．

る近似手法を用いる．
制約条件となる各ジョブの処理時間は，スケジューリングに

3. 3 プロファイルベースのスケジューリング

前もって実行されるプロファイリング結果を使用する．本フ予測モデル探索は並列計算により処理性能を向上させること

レームワークは様々な機械学習実装を組み込むという点から，ができる．数百から数千の学習を実行すると，直列実行では数あらかじめひとつの学習に要する処理時間を推定することが難

日かかることもある．複数のマシンを使用して，同時に複数のしい．そこで，学習データから数パーセントサンプリングした学習を実行することで，性能を向上させることができる．

データを用いて実際に学習を実行し，その処理時間のプロファ

しかし，単純なスケジューリングだと理想的な性能向上につながらない．例えば，探索空間を均等に分割して各マシンに割イリングをとる．プロファイリング結果をその学習ジョブの処理時間として制約条件として使用する．

り当て，各マシンは割り当てられた探索空間に対して予測モデ

このスケジューリング手法は，全体の処理時間に対して十分ルを探索する方法などを考える．学習アルゴリズム，ハイパー

小さな時間で完了するプロファイリングを実行するだけで，全パラメータの違いによって，必要な処理時間は大きく変動する

体の処理性能を向上できる点で有用である．図 3 に，全体の処ため，割り当てられた探索空間を探索し終える時間が各マシン

理時間に占めるプロファイリングの処理時間の割合を示した．

ごとに大きく変動する．このとき，最も処理の遅いマシンはそこの予備実験は， HIGGS と SECOM のデータセットをそれ

れ以外のマシンを待たせることになり，結果的に，最も処理のぞれ 1%と 3%サンプリングしたデータに対して，予測モデル探遅いマシンに全体の性能が引きずられ，処理時間は理想的に縮索と同じ学習設定の学習実行をプロファイリングした結果であ

まらない．

る．黄色の斜線部はプロファイリングに要した時間であり，全本フレームワークはプロファイリングベースのスケジューリ

体の処理時間に対して最大 8%に過ぎず十分に小さい．探索しングを行う．台数に対して理想的に性能向上させるために，各たパラメータ等の詳しい実験設定は，5 章で記す設定と同じでマシンに均等な処理時間の学習タスクを割り当てることを目標

ある．

とする．これは，全マシンの処理時間の最大値が最小となるよ

本スケジューリングの議論は静的なスケジューリングに限定

うなタスクの割り当て方を決定する最適化問題として捉えるこしたが，動的なスケジューリングにおいても本スケジューリンとができる．本フレームワークは，あらかじめデータセットのグと同様に処理時間を予測する必要がある．動的なスケジュー

サンプルデータに対する学習のプロファイリングをとり，学習

リングでは，ジョブを終了したワーカが次に実行すべきジョブ

タスクの処理時間を最適化の制約条件として用い，最適化自体を逐一取得する方法で，実行中でないジョブが空になるまではは貪欲法による解法を用いる．

ノードは処理を終えることなく動作し続ける．このような動的スケジューリングは job-shop-scheduling [19] と呼ばれる最なスケジューリングでも，最後にワーカに割り当てられたジョ適化問題に帰着され，本フレームワークでは貪欲法でこれを解ブが長時間を要する学習であった場合に，他のワーカはこのく．job-shop-scheduling は，複数のジョブを複数のマシンに割

ワーカの処理完了を待つ時間が発生することがあるため，本スケジューリングで議論したように処理時間を予測する必要がを目標とする．パラメータ探索空間の中で，高い精度の予測モある．

デルを得られる可能性がより高い学習に多くの計算リソースを割く bandit resource allocation と呼ばれるスケジューリング

4 関連研究本章では本研究の関連研究として，予測モデル探索を複数マ
シン上で分散実行するためのフレームワークと，ハイパーパ
ラメータチューニングにおいて試すべきパラメータを決定するための手法について本フレームワークとの関連を述べる．予
測モデル探索を実行するフレームワークとして，大規模デー
タに対するスケーラブルな学習を可能にする Spark MLlib や，scikit-learn の学習を分散して並列に実行する spark-sklearn といったフレームワークについて論じる．ハイパーパラメータ手法を用いる．一方で，我々のフレームワークは，実行するすべての学習タスクを最短で処理するタスク割り当てを行うスケ
ジューリング手法を用いる．

HyperDrive [22] は bandit resource allocation を発展させたスケジューリング手法を採用する．将来達成可能な予測精度に基づいて学習タスクにリソースを割り当てることにより，学習を繰り返すたびに予測精度が逆転する場合でも，適切にリソースを割り当てることを可能にする．

4. 2 ハイパーパラメータチューニングの手法

チューニングの手法は，静的にパラメータの組み合わせを決定

あるハイパーパラメータ探索空間から，高い精度の予測モデするグリッドサーチやランダムサーチといった手法や，これまルを探索するために，試すべき学習設定を決定するアルゴリズ

での精度の履歴から試すべき組み合わせを動的に決定するベイムが存在する．古くから存在するシンプルな手法では，グリッズ最適化を用いる手法が存在する．

ドサーチとランダムサーチ [23] がある．グリッドサーチは各ハ4. 1 予測モデル探索の分散フレームワーク
Spark MLlib [8] は複数のハイパーパラメータから自動的に精度の高い予測モデルを探索する分散フレームワークの一つである．Spark MLlib はそのひとつで，膨大なデータ量に対して学習の処理性能がスケールアウトすることを目標としたフレームワークである．内部でいくつかの機械学習アルゴリズムを提供しており，それぞれの学習アルゴリズムに対して最適なハイパーパラメータを自動で探索する機能を提供する．分散して一つのモデルを学習するため，膨大な予測モデルを学習する際には繰り返しシャッフル処理が発生する．また，新しい機械学習実装を追加する場合，分散データに対する学習処理の実装が必要なため，第三者の機械学習実装を内部の実装を変えずに組み込むことが難しい．我々のフレームワークは，単一のモデルをシャッフル処理なしに実行する点という点と，第三者の機械学
習実装を容易に組み込める点で異なる．

spark-sklearn [11] は Apache Spark のワーカ上で scikitlearn を動作し，複数の予測モデルの学習を並列に実行して予測モデルを探索する．spark-sklearn は scikit-learn が提供する

イパーパラメータで探索する候補点を静的に決定し，それぞれのハイパーパラメータの全通りを順に探索する手法である．ランダムサーチは各ハイパーパラメータで探索する範囲を決定し，それぞれの探索範囲から指定する回数だけランダムに生成した値の組み合わせについて探索する手法である．
探索するハイパーパラメータを静的に決定する手法に対して，過去の達成精度から次に探索すべきハイパーパラメータを動的に決定する手法 [12–15] も存在する．ベイズ最適化を用いる手法 [12, 13] や深層強化学習を用いる手法 [15] などがあるが，中でもベイズ最適化は広く用いられ，Auto-WEKA [18]や Hyperopt [16]，Optuna [17] などのライブラリで採用されている．
これらのハイパーパラメータチューニングの手法は，我々のフレームワークの Hyperparameter Tuner に組み込むことで利用可能であり，本論文で提案するスケジューリング手法と組み合わせることができる．

5 評価実験

複数の機械学習アルゴリズムに対して探索でき，アルゴリズム

本章では，これまで議論してきた本フレームワークの特徴をごとに最適なハイパーパラメータチューニングを探索する．ス

実験によって評価する．ここまで，本フレームワークが複数のケジューリング方法は，探索する学習設定をワーカの数だけ均機械学習実装にまたがった予測モデル探索を，ユーザが簡易に等に分割しそれぞれに割り当てる方法である．本フレームワー

記述できることを示し，加えて新しい機械学習実装を容易に組

クは，複数の機械学習実装を組み込める点と，複数のアルゴ

み込むことができること，スケジューリングによりスケールア

リズムにまたがって同時に予測モデル探索を実行できる点と，ウト性能があることを議論した．本章では，二値分類の教師あプロファイリングベースのスケジューリングが可能である点でり学習のデータセットを用いて，予測モデル探索を実行し，提spark-sklearn と異なる．

案内容の有用性を示す．

MLbase [20] は一般的に複雑になりやすい分散システム上で

5. 1 節には実験に用いた環境を示す．本フレームワークにの予測モデル構築を，シンプルな記述で実行できることを目標

XGBoost [4] と， TensorFlow [5]， scikit-learn [7] を組み込としたフレームワークである．前処理やモデル検証，モデル選

み，４つの機械学習アルゴリズムに対してグリッドサーチを用

択などの複雑な処理を，ユーザが簡単な記述で実行することをいて計 1211 個の学習設定候補点に対する予測モデル探索を行っ可能にする．TuPAQ [21] は MLbase の上に実装されたフレー

た．学習に使用するデータセットは二値分類予測の教師あり学

ムワークで，短い時間で精度の高い予測モデルを取得すること

習用のデータセットである HIGGS 1 と SECOM 2 を用いた．

scikit-learn の

機械学習アルゴリズム実装

行数

勾配ブースティング木

55 行

928 行

多層パーセプトロン

131 行

629 行

ロジスティック回帰

144 行

905 行

ランダムフォレスト

142 行

680 行

学習アルゴリズム部分

5. 2 節には評価結果を示す．一つ目の評価では新しい機械学習

32
28
24
20
16
12
8
4
2

HIGGS

Profile-based scheduling
Random scheduling
Ideal scaling

Speedup

表 1: 機械学習アルゴリズム実装の追加に要した行数

64.2%

63.9%

70.0%

8

16
Cores

12 4

実装を組み込むためのコード行数を計測する．本フレームワー
リズムを直接実装した場合と比較して大幅に短縮できる．二つ目の評価ではスケジューリングによる性能向上を計測する．本
フレームワークはランダムなスケジューリングと比較して，最大で 1.7 倍高速になった．三つ目の評価では処理速度と達成精度を既存のフレームワークと比較する．本フレームワークは他のフレームワークと同等の精度を達成しながら， HIGGS デー
タセットで最も早い時間で探索を終え，SECOM データセット

32
28
24
20
16
12
8
4
2

で二番目に早い結果となった．

5. 1 実 験 準 備

32

SECOM
Profile-based scheduling
Random scheduling

65.5%

Ideal scaling

Speedup

クは 55 行から 144 行で記述することができ，仮に学習アルゴ

64.1%

77.2%
69.4%

79.6%

12 4

8

16
Cores

32

図 4: コア数を変化させた場合のフレームワークの処理性能の変化

本実験では次の４つの学習アルゴリズムに関してグリッド
サーチを用いて予測モデル探索を実行した．一つ目は勾配ブー

表 2: 比較実験で本フレームワークに組み込んだ実装とアルゴリズムのスティング木で，XGBoost [4] を組み込んで 8 つのハイパーパ

対応関係

ラメータに関して，計 864 候補探索した．二つ目は多層パーセ

アルゴリズム(XGB, TF, sklearn)

プトロンで，TensorFlow [5] を組み込んで 4 つのハイパーパラ
メータに対して計 324 候補探索した．三つ目はロジスティック
回帰で，scikit-learn を組み込んで 1 つのハイパーパラメータに対して計 5 候補探索した．四つ目はランダムフォレストで，Our framework

Ourframework(sklearn)

勾配ブースティング木

XGBoostscikit-learn

多層パーセプトロン

TensorFlow

scikit-learn

ロジスティック回帰

scikit-learn

scikit-learn

ランダムフォレスト

scikit-learn

scikit-learn

scikit-learn を組み込んで 3 つのハイパーパラメータに対して
計 18 候補探索した．
学習に使用するデータセットは UCI データセットリポジト
リ [24] から，二値分類予測の教師あり学習用のデータセット
である HIGGS と SECOM を用いた．HIGGS は物理現象のシミュレーションから得られた数値データでからなり，我々は100,000 インスタンスを学習，検証，テストデータとしてそれぞれ用いた．SECOM は半導体の製造工程のセンサ情報から得られた数値データからなり，1,567 インスタンスを学習，検証，テストにそれぞれ 6 : 2 : 2 に分割して使用した．また，プロファ
イリングに用いた学習データは， HIGGS は 1% ， SECOM
は 3%のサンプリングデータを使用した．
実験環境は，Intel Xeon E3-1280 v5 CPU，32GB メモリ，

10Gbps のネットワークで構築された 8 台のマシンで行った．
また，Ubuntu 16.04，Apache Spark 2.3.0 ，Apache Hadoop

3.1.0，XGBoost 0.8，TensorFlow 1.8.0，scikit-learn 0.18.1 を使用した．

クに組み込んだ際の実装コード行数を示す．比較対象として，
自分でアルゴリズムを記述する場合の参考として，scikit-learnと Spark MLlib [8] の学習アルゴリズム部分のコード行数を表示する．本フレームワークは 55 行から 144 行で新しい機械学
習実装を追加でき，直にアルゴリズムを実装するのに比べて大幅に記述量を減らせていることがわかる．
二つ目の評価では，スケジューリングによるパフォーマンス
向上を示す．図 4 に並列度を変化させた場合の予測モデル探索に要した時間を示す．本フレームワークのプロファイリング
ベースのスケジューリングを，全ての学習ジョブをランダムなワーカーに割り当てるスケジューリングと比較する．x 軸はコア数を示し，y 軸は直列で実行したときの処理速度を 1 としたときの性能向上の比率を示す．プロファイルベースのスケ
ジューリングによって， HIGGS では 32 並列の実行で理想の処理性能の 64.1%の性能を達成し，ランダムなスケジューリン
グと比べて 1.7 倍高速になることを示した．SECOM では 32

5. 2 評 価 結 果
一つ目の評価では，新しいライブラリを少ない実装で組み込めることを示す．表 1 に 4 つのアルゴリズムを本フレームワー

並列で理想の 65.5%の性能を達成し，ランダムなスケジューリ
ングと比べて 1.39 倍高速になった．
最後に本フレームワークの達成する予測精度と 32 並列実行

HIGGS
Spark MLlib

0.801

spark-sklearn

0.818(XGB,TF,sklearn)

Our framework

0.806

Our framework)
Worst result *0.811(sklearn

Spark MLlib

HIGGS
87.2

spark-sklearn

3.7

Our framework

3.5(XGB, TF, sklearn)
Our framework(sklearn)

0.674

0.0

0.2

0.4
0.6
Achieved highest AUC

0.8

1.0

SECOM
Spark MLlib

0.684

Our framework(XGB,TF,sklearn)
Our framework)
Worst result **spark-sklearn

6.3(sklearn)

0.4
0.6
Achieved highest AUC

80

200
300
400
Execution time (min)

500

79.2
0

100

図 6: 既存フレームワークとの提案フレームワークのモデル探索時間

0.614

0.2

40
60
Execution time (hour)

15.6

0.685

(sklearn

0.0

SECOM
550.6

Our framework

0.674

20

Spark MLlib
Our framework(XGB, TF, sklearn)

0.66

spark-sklearn

6.9
0

0.8

1.0

* Searched for multilayer perceptron on MLlib** Searched for multilayer perceptron on TensorFlow (Our framework)

図 5: 既存フレームワークとの提案フレームワークの達成精度

ど三種類の実装を組み込んだ実験の方が scikit-learn のみを組
み込んだ実験よりも高速であることから確かめられる．また本
フレームワークには Python の学習を実行するためのオーバーヘッドが大きく，改善の余地がある．図 6 で Our framework

での処理性能を既存フレームワークと比較する．比較する既存(scikit-learn) と spark-sklearn を比較すると，内部の学習は同フレームワークは spark-sklearn と Spark MLlib とする．我々

じ scikit-learn が動作しているにも関わらず，本フレームワーのフレームワークを用いた実験は二種類実行し，3 種類の機械

クの処理時間が長いことから，学習以外の処理に大きな時間が学習実装（XGBoost ，TensorFlow ，scikit-learn）を 4 つのかかっていることがわかる．調査の結果，Python プロセスを立アルゴリズムを実装した実験と，scikit-learn のみを用いて 4

ち上げる際の処理と Python プロセスにファイルを介して学習

つのアルゴリズムを実装した実験を行う．それぞれの実験でアデータを受け渡す処理が大きな律速となっていることがわかっ

ルゴリズムと実装の対応を表 2 に示す．

ている．我々のフレームワークに三種類の実装を組み込んだ実達成精度の比較実験から，全フレームワークにおいて同等の験でも，Python の機械学習実装には同様のオーバーヘッドが精度を達成していることを示す．比較に用いた精度評価指標は生じているにもかかわらず，HIGGS の実験では spark-sklearn

Area Under the ROC Curve (AUC) で，高いほど良い予測精よりも早い処理速度を達成できた．

度を表す．図 5 から，多層パーセプトロンのみを用いた探索により得られた精度 (Worst result）と比較して，複数のアルゴ

6 まとめと今後の課題

リズムに対して探索した結果の方がより良い精度を達成できて

我々は複数の機械学習実装にまたがって最適な予測モデルをいることが示された．また，全フレームワークは同じアルゴリ

探索する分散処理フレームワーク提案した．このフレームワー

ズムに対して探索を実行しており，それぞれが同等の精度を達

クは次の二つの利点を有する．
（１）フレームワーク内の共通イ成していることもわかった．

ンターフェースと共通データフォーマットにより，少ない実装

本フレームワークは 1211 個の学習設定に対して HIGGS

コストで新しい機械学習実装を追加できる．
（２）プロファイリ

データセットは 3.5 時間， SECOM データセットは 15.6 分

ングベースのジョブスケジューリングによって並列度に対してで予測モデル探索を完了することができた．図 6 に既存フスケーラブルである．また，評価実験により，複数の機械学習

レームワークと比較した処理時間の結果を示す．横軸は学習と実装にまたがった予測モデル探索の実装を 54 行で記述できる

検証を含めたモデル探索全体の処理時間を示す．Our frame-

ことを示し，新たな機械学習実装を 55 行から 144 行で記述すwork (XGB,TF,sklearn) は我々のフレームワークに XGBoost

ることができることを示した．プロファイリングベースのスケ，TensorFlow ，scikit-learn の 3 つの機械学習実装を組み込ん

ジューリングは，ランダムなスケジューリングと比較して，最だ実験の結果で， Our framework (sklearn) は scikit-learn の

大 1.7 倍性能を向上させることができた．既存フレームワーク

みを組み込んだ際の実験である．

と比較した結果，Python プロセスのオーバヘッドがあるにも我々のフレームワークは複数の機械学習実装を組み込めることによって，処理速度の速い最新の機械学習実装を選択して組かかわらず，HIGGS データセットでは最も早く処理を完了し，

SECOM データセットでは二番目に早い結果となった．

み込むことができ，予測モデル探索を高速化できる．これは，実今後の課題のひとつに，本フレームワークと異なる言語の験の図において我々のフレームワーク同士の結果を比較すると，機械学習実装を追加する際に生じるオーバヘッドの改善が考scikit-learn よりも処理速度が速いとして知られる XGBoost なえられる．プロセス呼び出しのオーバヘッドは，ワーカでプロ

セスを立ち上げたまま連続して学習を実行するなどの工夫で改善できる．また，ファイルを介したデータの受け渡しのオー
バヘッドは，シリアライズ・デシリアライズのコストが小さい

Apache Arrow 3 などのフォーマットを使用することで改善が[9]見込まれる．
もうひとつの課題として，プロファイリングで用いるデータのサンプリング率の調整が考えられる．データのサンプリング率を増やすと，プロファイリング自体に時間がかかり全体の実[10]

行時間が伸びる一方で，サンプリング率を減らし過ぎると，実行時間の予測精度が悪化し，総実行時間が伸びる恐れがある．
さらに，実行時間がデータサイズに比例しない学習に対して，[11]

データサイズを変動させた学習のプロファイリングを取ること
で，実行時間の予測精度を高めることなども考えられる．
謝

[12]

辞
[13]

本研究は JSPS 科研費 16K12406 の助成を受けたものです．本
研究の一部は、国立研究開発法人新エネルギー・産業技術総合開発機構（NEDO）の委託業務として行われました．

[14]

文

[15]

献

[1] Jaime Parra and Christopher Kiekintveld. Initial exploration of machine learning to predict customer demand in
an energy market simulation, Vol. WS-13-15, pp. 29–32. AI
Access Foundation, 1 2013.
[2] Huseyin Ince and Theodore B Trafalis. Kernel principal
component analysis and support vector machines for stock
price prediction. IIE Transactions, Vol. 39, No. 6, pp. 629–
637, 2007.
[3] H. Brendan McMahan, Gary Holt, D. Sculley, Michael
Young, Dietmar Ebner, Julian Grady, Lan Nie, Todd
Phillips, Eugene Davydov, Daniel Golovin, Sharat
Chikkerur, Dan Liu, Martin Wattenberg, Arnar Mar
Hrafnkelsson, Tom Boulos, and Jeremy Kubica. Ad click
prediction: A view from the trenches. In Proceedings of the
19th ACM SIGKDD International Conference on Knowledge Discovery and Data Mining, KDD ’13, pp. 1222–1230,
New York, NY, USA, 2013. ACM.
[4] Tianqi Chen and Carlos Guestrin. Xgboost: A scalable tree
boosting system. In Proceedings of the 22nd ACM SIGKDD
international conference on knowledge discovery and data
mining, pp. 785–794. ACM, 2016.
[5] Martı́n Abadi, Ashish Agarwal, Paul Barham, Eugene
Brevdo, Zhifeng Chen, Craig Citro, Greg S Corrado, Andy
Davis, Jeﬀrey Dean, Matthieu Devin, et al. Tensorflow:
Large-scale machine learning on heterogeneous distributed
systems. arXiv preprint arXiv:1603.04467, 2016.
[6] David H Wolpert, William G Macready, et al. No free lunch
theorems for search. Technical report, Technical Report
SFI-TR-95-02-010, Santa Fe Institute, 1995.
[7] Fabian Pedregosa, Gaël Varoquaux, Alexandre Gramfort,
Vincent Michel, Bertrand Thirion, Olivier Grisel, Mathieu
Blondel, Peter Prettenhofer, Ron Weiss, Vincent Dubourg,
et al. Scikit-learn: Machine learning in python. Journalof Machine Learning Research, Vol. 12 Oct, pp. 2825–2830,
2011.
[8] Xiangrui Meng, Joseph Bradley, Burak Yavuz, Evan Sparks,

3 https://arrow.apache.org/

[16]

[17]
[18]

[19]

[20]

[21]

[22]

[23]

[24]

Shivaram Venkataraman, Davies Liu, Jeremy Freeman,
DB Tsai, Manish Amde, Sean Owen, et al. MLlib: Machine learning in apache spark. The Journal of Machine
Learning Research, Vol. 17, No. 1, pp. 1235–1241, 2016.
By Lee Yang, Jun Shi, Bobbie Chern, and Andy
Feng.
Open sourcing tensorflowonspark: Distributed
deep learning on big-data clusters, February 2017.
http://yahoohadoop.tumblr.com/post/157196317141/opensourcing-tensorflowonspark-distributed-deep.
Nan Zhu and Tianqi Chen. Xgboost4j: Portable distributed xgboost in spark, flink and dataflow, March2016.
http://dmlc.ml/2016/03/14/xgboost4j-portabledistributed-xgboost-in-spark-flink-and-dataflow.html.
Scikit-learn integration package for apache spark. https://github.com/databricks/spark-sklearn (accessed Jan.
10, 2019).
Donald R Jones, Matthias Schonlau, and William J Welch.
Eﬃcient global optimization of expensive black-box functions. Journal of Global optimization, Vol. 13, No. 4, pp.
455–492, 1998.
Jasper Snoek, Hugo Larochelle, and Ryan P Adams. Practical bayesian optimization of machine learning algorithms.
In Advances in neural information processing systems, pp.
2951–2959, 2012.
Yi-Qi Hu, Yang Yu, and Zhi-Hua Zhou. Experienced
optimization with reusable directional model for hyperparameter search. In IJCAI, pp. 2276–2282, 2018.
Baker Bowen, Gupta Otkrist, Naik Nikhil, and Raskar
Ramesh. Designing neural network architectures using reinforcement learning. Proceedings of 5th International Conference on Learning Representations (ICLR 17), 2017.
James Bergstra, Dan Yamins, and David D Cox. Hyperopt: A python library for optimizing the hyperparametersof machine learning algorithms. In Proceedings of the 12th
Python in Science Conference, pp. 13–20, 2013.
Define-by-run hyperparameter optimization framework.
https://optuna.org/ (accessed Jan. 10, 2019).
Chris Thornton, Frank Hutter, Holger H. Hoos, and Kevin
Leyton-Brown. Auto-WEKA: Combined selection and hyperparameter optimization of classification algorithms. In
Proceedings of the 19th ACM SIGKDD International Conference on Knowledge Discovery and Data Mining, KDD’13, pp. 847–855, New York, NY, USA, 2013. ACM.
M. R. Garey, D. S. Johnson, and Ravi Sethi. The complexity of flowshop and jobshop scheduling. Mathematics
of Operations Research, Vol. 1, No. 2, pp. 117–129, 1976.
Tim Kraska, Ameet Talwalkar, John C Duchi, Rean Griffith, Michael J Franklin, and Michael I Jordan. MLbase:
A distributed machine-learning system. In CIDR, Vol. 1,
2013.
Evan R. Sparks, Ameet Talwalkar, Daniel Haas, Michael J.
Franklin, Michael I. Jordan, and Tim Kraska. Automating
model search for large scale machine learning. In Proceedings of the Sixth ACM Symposium on Cloud Computing,
SoCC ’15, pp. 368–380, New York, NY, USA, 2015. ACM.
Jeﬀ Rasley, Yuxiong He, Feng Yan, Olatunji Ruwase, andRodrigo Fonseca. HyperDrive: Exploring hyperparameterswith pop scheduling. In Proceedings of the 18th International Middleware Conference, Middleware, Vol. 17, 2017.
James Bergstra and Yoshua Bengio. Random search for
hyper-parameter optimization. Journal of Machine Learning Research, Vol. 13 Feb, pp. 281–305, 2012.
Dua Dheeru and Efi Karra Taniskidou. UCI machine learning repository, 2017.