見出し画像

NvidiaのCUDAが今の地位を築いた経緯

この記事は、私のメルマガ「週刊 Life is beautiful」の2024年6月24日号に書いた記事の抜粋です。メルマガの読者の質問に答える際に引用したかったので、ここに公開することにしました。

https://www.mag2.com/m/0001323030

現在進行形の「AIブーム」の中で、そのメリットを最も享受しているのは、Nvidiaであることは、今や、誰もが知るところです。AIの基盤となるニューラルネットは、そのパラメータ数に応じて能力が上昇するため、学習・推論のいずれのプロセスにおいても莫大な計算が必要で、現時点では、NvidiaのGPUが圧倒的なシェアを持っているためです。

GPUを提供しているのはNvidiaだけではなく、Intel、AMD、Apple、Qualcommなどライバルも複数存在しますが、そこでライバルを排除する強力な武器となっているのが、CUDAと呼ばれる開発環境です。

GPUは、CPUとは異なり、大量の計算を同時に並列して行うことが得意ですが、その能力を引き出すためには、GPU向けの開発環境が必要なのです。CUDAはそんな「GPU向けの開発環境の一つ」ですが、ニューラルネットの研究者たちの間で、CUDAがデファクト・スタンダード(実質的なスタンダード)になってしまったため、その上にライブラリも数多く作られ、今や、少なくとも学習プロセスに関して言えば、「CUDAを使う以外の選択肢はほぼない」状況になっているのです。

CUDAは、Nvidiaが自社製のGPUの上に作った開発環境であるため、結果として「ニューロンの学習プロセスにおいては、NVIDIAを使う」ことがスタンダードになってしまったのです。GPT4などのLLM(大規模言語モデル)が証明しているように、人工知能の性能を上げるには、ニューラルネットの規模(パラメータ数)を大きくし、かつ、大量の教育データを与える必要があるため、ここに「AI特需」が発生し、一つ数百万円するNvidiaのGPUが、1年先まで予約が入ってしまっているほど「バカ売れ」しているのです。

今日は、このCUDAがどんな経緯の元に生まれ、どうやって業界のデファクト・スタンダードの地位に登り詰めたのかについて、解説したいと思います。

GPU向けの開発環境として、最初に普及したのは、OpenGLでした。シリコン・グラフィックスというグラフィックス・ワークステーション(画像や映像処理を行うための専用のコンピュータ)を作っていた会社が、1992年に自社製のワークステーション向けに提供していたIRIS GLというAPIをオープン化する、という形でスタートしました。OpenGLの以前には、シリコン・グラフィックスのライバルたち(Sun Microsystems、Hewlett-Packard、IBM)が作ったPHIGSという業界標準がありましたが、技術的に優れていたという理由で、OpenGLがワークステーションの業界では、標準になりました。

その流れに逆らう動きをしたのが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だったのです。

なぜ彼が、OpenCLではなくCUDAを採用したかについては、本人と会う機会があったら是非とも聞いてみたいところですが、この事件は、人工知能の研究者たちに大きなインパクトを与えました。具体的に言えば、

  1. 長く続いていた「人工知能の冬」がようやく終わった

  2. ニューラルネットは、そのサイズがものを言う

  3. ニューラルネットの計算は、GPUを使うと桁違いの高速化が出来る

  4. GPUを使いこなすには、CUDAを使えば良い

という情報が、瞬く間に広まったのです。4番目は、OpenCLでも良かったはずなのですが、たまたまAlexNetがCUDAを採用していたため、「ニューラルネットの高速化にはCUDAを使うべし」という情報が研究者の間に瞬く間に広まってしまったのです。

この事件をきっかけに、CUDAが人工知能の研究者たちの間に瞬く間に広まったとは言え、CUDAはNvidiaのGPU上でしか使えないし、さまざまなGPUの上でも使えるOpenCLの存在意義がなくなったわけではありませんでした。

皮肉なことに、OpenCLの息の根を止めたのは、OpenCLの開発者、Apple自身でした。2014年に、独自のプラットフォームMetalを発表したのです。Metalは、それまでAppleが採用していたOpenGLとOpenCLの代わりに提供された、グラフィックスと科学技術計算の両方をサポートするプラットフォームです。

Appleはそれまで、iPhone向けには自社製の、MacBook向けには、IntelやNviida製のGPUを採用し、その違いをOpenGLで吸収するという形を採用していましたが、OpenGLが陳腐化し、後にVulkanと呼ばれるようになった「次世代OpenGL」の開発がなかなか順調に進まない中、CUDAの台頭を見て危機感を抱いたのだと解釈できます。

CUDAがあまりにも強くなってしまうと、Appleは全てのMacにNvidiaを搭載しなければならなくなってしまい、最終的には、iPhone/iPadにまで進出を許すことになってしまいます。その当時から、AppleがMac向けに自社製チップを作る計画を持っていたかは不明ですが、それも不可能になってしまいます。

2014年のAppleによるMetalの発表は、単にOpenCLの息を止めただけでなく、次世代OpenGL(Valkan)の死産を運命付け、世界を「NvidiaのGPU上でしか動かないCUDA」と「Apple製品の上でしか動かないMetal」に二分し、その2社以外のGPUメーカー(主にIntelとAMD)にとっては、とても居心地の悪いものにしてしまったのです。

しかし皮肉なことに、AppleのMetalは、グラフィックスや(ニューラルネットの)推論のプロセスにおいては、力を発揮するものの、学習プロセスにおいては、Nvidia+CUDAの一人勝ちで、Apple社内のAIチームですら、学習プロセスにはNvidiaのGPUを使わざる負えない状況に追い込まれています。

以上が、CUDAが、そしてCUDAを戦略的な武器として抱えたNvidiaが今の地位に登り詰めた背景なのです。

ちなみに、以上のことを理解した上で、今回のMicrosoftによるCopilot+ PCの発表を見ると、色々と面白いことが見えてきます。MicrosoftがCopilot+ PCに最低限として必要なスペックとして、(Nvidiaが強い)GPUの能力ではなく、NPUの能力(40TOPS)を定めたことは、今後のチップメーカー間の戦いを占う上でも、Microsoft対Appleの戦いを占う意味でも、とても重要です。

私は今回のMicrosoftによる発表を、「デバイス上で推論を行うGPU」の終わりの始まりだと解釈しています。デバイス上で行うニューラルネットの推論に関しては、MetalやCUDAのようなレイヤーを使って開発者たちが最適化をする時代は終わり、デバイス上のNPUの上でニューラルネットを効率良く動かすためのAPIをOSベンダー(MicrosoftとApple)が提供し、開発者たちは、より上のレイヤー(AIエージェントや、カスタムLLM)で勝負をする時代になるのです。

この記事が気に入ったらサポートをしてみませんか?