← 一覧へ戻る

Claude が書いた記事

VRAM と GPU、その間にある「もう一段」── レジスタ・L1・L2 の階層

VRAM と HBM って同じようなもんか、から掘っていったら、「GPU と VRAM」という 2 ブロックの説明の裏にもう 1 段隠れた階層があることに気づいた学習ログ。

俺の最初の疑問

コンシューマー向けの GPU には VRAM があるらしい。NVIDIA の Blackwell 世代の GPU には HBM があった。VRAM も HBM も同じようなものか? そもそもなんでこのメモリーが必要なんや? というのがそもそもの疑問やった。

まず一言でいうと

結論から言うと、VRAM は「GPU 用メモリ」の総称で、HBM (や GDDR) はその実装方式の 1 つ。同じ軸で対立する別物やない。そしてメモリが要る理由はシンプルで、演算コア (GPU の計算部隊) が計算に使うデータを、ディスクよりずっと近くて速い場所に置いておく必要があるから。

以降の具体例は、コンシューマー向け GPU の中でも中古でよく選ばれる NVIDIA GeForce RTX 3090 (Ampere 世代、2020 年発売、VRAM 24 GB) を軸にする。

CUDA コア(演算コア) ──

GPU の中で実際に足し算・掛け算などの計算をやる最小の実行ユニット。3090 だと 10,496 個がダイの上に並んでいて、これをまとめた単位が SM (Streaming Multiprocessor)。NVIDIA の開発プラットフォームである CUDA (ソフトウェア) とは別物で、ソフトの CUDA がこのハードの CUDA コアに計算を指示する、という間柄。

ただ、これで話は終わらない。GPU の説明でよく出てくるのは、「GPU (演算コア)」と「VRAM (記憶)」という 2 つの箱をバスで繋いだだけの図。この「GPU ⇔ VRAM」の 2 ブロック図は、嘘やないけど不正確。実際は GPU のダイ (シリコン本体) の中に、レジスタ → L1 キャッシュ → L2 キャッシュという段階的な保存領域があって、演算コアはこの階層を経由してから、初めて別チップの VRAM とデータをやり取りしている。

何と比べるとわかるか

VRAM と HBM の住み分け (総称と実装方式) は HBM の記事 に譲る。今回の比較の軸はその 1 つ先、GPU ダイと VRAM チップという「別物」の中身。VRAM の中身が GDDR であれ HBM であれ、ダイの中には VRAM とは別の保存領域がもう 1 段 (実際は 3 段) 隠れていて、演算コアが実際に読み書きしているのはこっち。

SRAM (レジスタ・L1・L2)DRAM (VRAM)
1 bit あたりの構造トランジスタ 6 個トランジスタ 1 個 + コンデンサ 1 個
置き場所演算コアと同じダイ (シリコン一体)別チップ (バス越しに接続)
容量小さい (KB 〜 数 MB)大きい (GB 単位)
速度極めて速いSRAM より遅い (それでも CPU の DRAM よりは速い)
リフレッシュ不要 (電源が入っていれば保持)必要 (コンデンサの電荷が漏れるので定期的に書き直す)

何が問題なのか

具体例で考えると腹落ちしやすい。AI モデルの実体は「重み」と呼ばれる大量の数値データで、ふだんはディスク上に .safetensors.gguf といったファイルとして置かれている。推論するときはこの重みを使って演算コアが行列演算をするので、まず重みを VRAM に読み込む (ロードする) 必要がある。

なぜロードが要るかというと、置き場所によって読み書きの速さが桁違いに違うから。ディスクは数 GB/秒、VRAM は 3090 なら 936 GB/秒。計算のたびにディスクまで重みを取りに行っていたら、演算コアはずっとデータ待ちになって、せっかくの計算力が遊んでしまう。だから起動時に 1 回、重みを VRAM に運び込んでおく。

同じ問題が、実はもっと近い距離でも起きる。演算コアが計算のたびに VRAM チップまで直接データを取りに行っていたら、いくら VRAM の帯域が太くても速度で頭打ちになる。理由は物理的な距離。VRAM はダイのすぐ隣とはいえ、バスを挟んだ別チップで、演算コアから見ればそれなりの距離がある。

そこで GPU は、ダイの中に演算コアの近さ順に小さくて速い置き場を段階的に用意して、直近よく使うデータをそこに留めておく (キャッシュする) ことで、演算コアを待たせない設計にしている。これがレジスタ → L1 キャッシュ → L2 キャッシュ → VRAM、という 4 段階の階層。

図で見る

左: よくある説明。演算コアが VRAM に直接触れているように見える。右: 実際の構造。GPU ダイの中に L2 キャッシュ → L1 / 共有メモリ → レジスタが入れ子になっていて、演算コアはこの階層を通ってから、バスとメモリコントローラー越しに別チップの VRAM とやり取りする。
演算コアに近いほど容量は小さいが速く (SRAM)、遠いほど容量は大きいが遅い (DRAM = VRAM)。図の面積・高さは相対イメージで、正確な ns や容量比の縮尺ではない。

混乱しやすいポイント

① VRAM は GPU の「上」には無い

GPU ダイと VRAM チップは別物で、基板上の配線 (バス) で直結されているだけ。ダイの中に物理的に乗っている保存領域は、レジスタ・L1・L2 の方。「VRAM が GPU に内蔵されている」という感覚で止まると、この階層が抜け落ちる。

② 「半導体」と「メモリ」は対立しない

レジスタ・L1・L2 は「半導体か、メモリの一種か」と聞かれると、答えは両方。半導体は材料・技術の話 (シリコンに手を加えたトランジスタ回路)、メモリは役割の話 (データを保持する)。レジスタも L1 も L2 も、VRAM も、全部シリコンで作られた半導体であり、同時にメモリでもある。違うのは、SRAM か DRAM か、という実装方式の軸だけ。

③ 段階を飛ばして直接アクセスすることはできない

演算コアが読み書きするのは、常にレジスタ止まり。そこに無ければ L1、無ければ L2、それでも無ければバス越しに VRAM、と順番に遡って取りに行く。この探しに行く動き自体が「キャッシュミス」で、遠くまで探しに行くほど遅くなる。

たとえ話

工場のたとえで一気通貫できる。

  • VRAM = 倉庫。材料 (重み・入力データ) をまとめて置いておく場所。大きいが工場から少し離れている。
  • L2 キャッシュ = 工場フロア全体の共同作業台。倉庫から運んできた材料をいったん広げておく。
  • L1 / 共有メモリ = 各生産ラインの手元の棚。共同作業台から、自分の班がすぐ使う分だけ引き寄せる。
  • レジスタ = 作業員が今まさに手に持っている部品。
  • 演算コア (CUDA コア) = 作業員本人。

作業員は倉庫まで歩いて行かない。手元の棚が空になりそうになったら、共同作業台経由で倉庫から補充される。この「補充の仕組み」がバスとメモリコントローラーの役割。

用語の早見表

言葉つまり何の話?
VRAMVideo RAM の略。GPU 用メモリの総称。GDDR や HBM はその実装方式
GDDRGraphics Double Data Rate の略。コンシューマ GPU で使われる VRAM の実装方式の 1 つ (DRAM の一種)。3090 は GDDR6X
シリコン半導体の代表的な材料になる元素 (Si)。地殻に酸素の次に多く、原料は石英 (砂の主成分)
シリコンウェハーシリコンの単結晶を薄い円盤状に切り出した、チップ製造の元になる板
ダイシリコンウェハーから切り出された半導体チップの本体
トランジスタ電気を通す / 通さないを切り替える最小の半導体素子。デジタル回路の 0 / 1 の土台
コンデンサ電荷を溜めておく部品。DRAM (VRAM 含む) はこれ 1 個 + トランジスタ 1 個で 1 bit を記憶する
バスGPU ダイと VRAM チップを繋ぐ配線。並列に走る本数がそのままメモリ帯域幅になる
メモリコントローラーダイの中にある、バスを使って VRAM に読み書き命令を送る専用回路
SRAMStatic Random Access Memory の略。レジスタ・L1・L2 の実装方式。トランジスタ 6 個 / bit、演算コアと同じダイに乗る
DRAMDynamic Random Access Memory の略。VRAM の実装方式。トランジスタ 1 個 + コンデンサ / bit、別チップで大容量化しやすい
キャッシュミス欲しいデータが近い階層に無く、もっと遠い階層まで探しに行くこと
深掘りメニュー 次におすすめのトピック

この記事の続きとして、未来の自分が次に掘るといいトピック。

  • VRAM 容量とモデルサイズの目安 ── 3090 の 24 GB で、量子化や KV キャッシュを込みにするとどのモデルサイズが現実的か。ワークステーション構築の実務に一番直結する。
  • GDDR の世代差 (GDDR6 → GDDR6X → GDDR7) ── 同じ「実装方式」の中でも世代ごとに何が伸びているかの入口。
  • HBM の世代 (HBM2e → HBM3 → HBM3e) ── データセンター側の実装方式の進化と、AI インフラでの意味。