NECは7月3日、ベクトル型コンピュータに適した、機械学習を高速実行するデータ処理技術を開発したと発表した。同技術により、複数サーバを接続したクラスタ上のSparkでの利用と比較し、50倍以上高速に機械学習を実行できるという。

連携のイメージ図

今回、大規模な機械学習で用いられる「疎行列」というデータ構造に着目した演算技術と通信技術を開発することで、機械学習においてもベクトル型コンピュータが持つ性能を最大限に発揮した高速実行を可能としている。

従来、大規模データを用いて機械学習を行う際は「疎行列」と呼ばれるデータが用いられ、通常の表形式ではなく、ゼロとなる部分はデータを保持しない構造とすることでデータ量を削減できるため、大規模な行列でも効率よく扱うことが可能になる。一方、ベクトル型コンピュータは複数の処理を同時に行うことで高速化を実現しているため、1回の処理量が十分に大きくないと効率の低下につながるという。

機械学習で用いられる疎行列には、ゼロでない部分の数が行ごとに大きく異なるという特徴があるため、単純に行単位で処理を行うとゼロでない部分が少ない行では処理効率が下がるという課題があった。新技術では、ゼロでない部分の数に応じて、列単位で処理を行うフォーマットと行単位で処理を行うフォーマットを使い分けるハイブリッドフォーマットを開発し、データの処理量を常に保つことで、課題を解決した。

疎行列演算を高速化するデータ処理方式

また、機械学習を高速に行うためには、データを分割し、複数のプロセッサで並列に処理を行い、得られた処理結果は再度1つにまとめるが、その際はプロセッサ間で通信を行う必要があるため、通信時間が並列処理による性能向上を妨げるということも課題となっていた。

そこで、機械学習の入力となる疎行列に注目し、元々の疎行列はすべての列でどこかの行に値があるような行列だったが、これを分割するとどの行にも値を持たない列が発生。機械学習処理では、列の値に対応して処理結果が更新されるため、値を持たない列に対応する部分は更新されず、このような更新されない部分を通信から省くことで、通信量の削減を実現したという。

通信量の削減を実現するデータ通信方式

さらに、機械学習を行う各種プログラムから上記の技術を利用できるミドルウェアを開発。ミドルウェアはC++とMPI(サーバ同士の通信を高速に行うためのライブラリ)を用いて実装することで効率的に実行できるほか、Sparkと同様に複数のプロセッサにまたがる並列処理を記述できるように設計されている。

同ミドルウェアはSparkやPythonから、これらが提供する機械学習ライブラリ(ある機械学習の機能をほかのプログラムから利用できるよう、部品として格納したもの)と同じ形式で呼び出すことが可能。これらのライブラリのユーザーは、特別なプログラミングなしで、ミドルウェアを利用することができるとしている。

機械学習にかかる実行時間について、複数サーバを接続したクラスタ上でSparkを実行した場合と、NEC製のベクトル型コンピュータ「SX-ACE」上で本ミドルウェアを実行した場合を比較。ミドルウェアの効率の良さと、ベクトル型コンピュータを用いた高速化により、同一コア数(64コア)での比較で50倍以上高速に実行できることを確認した。

同一コア数(64コア)におけるデータ処理速度の比較

これにより、例えばWeb広告出稿の最適化やレコメンド、文書分析の分野で分析が短時間で行えるようになるため、タイムリーに結果を利用できるほか、少数のサーバにより低コストな分析が可能になり、大企業以外にも幅広いユーザ層で大規模なデータ分析が可能になるという。

同社では、次世代ベクトル型コンピュータの開発を行っており、幅広い価格・性能レンジで提供を予定しており、同技術を適用することで、従来ベクトル型コンピュータが得意としてきた数値計算領域に加え、機械学習などの大規模データ分析を対象とした領域へも活用を拡大していく考えだ。