AI・機械学習
上級

Marlin GPTQ カーネル(マーリンジーピーティーキューカーネル)

GPTQ INT4量子化×FP16行列乗算に特化したNVIDIA CUDA最適化カーネル。Ampere/Hopper GPUのTensor Coreを活用し、非量子化FP16比で2倍以上のスループットを達成する。

0 回閲覧
0 いいね
2026/6/8 更新
関連タグ
cuda
kernel
gptq
gpu
inference-optimization

Marlin GPTQ カーネルとは

MarlinはGPTQの著者であるElias Frankle・Mark Kurtz・Dan Alistarh らが2024年に発表した、GPTQ INT4量子化モデル向けのNVIDIA GPU専用推論カーネル。論文タイトルは「MARLIN: Mixed-Precision Auto-Regressive Parallel Inference on Large Language Models」。NVIDIA Ampere(A100・RTX 30xx)・Hopper(H100)アーキテクチャのTensor Coreを最大活用するよう手書きで最適化されたCUDAカーネルで、FP16×FP16比で2〜2.5倍のスループット向上を実現する。

なぜINT4推論は遅かったか

量子化前の期待:

INT4 は FP16 の 1/4 メモリ → VRAM帯域 4倍 → 4倍速になるはず

現実:

GPU は INT4 GEMM カーネルが最適化されていない
→ FP16にデクオンタイズしてからGEMM → VRAM節約のみ、速度は出ない

Marlin は INT4重みを専用フォーマットでTensor Coreに直接投入し、非同期メモリアクセスでデクオンタイズと行列演算をパイプライン実行することでこの問題を解決する。

スループット比較

A100(40GB)・バッチサイズ1・Llama 2 70B:

カーネル形式tokens/sec
cuBLAS FP16FP1612 tok/s
GPTQ(naive deq)INT410 tok/s
ExLlamaV2INT425 tok/s
MarlinINT430 tok/s
Marlin (H100)INT455+ tok/s

FP16比で2.5倍のスループット(A100)。

バッチサイズ依存性

バッチサイズFP16 (cuBLAS)Marlin INT4比率
112 tok/s30 tok/s2.5×
16170 tok/s320 tok/s1.9×
64550 tok/s720 tok/s1.3×

大バッチでは比率が低下。シングルユーザーのサービング(バッチ1-4)で最も効果が大きい。

vLLM との統合

from vllm import LLM, SamplingParams

llm = LLM(
    model="TheBloke/Llama-3-70B-Instruct-GPTQ",
    quantization="gptq",
)

sampling_params = SamplingParams(temperature=0.7, max_tokens=256)
outputs = llm.generate(["以下を要約:"], sampling_params)

vLLM v0.4以降でMarlinが自動適用される。

Sparse Marlin(拡張版)

2024年後半に発表された Sparse Marlin は2:4構造的スパース性とINT4量子化を組み合わせる:

  • 2:4スパース(NVIDIA Ampere nativeサポート)+ INT4 GPTQ
  • FP16比で最大5.3倍のスループット(H100)

よくある質問(FAQ)

Q1: RTX 30xx/40xx でも Marlin は使える? A: RTX 3090(Ampere)以降は対応。RTX 4090(16GB帯域)では効果的。

Q2: Marlin を使うために特別な設定は必要? A: vLLM 0.4以降なら quantization="gptq" 指定だけでMarlinが自動的に選択される(対応GPUの場合)。

Q3: INT8量子化(LLM.int8())との比較は? A: Marlin INT4は精度(INT4)が低い代わりにスループットが大きく上。精度重視ならINT8だが、VRAM効率はINT4の方が有利。実用では4bit量子化の精度劣化は通常1%未満のため、Marlin INT4が主流。

この記事について
カテゴリーAI・機械学習
難易度上級
作成日2026/6/8