イベント

【GTC 2013レポート】拡大するGPGPUの利用領域

 米国のサンノゼで3月19日から開催された「GPU Technology Conference 2013(以下GTC 2013)」は、NVIDIAが開催しているGPUに関する技術カンファレンスだ。

 今回は、さまざまな領域で利用され始めたGPGPUに関して説明していこう。

GPGPUの利用領域が拡大

 GPGPUといえば、従来はHPC(ハイパフォーマンス・コンピューティング)などで利用されていた。例えば、2010年に開発された東京工業大学のTSUBAME 2.0は、NVIDIAのTeslaを4000台以上搭載する、GPGPUを中心としたスーパーコンピュータとなっている。

 また、2012年11月のTOP500でトップをとったのは、米国のオークリッジ国立研究所に設置されたTitanだった。Titanは、東工大のTSUBAME 2.0と同じようにNIVIDIAのTeslaを利用したGPGPUを利用したスーパーコンピュータだ。CPUには、AMD Opteron 6274が利用され、GPGPUにはTesla K20Xが採用されている。Titanには、Tesla K20Xが約1万9000台搭載されているが、このように、スーパーコンピュータにおいては、GPGPUによって性能を稼ぐアプローチは一般的になっている。

スーパーコンピュータのランキングTOP500に入っているほとんどのスーパーコンピュータでNIVIDIAのGPGPUが利用されている
GPGPUは、高エネルギー物理学のシミュレーション、3Dゲノムのシミュレーション、物性シミュレーションなどに利用されている

 多くのスーパーコンピュータは、構造解析、気象予測、分子動力学、地震や津波のシミュレーションなどに使われているため、一般的な企業にとっては必要ないものと考えがちだ。しかし、GTC 2013を見てみると、少し状況が変化してきている。

 GPGPUは、膨大な計算能力により、各種のシミュレーションの可視化(ビジュアル化)も行っている。東日本大震災時の地震シミュレーション、南海トラフ地震のシミュレーションの映像などを見たユーザーも多いだろう。こういったシミュレーションでは、計算結果はまず数値データとして出力されるが、有り余る計算能力を利用して数値データを映像化すれば、多くの人が分かりやすい状態で提示することができる。

 また、コンマ数秒の取引で何億円もの金額が取引される金融の分野でも、GPGPUを利用したコンピューティング環境に注目が集まっている。

 近年、銀行や証券会社、ヘッジファンドなど金融機関が扱う金融商品は複雑化し。複数の通貨のスワップ、デリバティブなど、特定の通貨や商品を取引するだけでなく、通貨や商品に関連する派生商品が出てきた。

 このため、どの金融商品同士を組み合わせれば利益が最大限になるのか、もしくはリスクが最小限になるのか、といったことを既存のコンピュータで計算していると、計算に時間がかかりすぎて、結果が出た時には取引ができないことになってしまう。そこで、さまざまなデータを突き合わせて、コンマ数秒で最適な取引を作り上げるために、GPGPUの膨大な計算パワーが必要されている。

 このように、多くの業界で使われるようになったGPGPUだが、GTC 2013を見ていると、さらに一般化してきそうだ、と感じた。

 それは、データベースやデータマイニングなどへの適用だ。

検索の性能を向上させるGPGPU

 基調講演においてNVIDIAのジェン・スン・フアンCEOが紹介したのが、Salesforceにおけるツイートの検索に関する事例だった。

 SalesforceではTwitterと提携し、ツイートの内容を分析しているが、2009年には1日あたり数千万件だったツイートが、2011年には1日あたり2億ツイートを超え、2012年には1日あたり5億ツイートにまで達している。このまま増加していくと、2013年には1日で10億ツイートに達するのではといわれているほどだ。

 これだけの大きなデータから、特定の企業に関するツイートを検索したり、ユーザーがどのようなトレンドを発しているのかを分析したりするには、膨大な演算能力が必要になる。

 ここで問題になるのが、検索にかかる時間だ。1日のデータから検索するのに長い時間がかかるようでは、実際のビジネスとしては役に立たない。実際、Salesforceのサービスでは、5億件のツイートから抽出した8000件のツイートの検索に5分以上かかっていたという。またユーザーからは、1日のツイートだけでなく、複数日のツイートを瞬時に検索できるようにしてほしい、というリクエストも多くなった。

 そこでSalesforceでは、GPGPUを利用した新たな検索システムを開発している。旧検索システムはJavaベースで構築されていたが、ZAPPと呼ばれる新しいシステムでは、JavaとPythonを採用した。検索エンジンは、Pythonで開発された「ZAPP Engine」が利用されている。

 GPGPUはこのZAPP Engineの中で、さまざまなスレッドをCUDAユニットで動かしている。Salesforceでは、2台のNVIDIA GTX 580でツイートの検索処理を行うようにしたが、以前の20倍~30倍のスピードで検索できるようになったそうだ。

Salesforceでは、ツイートの分析にGPGPUを利用している。2012年時点では、世界中で1日に5億ツイートが行われているという
ツイートの検索を行うZAPPシステムは、既存のJava部分とPythonで記述されたZAPP Engineで構成されている
PythonでプログラミングされたZAPP Engineでは、GPGPUを使って、検索に関連するスレッドを高速化している
Salesforceでは、大量のツイートを検索する作業を2台のGTX580で行っている。非常にローコストでシステムの高速化が図られた

 もう一つ紹介された事例が、音楽・音声検索サービスのShazamである。ユーザーがスマホに向かって、鼻歌や流れているメロディを聞かせると、どういった曲なのか、アーティストは誰なのかをクラウド側で検索してくれる。

 昨年にバージョンアップしたShazamでは、CUDAを利用することで、最短1秒以内に曲を認識するようになった。さらに、これだけの性能向上を果たしても、GPGPUを中心にしているため、低コストでシステムが構築できたとしている。

Shazamの音楽・音声検索サービスでは、2013年には1カ月あたり3億回の検索が行われている。高速に音楽の検索が行えるようになったのは、GPGPUを利用しているおかげだ

 基調講演ではこのほか、テキストや音声だけでなく、イメージ検索に関してもデモが行われた。Cortexica Vision Systemsが開発しているシステムは、雑誌などで有名モデルが着ている服をスマホなどで撮影すると、すぐにパターンマッチングを行い、その服を検索してくれるというものだ。

 面白いのは、パターンマッチングを利用しているため、同じような柄の服を検索したり、布地を検索したりできる点だが、これも、GPGPUの膨大な計算能力を使って実現している。

イメージ検索のCortexicaでは、現在、CDや本、ワインラベルから商品を検索するサービスを行っている。次世代のサービスでは、イメージから商品を検索するサービスを計画しているという
スマホで撮影したセレブの写真から服を検索できる
同じ服を検索するだけでなく、同じイメージのファッションを検索することができる

データベースに応用されるGPGPU

 検索ということを広くとらえると、データベースやビジネスインテリジェンス(BI)の分野でもGPGPUは使われ始めている。

 Jedoxでは、自社のOLAPシステムの一部にGPGPUを採用している。OLAPのキューブ作成など、さまざまなシーンでGPGPUの性能が利用されており、CPUだけを使のプログラムと比べると、約10~30倍の性能アップを果たしている。一部の機能では、約70倍の性能アップを実現したという。

Jeboxでは、OLAPシステムにGPGPUを使うことで性能を飛躍的に向上させている
スモールデータでは、CPUだけの場合と比べて最大70倍も高速化される
ラージデータでも10倍の高速化が果たされている

 これ以外にも、研究レベルでは、IBMがデータウェアハウスのHashテーブルの作成やJoinなどにGPGPUを利用することで、約10倍~30倍の性能向上を果たしたとのこと。

HashテーブルをGPGPUで処理するだけでなく、データをPCI Express接続のフラッシュストレージに保存することで、システム全体のスループットが大幅に引き上げられるとしている

 またGROUPONでは、SQLデータベース自体をGPGPUに対応させ、データベースの高速化を目指している。テストでは、CPUだけの時に比べると、データベースのQueryが約10倍の性能になっているという。

 さらに今回のGTC 2013ではないが、NTTデータがHadoopとGPGPUを組み合わせることで、性能が大幅に向上することを検証している。特に、データのクラスタリング(グループ分け)処理において、GPGPUを利用するメリットが大きく、テストでは、GPGPUを利用することで、使用しない場合に比べて約60倍の性能を実現しているとのことだ。

テーブルのマージは、ディスクからデータを読み込み、メインメモリとGPUメモリでデータを入れ替えて行う
GPGPUをデータベースで利用するには、メインメモリからGPU側のメモリにデータコピーが頻繁に起こらないようにする必要がある
マップドメモリを使えば、メインメモリとGPU側のメモリを仮想的に一つのメモリとして利用できる。これにより、メインメモリ上にあるデータをGPUに何度もコピーする処理が不要になる
マップドメモリを使えば、5倍以上の性能アップが見込める
データベースのクエリもマルチコアCPUの5倍のスピードで処理できる

 このようにデータベースや検索など、今後、シミュレーションだけでなく、一般的な用途にGPGPUが利用されてくるだろう。ビッグデータの解析などには、GPGPUはよりマッチしたソリューションなのかもしれない。

 ただ、現在のGPGPUにも問題がある。データを処理するためには、GPU側のメモリにデータを転送する必要がある。多くの場合、PCI Expressを経由してGPUは接続されているため、大量のデータをGPUに転送していてはロスが大きい。また、GPU側では、最近のCPUのように大量のメモリが搭載されていない(GPU側のメモリとしては5GBほど)。

 このため、メインメモリをGPUのメモリとしてマッピングするUnified Virtual Memoryの機能が必要になってくる。

 現在、NVIDIAが提供しているKepler世代のGPUにも一部この機能は入っているが、本格的には次世代のMaxwell世代で完成する。ビッグデータの処理などで、データを分割して、GPU側にコピーしてから処理したりしなくても、メインメモリ上にあるデータをそのままGPUで処理できるようになれば、よりデータベースでのGPGPUの利用が進むだろう。

 もしかすると、SAPのHANAのようなインメモリデータベースなどは、次世代のGPGPUを利用することで、相当なスピードアップを果たすようになるかもしれない。

2014年にリリースが予定されているMaxwell世代で、Unified Virtual Memoryが本格的にサポートされる。この世代のGPUには、MMUが搭載されるようになるだろう

(山本 雅史)