検索
連載

第288回 人工知能時代には必須か? 最近、プロセッサに搭載されている「NPU」って何頭脳放談

最近、プロセッサに「NPU」と呼ばれる人工知能(AI)処理に特化したユニットが搭載されるのがちょっとしたブーム(?)になっている。このNPUって、GPUなどと何が違うのか、なぜプロセッサに搭載されるようになってきたのか解説しよう。

Share
Tweet
LINE
Hatena
プロセッサに搭載されている「NPU」って何?
プロセッサに搭載されている「NPU」って何?
Intelの最新プロセッサ「Core Ultra」には、人工知能(AI)処理に特化した「NPU」が搭載されている。NPUは、スマートフォン向けのプロセッサにも搭載が進んでいる。ところで、このNPUはCPUやGPUと何が違うのだろうか? 写真は、Intelのプレスリリース「AI PCの新時代の到来を告げるインテル Core Ultra プロセッサー」のCore Ultraプロセッサーの写真を使って、「CPU」「GPU」「NPU」の文字を載せたもの。

 今回のお題は「NPU」である。出だしから注釈になってしまうが、NPUといっても2つの意味がある。今回取り上げたいのは「Neural network Processing Unit」と呼ばれる類いの人工知能(AI)用のNPUである。もう一つ「NPU」と省略されるものに、ネットワークの通信をつかさどる「Network Processing Unit」というものもあるのだが、今回はそちらではない。

NPUとGPUを同列に比較するのはおかしい?

 現在、NPUと呼ばれるような機能モジュール(ベンダーによって呼び名は異なる)を、メジャーなプロセッサベンダーはどこもプロセッサに集積している。IntelArmAppleQualcomm TechnologiesSamsung Electronicsと名前を列挙すれば、NPU搭載がもはや「必須」となっていることが分かるだろう。現代的なSoC(System on Chip)マイクロプロセッサには、「CPU」「GPU」「NPU」と3種のプロセッサコアが集積されている、というわけだ。

 そのため、「CPU」「GPU」「NPU」は、何が違うのかといった観点で論じているものが多いようだ。しかし、ここでまず明らかにしておきたいのは、NPUはエッジ側(端末側のスマートフォンやPCなど)でAI処理(推論)を行うための装置であって、AIの主戦場たるサーバ(データセンター)側でのAI処理(学習)を担うものとはそもそもの目的が違う。

 サーバ上でAI処理の学習を行う場合の計算負荷を担っているGPUと、端末側で推論を支援するNPUを同列に比較するのはおかしいということだ。それらは相互補完的でもあるし、負荷をオフロードする存在でもある。

 AIがブレークしたひと昔前から、サーバとエッジの負荷の分担は問題になっていた。膨大な演算量と巨大なデータベースを必要とするモダンなAIの中核処理はデータセンター側でなければ担えないものである。

 しかし、非常に多数のユーザーが入力する個々のユーザーデータをいったんサーバに集めて処理をするのは計算量、通信遅延などを考えると現実的でない。そこでユーザーに近い負荷を端末側に移動したいというのは、必然過ぎる要求であった。例えば、ユーザーの顔認識、撮影した画像や映像からの抽出、変換といった処理をローカル処理してしまいたいということだ。そこで登場するのがNPUである。

そもそもGPUとは?

 説明のため、先にGPUについて述べておきたい。多くのチップではNPUの隣にGPUが搭載されているはずだが、それらGPUの担う役目はデータセンター側のGPUが担っている役目とは異なるということだ。

 それらエッジ側のSoCに搭載されているGPUは、GPUの本来的なタスクであるグラフィックス処理のために働いている。スマートフォンの上でゲームを動かしたり、アニメを再生したりする時にそいつらは働いているのだ。画像処理のためにNPUとGPUの両方が働いていることもあるだろう。NPUがいてくれるおかげで、GPUは本来的な仕事に専念できている、あるいはCPUの負荷が取り除かれていると言ってもよい。

 一方、データセンター側のGPUの役目は違う。何万台、何十万台とマシンが並ぶデータセンターのGPUに画面などは不要だ。GPUといいつつ、グラフィックスは期待されていない。何が期待されているかといったら、超並列な演算機能の提供、演算アクセラレータとしての仕事である。このお役目に着目した場合、「GPGPU(General-purpose GPU)」という呼び方をする場合もある。

 知っている人には繰り返しになるかもしれないが、ここでCPUとGPUを比べておきたい。CPUの場合、1つのチップにせいぜい数十個のコア登載、そしてSIMD命令を使って1コア当たり4並列とか8並列とかの処理ができるのが普通だ。全体で数百並列くらいの並列度だ。

 それに対してGPUの場合、単位となるコア1つで数百から数千、チップ全体では数万といった単位の並列度で処理できる。同時に処理できる演算量の桁が違うのだ。

それでもCPUは必要になる

 だったらCPUなど要らないかと言えばそうはならない。CPUというのは一個一個のデータに即した判断や制御を効率的に実行するのに適している。

 スーパースカラーとかキャッシュとかいったCPUの高速化技術が端的なのだが、通常のプログラマーは、命令をこの順番にしろとか、メモリのどこをキャッシュに入れとけとか指定などしない(そのための命令もあることはあるが……)。CPUが内蔵する高度な制御論理がそれらをよきに計らって、最速で処理してくれるのだ。そして多数あるコアのそれぞれに全く無関係な仕事を割り当てることも簡単だ。

 一方、GPUというのは並列度が高い一方で、それを生かすために負荷の割り振りやメモリの出し入れなどは、プログラマーが指定しなければならない仕事が多い。そして多くのデータを一律に処理することは得意だが、ほそぼそとした判断や細切れの仕事などが多数必要になってくると、一気に効率が落ちてしまう。

AIアクセラレータで成功しているのはGoogleのTPUくらい?

 現在、データセンター側ではAI処理にGPUが活躍している。しかしNPU的なもの、よりAIに特化したアクセラレータがGPUに対抗しようとしたこともあった。何といってもGPGPUは汎用(はんよう)の計算アクセラレータであり、HPC(スーパーコンピュータ)用だと、倍精度計算までできるくらいだ。AI処理からすると無駄な部分があるのだ。

 AI処理は、単精度どころか半精度以下で十分なので処理を絞り込めば、GPUより少ないハードウェア量で、より高速な処理を狙うことは十分可能である。AIブームの出だしでは、サーバ向けのAIアクセラレータというものが各所から登場してデータセンターの巨大市場を狙ったことがあったのだ。

 しかし、現状を見てみるとそれら「アクセラレータ」の中でうまくいったように見えるのはGoogleの「TPU」のみである。

 勝手な意見だが、Googleは自前の巨大なデータセンターにTPU装備のサーバ機を並べるだけの財力があり、かつTPUという自社開発の半導体部品を自力で継続して改良できる。さらに、TPU上で動作する、ハードウェアに近い部分のドライバソフトウェアからAI開発のプラットフォームそしてアプリケーションに至るソフトウェアスタックの全てを自前で開発できる技術力がある。それがあってこそのTPUだろう。

 瞬間風速としてGPUの数倍程度の性能を持つAIアクセラレータを開発できたとしても、GPUは年々歳々性能向上するのだ。そのトレンドに対抗できなければあだ花に終わる。GPUソフトウェアスタックの膨大な蓄積の上で世界中の組織がその改良をしている。発展の急なAIにおいて特定のハードウェア限定による開発リソースの小ささはボトルネックとなりかねない。かつてサーバ機向けにAIアクセラレータを企画したベンダーはそれらの重圧に押しつぶされたのではあるまいか。

 その上GPUは「汎用」なのだ。自前の専用機データセンターでなく、クラウド上のサーバ機を貸し借りするようなビジネス形態では、特定のソフトしか走らせられない機材は不利だろう。結局、データセンター側ではAIに特殊化し過ぎたアクセラレータより、汎用のGPUの方が広く受け入れられた、ということだろうとも想像する。

AIアクセラレータは端末側に勝機を見た?

 しかしAIアクセラレータは、エッジ(端末)側に勝機を見いだしたように思える。それがNPUとして結実したといったらよいだろうか。スマートフォン用のSoCにはCPUもGPUも必要不可欠で搭載されているのだから、NPUは純粋にAI処理に特殊化することができる。それでCPUやGPUよりも効率的(高速で低消費電力)な処理が可能になる。そして処理する内容はスマートフォンなどの機能として「売り」に直結する機能に適用できるようだ。搭載しただけの御利益があるという前提。

 技術的な部分を見てみる。まずは演算という機能からである。先ほども述べたようにGPUのジオメトリ演算ほどAI処理に精度はいらない。モダンなAIは、かならず勾配(偏微分)を計算するステップがどこかにあるという原理から、ある程度のダイナミックレンジが必要だが、計算できれば精度にコダワリはないのだ。より狭いビット幅で並列化を達成できる方が電力効率が良くなるし、高速化もできる。

 また、メモリの帯域も大きなボトルネックとなり得るが、AIに振り切ったNPUは他より最適化が可能だ。ほとんどのAIアルゴリズムはその演算の基礎を行列計算(特に行列積)に置いている。これは積和算を並べた専用演算器として実現できるだけでなく、メモリとのやりとりも確実に効率化できる。

 CPUのキャッシュと比べたら違いは歴然としている。予想できないアプリプログラムの挙動から自動でキャッシュに残すもの捨てるものを選択しなければならないCPUと比べると、既にシナリオの決まっている(行列積の連続)演算シーケンスにメモリアクセスを最適化するのはずっと有利だ。

 GPUはCPUに比べたら特殊化したメモリ階層を持っていたりするが、どうしても画像処理に特化した構造(例:テクスチャメモリ)を残さざるを得ず、NPUほどはAI処理に割り切れないところがあると思う。

 かつて百花繚乱であったAIアクセラレータはNPUとしてSoCの一部に取り込まれたように思われる。勝手なことを言わせてもらえば、低精度の超並列行列計算器である。これがこのままエッジ側にとどまるのか、再びサーバ機側にまで反攻することになるのかはまだ先の話なのか? AIの進歩は速いからなぁ……。

筆者紹介

Massa POP Izumida

日本では数少ないx86プロセッサのアーキテクト。某米国半導体メーカーで8bitと16bitの、日本のベンチャー企業でx86互換プロセッサの設計に従事する。その後、出版社の半導体事業部などを経て、現在は某半導体メーカーでヘテロジニアス マルチコアプロセッサを中心とした開発を行っている。


Copyright© Digital Advantage Corp. All Rights Reserved.

ページトップに戻る