PythonでAI開発を始めると、最初に壁にぶつかるのが Hugging Face の transformers ライブラリ周りのエラーです。インストールはできたのにimportでエラー、モデルが読み込めない、CUDA のメモリが足りないなど、症状は多岐にわたります。
私自身、2014年から個人開発でアプリを運用してきた延長で、Gemma 4 をローカルで動かす検証や運用データの分析スクリプトに transformers を日常的に使っていて、ここに載せたエラーはどれも実際に踏んだか、再現確認したものです。「なぜ起きるのか」まで添えてあるので、次に似た問題が起きたときに自力で原因カテゴリを当てられるようになることを目指しています。
よくある症状と原因の一覧
まず、遭遇しやすいエラーの傾向を把握しましょう。
インストール・import 系
ImportError: cannot import name 'AutoModelForCausalLM'— バージョンが古く、その機能が存在しないModuleNotFoundError: No module named 'transformers'— インストールが失敗しているか、仮想環境が違うAttributeError: module 'transformers' has no attribute '...'— バージョン間のAPI変更
GPU・CUDA 系
CUDA out of memory— モデルサイズがVRAMを超えているRuntimeError: Expected all tensors to be on the same device— CPU/GPUの混在AssertionError: Torch not compiled with CUDA enabled— PyTorchのCUDA版が入っていない
モデル読み込み系
OSError: Can't load tokenizer for '...'— モデルIDが間違いか、ネットワークエラーValueError: Unrecognized model ...— transformers のバージョンがモデルに対応していないRepositoryNotFoundError— プライベートリポジトリへの認証失敗
ImportError / ModuleNotFoundError の解決手順
症状: import transformers を実行すると ModuleNotFoundError が出る。
原因の確認:
# 現在アクティブな Python 環境を確認
which python
python --version
# transformers がインストールされているか確認
pip show transformersインストール済みと表示されるのにエラーが出る場合、仮想環境の不一致が最も多い原因です。
解決手順:
# 仮想環境を新規作成(既存を使い回さない)
python -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
# transformers と依存ライブラリをセットでインストール
pip install transformers[torch] accelerate sentencepiecetransformers[torch] と指定することで、PyTorch との互換バージョンを自動的に解決してくれます。個別に入れると版ズレが起きやすいため、この書き方を習慣にするとよいでしょう。
確認方法:
import transformers
print(transformers.__version__) # 例: 4.40.0
import torch
print(torch.__version__) # 例: 2.3.0+cu118
print(torch.cuda.is_available()) # True なら GPU 利用可バージョン不一致エラーの解決手順
症状: AttributeError: module 'transformers' has no attribute 'AutoModelForCausalLM' や ValueError: Unrecognized model type が出る。
原因の分析:
Hugging Face のモデルカード(例: meta-llama/Meta-Llama-3-8B)には、動作確認済みの transformers バージョンが記載されています。古いバージョンでは新しいアーキテクチャに対応していないため、このエラーが発生します。
# 現在のバージョン確認
pip show transformers | grep Version
# → Version: 4.28.0(古い場合がある)
# モデルカードで推奨バージョンを確認してからアップグレード
pip install "transformers>=4.40.0"
# または最新版にアップグレード
pip install --upgrade transformers⚠️ 注意: アップグレードによって他のライブラリが壊れることがあります。プロジェクトごとに仮想環境を分けることで、この問題を回避できます。
バージョンを固定したい場合は requirements.txt に記載しましょう:
transformers==4.40.0
torch==2.3.0
accelerate==0.30.0
tokenizers==0.19.1インストールは以下のコマンドで:
pip install -r requirements.txtCUDA Out of Memory エラーの解決手順
症状: モデルの推論中に torch.cuda.OutOfMemoryError: CUDA out of memory が発生します。
原因の分析:
大型の言語モデル(7B パラメータ以上)は、デフォルト設定だと float32(32ビット精度)で読み込まれます。7B モデルの場合、約 28GB の VRAM が必要になります。一般的なゲーミング GPU(8〜12GB)では到底足りません。
解決手順 ① — 半精度(float16/bfloat16)で読み込む:
from transformers import AutoModelForCausalLM, AutoTokenizer
import torch
model_id = "meta-llama/Meta-Llama-3-8B-Instruct"
tokenizer = AutoTokenizer.from_pretrained(model_id)
# torch_dtype を指定することで VRAM 使用量を約半分に削減
model = AutoModelForCausalLM.from_pretrained(
model_id,
torch_dtype=torch.float16, # または torch.bfloat16
device_map="auto" # 利用可能なデバイスに自動配置
)
# 推論
inputs = tokenizer("こんにちは", return_tensors="pt").to("cuda")
outputs = model.generate(**inputs, max_new_tokens=100)
print(tokenizer.decode(outputs[0], skip_special_tokens=True))ここで一つ、見落としやすい落とし穴があります。torch.bfloat16 が使えるのは Ampere 世代以降(A100 や RTX 30 系、compute capability 8.0 以上)の GPU だけで、Colab の無料枠で割り当てられがちな T4 は Turing 世代のため bfloat16 に対応していません。私が自分の検証スクリプトを点検したときにも、T4 しか割り当てられない環境で bf16 を指定したままのコードが見つかりました。エラーで止まらず黙って動いてしまう構成もあるため、精度はコードで自動判定させるのが安全です。
import torch
# bf16 対応 GPU なら bfloat16、非対応なら float16 に自動で切り替える
dtype = torch.bfloat16 if torch.cuda.is_bf16_supported() else torch.float16
model = AutoModelForCausalLM.from_pretrained(
model_id,
torch_dtype=dtype,
device_map="auto"
)解決手順 ② — 4ビット量子化(bitsandbytes):
VRAM が 8GB 未満の場合は量子化が有効です。
pip install bitsandbytesfrom transformers import BitsAndBytesConfig
quantization_config = BitsAndBytesConfig(load_in_4bit=True)
model = AutoModelForCausalLM.from_pretrained(
model_id,
quantization_config=quantization_config,
device_map="auto"
)4ビット量子化により、7B モデルを 4〜5GB 程度の VRAM で動作させることができます。
解決手順 ③ — バッチサイズの削減:
推論・学習時のバッチサイズを小さくするだけで解消されることもあります。
# バッチサイズを 8 → 1 に削減
for i in range(0, len(dataset), 1): # batch_size=1
batch = dataset[i:i+1]
# 推論処理解決手順 ④ — VRAM の解放:
import torch
import gc
# 不要になったモデルを解放
del model
gc.collect()
torch.cuda.empty_cache()
# 現在の VRAM 使用量を確認
print(f"VRAM 使用中: {torch.cuda.memory_allocated() / 1024**3:.1f} GB")
print(f"VRAM 予約済み: {torch.cuda.memory_reserved() / 1024**3:.1f} GB")モデル読み込みエラーの解決手順
症状: OSError: Can't load tokenizer for 'gpt2-medium' や RepositoryNotFoundError が出る。
原因と対処:
# ① モデルIDのスペルミスを確認(大文字・小文字・スラッシュ)
# 正しい例: "openai-community/gpt2" ではなく "gpt2"(公式で変更された場合がある)
# ② ネットワーク接続を確認
curl -I https://huggingface.co
# ③ HF_TOKEN を設定(プライベートモデルの場合)
huggingface-cli login
# または環境変数で指定
export HF_TOKEN="YOUR_HF_TOKEN_HERE"from transformers import AutoTokenizer
from huggingface_hub import login
# プログラムから認証
login(token="YOUR_HF_TOKEN_HERE")
# オフライン環境の場合はローカルパスを指定
tokenizer = AutoTokenizer.from_pretrained("/path/to/local/model")ゲート付きモデルの場合: Llama 系や Gemma 系など一部のモデルは「gated model」として配布されており、トークン自体が有効でも、そのアカウントでモデルページの利用規約に同意していなければ 401 や GatedRepoError が返ります。モデルIDのスペルも認証も正しいのに読み込めないときは、まずブラウザでモデルページを開いて Agree しているかを確認してください。同意し忘れが原因のケースは想像以上に多いです。
キャッシュが壊れている場合:
# キャッシュを削除してから再ダウンロード
rm -rf ~/.cache/huggingface/hub/models--gpt2
# またはキャッシュディレクトリ全体をクリア(慎重に)
# rm -rf ~/.cache/huggingface/テンサーデバイス不一致エラーの解決手順
症状: RuntimeError: Expected all tensors to be on the same device, but found at least two devices, cuda:0 and cpu!
原因: モデルは GPU にあるが、入力テンソルが CPU のままになっている(または逆)。
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
model = AutoModelForCausalLM.from_pretrained("gpt2", device_map="cuda")
tokenizer = AutoTokenizer.from_pretrained("gpt2")
# ❌ 悪い例:入力が CPU のまま
inputs = tokenizer("Hello", return_tensors="pt")
# → RuntimeError が発生する
# ✅ 正しい例:モデルと同じデバイスに移動
device = next(model.parameters()).device
inputs = tokenizer("Hello", return_tensors="pt").to(device)
outputs = model.generate(**inputs, max_new_tokens=50)
print(tokenizer.decode(outputs[0]))device_map="auto" を使う場合、モデルが複数 GPU に分散されることがあります。この場合、model.device ではなく model.hf_device_map で各レイヤーの配置を確認できます。
Apple Silicon (Mac) で使う場合の注意点
CUDA 系のエラーは NVIDIA GPU 前提ですが、Mac (Apple Silicon) では事情が変わります。PyTorch のバックエンドは CUDA ではなく MPS (Metal Performance Shaders) です。
import torch
# Mac での GPU 利用可否は cuda ではなく mps で確認する
print(torch.backends.mps.is_available()) # True なら Apple GPU が使える
device = "mps" if torch.backends.mps.is_available() else "cpu"
model = model.to(device)つまずきやすいのは次の2点です。
torch.cuda.is_available()が False なのは Mac では正常です。CUDA 版 PyTorch を入れようとしてもインストールできません- 一部の演算が MPS 未対応で
NotImplementedErrorが出ることがあります。その場合は環境変数PYTORCH_ENABLE_MPS_FALLBACK=1を設定すると、未対応演算だけ CPU に逃して動かせます
PYTORCH_ENABLE_MPS_FALLBACK=1 python your_script.pyなお、Mac で 7B 以上のモデルを快適に動かしたい場合は、transformers よりも MLX や Ollama の方がメモリ効率が良いケースが多いです。ローカル LLM 用途であれば Gemma 4 を Mac でファインチューニングする実践ガイド も参考になるはずです。
解決できたかの確認方法
エラーを修正したら、以下の動作確認コードを実行してください:
from transformers import pipeline
import torch
# デバイスを明示
device = 0 if torch.cuda.is_available() else -1
# テキスト生成パイプライン(最も基本的なテスト)
generator = pipeline(
"text-generation",
model="gpt2",
device=device
)
result = generator("Hugging Face is", max_new_tokens=30, num_return_sequences=1)
print(result[0]["generated_text"])
# → "Hugging Face is a company that..." のように続きが出力されれば成功GPU を使う場合の確認:
import torch
from transformers import AutoModel
model = AutoModel.from_pretrained("bert-base-uncased").to("cuda")
print(f"モデルのデバイス: {next(model.parameters()).device}")
# → モデルのデバイス: cuda:0ディスク容量とキャッシュの管理
症状としては OSError: [Errno 28] No space left on device や、ダウンロードが途中で固まる形で現れますが、根本原因は単純で、モデルキャッシュの肥大化です。7B クラスのモデルは fp16 でも1つ 15GB 前後あり、検証で何種類か触っているとキャッシュは簡単に 100GB を超えます。私も Gemma 4 の検証を続けるうちに Mac の内蔵 SSD が圧迫され、キャッシュ置き場を外付け SSD へ移すことで解決しました。
# キャッシュの内訳を確認(モデルごとのサイズと最終利用日時が一覧になる)
huggingface-cli scan-cache
# 対話的に不要なモデルを選んで削除
huggingface-cli delete-cacheキャッシュの場所そのものを変えるには、HF_HOME 環境変数を設定します。
# 例: 外付けSSDへ移す(シェルの設定ファイルに追記して永続化)
export HF_HOME="/Volumes/ExternalSSD/huggingface"設定後のダウンロードは新しい場所に保存されます。既存のキャッシュもディレクトリごと移動すればそのまま認識されるので、ダウンロードし直す必要はありません。
再発防止のベストプラクティス
エラーを根本的に防ぐための習慣を紹介します。
① プロジェクトごとに仮想環境を分ける
# pyenv + venv の組み合わせが安定しています
pyenv install 3.11.8
pyenv local 3.11.8
python -m venv .venv
source .venv/bin/activate② バージョンを requirements.txt で固定する
動いている環境をそのままファイルに出力:
pip freeze > requirements.txt③ モデルは事前にキャッシュしておく
ネットワーク障害でダウンロードが途中で止まるとキャッシュが壊れます。以下で事前ダウンロードを確認できます:
huggingface-cli download meta-llama/Meta-Llama-3-8B-Instruct④ VRAM 使用量を常時監視する
# 別ターミナルで実行(1秒おきに更新)
watch -n 1 nvidia-smiエラーと付き合うための考え方
Transformers のエラーは、大きく「環境・インストール系」「CUDA・GPU系」「モデル読み込み系」の3つに分類できます。エラーメッセージを見たらまずどのカテゴリかを当てる——この習慣だけで解決速度が大きく変わります。私の場合、Antigravity のターミナルでエラーが出たらメッセージをそのままエージェントに貼り付けて原因カテゴリの仮説を出させ、この記事のような手順で裏を取る、という流れが定着しています。
次にエラーに遭遇したら、症状をコピーして本記事の該当セクションから試してみてください。一つずつ原因を消していけば、必ずどこかで突き当たりは解消されます。お読みいただきありがとうございました。