未完放流

終わりなど無い、有るのは試練だけだ……

1990年代後半から2018年現在までの CPU & GPU の関係の移り変わり

ガチ開発している人向けの話ではないです。どちらかというと個人・アマチュア向けだと思います。

japan.cnet.com

CNET の記事を見て CUDA 周りで知らないライブラリや技術があったので整頓しようと思い、 関連しそうな過去の資料(雑誌など)を探し何冊か読み返してしまいました。 CUDA を軸に90年代後半から2018年現在に至る計算環境の遷移を俯瞰するのも面白いです。

AWSを始めとしてリソースを借りることも一般的になりましたが、実物でも取り扱えるよう概要ぐらいは抑えておきたいです。

NVIDIA といえば ゲフォ

現在では、NVIDIA が AI 関連メーカーと聞いても違和感を感じる人は少ないでしょうが、 自作PCを嗜なんでいたアラフォーには、グラフィックカード用のチップメーカーのイメージが強いです。

英語の wikipedia *1 は日本語版には無い内容も多く充実しております。 GPU アーキテクチャと CUDA のバージョン対応表は便利です。 正式版(1.0)の登場は 2007 年 6月23日とされております。

CUDA の概要を聞いたときは大胆なことをしたなと思ったものです。 Open GL が既にあったと思うのですが、GPUを汎用目的 ( General-Purpose ) で使用で差別化を全面的に打ち出していた気がします。 GPGPU は General-purpose computing on graphics processing unit の略。

qiita.com

CPU の高クロック至上主義からマルチコアへ

CUDA が登場した背景として、CPU の逐次処理による性能向上が望めないので並列処理が主流になりつつある雰囲気があったと思います。

Pentium 4 系がクロック周波数を稼ぎ処理向上を狙うという戦略で、前世代の Pentium III よりクロック当たりの処理効率が劣るのは自作マニアの間では有名な話です*2。 その為 Pentium 4 はもっさりしているとか、消費電力多過ぎ、排熱がひどいとか色々言われ、ハイパースレッディングが搭載されたものの姿を消します。 intel はモバイル向けに導入した Pentium M から始まる Core 2 Duo からマルチコア戦略に転換し、Core i シリーズにつながります。

振り返ってみれば、(半導体開発の詳細は分かりませんが)並列化による問題解決は必然だったように思えます。

CPU は 3DCG をやりたくない

CPU が汎用的な処理を行うものがメイン、GPU はゲームに使うグラフィックスのような線形代数の演算のような特定用途向けとして発達します。 90年代後半に発売されていた月刊アスキー*3などのコンピュータ雑誌を見れば分かると思いますがグラフィックスカードは現在ほど重要視されておりません。 Platy Station が全盛で良質なタイトルが安価に入手できたため、PCをゲーム用に使う人も相対的に少なかった気もします。 この辺りに関しては詳しくないです。

しかし当時から NVIDIAGPU の汎用化の布石だったのかは分かりませんが、Programable Shader を発表しています。 ゲームメーカーが恩恵を受ける技術だと認識していました。 大学の研究室がゲーム以外の応用例としてシミュレーションを出したのを見た気がしますが、どちらかと言えば例外かと思われます。

GPU を汎用目的で使う

手元に ASCII. technologies という雑誌の 2009年12月号が残っています。 GPGPU が特集という理由で買った記憶があります。

当時は現在ほど CUDAは注目はされていなかったと記憶しております。 並列処理のメリットは理解しているものの、何に使えばよいのか分からないというのが実情だったと思います。 動画のエンコーディングがもっとも人気があったかもしれません。

Deep Learning の登場

Google の猫*4から、Deep Learning がエンジニアの間で注目され始めます。 これは2012年6月のようですね*5

当時、日本では一部のエンジニアが注目しているぐらいで現在の社会現象とは程遠い印象があります。 また GPU で処理はしていなかったようで、かなりのリソースが必要という印象が強く殆どのエンジニアには手が届かない技術という状態が2~3年はあったような。 Hinton 博士の RBM は MCMC でしたし、当時はラック単位で必要だったのではと推測されます。

その後 Deep Learning の有用性が主に画像処理周辺などで認知された印象があります。 GPUでの処理との相性の良いことを NVIDIA が最初に売り込んだときには「ほんまかいな?そこまでしてGraphic card を売りつけたいのか?」と疑いながら広告を読んだ記憶があります。 Aritificial Neural Network を復習してみると、レイヤーが行列の演算で形成されパラメータを推定していることから納得できます。

プログラミング言語、ライブラリの充実などのCPUでの開発と比べても見劣りが少ない開発環境の充実、計算効率の良さなどから劇的に需要が高まったのだと思います。 今は少し下火になりましたが仮想通貨ブームも一役買ったかもしれませんね。

NVIDIA の成長は必然だったようにも思える

実は私、現象に対して確率モデルを組み立てるという信仰上の理由により Deep Learning はそれほど関心はありません。 動いているもののは面白いですし、人間と同じようなことができるのか興味深いのですが学習が収束したネットワークが何故そのような振る舞いをするのか理解する自信がないからです。

近い将来に GPU 上で動く確率的プログラミング言語が実用的になるかもしれないというスケベ心に突き動かされて始めた文章ですが NVIDIA が地道にやってきたことが結実しているのが分かります。 PC game もあまりしませんでしたし、Radeon 派だったので売り上げにも貢献していませんが20年の経緯には勝手に感動しております。

*1:必ずしも最新の内容ではないかも CUDA - Wikipedia

*2:私も Pentium III - S をわざわざPCに入れて使っていました。検索すると何人か同じような考えのかたがいらっしゃるようです。 この頃の自作PCは活気があって面白かった。

ascii.jp

zigsow.jp

ameblo.jp

*3:ノリが面白かった。

月刊 ASCII (アスキー) 2006年 08月号 [雑誌]

月刊 ASCII (アスキー) 2006年 08月号 [雑誌]

*4:googleblog.blogspot.jp

*5:因みに私の Evernote を "deep learning" で検索すると最も古い Note が 2012年11月01日付なので大体同じころですね。 PFN の岡野原さんの記事ですね。

https://research.preferred.jp/2012/11/deep-learning/