量子化で発生する「bitsandbytes was compiled without GPU support」RuntimeErrorの修正方法

intermediate🧠 AI Tools2026-06-20| Python 3.9以降、bitsandbytes 0.37〜0.43、PyTorch 2.x、NVIDIA GPU有無を問わずLinux/Windows、Hugging Face Transformers

Error Message

RuntimeError: bitsandbytes was compiled without GPU support. 8-bit optimizers and quantization require a GPU to function.
#bitsandbytes#量子化#cuda#pytorch#llm

TL;DR クイックフィックス

原因は一つ、解決策は複数:bitsandbytesがCUDA対応GPUを見つけられませんでした。次の対応はセットアップによって異なります:

  • GPUはあるがCUDAが検出されない → 対応するCUDAホイールでbitsandbytesを再インストール
  • CPUのみのマシン → 8ビット量子化をスキップし、GGUF/llama.cppを使用
  • Windowsbitsandbytes-windowsをインストールするか、CUDAパススルー付きのWSL2を使用

エラーの全文

RuntimeError: bitsandbytes was compiled without GPU support. 8-bit optimizers and quantization require a GPU to function.

通常、次のようなコードによってトリガーされます:

from transformers import AutoModelForCausalLM, BitsAndBytesConfig
import torch

bnb_config = BitsAndBytesConfig(load_in_8bit=True)
model = AutoModelForCausalLM.from_pretrained(
    "mistralai/Mistral-7B-v0.1",
    quantization_config=bnb_config
)

根本原因

bitsandbytesはロード時にCUDAカーネルとリンクします。CUDAランタイムがなければ、カーネルも動きません。それだけのことです。

このエラーが発生する状況は3つあります:

  • CUDA専用インデックスではなく、デフォルトのPyPIインデックス(CPUのみビルド)からtorchをインストールした
  • マシンにNVIDIA GPUがない(クラウドCPUインスタンス、Mac、CI/CDサーバーなど)
  • CUDAはシステム全体にインストールされているが、nvccまたはCUDAランタイムがPATHに含まれておらず、PyTorchが認識できない

ステップ1 — セットアップの診断

何かを変更する前に、まずここから始めてください:

python -c "import torch; print(torch.cuda.is_available(), torch.version.cuda)"
nvcc --version
nvidia-smi

torch.cuda.is_available()Falseを返すのが決定的な証拠です。コンパイル方法に関わらず、bitsandbytesはGPUカーネルをロードしません。まずPyTorchを修正してください。

修正A — CUDAでbitsandbytesを再インストール(GPU使用可能な場合)

NVIDIA GPUがありますか?問題はほぼ常にPyTorchビルドのバージョン不一致です。以下の順序で再インストールしてください:

1. CUDA対応でPyTorchを再インストール:

# CUDA 12.1の場合(バージョン確認:nvcc --version)
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121

# CUDA 11.8の場合
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118

2. bitsandbytesを再インストール:

pip uninstall bitsandbytes -y
pip install bitsandbytes

3. 動作確認:

python -c "import bitsandbytes as bnb; print(bnb.__version__)"
python -c "import torch; print('CUDA:', torch.cuda.is_available())"

修正B — Windows専用

標準のbitsandbytesはWindowsでは動作しません。コミュニティが保守するフォーク版を使用してください:

pip uninstall bitsandbytes -y
pip install bitsandbytes-windows

WindowsでLLMを本格的に使用する場合、CUDAパススルー付きのWSL2が長期的により安定しています:

# WSL2内(Ubuntu)で実行
pip install torch --index-url https://download.pytorch.org/whl/cu121
pip install bitsandbytes

修正C — CPUのみのマシン(GPUなし)

厳しい制約:bitsandbytesの8ビット量子化にはCUDA GPUが必要です。ライブラリ内にCPUフォールバックは存在しません。現実的な選択肢は3つあります:

オプション1:llama.cpp / GGUF(CPUに推奨)

CPUでLLMを実行する際の定番です。Q4_K_M量子化のMistral 7Bはおよそ6GBのRAMに収まります:

pip install llama-cpp-python
from llama_cpp import Llama

llm = Llama.from_pretrained(
    repo_id="TheBloke/Mistral-7B-Instruct-v0.1-GGUF",
    filename="mistral-7b-instruct-v0.1.Q4_K_M.gguf",
    n_ctx=2048
)
output = llm("What is quantization?", max_tokens=200)

オプション2:量子化なしでHugging Faceを使用

BitsAndBytesConfigを完全に省略し、フル精度でロードします:

from transformers import AutoModelForCausalLM, AutoTokenizer
import torch

model = AutoModelForCausalLM.from_pretrained(
    "microsoft/phi-2",
    torch_dtype=torch.float32,
    device_map="cpu"
)
tokenizer = AutoTokenizer.from_pretrained("microsoft/phi-2")

1〜3BのモデルはCPUで実用的に使用できます。7BモデルをFLOAT32で使用するには28GB以上のRAMが必要で、非常に低速になります。

オプション3:ctransformers(C++バックエンド)

pip install ctransformers
from ctransformers import AutoModelForCausalLM

model = AutoModelForCausalLM.from_pretrained(
    "TheBloke/Mistral-7B-Instruct-v0.1-GGUF",
    model_file="mistral-7b-instruct-v0.1.Q4_K_M.gguf",
    model_type="mistral"
)

修正D — Google Colab / クラウドノートブック

GPUランタイムを選択しているにもかかわらずColabでこのエラーが発生していますか?まず、GPUが実際に割り当てられているか確認してください:

import subprocess
result = subprocess.run(['nvidia-smi'], capture_output=True, text=True)
print(result.stdout)

nvidia-smiが失敗する場合は、ランタイム → ランタイムのタイプを変更 → T4 GPUに移動して再接続してください。その後、bitsandbytesを強制的に再インストールします:

!pip install -q bitsandbytes
import importlib, bitsandbytes
importlib.reload(bitsandbytes)

検証 — 修正が適用されたことを確認

import torch
import bitsandbytes as bnb

print(f"PyTorch: {torch.__version__}")
print(f"CUDA available: {torch.cuda.is_available()}")
print(f"CUDA version: {torch.version.cuda}")
print(f"bitsandbytes: {bnb.__version__}")

if torch.cuda.is_available():
    print(f"GPU: {torch.cuda.get_device_name(0)}")
    import torch.nn as nn
    layer_8bit = bnb.nn.Linear8bitLt(64, 64, has_fp16_weights=False).cuda()
    print("8-bit layer created successfully")

以下のような出力を確認してください:

CUDA available: True
CUDA version: 12.1
bitsandbytes: 0.43.1
GPU: NVIDIA GeForce RTX 3090
8-bit layer created successfully

バージョン互換性

  • bitsandbytes >= 0.41.0 → CUDA 11.7、11.8、12.0、12.1以降をサポート
  • bitsandbytes 0.37〜0.40 → CUDA 11.xのみ対応、CUDA 12.xでは動作しない
  • bitsandbytesはシステムのCUDAバージョンではなく、PyTorchのCUDAバージョンに合わせること

PyTorchが実際にビルドされたCUDAバージョンを確認してください。互換性において重要なのはこの数値です:

import torch
print(torch.version.cuda)

Related Error Notes