コラムNVIDIAの企業価値はこの1年間で3倍になりました。これはすごいことです。この企業は1993年に起業し、もともとはPCゲーム用に3次元のグラフィクスを持ち込むことを目的としていました。オールマイティーな演算器であるCPUのグラフィクス機能を補完する役割を担うものでした。1990年代といえば、産業界において、流体や構造分野に3次元数値シミュレーションが本格的に導入され、それが製品設計に適用され始めた時代です。今では想像できないことですが、当時のPCの能力は低く、数値計算もグラフィクスも、業務に使うには全く能力不足でした。そのため、PCよりも一段グレードの高いEWS(エンジニアリングワークステーション)を主力とし、さらに大規模な計算をする場合には高価なスーパーコンピュータが用いられていました。3次元の計算結果は複雑であり、人間が理解できる形にするにはグラフィクス処理をしなければなりません。当時のEWSは、計算が得意なものとグラフィクスが得意なものに分かれていました。計算は計算が得意なEWSで行い、グラフィクスはそれ専用のEWSを使う形が主流でした。このグラフィクス処理を得意とするメーカがNVIDIAなのかというとそうではなく、シリコングラフィクス社(以後、SGI)でした。当時は、グラフィクス処理で世界のトップを走っていました。今、SGIの名を聞くことはありません。なっってしまったのでしょうか?SGIはその後、買収されました。SGIを買収した会社もその後に買収されました。これに対してNVIDIAは今の独立した企業として生き残っています。生き残れたか否かの違いは何だったのでしょうか?SGIが弱体化した最大の原因は、CPUとそれを搭載したPCの能力が飛躍的に上がり、性能面でEWSと大差なくなってきたことが挙げられます。PCとEWSを比べると、前者の方が圧倒的に安いので、産業界もそちらに流れていってしまったのです。その結果、SGIは没落することになりました。SGIは産業界向けのソリューションを提供する戦略を選んだのに対し、NVIDIAはゲームという個人向けのソリューションを提供する戦略を選び、PC用CPUを補完するGPUに注力しました。GPUの初期については、BtoBかBtoCかの差がその後の盛衰を決めたのだと言ってもよいでしょう。今日ではBtoB用のAI用途で大人気ですが、それにどう繋がっていったのかは以降で説明します。ご存じのようにNVIDIAは今やGPUの最有力メーカです。Unitの略であり、あくまでもグラフィクス向けを意味し、名称だけからはAI用途に使えるようには見えません。どのような道をたどって今に行き着いたのかを以下で見ていきます。本筋に入る前にGPUとCPUとの違いを確認しておきます。GPUがなぜここまで注目されるのか、その理由を理解するのに役に立つからです。両者の違いを表すための比喩として、CPUはスポーツカーであり、GPUはバスであるという言い方がしばしばされます。この比喩は、CPUは少数の命令を高速に処理する、これに対してGPUは多数の命令を一度に処理する点を強調しています。別の比喩ではCPUはなんでも屋、GPUは専門家と表現されます。GPUがなくてもコンピュータは動きますが、CPUがなければ動きません。GPUはグラフィクス処理が得意ですが、この処理には膨大な数値計算が求められます。その昔、PCゲームの画面に表示されるキャラクターは単純な2次元的な形状であり、色も2色、動きも滑らかさに欠けていました。このレベルであれば、数値計算は整数処理で問題ありませんでした。当時のゲーマーはそれで一応は満足していました。言え、当然のことながら、3次元的で色も豊か、速い動きに対しても滑らかでリアルなものを求めていました。Zに加え、平行移動や回転を扱うためにもう1つの要素Wを加え、4×4の行列を基本要素とします。ユーザーの求めに応じるには整数処理では桁数が不足となり、小数点を含む実数計算に移行せざるを得なくなりました。ユーザーは次第に人間の反応速度並みの表示スピードを要求するようになりました。これに応えるには、実数を含む大量の座標変換計算を高速に実行できるようにしなければなりません。そのニーズに対応するため、GPUは浮動小数点計算の能力を高める方向に進化しました。加えて、グラフィクス処理は、画面上のすべての点について、高速に更新しなければなりません。画面の画素数が1920×1080のディスプレイであれば、2百万点をほぼ同時に処理しなければなりません。グラフィクスに関しては、この2百万点は相互に独立して計算できるので並列処理が可能です。そのため、GPUは、並列計算能力を高める方向にも進化していったのです。数値計算と並列計算の能力はグラフィクス以外にもニーズがありました。それは科学技術計算です。CPUの進化によってPCの能力が上がり、高価なEWSを駆逐したと前述しましたが、ゲーム用グラフィクスに鍛えられたGPUの浮動小数点計算は、並列処理も含めてですが、PC用CPUよりも1桁以上高い性能を発揮し、PCにとってその存在価値はどんどん大きくなっていきました。ここに、SGIが没落したにも関わらず、NVIDIAとそのGPUが生き残れた理由があると考えています。PCとEWSの間で競争が生じた時、まず、PC側にいた事が最も重要です。PCの本丸であるCPUに対して、GPUは数値計算でCPUを圧倒する能力を獲得したことが挙げられます。その後にニューラルネットワークを用いる深層機械学習が現れ、AIブームが始まりました。深層機械学習で求められる数値計算は、結局のところ、単純な掛け算と足し算であり、しかもグラフィクス処理と同様に大量の計算を並列に処理できるものだったので、CPUではなくGPUの利用が急速に進みました。実際、生成AIをCPUで実行すると計算速度が遅くて話になりません。現在の深層機械学習ベースのニューラルネットワークモデルの実用性を最初に示したトロント大学も、その学習計算ではNVIDIAのGPUを使っていました。GPUがなければ、AIブームの到来はおそらく数年単位で遅れたことでしょう。次はその点を見ていきます。GPUが数値計算能力の高さを発揮するための工夫は大きく3つあると考えています。以下にその3つを1つずつ説明していきます。1つ目は並列処理における工夫です。並列処理には3つの代表的な方式があります。Thread)ですが、並列処理のパラダイムはMIMDからSIMDを経てSIMTに進化することより、幅広い数値計算を高速で処理できるようになりました。MIMD方式では複数のプロセッサがそれぞれ異なるプログラムを並列に実行することができます。非常に柔軟性の高い方法です。その意味からもオペレーティングシステム向きであり、PCやスマートフォンのCPUの並列化に使われています。この方式では、メモリアクセスなどの共有部分へのアクセスが制約になりはじめると、並列化の性能が落ち始めます。メモリアーキテクチャの話はこの後にしますが、この方法はやはりCPU向きの方法と言えるでしょう。SIMDは1つの命令で複数のデータを並列に処理する方法です。座標変換の計算をするなど単純作業の並列化に向いた方法です。W)の4要素を扱うので、4つのプロセッサをひとまとまりとして並列処理できます。グラフィクスの並列処理に向いた方法と言えます。初期のGPUはこの方式を採用していました。SIMTはSIMDの改良版です。グラフィクス処理のメインは座標変換であるため、並列処理は必ず4の倍数で行います。グラフィクス処理以外の科学技術計算では、並列処理したい数が必ずしも4の倍数ではありません。4の倍数にならなかった場合、例えば5つのデータを並列処理する場合には、SIMDでは8つのプロセッサに5つの計算を割り付けることになってしまい、プロセッサの使用率は5/8、つまり62.5%まで下がります。SIMTは並列処理したいデータが4の倍数にならない場合でもプロセッサの使用率を高める方法であり、NVIDIAが最初に実用化しました。W)をひとまとめではなく、Xだけ、Yだけを並列に処理するのです。仮にXで並列処理できる数が1920個あり、プロセッサの数が32個であれば、32個を並列に処理できるのです。グラフィクス処理ならばSIMDも同様に32個の並列処理ができるので性能は変わりません。別の科学技術計算で5つのデータを並列処理する場合ならば30個を並列処理できるので、プロセッサの使用率は30/32,つまり93.8%となり、SIMDよりも高速に処理できます。SIMTは並列処理の柔軟性を高めた方法であり、この工夫によってGPUはあらゆる数値計算をより効率的にできるようになりました。2つ目の工夫はメモリアクセス速度の向上です。GPUで大量の計算を行うには、メモリとプロセッサ間で高速にデータ転送できなければなりません。これに対してCPUはとにかく大容量のメモリを必要とします。要求が相反しているのです。スマートフォンのようにGPUに高性能を求めない場合には、メモリを共有化して使えば良いですが、数値計算能力を高めるには別々のメモリを用いざるを得ません。CPU用もGPU用もメモリ技術そのものは根本的に同じです。CPU用の標準的メモリであるDDR4にはプロセッサとデータをやり取りするピンが8本あり、1つのピンのデータ転送速度は1.6~3.2Gbit/秒です。GPU用に転送速度を増やす方法は、単純に言えば、1ピン当たりのデータ転送速度を高める道とピンの数を増やす道があるわけです。1ピンあたりの転送速度を高める方法はシンプルです。DDR4では、仮にCPUのプロセッサが32個あったとしても8本のピンでデータ転送を行います。このような柔軟性があるので、メモリを大容量化したくなったときにメモリボードを交換するだけで簡単に実現できるのです。一方のGPUでは、1つのピンと1つのプロセッサをはんだ付けして専用化することによってデータ転送速度を2~4倍に高めています。GPUでは後からメモリ増設ができない構造であり、その点は注意する必要があります。ピンの数を増やす方法には2つの方法があります。DDR)ではピンの数を32本と、DDR4の8倍に設定しています。前述の1ピンあたりの速度向上を合わせ、GDDR5ではDDR4の10~20倍のデータ転送速度を実現しているのです。Memory)では、ピン配線に半導体製造技術を適用し、ピンの数を一気に1024本まで増やしました。現時点では非常に高価であり、一般的な利用には向いていません。3つ目の工夫はCPUとGPUの間のデータ転送速度の向上です。今の所、コンピュータはCPUに統括制御されています。そのため、GPUに計算させるには、CPU用メモリ情報をGPUにコピーする必要があります。逆に、GPUの計算結果を保存したり表示したりする場合には、GPU用メモリからCPU用メモリにコピーする作業が必要となります。いくつかの工夫がされてきましたが、メインの対策は両者をつなぐPCIバスの速度向上です。それは小型化によりレーン数を増やすという方法でなされてきました。以上、GPUの数値計算能力を飛躍的に高める工夫を述べてきました。最後に、GPUに関するこれまでの戦略と今後の発展性について考えてみましょう。代表的なGPUメーカとしては、NVIDIA、AMDとIntelがいます。今のシェアだけを単純に計算するとIntelがトップですが、その主たる用途はマイクロソフトオフィスなどの既存ビジネスアプリの速度向上であり、その他の分野ではあまり目立ちません。AMDは、以前はIntelを追うCPUメーカでした。前述したSGIを買収した企業を買収した後は、GPUメーカとしてNVIDIAに対抗できるGPUボードメーカにもなりました。AMDのPCはゲーム用としても優れ、将棋の藤井八冠がAMDのRyzen愛用者であることはよく知られています。CPUとGPUの両方を持っているので、戦略的には最も有利なポジションにいると言ってよいでしょう。参入し、産業用市場を獲得しました。AIがブームになるやいなや、そこでもトップランナーとして走っています。AIの数値計算は、通常の科学技術計算の常識とは異なります。科学技術計算では、通常64ビットの倍精度の計算が用いられます。単精度の32ビットでは誤差が蓄積されて計算結果の精度が大きく劣化してしまうためです。これに対して、ニューラルネットワークのAI数値計算では高い計算精度は不要です。倍精度の64ビットはもちろん、単精度の32ビットすら必要なく、半精度の16ビットで十分な場合が多く、NVIDIAは早々にこれに対応しました。学習は16ビットで行うとして、学習済のモデルを使う際には16ビットも必要ないので8ビット化し、より大規模な学習モデルを使えるよう、運用面での工夫をしています。AI分野ではNVIDIAが独走に近い状態で走っていますが、これが長続きするかどうかは不明です。GPUの性能は最終的にCPUとの通信に制限されてしまうからです。いって、GPUでオペレーティングシステムを動かすのも非現実的です。いう意味で、既存のCPU/GPUアーキテクチャは近いうちに袋小路に入り込む可能性があります。過去の歴史を振り返ると、そういう場面では、新しいコンセプト、新しいアーキテクチャが出てくるものです。どのようなものが出てくるか、興味深くモニターしていきたいと思います。—コラム更新情報のほか、各種ご案内などをお届けしています。