秋に公開が予定されているWindows 11 Ver.24H2では、高性能なNPUを搭載しているPCにおいて、ローカル推論が使えるようになる予定だ。今回はこのローカル推論について解説する。
そもそもローカル推論とは?
ローカル推論とは、ローカルメモリにモデル(学習済みのニューラルネットワーク)を置き、入力データに対して推論処理をするものだ。これ自体は特に珍しいものではないが、生成AI、大規模言語モデルのような巨大なモデルでは、推論をするにも高性能なコンピュータシステムが必要になるため、クラウドサービスとして提供されることが多かった。
実行にいくらでも時間がかかって構わないというのであれば、クラウドで実行されているようなAIサービスを一般消費者が使うPCで実行することは可能だ。これを実用的な時間で実現するには、モデルを格納できるような大きなメモリ、推論処理を高速で処理できる推論エンジンが必要になる。
ローカル実行を想定するなら、モデルを小さくして、高速に推論できるよう作り替えることが一般的だ。一般に学習済みのモデルに対して、「プルーニング」(剪定)と呼ばれる処理がある。これは結果に影響しないニューロンや入力を削除し、ニューラルネットワークのパラメーター数を減らすもの。このことで推論に必要な計算量やモデルのサイズを削減できる。
また「量子化」と呼ばれる処理では、ニューラルネットワークの出力やパラメーターを小さなデータ形式で表現する。一般にニューラルネットワークでは、出力やパラメーターに32bitの浮動小数点(FP32、単精度浮動小数点)を使う。これを8bitの整数(INT8)や16bitの浮動小数点で表せば、計算量を削減できる。あるいは、並列計算が可能な推論エンジンで、より多くのパラメーターを同時に計算させることができる。
NPU(ニューラル プロセッシング ユニット)とも呼ばれる推論エンジンは、複数のパラメーターを同時に処理することで実行効率を上げている。このとき、1つのパラメーターを表現するビット数が小さい方が、より多くのパラメーターを一度に処理できる。また、計算処理は浮動小数点よりも整数の方が高速で、NPUを構成する回路も簡単になる。
このほか、「知識蒸留」(Knowledge Distillation)と呼ばれる手法もある。これは学習済みのモデルを使って、より小規模なニューラルネットワークを学習させる手法だ。この方法を使うことで、元のモデルとほぼ同等のコンパクトなモデルを作ることができる。モデルがコンパクトになると、計算量が減り、メモリ占有量も小さくなる。
似たような方法に、モデルを使って品質の高い学習データを作成し、コンパクトなニューラルネットワークを学習させるという方法もあるようだ。
Microsoftの「Phi-3 mini」は、高度にフィルタリングしたインターネット上のデータと合成したデータを使うことで、コンパクトなモデルを作成したという。Microsoftの解説によれば、たとえば、スポーツの試合の結果は、大規模モデルには適切な学習データとなる可能性があるものの、コンパクトなモデルのためには、削除すべき学習データだとする。
こうした事実は、学習させなくとも、推論時にインターネット検索を併用することで、具体的な回答が可能になるとした。
このようにしてローカル推論に“最適化”したモデルができるなら、あとは、ハードウェアでどれだけ高速化できるかという問題になる。
なお、Phi-Silicaを試すには、Copilot+ PCが必要だが、そのベースとなった、Phi-3 miniをAzure AI Studioで試すことができた(記事冒頭画面)。
ローカル推論での速度感はわからないが、辞書にあるような単語に対する質問に答えることができ、「お詫びの手紙」の書き方を提示するくらいはできた。日本語にも対応していたが、回答によっては少し文章がおかしいものがあった。とりあえず、ローカル推論用のPhi-SilicaでもCopilot的な利用は可能なようである。
CPUに当たり前に載るようになってきたNPUとは?
モデルがローカル推論に最適化されたとしても、高速に推論をするためには、そのためのエンジンが必要となる。一般的にニューラルネットワークでは、複数の入力それぞれに「重み」をかけ算し、これを使って「活性化関数」を計算する。基本となる演算は、全ての入力と入力ごとに定義されている重みをかけ算して合算する処理である。
一般にこうした演算を「積和演算」という。積和演算は、行列を扱う場合によく使われる演算で、以前からDSP(Digital Signal Processor)などでもハードウェア化されていた。
NPUにはさまざまなアーキテクチャがあるが、基本的には、並列計算により高速に積和演算を行う機能がある。一般に、NPUの性能として示される単位であるTOPS(Tera Operation Per Second)は、8bit整数の積和計算を一秒間に何回できるかを示すもの。接頭辞がテラなので「1兆、10の12乗」が単位になる。
NPUでは、複数の入力をまとめて計算することで、演算処理を効率的に処理する。コンパクトなモデルとはいえ、合計計算量に相当するパラメーター数は数十億個と言われている。前述したMicrosoftの小規模言語モデル、Phi-3 mini(Copilot+ PC向けに開発しているPhi-Silicaのベースになった)のパラメーター数は、38億(3.8×10の9乗)だと言われている。
推論計算では、ニューロンごとに入力と重みを積和演算で計算する必要がある。一般にニューラルネットワークは、層構造になっており、各層に役目がある。このとき、前層のニューロンの計算を完了させないと出力が決定しないため、次層のニューロンの計算ができない。
推論計算は層の順にニューロン単位でする必要があるため、常に最大性能で計算できるとは限らない。このため、NPUは、ニューラルネットワークのパラメーター数に対して大きな余裕が必要になる。
Copilot+ PCの条件にある「40 TOPS」以上は、こうした数十億パラメーターのネットワークを実行するためには必要な条件なのである。
この連載の記事
-
第458回
PC
Windows上でhostsファイルを活用する -
第457回
PC
IPv6アドレスは先頭を見ればどんな種類かわかる -
第456回
PC
あらためてIPv6基本のキ -
第455回
PC
Windowsで現在どのネットワークアダプタがインターネット接続に使われているかを調べる方法 -
第454回
PC
Windows 11 24H2では「デバイスの暗号化」の条件が変わり、より多くのPCでドライブが暗号化される -
第453回
PC
Windows 11 24H2の配布開始後もすぐにはやってこない Windows UpdateとSafeguard Holds -
第452回
PC
Windows 11 Ver.24H2が登場 Copilot+ PCとそうでないPCで実質Windowsが2つに分かれる -
第451回
PC
新しいWindowsサンドボックスではコマンドラインからの制御が可能に -
第450回
PC
ユニコードで文字数を数える方法 -
第449回
PC
WSLはプレビュー版でGUIでの設定が加わった! リリース2.3.xの新機能を見る -
第448回
PC
PowerShellで面倒なオブジェクトはPSCustomObjectに変換するのが早道 - この連載の一覧へ