TL;DR クイックフィックス
原因は一つ、解決策は複数:bitsandbytesがCUDA対応GPUを見つけられませんでした。次の対応はセットアップによって異なります:
- GPUはあるがCUDAが検出されない → 対応するCUDAホイールでbitsandbytesを再インストール
- CPUのみのマシン → 8ビット量子化をスキップし、GGUF/llama.cppを使用
- Windows →
bitsandbytes-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)

