逐次処理から並列処理へ
逐次的なアルゴリズム
前回の記事でいくつかのアルゴリズムを紹介しました。そこで紹介したアルゴリズムは以下のようなものでした。
A を実行する
もし,A の結果が B なら完了
もし,A の結果が C なら D を実行する
1 に戻り繰り返す
細かな違いがあるとはいえ,コンピュータで実行されるアルゴリズムの多くは上のような構造をしています。つまりそこには、条件分岐(「もし〜なら〜する」)やループ(「〜に戻り繰り返す」)といった制御フローがあり,入力された情報を順番に処理することによって目的を達成します。
「順番に」というのが重要です。多くのアルゴリズムは各ステップを連続して実行する形式で記述されます。入力された情報を順番に処理するこの方式を逐次処理と呼びます。
逐次処理はフローチャートなどを使って視覚的にも表現しやすく,多くの人にとって馴染み深く理解しやすいものです。コンピュータを動かすプログラムも連続した命令列によって構成されています。
脳の並列処理
脳も情報処理に逐次処理を用いています。たとえば,テニス選手のあいだを行き来するボールの映像は選,手の目から脳、脊髄へと情報が流れ,全身の筋肉収縮を制御します。
しかし,脳はまた、多数の神経細胞と各神経細胞がもつ多数の接続を利用して大規模な並列処理を実行しています。動くテニスボールの映像は,光を受容する細胞によって光から電気信号に変換され,網膜のさまざまな神経細胞に並行して送信されます。ボールの輪郭や位置,向き,速度はそれぞれの神経回路で抽出されます。
『カンデル神経科学』によると,ヒトの脳には少なくとも 1,000 億個の神経細胞が存在し,ひとつの神経細胞は平均して 1,000 〜 10,000 のシナプス結合を形成しているそうです[1]。
コンピューターの並列処理
さて,複数の情報処理を同時に実行する並列処理は,コンピュータの世界でも活用されています。各ステップを逐次的に実行するのに比べて,並列に実行することで全体の処理時間を短縮できます。
しかし,並列処理には特有の困難さも伴います。そもそのアルゴリズムが逐次処理であり,各ステップの実行のためにひとつ前の結果が必要になる場合,それぞれのステップを同時に実行することは不可能です。この場合,アルゴリズム自体を並列処理ができるように変換する必要があります。
そして,並列処理の理解・制御が人間にとって難しいことです[2]。これは日常生活を振り返ってみても分かるでしょう。同時に別個のことをこなすマルチタスクは,人間の生産性を低下させます。
AI 開発での並列処理
そんな中で近年,活用が進んでいるのが GPU です。[3]
もともと,コンピュータの計算処理全般を担っていたのは CPU でした[4]。 しかし,映像技術の需要と発展に伴い CPU 単体では処理しきれなくなり,画像処理を引き受けるアクセラレータ回路として GPU が登場した,という経緯があります[5]。
GPU が CPU と大きく異なるのは,CPU が基本的に逐次的な計算処理を採用している一方で,GPU は同じ計算を多数のデータに対して同時に実行する並列処理を採用していることです。
特に,AI 技術のひとつである深層学習ネットワークでは数百万を超えるパラメーターを扱うため,逐次的に処理していたのでは全く追いつきません。ニューラルネットワークでは大量の行列計算を行うため,多数のデータに対して行列演算を行える GPU が重要な役割を果たしています[6]。GPU の活用なしには,実用的な処理速度を達成することができず,ニューラルネットワークがここまで注目されることはなかったでしょう。
また,さらなる処理性能向上のために,近年ではニューラルネットワークの学習と推論に特化した NPU [7] の開発も盛んになっています。
※この連載の記事の内容は筆者個人の見解に基づくものであり,所属組織を代表するものではありません。
脚注
[1] 1,000 億個の神経細胞 つまり脳全体では 100 兆〜 1,000 兆ものシナプス結合が形成されていることになります。
[2] 並列処理の理解・制御が人間にとって難しい これは,プログラムを記述するためのプログラミング言語の多くが逐次処理を前提に作られていることも一因です。しかし,現場での並列処理の必要性の高まりから,最近では並列処理をうまく扱うための進化が顕著になっています。
[3] GPU Graphic Processing Unit の略。[4] の CPU とは異なり,主に映像処理処理に特化した処理装置として登場しました。
[4] CPU Central Processing Unit の略。コンピューターの計算処理全般を担っている処理装置です。
[5] アクセラレータ回路 他にも,浮動小数点演算を専門に行う FPU (Floating Point Unit) や、音声や映像データのフィルタリング・解析を高速に行う DSP (Digital Signal Processor)などが有名です。たとえば,スマートフォンには多くのアクセラレータ回路が搭載されています。
[6] GPU が重要な役割を果たしています 現代では GPU が活用される領域は大変広く,欠かせない存在になっています。ゲームや映像を含めたグラフィックス処理だけでなく,AI のニューラルネットワーク,仮想通貨のマイニング,文書の検索などにも利用されています。そして,一般的な PC にはもちろん、スマートフォンにも GPU が搭載されており,実は非常に身近な存在です。
映像処理に特化した回路として登場しながら,特定のアルゴリズムだけに特化するのではなく,多くのデータに共通の処理を適用する,という汎用性が GPU 成功の鍵になったと言えそうです。
[7] NPU Neural network Processing Unit の略。特に米 Google 社の提供する TPU (Tensor Processing Unit) は,クラウドベースで利用できる環境を同社が提供していることもあって,一般でも利用しやすいものとなっています。
2022.9.5 石川 尊教(@takanori_is)