ビッグデータ

ビッグデータとは

ビッグデータとは、その名のとおり巨大なデータ集合のことを表します。例えば、多数のセンサーから得られる時系列のストリーミングデータや、画像のデータセット、つぶやきなどのソーシャルデータなどがよくビッグデータとして扱われます。また、各種センサーやGPSなどの衛星機器、防犯カメラや医療デバイス、さらには金融市場などから送られる多様な非構造化データがビッグデータになり得ます。

高い計算能力をもつマシンの登場やデータストレージの価格低下により、これまで扱う対象とならなかった形式や大規模なデータについても保存や解析ができるようになりました。これまでより大規模なビッグデータを解析することによって、価値の高い情報を見つけることや深い洞察に基づいた意思決定を行うことが可能となります。そのため、ビッグデータの活用が注目されています。

ビッグデータの活用事例

ビッグデータの解析は以下のような業界で行われ、業務の効率化や意思決定に繋がっています。

交通 医療 金融
  • 自動運転
  • 故障診断
  • 危険予知
  • 故障原因診断
  • 医療診断
  • 健康診断
  • 医用画像処理
  • 株価予測
  • 不正侵入検知
  • リスク分析
マーケティング 電機、機械 流通
  • 自然言語解析
  • 重要顧客の発見
  • 工場の機械の故障予知
  • 寿命予測
  • 施設や商品配置の最適化
  • 消費者行動予測

身近なビッグデータの活用例として、Web ショッピングにあるレコメンド機能(推薦システム)や、公共構造物のひずみや振動解析による建築物の状態分析、信号や踏切の待ち時間の最適化による渋滞解消などもあります。これらのビッグデータ解析を行う際には、各ストレージに数ギガバイトからテラバイトのデータが収められ、日々数GB成長するような場合もあります。

ビッグデータを扱う上での問題点

ビッグデータはデータのサイズが大きく人的ミスが起こりやすいため、実際の解析をする際には、ひとつひとつ手作業ではなくプログラムによって作業の自動化をする必要があります。ただし、自動処理を行う際には時間的/空間的な計算量の問題が起こります。例えば、データ収集、保管、ファイル I/O、解析のそれぞれのプロセスにおいて、数時間から数ヶ月といった膨大な処理時間がかかることがあります。また、大きいサイズのベクトルや行列を使って計算をする際に、メモリ不足が起こることもあります。ビッグデータを解析する際には、これらの問題に対応した上で解析を行う必要があります。

しかし、処理時間の短縮やメモリ不足解消は簡単な課題ではありません。処理時間を短縮するためには、よく計算の並列化が行われます。並列化には、通常、マシンリソースに合ったプログラミング言語の選定や並列計算に特化したコーディングを行う必要があります。例えば、GPUを使って2次元のフーリエ変換を計算するために、数百行ものコードを必要とする言語もあります。

MATLABを使ったビッグデータ解析

標準的なアルゴリズムは、ビッグデータの処理に対しては時間的およびメモリ消費の観点からも適切でないことが多々あります。データや計算方法に応じて、適切なビッグデータ解析のための方法を一つ、あるいは複数組み合わせて使用することで、ビッグデータを効率よく処理して価値のある情報を引き出すことができます。MATLAB®はビッグデータ解析の課題解決に役立つ様々な機能を提供しています。

ビッグデータを扱う上でのキーポイントは、大きく3つのカテゴリに分けることができます。

  1. メモリとデータアクセス
  2. プログラミング手法
  3. プラットフォームサポート

各カテゴリについて、MATLAB が提供している機能には以下のようなものがあります。

メモリとデータアクセス

プログラミング手法

プラットフォームサポート

  • 64ビットプロセッササポート
  • メモリ/ディスクマップ変数
  • マルチスレッド対応関数
  • データベースアクセス
  • 大規模データ読み込み
  • ストリーミング処理
  • ブロック処理
  • スパース行列
  • 並列計算
  • SPMD、分散配列
  • MapReduce
  • マルチコア、GPU
  • クラスタ
  • クラウドコンピューティング
  • Hadoop

また、これらのカテゴリ以外にも、ビッグデータの解析手法として機械学習の手法を用意しています。

機械学習は、データマイニングにおいてよく応用されている手法ですが、ビッグデータに対する予測モデルを構築したり重要度の高い変数を見つけたりすることにも有効です。機械学習には様々なアルゴリズムがありますが、これらはStatistics and Machine Learning Toolbox™およびNeural Network Toolbox™により利用することができます。

ビッグデータ解析のキーポイント1: メモリとデータアクセス

  1. 64ビットプロセッササポート

    MATLABの64ビット版は、32ビット版に比べて最大で2000倍程度までメモリ上に配置できるデータ量を増やすことができます。32ビットアプリケーションの場合は2GBまでというOS側の制限がありますが、64ビットの場合はOSが認識している物理メモリのサイズまで割り当てることができます。Windowsの場合、デスクトップエディションで500GB、 サーバーエディションで4TBまでメモリを増やすことができます。これにより、ビッグデータの利用を可能にします。

  2. メモリマップ変数

    MATLABのmemmapfile関数は、ファイル、またはその一部をMATLAB変数としてメモリに割り当てることができます。これによりディスク上のメモリに保持できない、またはロードに時間がかかるようなビッグデータに効率的にアクセスすることができます。

  3. ディスク変数

    matfile関数はディスク上のMAT-ファイルに保存されている変数に直接アクセスできるので、一部の変数のみを読み込むことができます。これにより、メモリ上に展開するには大きすぎるファイルから、変数を部分的に取り出して処理することができます。

  4. マルチスレッド対応関数

    MATLABのfftinveigといったいくつかの関数はマルチスレッド化されています。複数スレッドで並列に実行することにより、これらの関数はマルチコアの恩恵を受け、ビッグデータの計算パフォーマンス向上に繋がります。

  5. データベースアクセス

    ビッグデータのファイルI/Oには膨大な時間がかかることがあります。また、複数の人がデータにアクセスすることもしばしばあります。そのような場合にデータベースを使用すると、それぞれの人が効率よく対象のデータを取得することができます。MATLAB では Database Toolbox™ を利用してデータベースにアクセスできます。

  6. 大規模データ読み込み

    ビッグデータに対し、そのデータの情報のみを保持するレポジトリを作成する datastore 機能を使用することで効率よく必要なデータのみを読み込むことができます。特定のファイルに特化した機能もあり、たとえば画像ビッグデータに対しては imagedatastore、タブ区切りビッグデータに対しては tabularTextDatastore などの関数が用意されています。datastore機能を使うと、ファイルあるいはデータベースデーブルからデータを読み込む前にあらかじめ読み込むデータを指定したり、読み込むデータのフォーマットや範囲を指定したりできます。

 

ビッグデータ解析のキーポイント2: プログラミング手法

    1. ストリーミング処理

      ビッグデータを扱う際には、全てのデータを読み込んで解析を行うと時間がかかり過ぎることやメモリが不足してしまうことがあります。そのような場合はSystem object™ の利用により、次々に流れてくるデータに対してストリーミング処理を行うことができます。さらに、このSystem objectは、MATLAB Coder™を利用してC/C++ソースコードを生成したり、このコードを利用してパフォーマンスを向上させリアルタイム性を高めたりことができます。

    2. 画像のブロック処理

      Image Processing Toolbox™にあるblockproc関数は、画像のビッグデータに対してブロック単位で処理を行います。さらに、Parallel Computing Toolbox™と一緒に利用することにより、ブロック処理をマルチコアまたはGPU上で並列的に実行 することができます。

    3. スパース行列

      行列の要素のうち、値の入っている要素が少ない行列のことをスパース行列といいます。MATLAB では sparse 関数で通常のdouble型からsparse型に変換することができます。sparse 型として定義すると値のある要素のみの情報を保持し、計算の高速化やメモリの節約につながります。

    4. 並列計算

      Parallel Computing Toolboxによって、 forループの並列化など、マルチコア搭載PC上でMATLABコードを並列的に実行する ことができます。さらに、MATLAB Distributed Computing Server™があれば、数千台のノードという規模のクラスタ環境でさえも、並列計算の環境として利用することができます。

    5. 分散配列

      MATLAB Distributed Computing Serverにより、クラスタにあるノード上のメモリに分散された行列や多次元配列を扱うことができます。これを利用することにより、一台のマシンではメモリが足りずに保持できないようなビッグデータをクラスタのマシンリソースを活用して保持、計算ができます。

    6. SPMD (Single Program Multiple Data)

      ビッグデータに対して、データの領域を分割し複数のプロセッサにより計算を分担したい場合にはspmd の機能を使用します。計算用のコードは一つですが、それぞれの計算で使用、ならびに保持するデータは異なります。

    7. MapReduce

      大きすぎてメモリに収まらないようなビッグデータを扱いたい場合、MapReduce の機能を活用することで解析が可能となります。類似の機能であるdatastore 機能ではビッグデータの効率的な読み込みを行いますが、更なる解析を行いたい場合にこのMapReduce を使用します。MapReduceは読み込みデスクトップ環境、並びに Hadoop 環境で、ビッグデータ解析を行うことができます。

    ビッグデータ解析のキーポイント3: プラットフォームサポート

    1. マルチコア

      最近のデスクトップやラップトップのマシンには複数のコアが載っています。これらを活用し、複数の MATLAB ワーカーで計算を行う機能を提供しています。たとえば、最適化の遺伝的アルゴリズムの計算やモンテカルロシミュレーション機械学習などに使うことができます。マルチコアの利用には、Parallel Computing Toolboxが必要となります。マルチコア利用のために特殊なコーディングをする必要はなく、1-2行のコードを書き換えるだけでマルチコア計算が可能です。

    2. GPUコンピューティング

      GPUコンピューティングを実行可能な環境をお持ちであれば、Parallel Computing ToolboxのGPU対応の関数を使うことで計算速度の向上をはかることができます。たとえば、ニューラルネットワークのネットワーク計算などは、GPUで計算することで処理時間が最大数十倍も早くなります。マルチコア計算と同様に、1-2行のコードを書き換えるだけでCPUとGPU間のデータ転送やCPU/GPU計算の切り替えを行うことが可能です。

      2次元データに対するフーリエ変換のコード例 – 1行目でGPUにデータ転送を行い、3行目でGPUからデータ回収を行う

      波動方程式の求解課題においてのGPUのベンチマーク

    3. クラスタマシン

      1台のマシンで行っていた計算を、高性能な計算処理能力をもつ計算機環境HPC にスケールアップすることで、ビッグデータ解析のさらなる高速化を見込むことができます。MATLABで作成したコードを少ない設定でクラスタマシンでも使用することができます。

      クラスタマシンの活用と対応ツールボックス

    4. Hadoopコンピューティング

      Amazon Elastic Computing Cloud (EC2) などのクラウド上で MATLAB を使用することも可能です。クラウド環境をつかうことで、コンピュータクラスタやデータセンタの構築、ならびに管理の必要がありません。また、解析内容に合ったマシン環境をその都度選ぶことができるため、ビッグデータの解析に活用できる環境です。たとえばParallel Computing Toolbox を使ってGPU のインスタンスで計算を行うことや、MATLAB Distributed Computing Serverを使って数百台または数千台のホストを使った並列処理を利用することができます。

    5. Hadoop

      MapReduce と datastoreの機能をもとにデスクトップ環境でアルゴリズムを開発し、Hadoop 環境に展開することができます。datastore 関数によりHDFS (Hadoop Distributed File Systems) に保存したビッグデータの一部にアクセスし、このデータを使用して MapReduce に基づくアルゴリズムをデスクトップ環境で開発します。作成したアルゴリズムを HDFS に保存されているビッグデータに対して Hadoop MapReduce フレームワークで実行するために、MATLAB Distributed Computing Serverで実行します。また、MATLAB の解析をHadoop システムに統合する方法として、MapReduce に基づいたアルゴリズムをアプリケーションやライブラリに展開するMATLAB Compiler™があります。




ソフトウェアリファレンス

参考 : Statistics and Machine Learning Toolbox, Parallel Computing Toolbox, Neural Network Toolbox, MATLAB Distributed Computing Server, MATLAB, Database Toolbox, HPC, GPUコンピューティング, データアナリティクス