GPUで行なうNN(ニューラルネットワーク)

GPU(Graphic Processing Unit)の進化はめざましいものがある。PentiumMMXの時代は、プロセッサを強化して音楽からグラフィックまですべてをプロセッサベースで行なうという戦略を打ち立てていたゲイツ氏も(MMXの略がMultiMediaExtentionの略だということからも、そのへんの時代背景を伺い知ることが出来る)、時代の趨勢には敵わない。

プロセッサまわりの進化の速度に比べてバスまわりの進化は遅く、結局のところ3D処理はすべてグラフィックボード内で完結させるような方向性になった。すなわち、グラフィックチップそのものが進化を余儀なくされたわけで、DirectX8/9やOpenGL SL(Shading Language)を見てもわかるように、グラフィックプロセッサはプログラマブルで、超高速の浮動小数演算やらベクタ演算やらを行なう能力を備えている。

ともなれば、単純な計算、たとえば、サウンドやら画像のencordingをGPUによって行なおうとするのは至極自然な方向性であると言えよう。ただ、それを行なうには、まだまだ能力不足であると感じることもあるのだが。(特に本格的にGPUで副次的な処理を行なわせるならばVRAMは少なくとも1G程度は欲しい)

それはともかく、GPUを使ってその手の計算をしようという試みはいろいろある。先日発売になったGame Programming Gems4(ISBN:1584502959)に載ってるGPUを使ったNN(ニューラルネットワーク)の構築テクニック。別にこんなものの内容はどうでもいいのだが*1、結論としては、Pentium4 3GHzでSSEを使って書いたコードよか、GPUを使ってATI Radeon9700を使ってやらせたほうが遙かに速いとある。その肝心のGPUを使ってやらせたマシンのスペックが書かれていないのだが、グラフィックボード内で処理が完結しているのだから、マシン速度は関係ないと捉えて良いのだろう。

将来、何かのゲームでNNを使うことはあるかも知れない。個人的には、NNはあまりお勧めはしないけど、非線形の評価関数のチューンが難解な分野では現実時間で完成させるためには導入を余儀なくされることもあるだろう。そういう意味ではGPUが、スーパーコンピュータにとって変わる可能性がある。ビデオメモリさえ1PB(PBはペタバイト=1024TB=1024*1024GB)ぐらいあれば、円周率の世界記録だって樹立できるだろうし、世界最強の将棋プログラムだって作れるかも知れない。まあ、ビデオメモリが1PBになるのはまだ15年ぐらい先の話だろうけど..。ともかく、3Dなんて関係ないってな研究者のしとたちも、いいかげん、GPUぐらい使えないとマズイですよ!

*1:いまさらNNの解説なんて誰もいらないだろうし、GPUについて知りたければ「Real-Time Shader Programming」でも読めばいいんだし。