はじめに
前回の記事では、LLMの「モデル」とは何なのか、そして7B・14B・32Bなどの数字が何を表しているのかについて整理しました。
またモデルのパラメータ数が増えるほど、推論に必要な計算量やメモリも増えていくことについて触れました。
ではそのモデルを実際にローカルで動かすためには、どのようなハードウェアが必要になるのでしょうか。
ローカルLLMについて調べていると、
- GPU
- VRAM
- RAM
- CPU
- CUDA
といった言葉をよく目にします。
特にGPUについてはローカルLLMを動かすならGPUが必要と言われることが多いですが、そもそもなぜLLMではGPUが重要なのでしょうか。
今回は、
- CPUとGPUは何が違うのか
- なぜLLMの推論ではGPUが使われるのか
- GPUがなくてもローカルLLMは動くのか
- VRAMとは何なのか
- RAMとVRAMは何が違うのか
- なぜローカルLLMではVRAM容量が重要なのか
- VRAMにモデルが収まらないとどうなるのか
- Apple Siliconのユニファイドメモリとは何か
といった内容を中心に整理していきます。
CPUとGPUの違い
まずはCPUとGPUの違いから整理してみます。
CPU(Central Processing Unit)は、PC全体のさまざまな処理を担当する演算装置です。
アプリケーションの実行やOSの処理など、私たちがPCを利用する上で必要となるさまざまな計算を行っています。
一方GPU(Graphics Processing Unit)は、もともと画像や映像を処理するために発展してきた演算装置です。
CPUとGPUでは、得意としている処理が異なります。
非常に単純化すると、
CPU
少数の高性能なコア
│
▼
複雑な処理を順番に実行することが得意
GPU
多数のコア
│
▼
大量の計算を並列に実行することが得意
という違いがあります。
CPUは複雑でさまざまな種類の処理をこなすことを得意としています。
一方GPUは、同じような計算を大量に同時実行することを得意としています。
なぜLLMではGPUが使われるのか
ではなぜLLMではGPUがよく使われるのでしょうか。
前回の記事では、LLMには数十億から数百億ものパラメータが存在することを紹介しました。
LLMが推論を行う際には、この大量のパラメータを使った数値計算が行われます。
その中心となるのが、大量の行列演算です。
イメージすると、
入力されたトークン
│
▼
大量のパラメータを使った計算
│
▼
大量の行列演算
│
▼
次のトークンを予測
という処理が繰り返されています。
このような大量の計算を並列に処理することをGPUは得意としています。
そのため、
LLMの推論
│
▼
大量の数値計算
│
▼
並列処理が得意なGPU
│
▼
高速に処理できる
という関係になります。
GPUは単に「CPUより性能が高いから使われている」のではなく、LLMが必要とする計算とGPUが得意とする処理の相性が良いということになります。
GPUがなくてもローカルLLMは動く?
では、GPUがなければローカルLLMは動かせないのでしょうか。
必ずしもそうではありません。
ローカルLLMはCPUだけでも動かすことができます。
ローカルLLM
│
├─ CPUで推論
│
└─ GPUで推論
ただし、一般的にはGPUを利用した方が高速に推論できます。
特にモデルが大きくなるほど計算量も増えるため、CPUのみでの推論では回答の生成に時間がかかることがあります。
そのため、
動かせるか?
という意味ではCPUでも可能ですが、
快適に動かせるか?
という点ではGPUが重要になってきます。
ローカルLLM環境を考える際には、単にモデルが起動できるかだけではなく、実用的な速度で利用できるかも重要になります。
VRAMとは?
GPUについて調べていると、必ずと言っていいほど登場するのがVRAMです。
VRAM(Video Random Access Memory)は、GPUが利用するためのメモリです。
GPUは計算を行う際に必要となるデータをVRAMへ読み込み、それを使って処理を行います。
ローカルLLMの場合は、モデルのパラメータなどがVRAMへ読み込まれます。
イメージすると、
ストレージ
│
▼
モデルを読み込む
│
▼
VRAM
│
▼
GPU
│
▼
推論
という流れになります。
そのため、GPUそのものの計算性能だけではなく、どれだけのVRAMを搭載しているのかもローカルLLMでは非常に重要になります。
RAMとVRAMの違い
VRAMと似たものとして、PCにはRAMがあります。
RAMはCPUなどが利用するメインメモリです。
一方VRAMは、GPUが利用するためのメモリです。
単純化すると、
CPU
│
▼
RAM
GPU
│
▼
VRAM
という関係になります。
例えばPCに、
RAM 64GB
VRAM 16GB
が搭載されていたとしても、GPUが自由に64GBのRAMすべてをVRAMとして利用できるわけではありません。
一般的なディスクリートGPUでは、RAMとVRAMはそれぞれ別のメモリとして存在しています。
そのためローカルLLM用のGPUを選ぶ際にはPC全体のRAM容量だけではなく、GPUに搭載されているVRAM容量を確認することが重要になります。
なぜローカルLLMではVRAM容量が重要なのか
前回の記事では7Bモデルを16bitで保持した場合、単純計算で約14GB必要になることを紹介しました。
70億パラメータ × 2Byte
│
▼
約14GB
このモデルをGPUで推論する場合、モデルのパラメータをVRAMへ読み込む必要があります。
つまり、
モデル
│
▼
VRAMへ読み込む
│
▼
GPUで計算
という関係になります。
そのため、モデルが大きくなるほど必要なVRAM容量も増えていきます。
例えば32Bモデルを16bitで保持すると、パラメータだけでも単純計算で約64GBになります。
320億パラメータ × 2Byte
│
▼
約64GB
このことからも、大きなモデルをそのまま一般的なGPUで動かすことが難しい理由が分かります。
モデル以外にもVRAMは使われる
ここで注意したいのが、
モデルサイズが16GBなら
VRAM 16GBで動かせる
とは限らないことです。
推論時にはモデルそのものだけではなく、計算途中のデータなどにもメモリが使用されます。
また、前の記事で紹介したコンテキストウィンドウも必要なメモリ量に関係してきます。
非常に単純化すると、
VRAM
│
├─ モデル
│
├─ 推論に必要なデータ
│
└─ コンテキストなどに使用する領域
というイメージです。
そのため、モデルファイルのサイズだけを見て必要なVRAM容量を判断することはできません。
実際にどの程度のVRAMが必要になるのかは、モデルや量子化方法、コンテキスト長、使用する推論環境などによって変わります。
VRAMにモデルが収まらないとどうなる?
では、使用したいモデルがGPUのVRAMに収まらない場合はどうなるのでしょうか。
必ずしもモデルを動かせなくなるわけではありません。
推論環境によっては、一部の処理をCPU側へ任せるCPUオフロードなどの方法を利用できます。
例えば、
モデル
│
├─ VRAM
│ │
│ ▼
│ GPU
│
└─ RAM
│
▼
CPU
のようにモデルの一部をGPU、一部をCPU側で処理します。
これによってVRAM容量を超えるモデルでも動かせる場合があります。
ただし、CPUとGPUでは処理速度や利用するメモリが異なるため、すべてをGPUで処理できる場合と比べると速度が低下することがあります。
そのため、「動かせる」と「快適に動かせる」は別という点が重要になります。
量子化によって必要なVRAMを減らせる
前回の記事で少し触れた量子化(Quantization)も、VRAMと深く関係しています。
例えば7Bモデルを16bitで保持すると、パラメータだけで単純計算すると約14GB必要になります。
これを4bitまで小さくすると、
70億 × 0.5Byte
│
▼
約3.5GB
まで小さくできます。
もちろん実際のモデルサイズや必要なVRAMが必ずこの数字になるわけではありませんが、量子化によって必要なメモリを大きく削減できます。
つまり、
大きなモデル
│
▼
大量のVRAMが必要
│
▼
量子化
│
▼
必要なメモリを削減
│
▼
より少ないVRAMでも動かせる
という関係になります。
ローカルLLMで、
Q4
Q8
などのモデルをよく見かけるのは、このためです。
量子化については次回の記事で詳しく整理していきます。
Apple Siliconでは少し事情が違う
ここまでは、CPUがRAMを使い、GPUがVRAMを使う構成を前提として説明してきました。
一方、Apple Siliconを搭載したMacでは少し仕組みが異なります。
Apple Siliconでは、CPUとGPUが同じメモリを共有するユニファイドメモリという仕組みが採用されています。
一般的なディスクリートGPUでは、
CPU GPU
│ │
▼ ▼
RAM VRAM
のようにメモリが分かれています。
一方Apple Siliconでは、
CPU GPU
\ /
\ /
▼
ユニファイドメモリ
という構成になります。
CPUとGPUが同じメモリ空間を利用できるため、大容量のユニファイドメモリを搭載したMacでは、そのメモリをGPU側の処理にも活用できます。
例えば128GBのユニファイドメモリを搭載したMacであれば、一般的なGPUのように「VRAMが24GBしかないから、それ以上のモデルはGPUに載せられない」といった制約とは事情が異なります。
そのため大きなモデルをローカルで動かしたい場合には、大容量のユニファイドメモリを搭載したMacも選択肢の一つになります。
ただし、メモリ容量だけで推論性能が決まるわけではありません。
GPU自体の計算性能やメモリ帯域、使用する推論環境なども性能に大きく関係します。
ローカルLLM用のGPUでは何を見るべき?
ここまで整理すると、ローカルLLM用のGPUを考える際には、単純にGPUの性能だけを見れば良いわけではないことが分かります。
特に重要になるのが、
- GPUの計算性能
- VRAM容量
- メモリ帯域
- 利用したいモデルのサイズ
- 量子化の有無
- 必要な推論速度
などです。
例えば非常に高性能なGPUでも使いたいモデルに対してVRAMが不足していれば、そのモデルをすべてGPU上へ載せることができない場合があります。
反対に大容量のVRAMがあってもGPU自体の計算性能が低ければ、推論速度が期待したほど出ない可能性があります。
そのため、
使いたいモデル
│
▼
必要なVRAM容量
│
▼
求める推論速度
│
▼
GPUを選択
というように、自分が何を動かしたいのかを基準にハードウェアを考えることが重要になります。
用語集
今回の記事で登場した用語を簡単に整理します。
| 用語 | 概要 |
|---|---|
| CPU | Central Processing Unit。PC全体のさまざまな処理を担当する演算装置。 |
| GPU | Graphics Processing Unit。大量の計算を並列に処理することを得意とする演算装置。 |
| RAM | CPUなどが利用するPCのメインメモリ。 |
| VRAM | GPUが利用するためのメモリ。ローカルLLMでは動かせるモデルの大きさに大きく関係する。 |
| 行列演算 | 数値を行列として扱う計算。LLMの推論で大量に行われる。 |
| CPUオフロード | GPUだけでは処理できないモデルの一部などをCPU側で処理する方法。 |
| 量子化(Quantization) | パラメータをより少ないbit数で表現し、モデルサイズや必要なメモリ量を削減する技術。 |
| ユニファイドメモリ | CPUとGPUなどが同じメモリを共有する仕組み。Apple Siliconなどで採用されている。 |
| メモリ帯域 | メモリと演算装置の間で一定時間に転送できるデータ量。LLMの推論速度にも関係する。 |
| CUDA | NVIDIAが提供するGPU向けの並列コンピューティングプラットフォーム。AIの計算などで広く利用されている。 |
さいごに
GPUやVRAMについても単純に性能や容量が大きければ良いというわけではなく、利用したいモデルに合わせて選択することが重要になります。
今後本格的なローカルLLM環境を構築する際に自分に合った構成を選択できるよう、引き続き理解を深めていきたいです。