Tensor Cores

概要

Tensor Cores(テンサーコア)は、NVIDIA GPU内のAI・機械学習専用の演算ユニットです。ローカルLLM(大規模言語モデル)の推論処理において、従来のCUDA Coresと比較して大幅な高速化を実現します。

特に混合精度(FP16/BF16)やINT8量子化モデルの推論で威力を発揮し、メモリ効率と演算速度の両方を向上させます。

通常のCUDA Coreは1クロックあたりスカラー演算(1要素ずつの積和演算)を行うのに対し、Tensor Coresは1クロックで小さな行列同士の積和演算(Matrix Multiply-Accumulate、MMA)をまとめて実行します。ローカルLLM推論の中核処理はAttention層やMLP層の行列積(GEMM)であるため、この行列演算に特化したハードウェアはLLM推論と非常に相性が良く、Ollama・LM Studio・llama.cppなどのローカル実行ツールも内部的にはTensor Coresを前提にCUDAカーネルを最適化しています。

なお「Tensor Cores」という名称の演算ユニットはNVIDIA GPU独自のものであり、AMD GPUのMatrix CoreやApple SiliconのNeural Engineは仕組みが異なる別物です。ローカルLLM環境を構築する際は「NVIDIA GPU=Tensor Cores前提の最適化が効きやすい」という点を押さえておくと、GPU選定やツール選びで迷いにくくなります。

仕組み・詳細解説

行列積和演算(MMA)をハードウェア化する発想

ニューラルネットワークの推論は突き詰めると「行列と行列の掛け算+足し算(D = A×B + C)」の繰り返しです。CUDA CoreはこれをFP32やINT32のスカラー演算の集合として処理しますが、Tensor Coresは世代に応じて4×4〜16×16程度の小さな行列ブロックをハードウェアレベルの専用回路で一括処理します。1つのTensor Coreが1クロックで実行できる積和演算の量がCUDA Coreよりはるかに多いため、同じダイ面積・消費電力でも行列演算のスループットが大きく伸びます。

ワープレベルでの協調実行

Tensor Coresは単体のスレッドではなく、GPUの実行単位である「ワープ」(32スレッドの束)が協調して1つの行列演算命令(wmmamma.syncといったPTX/CUDA命令)を発行する形で駆動します。通常のCUDA C++コードからは直接見えず、cuBLAS・cuDNN・TensorRT・PyTorchのバックエンドが自動的にTensor Core向け命令へマッピングします。ローカルLLM用途ではllama.cppのCUDAバックエンドやvLLM、ExLlamaといった推論エンジンがこの層を担っており、利用者が明示的にTensor Coresを意識するコードを書く必要はほぼありません。

混合精度アキュムレーション

Tensor Coresの重要な特徴に「入力は低精度(FP16/BF16/INT8など)、内部の積算・加算は高精度(FP32やINT32)で行う」混合精度アキュムレーションがあります。これにより、メモリ転送量やメモリ帯域はFP16並みに抑えつつ、丸め誤差の蓄積による精度劣化を最小限に抑えられます。ローカルLLMで量子化モデルを使っても出力が破綻しにくいのは、この内部演算の高精度アキュムレーションによるところが大きいです。

構造化スパース性(Sparsity)アクセラレーション

Ampere世代(RTX 30シリーズ)以降のTensor Coresは、重み行列の中で決まったパターンでゼロ要素を含む「構造化スパース」な行列に対して、理論上最大2倍の演算スループットを引き出せる仕組みを備えています。ただしこれを活かすには学習時・変換時に対応するスパース化処理が必要で、一般的なGGUF量子化モデルの推論では自動的には適用されない点に注意してください。

Tensor Coresの世代と進化

第1世代(Volta世代)

  • 対応GPU: Tesla V100, Titan V
  • 精度: FP16混合精度
  • 演算: 4×4行列演算

第2世代(Turing世代)

  • 対応GPU: RTX 20シリーズ
  • 精度: FP16, INT8, INT4
  • 用途: 推論最適化強化

第3世代(Ampere世代)

  • 対応GPU: RTX 30シリーズ
  • 精度: BF16, TF32追加
  • 性能: 2倍の演算性能向上

第4世代(Ada Lovelace世代)

  • 対応GPU: RTX 40シリーズ
  • 精度: FP8, INT8, sparsity対応
  • 特徴: 効率性とスピード両方向上

主要GPU別 Tensor Core数

RTX 40シリーズ(第4世代)

  • RTX 4090: 512個(第4世代)
  • RTX 4080: 304個(第4世代)
  • RTX 4070 Ti: 240個(第4世代)
  • RTX 4070: 184個(第4世代)

RTX 30シリーズ(第3世代)

  • RTX 3090: 328個(第3世代)
  • RTX 3080: 272個(第3世代)
  • RTX 3070: 184個(第3世代)

ローカルLLMでの高速化効果

精度別性能向上

  • FP32(CUDA Cores): 基準性能 100%
  • FP16(Tensor Cores): 約200-300%高速
  • BF16(Tensor Cores): 約200-250%高速
  • INT8(Tensor Cores): 約400-500%高速
  • INT4(Tensor Cores): 約800-1000%高速

実用例:Llama 2 13B推論

  • FP32(CUDA Cores): 約15-20 tokens/秒
  • FP16(Tensor Cores): 約40-60 tokens/秒
  • INT8(Tensor Cores): 約80-120 tokens/秒

モデルサイズ別の推論速度の目安

推論速度はGPU世代・VRAM帯域・コンテキスト長・バッチサイズによって変動するため、以下はTensor Cores搭載のRTX 30/40シリーズを用いた場合の大まかな目安です。

モデル規模 量子化(GGUF目安) RTX 4090での目安 RTX 3060(12GB)での目安
7B Q4_K_M 80〜120 tokens/秒程度 25〜40 tokens/秒程度
13B Q4_K_M 50〜80 tokens/秒程度 15〜25 tokens/秒程度(一部CPUオフロード時は低下)
34B Q4_K_M 25〜40 tokens/秒程度 VRAM不足でCPUオフロード必須、10 tokens/秒未満のケースも
70B Q4_K_M 10〜20 tokens/秒程度(VRAM24GBでは一部レイヤーCPUオフロード) 単体VRAMでは実行困難、マルチGPUかCPU推論が必要

数値はあくまで目安であり、同じ4bit量子化でもQ4_0Q4_K_Mではブロックサイズや量子化誤差補正の方式が異なるため速度・精度とも差が出ます。実運用ではまずQ4_K_M程度から試し、精度に不満があればQ5_K_MやQ8_0へ、速度を優先するならIQ3系やQ4_0系へ調整するのが定石です。

混合精度の活用

PyTorchでの実装例

# Tensor Coresを活用した混合精度推論
import torch
from torch.cuda.amp import autocast

# モデル読み込み
model = AutoModelForCausalLM.from_pretrained(
    "meta-llama/Llama-2-7b-chat-hf",
    torch_dtype=torch.float16,  # FP16でTensor Cores活用
    device_map="auto"
)

# 推論実行(Tensor Cores自動使用)
with autocast():
    outputs = model.generate(
        input_ids,
        max_length=512,
        do_sample=True,
        temperature=0.7
    )

最適化のポイント

  • データ型選択: FP16/BF16でTensor Cores活用
  • バッチサイズ: 8の倍数で最適化
  • シーケンス長: 8の倍数で効率向上
  • cuDNN: 最新版でTensor Core対応

量子化との組み合わせ

INT8量子化の効果

# bitsandbytes + Tensor Cores活用
from transformers import BitsAndBytesConfig

# INT8量子化設定(Tensor Cores自動活用)
quantization_config = BitsAndBytesConfig(
    load_in_8bit=True,
    llm_int8_enable_fp32_cpu_offload=False
)

# モデル読み込み(Tensor Coreで高速化)
model = AutoModelForCausalLM.from_pretrained(
    model_name,
    quantization_config=quantization_config,
    device_map="auto"
)

INT4量子化の活用

  • GPTQ: 4bit量子化でTensor Core活用
  • AWQ: Activation-aware 4bit量子化
  • GGML: CPU中心、Tensor Core補助

GGUFとローカル実行ツールでのTensor Core活用

現在ローカルLLMの量子化フォーマットとして主流なのは、llama.cppが策定したGGUF(GGMLの後継フォーマット)です。GGUFはQ2〜Q8まで複数ビット幅の量子化パターン(例: Q4_0Q4_K_MQ5_K_MQ8_0)を持ち、モデルファイル単体で量子化パラメータを保持できるのが特徴です。

  • llama.cpp: CUDAバックエンド(-DGGML_CUDA=ONでビルド)を使うとcuBLAS経由でTensor Coresを自動活用。-ngl(GPU offload層数)を増やすほどGPU側の演算比率が上がり、Tensor Coresの恩恵を受けやすくなる
  • Ollama: 内部でllama.cppをラップしているため、NVIDIA GPU環境では追加設定なしでTensor Coresが自動的に使われる。ollama psでGPU使用状況、nvidia-smiでGPU使用率を確認できる
  • LM Studio: GUI上でGPU offload層数をスライダーで調整でき、内部エンジンはllama.cppベース。CUDAランタイムを選択することでTensor Coresを使う推論バックエンドが有効になる
  • vLLM / TensorRT-LLM: サーバー用途でスループットを重視する場合の選択肢。FP8やINT8のTensor Core活用に加え、連続バッチング(continuous batching)で複数リクエストを束ねてGPU使用効率を高める

GPTQやAWQはGPU推論専用の量子化形式で、Hugging Face Transformers・ExLlama・vLLM等のPythonベースのエコシステムで使われることが多く、GGUFほどCPU/GPUのハイブリッド実行には向きません。ローカル環境でCPUとGPUを併用したい(VRAMが不足しがち)場合はGGUF+llama.cpp系、GPU単体で最大スループットを狙うならGPTQ/AWQ+vLLM系、という使い分けが実務では定石です。

メリットとデメリット

観点 メリット デメリット・注意点
推論速度 FP16/INT8/INT4でCUDA Core単体より数倍の行列演算スループット 十分なバッチサイズ・行列サイズが必要で、バッチサイズ1の対話利用では恩恵が薄れやすい
消費電力・発熱 同じ処理をCUDA Coreだけで行うより電力あたりの性能(perf/W)が高い GPU自体のTDPは変わらないため、長時間の連続推論では依然として発熱・電力対策が必要
対応ハードウェア RTX 20シリーズ以降のGeForceにも搭載され、コンシューマー向けGPUでも恩恵を受けられる GTXシリーズなどTensor Cores非搭載GPUでは対象外。AMD GPUのMatrix Core、Apple SiliconのNeural Engineとは互換性がなく移植性はない
開発の手軽さ llama.cpp・Ollama・PyTorchなど主要ツールが自動的にTensor Coresへディスパッチしてくれる 古いドライバやCUDAバージョンでは新世代のTensor Core命令(FP8など)が有効化されず、恩恵を得られないことがある

制限事項と注意点

対応条件

  • GPU世代: Volta(V100)以降のアーキテクチャ
  • データ型: FP16/BF16/INT8/INT4のみ
  • 行列サイズ: 特定サイズで最適化(8の倍数)
  • フレームワーク: CUDA 10.1以降、cuDNN対応

パフォーマンス条件

  • 十分な並列度: バッチサイズやシーケンス長
  • メモリ帯域: VRAM速度がボトルネック
  • 計算量: 小さすぎる行列では効果限定的

CUDA Coresとの使い分け

アーキテクチャ上の違い

項目 CUDA Cores Tensor Cores
演算の単位 スカラー演算(1要素ずつのFMA) 小行列同士の積和演算(MMA)をひとまとめに実行
得意な精度 FP32/FP64の汎用計算 FP16/BF16/INT8/INT4/FP8(世代による)の低〜中精度
得意な処理 条件分岐の多い汎用シェーダー処理、FP32必須の科学技術計算 LLM推論のGEMM(行列積)、画像生成のU-Net畳み込み等
搭載数(例: RTX 4090) 16,384個 512個

数が少ないTensor Coresの方が高速に感じられるのは、1個あたりの演算能力(1クロックで処理できる積和演算の量)がCUDA Coreよりはるかに大きいためです。LLM推論のように行列積が支配的なワークロードでは、コア数の多寡よりもTensor Coresの世代・数・対応精度の方が実効速度に直結します。

推奨用途

  • Tensor Cores優先: LLM推論、FP16/INT8演算
  • CUDA Cores優先: FP32精度必須、汎用計算
  • 併用: 混合精度学習、複雑なパイプライン

実務ポイント:VRAM要件とツール対応状況

VRAM要件とモデルサイズの対応目安

Tensor Coresの性能を引き出せるかどうかは、そもそもモデルがVRAMに載り切るかどうかに大きく左右されます。VRAM容量を超えた分はCPU側にオフロードされ、その部分はTensor Coresの恩恵を受けられずボトルネックになります。

モデル規模 FP16での目安VRAM 4bit(GGUF Q4系)での目安VRAM 推奨GPU例
7B 14GB程度 4〜5GB程度 RTX 3060(12GB)以上
13B 26GB程度 7〜8GB程度 RTX 4070Ti(12GB)以上
34B 68GB程度 18〜20GB程度 RTX 4090(24GB)推奨
70B 140GB程度 38〜40GB程度 RTX 4090×2 または VRAM48GB級

上記はKVキャッシュ分を含まない重みデータのみの目安です。実際にはコンテキスト長やバッチサイズに応じてKVキャッシュのVRAM消費が追加されるため、余裕を見て1〜2割程度多めにVRAMを見積もっておくと安全です。VRAMの詳細はVRAMの解説ページ、システムメモリとの兼ね合いはRAM要件の解説ページも参照してください。

主要ツールのTensor Core対応状況

ツール Tensor Core活用 備考
llama.cpp 対応(CUDAビルド時) GGUF形式、GPU offload層数(-ngl)を調整してVRAMに合わせて使用
Ollama 対応(自動) llama.cppラッパーのため追加設定不要、NVIDIA GPU検出で自動有効化
LM Studio 対応(設定要) GUIでGPU offload層数・CUDAランタイムを選択して有効化
vLLM 対応 サーバー用途向け、連続バッチングでTensor Coresの稼働率を高めやすい
text-generation-webui 対応(バックエンド依存) llama.cpp/ExLlama/Transformersなど複数バックエンドを切替可能

実務では、まずOllamaかLM StudioでGGUF量子化モデルを動かしてみて、レスポンス速度やVRAM使用量をnvidia-smiで確認し、不足があればより小さい量子化ビット幅やより小さいモデルに切り替える、という手順で当たりをつけるのが効率的です。サーバー用途でスループットを最大化したい場合はvLLMやTensorRT-LLMへの移行を検討します。

2025-2026年の最新動向

第5世代Tensor CoresがRTX 50シリーズ(Blackwell)に搭載され、FP4対応と性能の大幅向上が実現しています。FP4は数値表現のビット数がさらに小さくなるため、同じVRAM容量でもより大きなモデルを載せられる、あるいは同じモデルサイズならより高速に推論できる可能性がありますが、量子化誤差が大きくなりやすいため、実際の生成品質は用途ごとに確認しておくのが無難です。

FP8推論の標準化が進み、モデル品質をほぼ維持しつつTensor Coresの性能を最大限活用できるようになっています。vLLMやTensorRT-LLMなどのサーバー向け推論エンジンでFP8対応が広がっており、Ada Lovelace世代(RTX 40シリーズ)以降のGPUであれば恩恵を受けやすくなっています。

ローカルLLM向けツール側でも、llama.cppやOllamaがCUDAカーネルの最適化を継続的に進めており、同じGPU・同じ量子化モデルでもツールのバージョンアップだけで推論速度が向上するケースが珍しくありません。Tensor Coresというハードウェア自体の世代交代だけでなく、それを引き出すソフトウェア側の最適化状況も合わせて追っておくことが、ローカルLLM環境のパフォーマンスを維持する上でのポイントです。

よくある質問(FAQ)

Q. Tensor Coresとは?

AI推論特化の行列演算ユニットです。1クロックで小さな行列同士の積和演算をまとめて実行できるため、CUDAコアだけで同じ処理をするより数倍高速なAI推論を実現します。

Q. 世代ごとの違いは?

第1世代(Volta)はFP16対応、第3世代(Ampere)はBF16/TF32/INT8に対応、第4世代(Ada Lovelace、RTX 40シリーズ)はFP8対応で前世代より高速化されています。第5世代(Blackwell、RTX 50シリーズ)ではFP4への対応も進んでいます。

Q. LLM推論で使われる?

はい。llama.cpp・Ollama・LM Studio・vLLMなど主要なローカルLLM実行ツールは、CUDA対応ビルドであれば内部的にTensor Coresを自動的に活用します。利用者が明示的に設定する必要はほとんどありません。

Q. OllamaやLM StudioでTensor Coresは自動的に使われますか?

Ollamaはllama.cppをラップしており、NVIDIA GPUを検出すると追加設定なしでTensor Coresを使ったCUDA推論に切り替わります。LM StudioもCUDAランタイムを選択しGPU offload層数を設定することで同様に有効化されます。

Q. RTX 20シリーズより前のGPU(GTXシリーズ)でも使えますか?

使えません。Tensor CoresはVolta世代(Tesla V100等)以降のアーキテクチャから搭載された機能で、GTX 10シリーズ以前のGPUには搭載されていないため、CUDA Coresのみでの推論となり速度は大きく劣ります。

Q. 7Bや13BモデルならどれくらいのVRAMが必要ですか?

4bit量子化(GGUF Q4系)の場合、7Bモデルで4〜5GB程度、13Bモデルで7〜8GB程度が目安です。KVキャッシュ分の余裕も含めて、7BならVRAM8GB以上、13BならVRAM12GB以上のGPUを選ぶと安心です。

Q. バッチサイズ1(1人でのチャット利用)でもTensor Coresの効果はありますか?

あります。ただしバッチサイズが小さいほど行列演算の並列度が下がるため、大規模バッチ処理時ほどの倍率は出にくく、GPUの世代・VRAM帯域幅がボトルネックになりやすい点には注意してください。

Q. AMD GPUやApple Siliconでも同様の高速化はありますか?

Tensor Cores自体はNVIDIA GPU専用の機能です。AMD GPUには類似の役割を持つMatrix Coreが、Apple SiliconにはNeural Engineがありますが、いずれもアーキテクチャや対応ソフトウェアが異なるため互換性はありません。

関連用語

外部リンク