歴史の流れを大きく変えた「一つの事件」
その流れに逆らう動きをしたのがMicrosoftでした。パソコンの性能が上昇し、ゲーム用の高性能なグラフィクス・カードが普及する中で、3Dグラフィックスのゲームを作り易く、かつ、ハードに依存しない形でアプリケーションが作れるようにと、DirectXという仕組みをWindows95に追加したのです(1995年)。
MicrosoftがOpenGLを採用せずに、独自のDirectXを作ったことは、業界全体から激しく批判されました。業界標準の足並みを乱す行動だったし、それにより、Microsoftが、開発者の抱え込みをしようとしていることが明らかだったからです。
しかし、Windows95が市場で大成功し、数多くのゲームがWindows向けに開発された結果、DirectXは瞬く間にOpenGLの最大のライバルになり、開発者を悩ませることとなりました。WindowsやXBox向けにゲームを作る際には、DirectXを使い、Macや他のゲーム端末向けにゲームを作る際には、OpenGLを使わなければならなかったからです。Unreal Engine(1998年)、Unity(2005年)のような(DirectXやOpenGLを直接アクセスせずにゲームが開発出来る)ゲームエンジンが普及した背景には、この2つのプラットフォーム間の戦いがあったのです。
そんな中、パソコンやゲーム端末向けにGPUを提供していたNvidiaがCUDAという第三のプラットフォームを発表しました(2007年)。設計されてからかなりの時間が経過し、使いづらくなっていた点を解消しただけでなく、Nvidia製のGPUの性能を最大限に引き出すための工夫や、プログラミングのしやすさに焦点が置かれた、モダンなプラットフォームです。
NvidiaがCUDAを作った狙いは、MicrosoftにとってのDirectXと同じく、「開発者の抱え込み」です。たとえ、ゲーム開発者が直接CUDA上でプログラミングをしなくても、ゲームエンジンが、CUDAを使った最適化をしてくれれば、NvidiaのGPUを搭載したマシンの性能が上がることになります。
ここまでは、GPUはゲームやグラフィックス・アプリケーションのみに使われて来ましたが、2000年代の中頃になると、GPUを科学技術計算に使いたい、というニーズが出てきます。一つ作るのに何千億円もかかるスーパーコンピュータを、安価なPS2やPS3をクラスター上に繋げてスーパーコンピュータとして使おうという試みが各所で行われるようになって来たのです。
そんな中で、誕生したのが、GPU上で科学技術計算をするためのプラットフォーム、OpenCLです(2008年)。開発したのはAppleで、Nvidia、AMD、IBM、Qualcomm、Intelという錚々たるメンバーの協力を得て、Khronosという業界標準を決める団体に提案され、正式に採用されました(OpenGLも2006年からは、Khronosの管理下に置かれています)。
この段階で、私も含めて、多くの業界関係者は、科学技術計算に関しては、OpenCLが業界標準となり、長く使われることになるだろうと予想していました。当時はまだ、人工知能は今ほど注目されていなかったので、科学技術計算と言えば、主に、流体のシミュレーションとか、天気予報とかです。それまで高価なスーパーコンピュータでしか出来なかった複雑な科学技術計算が、パソコン上で出来るようになる、画期的なプラットフォームでした。
しかし、2012年に起こった一つの事件が、歴史の流れを大きく変えることになりました。AlexNetです。AlexNetは、当時トロント大学の博士課程にいたAlex Krizhevskyが、(後にOpenAIの創業者の一人となった)Ilya Sutskeverの協力を得て作った、GPUを使うことにより高速化した画像認識用のニューラルネットです。Krizhevskyが作ったAlexNetは、「ImageNet Large Scale Visual Recognition Challenge」と呼ばれる画像認識のコンペティションで、2位に認識率で10%以上の差をつけたブッチギリで優勝したのですが、その時にAlexNetが採用したプラットフォームが、OpenCLではなく、CUDAだったのです。
この記事の著者・中島聡さんのメルマガ