NEC、ベクトル型コンピュータに適した機械学習向けデータ処理技術を開発

日本電気株式会社(以下、NEC)は、ベクトル型コンピュータ(注1)に適した、機械学習を高速実行するデータ処理技術を開発した。同技術により、複数サーバを接続したクラスタ上のSpark(注2)での利用と比較し、50倍以上高速に機械学習を実行できるという。

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

また同技術を取り込んだミドルウェアを開発し、同技術の利用を容易にした。同ミドルウェアはSparkやPython(注4)から呼び出すことができ、これらのユーザは特別なプログラミング無しで使用できるという。

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

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

新技術の特長は以下の通り。

  1. ベクトル型コンピュータに適した方式を開発し疎行列演算を高速化
    大規模データを用いて機械学習を行う際、「疎行列」と呼ばれるデータがよく用いられる。通常の表形式ではなく、ゼロとなる部分はデータを保持しない構造とすることでデータ量を削減できるため、大規模な行列でも効率よく扱うことが可能となる。

    一方、ベクトル型コンピュータは、複数の処理を同時に行うことで高速化を実現しているため、一回の処理量が十分大きくないと効率の低下につながる。機械学習で用いられる疎行列には、ゼロでない部分の数が行ごとに大きく異なるという特徴があるため、単純に行単位で処理を行うと、ゼロでない部分が少ない行では処理効率が下がるという課題があった。

    同技術では、ゼロでない部分の数に応じて、列単位で処理を行うフォーマットと行単位で処理を行うフォーマットを使い分けるハイブリッドフォーマットを開発し、データの処理量を常に大きく保つことで、この課題を解決したという。

    NEC、ベクトル型コンピュータに適した機械学習向けデータ処理技術を開発
    図1. 疎行列演算を高速化するデータ処理方式
  2. 疎行列を対象とした機械学習における通信量を削減
    機械学習を高速に行うためには、データを分割し、複数のプロセッサで並列に処理を行う。得られた処理結果は再度一つにまとめるが、その際、プロセッサ間で通信を行う必要があるため、この通信時間が並列処理による性能向上を妨げるという課題があった。

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

    NEC、ベクトル型コンピュータに適した機械学習向けデータ処理技術を開発
    図2. 通信量の削減を実現するデータ通信方式
  3. 上記技術を取り込んだミドルウェアを開発
    機械学習を行う各種プログラムから上記の技術を容易に利用できるミドルウェアを開発した。同ミドルウェアはC++とMPI(注5)を用いて実装することで効率的に実行できる他、Sparkと同様複数のプロセッサにまたがる並列処理を容易に記述できるように設計されている。さらに、同ミドルウェアはSparkやPythonから、これらが提供する機械学習ライブラリ(注6)と同じ形式で呼び出すことが可能。これらのライブラリのユーザは、特別なプログラミング無しで、同ミドルウェアを利用することができるという。

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

    NEC、ベクトル型コンピュータに適した機械学習向けデータ処理技術を開発
    図3. 同一コア数(64コア)におけるデータ処理速度の比較

注1 ベクトル型コンピュータ:ベクトルプロセッサという高速プロセッサを搭載し、一つのベクトル命令で配列要素を一括処理することにより大規模・複雑な計算を高速処理できるコンピュータ。
注2 Spark:Apache Software Foundationが開発・公開しているオープンソースの分散処理基盤。
注3 疎行列:行列のごく一部だけに値があり、それ以外の部分はゼロとなる行列
注4 Python:データ分析などでよく用いられるプログラミング言語
注5 サーバ同士の通信を高速に行うためのライブラリ
注6 ある機械学習の機能をほかのプログラムから利用できるよう、部品として格納したもの。
注7 ロジスティック回帰はCriteo社が公開しているデータセットを、特異値分解とK-meansは英文Wikipedia全文を対象に処理を行った。Sparkはバージョン1.6.0を利用し、Xeon E5 2630v3上で実行。

【関連リンク】
日本電気(NEC)

Previous

ノキアの通信事業者のためのIoTプラットフォーム ーMWC上海2017 レポート4

NEC、小田急シティバスとウェアラブル端末による生体情報を活用したバスの安全運行支援の実証実験を実施

Next