AIの学習と推論の違い:計算・メモリ・数値形式・バッチサイズ・ハードウェアを比較

学習は、データを順伝播させて損失を求め、逆伝播で勾配を計算し、オプティマイザで重みを更新することを大量に繰り返して、モデルの重みを決める処理です。推論は、決まった重みで順伝播だけを行い、新しい入力に答えを出す処理です。学習では重みに加えて勾配やオプティマイザの状態、逆伝播のための活性化を保存するので、同じモデルの推論よりずっと多くのメモリと計算が必要です。推論は1回の計算は小さいものの、使われるたびに実行され、応答の速さが重視されます。

項目学習(トレーニング)推論(インファレンス)
目的データから、モデルの重みを決める決まった重みで、新しい入力に答えを出す
計算の内容順伝播 → 損失の計算 → 逆伝播で勾配を計算 → オプティマイザで重みを更新、を繰り返す順伝播だけ
計算量の目安1つの入力あたり順伝播の約3倍(逆伝播が順伝播の約2倍)。Transformerでは全体で約6 × パラメータ数 × トークン数パラメータ数Nのモデルで、1トークンあたり約2N
必要なメモリ重み、勾配、オプティマイザの状態(Adamでは2つ)、逆伝播のための活性化。すべてFP32なら1パラメータあたり16バイトに活性化が加わる重みと、計算中の活性化(大規模言語モデルではKVキャッシュも)。FP16なら1パラメータあたり2バイト
数値形式BF16やFP16の混合精度(マスターウェイトはFP32)FP16やBF16、INT8やINT4などに量子化した形式
バッチサイズ大きなバッチにまとめて、演算器の利用率を上げる応答を急ぐ場合は小さく(1のこともある)。サーバでは複数の要求をまとめて効率を上げる
重視する性能スループット(学習を終えるまでの時間、演算器の利用率)レイテンシ(1つの要求への応答時間)とスループットの両立、処理あたりのコスト
ハードウェア大容量のHBMと高い演算性能を持つGPUやアクセラレータを、高速なネットワークで多数つなぐデータセンターのGPUや推論向けのアクセラレータから、スマートフォンのNPUやマイコンまで幅広い
並列化データ並列、テンソル並列、パイプライン並列。勾配をオールリデュースで集める複数の要求を並列に処理する。大きなモデルはテンソル並列などで複数のチップに分ける
エネルギー1回の学習で、多数のチップを長い期間動かして大量の電力を使う1回は小さいが、使われるたびに実行され、利用が多いと合計は大きくなる

数値は代表的な目安で、世代や製品によって異なります。

どんなときに使うか

学習
新しいモデルを作るとき、既存のモデルを自分のデータに合わせて追加学習(ファインチューニング)するとき。
推論
学習済みのモデルを、サービスや製品の中で使うとき。画像の認識、文章の生成、音声の認識など。
工夫
推論では、量子化やプルーニング、知識蒸留でモデルを軽くします。学習では、混合精度や勾配チェックポイントでメモリと計算を節約します。

よくある質問

学習が推論よりずっと多くのメモリを使うのはなぜですか?

学習では、重みのほかに、同じ数の勾配と、オプティマイザの状態(Adamでは2つ)を持ち、さらに逆伝播のために順伝播の途中の活性化を保存するからです。たとえば70億パラメータのモデルでは、これらをすべてFP32で持つと活性化を除いて約112 GBになりますが、FP16の重みだけで推論するなら約14 GBで済みます。

推論でバッチサイズを大きくすると、どうなりますか?

一度読み込んだ重みを複数の入力の計算に使えるので、演算器を有効に使えて全体のスループットが上がります。一方で、入力がそろうのを待つ時間や1回の処理の時間が増えるので、1つの要求への応答(レイテンシ)は遅くなり、メモリも多く使います。

学習と推論で、同じハードウェアを使えますか?

使えます。GPUは学習にも推論にも使われます。ただし、推論だけなら逆伝播や大きなメモリは不要なので、INT8などの低い精度の演算器を多く並べた推論向けのアクセラレータや、スマートフォンのNPUのように、電力の効率を重視したハードウェアも使われます。

学習にはどのくらいの計算が必要ですか?

Transformerのモデルでは、パラメータ数をN、学習に使うトークンの数をDとすると、全体の演算の数は約6NDという近似がよく使われます。順伝播が1トークンあたり約2Nで、逆伝播がその約2倍かかるためです。

理解度チェック

ニューラルネットワークの「学習」と「推論」の違いとして正しいものはどれか。

  1. A学習は順伝播・逆伝播・重みの更新を繰り返して重みを決め、推論は決まった重みで順伝播だけを行って答えを出す
  2. B学習も推論も、順伝播だけを行う
  3. C推論は重みを更新し、学習は重みを使わない
答えと解説を見る

正解:A. 学習は順伝播・逆伝播・重みの更新を繰り返して重みを決め、推論は決まった重みで順伝播だけを行って答えを出す

学習では、入力を順に計算して出力を求め(順伝播)、正解との誤差を出力側から入力側へさかのぼって各重みの勾配を求め(逆伝播)、勾配にしたがって重みを少しずつ直す、ということを大量のデータで繰り返します。推論では、学習で決まった重みを使って順伝播だけを行います。逆伝播は順伝播のおよそ2倍の計算が必要で、途中の結果も保存するので、学習は推論よりずっと重い処理です。

学習に必要なメモリが、同じモデルの推論よりずっと大きくなる理由として当てはまらないものはどれか。

  1. A学習では重みの数が推論の何倍にも増えるから
  2. B逆伝播で使うため、順伝播の途中の結果(活性化)を保存しておく必要があるから
  3. C重みと同じ数の勾配や、オプティマイザの状態を持つ必要があるから
答えと解説を見る

正解:A. 学習では重みの数が推論の何倍にも増えるから

モデルの重みの数は学習でも推論でも同じです。しかし学習では、逆伝播で勾配を計算するために順伝播の途中の結果を各層で保存し、重みと同じ数の勾配と、Adamなどのオプティマイザが持つ重みごとの値(2つの移動平均など)も必要です。そのため学習のメモリは、重みだけで済む推論の何倍にもなり、大きなモデルの学習には多数のGPUが必要になります。

パラメータ数70億(7B)のモデルを、重み・勾配・Adamの2つの状態をすべてFP32(4バイト)で持って学習する。活性化を除いて必要なメモリに最も近いものはどれか。

  1. A約28 GB
  2. B約112 GB
  3. C約14 GB
答えと解説を見る

正解:B. 約112 GB

1パラメータあたり、重み4バイト、勾配4バイト、Adamの1次と2次の移動平均4バイトずつで、合計16バイトです。70億×16バイト=1120億バイトで約112 GBになり、これに活性化のメモリが加わります。1枚のGPUのメモリには収まらないことが多いので、オプティマイザの状態を複数のGPUに分けて持つ、低い精度で持つなどの工夫が使われます。

  1. 推論でバッチサイズ(まとめて処理する入力の数)を大きくすると、処理全体の効率が上がりやすい理由はどれか。
  2. 推論でバッチサイズを大きくしすぎたときの欠点として正しいものはどれか。
  3. Transformerのモデルの学習に必要な演算の数の目安として、パラメータ数をN、学習に使うトークンの数をDとしたとき、よく使われる近似はどれか。

AIハードウェアとソフトウェアスタックの練習問題へ

関連する用語の解説

推論
学習で決まった重みを使い、入力から順伝播だけを行って答えを出すAIの処理。学習より計算とメモリが少なくて済む。
逆伝播
ニューラルネットワークの学習で、出力と正解の誤差を出力側から入力側へさかのぼって伝え、各重みの勾配を求める計算。バックプロパゲーション。
バッチサイズ
まとめて処理する入力の数。大きくすると重みを再利用できて効率が上がるが、応答の遅れとメモリが増える。
混合精度
計算の部分ごとに違う精度の数値を使うこと。掛け算をFP16などで行い、累積をFP32で行って、速さと精度を両立させる。
勾配チェックポイント
順伝播の途中の結果の一部だけを保存し、逆伝播で必要になったときに残りを計算し直して、計算を増やす代わりにメモリを減らす方法。

関連する比較